diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_lognormal.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_lognormal.h new file mode 100644 index 0000000000000000000000000000000000000000..163c1ddead266866886c39d5ba0ae097e629d9e2 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_lognormal.h @@ -0,0 +1,698 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_LOGNORMAL_H_) +#define CURAND_LOGNORMAL_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" + +/** + * \brief Return a log-normally distributed float from an XORWOW generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateXORWOW_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return a log-normally distributed float from an Philox4_32_10 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS float curand_log_normal(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return two normally distributed floats from an XORWOW generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStateXORWOW_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return two normally distributed floats from an Philox4_32_10 generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} +/** + * \brief Return four normally distributed floats from an Philox4_32_10 generator. + * + * Return four log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float4 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float4 curand_log_normal4(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + float4 v = curand_box_muller4(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + v.z = expf(mean + (stddev * v.z)); + v.w = expf(mean + (stddev * v.w)); + return v; +} + +/** + * \brief Return a log-normally distributed float from an MRG32k3a generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateMRG32k3a_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + float2 v = curand_box_muller_mrg(state); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return two normally distributed floats from an MRG32k3a generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStateMRG32k3a_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller_mrg(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return a log-normally distributed float from an MTGP32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateMtgp32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a Sobol32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateSobol32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} +/** + * \brief Return a log-normally distributed float from a scrambled Sobol32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateScrambledSobol32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a Sobol64 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, then converts to log-normal + * distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateSobol64_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a scrambled Sobol64 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, then converts to log-normal + * distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateScrambledSobol64_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from an XORWOW generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS double curand_log_normal_double(curandStateXORWOW_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x0, x1, y0, y1; + x0 = curand(state); + x1 = curand(state); + y0 = curand(state); + y1 = curand(state); + double2 v = _curand_box_muller_double(x0, x1, y0, y1); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return a log-normally distributed double from an Philox4_32_10 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS double curand_log_normal_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + uint4 _x; + _x = curand4(state); + double2 v = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + + +/** + * \brief Return two log-normally distributed doubles from an XORWOW generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStateXORWOW_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return two log-normally distributed doubles from an Philox4_32_10 generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double4 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller2_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} +// nor part of API +__NV_SILENCE_DEPRECATION_BEGIN +QUALIFIERS double4 curand_log_normal4_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + double4 v = curand_box_muller4_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + v.z = exp(mean + (stddev * v.z)); + v.w = exp(mean + (stddev * v.w)); + return v; +} +__NV_SILENCE_DEPRECATION_END +/** + * \brief Return a log-normally distributed double from an MRG32k3a generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateMRG32k3a_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + double2 v = curand_box_muller_mrg_double(state); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return two log-normally distributed doubles from an MRG32k3a generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStateMRG32k3a_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller_mrg_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return a log-normally distributed double from an MTGP32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateMtgp32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a Sobol32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateSobol32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a scrambled Sobol32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateScrambledSobol32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a Sobol64 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateSobol64_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a scrambled Sobol64 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateScrambledSobol64_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +#endif // !defined(CURAND_LOGNORMAL_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_mtgp32_host.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_mtgp32_host.h new file mode 100644 index 0000000000000000000000000000000000000000..7b9a2d31b314194e6999aeb7046db67b6c9e19ac --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/curand_mtgp32_host.h @@ -0,0 +1,516 @@ +/* + * Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * curand_mtgp32_host.h + * + * + * MTGP32-11213 + * + * Mersenne Twister RNG for the GPU + * + * The period of generated integers is 211213-1. + * + * This code generates 32-bit unsigned integers, and + * single precision floating point numbers uniformly distributed + * in the range [1, 2). (float r; 1.0 <= r < 2.0) + */ + +/* + * Copyright (c) 2009, 2010 Mutsuo Saito, Makoto Matsumoto and Hiroshima + * University. All rights reserved. + * Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima + * University and University of Tokyo. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the Hiroshima University nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#if !defined CURAND_MTGP32_HOST_H +#define CURAND_MTGP32_HOST_H + +#if !defined(QUALIFIERS) +#define QUALIFIERS static inline __device__ +#endif + +#include +#include +#include +#include +#include "curand.h" +#include "curand_mtgp32.h" +#include "curand_mtgp32dc_p_11213.h" + + +/** + * \addtogroup DEVICE Device API + * + * @{ + */ + +static const unsigned int non_zero = 0x4d544750; + +/* + * This function represents a function used in the initialization + * by mtgp32_init_by_array() and mtgp32_init_by_str(). + * @param[in] x 32-bit integer + * @return 32-bit integer + */ +static __forceinline__ unsigned int ini_func1(unsigned int x) { + return (x ^ (x >> 27)) * (1664525); +} + +/* + * This function represents a function used in the initialization + * by mtgp32_init_by_array() and mtgp32_init_by_str(). + * @param[in] x 32-bit integer + * @return 32-bit integer + */ +static __forceinline__ unsigned int ini_func2(unsigned int x) { + return (x ^ (x >> 27)) * (1566083941); +} + +/* + * This function initializes the internal state array with a 32-bit + * integer seed. The allocated memory should be freed by calling + * mtgp32_free(). \b para should be one of the elements in the + * parameter table (mtgp32-param-ref.c). + * + * This function is call by cuda program, because cuda program uses + * another structure and another allocation method. + * + * @param[out] array MTGP internal status vector. + * @param[in] para parameter structure + * @param[in] seed a 32-bit integer used as the seed. + */ +static __forceinline__ __host__ +void mtgp32_init_state(unsigned int state[], + const mtgp32_params_fast_t *para, unsigned int seed) { + int i; + int size = para->mexp / 32 + 1; + unsigned int hidden_seed; + unsigned int tmp; + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = seed; + state[1] = hidden_seed; + for (i = 1; i < size; i++) { + state[i] ^= (1812433253) * (state[i - 1] ^ (state[i - 1] >> 30)) + i; + } +} + +/* + * This function initializes the internal state array + * with a 32-bit integer array. \b para should be one of the elements in + * the parameter table (mtgp32-param-ref.c). + * + * @param[out] mtgp32 MTGP structure. + * @param[in] para parameter structure + * @param[in] array a 32-bit integer array used as a seed. + * @param[in] length length of the array. + * @return CURAND_STATUS_SUCCESS + */ +static __forceinline__ __host__ +int mtgp32_init_by_array(unsigned int state[], + const mtgp32_params_fast_t *para, + unsigned int *array, int length) { + int i, j, count; + unsigned int r; + int lag; + int mid; + int size = para->mexp / 32 + 1; + unsigned int hidden_seed; + unsigned int tmp; + + if (size >= 623) { + lag = 11; + } else if (size >= 68) { + lag = 7; + } else if (size >= 39) { + lag = 5; + } else { + lag = 3; + } + mid = (size - lag) / 2; + + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = hidden_seed; + + if (length + 1 > size) { + count = length + 1; + } else { + count = size; + } + r = ini_func1(state[0] ^ state[mid] ^ state[size - 1]); + state[mid] += r; + r += length; + state[(mid + lag) % size] += r; + state[0] = r; + i = 1; + count--; + for (i = 1, j = 0; (j < count) && (j < length); j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += array[j] + i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (; j < count; j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (j = 0; j < size; j++) { + r = ini_func2(state[i] + state[(i + mid) % size] + + state[(i + size - 1) % size]); + state[(i + mid) % size] ^= r; + r -= i; + state[(i + mid + lag) % size] ^= r; + state[i] = r; + i = (i + 1) % size; + } + if (state[size - 1] == 0) { + state[size - 1] = non_zero; + } + return 0; +} + +/* + * This function initializes the internal state array + * with a character array. \b para should be one of the elements in + * the parameter table (mtgp32-param-ref.c). + * This is the same algorithm with mtgp32_init_by_array(), but hope to + * be more useful. + * + * @param[out] mtgp32 MTGP structure. + * @param[in] para parameter structure + * @param[in] array a character array used as a seed. (terminated by zero.) + * @return memory allocation result. if 0 then O.K. + */ +static __forceinline__ __host__ +int mtgp32_init_by_str(unsigned int state[], + const mtgp32_params_fast_t *para, unsigned char *array) { + int i, j, count; + unsigned int r; + int lag; + int mid; + int size = para->mexp / 32 + 1; + int length = (unsigned int)strlen((char *)array); + unsigned int hidden_seed; + unsigned int tmp; + + if (size >= 623) { + lag = 11; + } else if (size >= 68) { + lag = 7; + } else if (size >= 39) { + lag = 5; + } else { + lag = 3; + } + mid = (size - lag) / 2; + + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = hidden_seed; + + if (length + 1 > size) { + count = length + 1; + } else { + count = size; + } + r = ini_func1(state[0] ^ state[mid] ^ state[size - 1]); + state[mid] += r; + r += length; + state[(mid + lag) % size] += r; + state[0] = r; + i = 1; + count--; + for (i = 1, j = 0; (j < count) && (j < length); j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += array[j] + i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (; j < count; j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (j = 0; j < size; j++) { + r = ini_func2(state[i] + state[(i + mid) % size] + + state[(i + size - 1) % size]); + state[(i + mid) % size] ^= r; + r -= i; + state[(i + mid + lag) % size] ^= r; + state[i] = r; + i = (i + 1) % size; + } + if (state[size - 1] == 0) { + state[size - 1] = non_zero; + } + return 0; +} + +template +static __forceinline__ __host__ +curandStatus_t curandMakeMTGP32ConstantsImpl(const mtgp32_params_fast_t params[], ParamsType * p, const int block_num) +{ + const int size1 = sizeof(unsigned int) * block_num; + const int size2 = sizeof(unsigned int) * block_num * TBL_SIZE; + unsigned int *h_pos_tbl; + unsigned int *h_sh1_tbl; + unsigned int *h_sh2_tbl; + unsigned int *h_param_tbl; + unsigned int *h_temper_tbl; + unsigned int *h_single_temper_tbl; + unsigned int *h_mask; + curandStatus_t status = CURAND_STATUS_SUCCESS; + + h_pos_tbl = (unsigned int *)malloc(size1); + h_sh1_tbl = (unsigned int *)malloc(size1); + h_sh2_tbl = (unsigned int *)malloc(size1); + h_param_tbl = (unsigned int *)malloc(size2); + h_temper_tbl = (unsigned int *)malloc(size2); + h_single_temper_tbl = (unsigned int *)malloc(size2); + h_mask = (unsigned int *)malloc(sizeof(unsigned int)); + if (h_pos_tbl == NULL + || h_sh1_tbl == NULL + || h_sh2_tbl == NULL + || h_param_tbl == NULL + || h_temper_tbl == NULL + || h_single_temper_tbl == NULL + || h_mask == NULL) { + if (h_pos_tbl != NULL) free(h_pos_tbl); + if (h_sh1_tbl != NULL) free(h_sh1_tbl); + if (h_sh2_tbl != NULL) free(h_sh2_tbl); + if (h_param_tbl != NULL) free(h_param_tbl); + if (h_temper_tbl != NULL) free(h_temper_tbl); + if (h_single_temper_tbl != NULL) free(h_single_temper_tbl); + if (h_mask != NULL) free(h_mask); + status = CURAND_STATUS_ALLOCATION_FAILED; + } else { + + h_mask[0] = params[0].mask; + for (int i = 0; i < block_num; i++) { + h_pos_tbl[i] = params[i].pos; + h_sh1_tbl[i] = params[i].sh1; + h_sh2_tbl[i] = params[i].sh2; + for (int j = 0; j < TBL_SIZE; j++) { + h_param_tbl[i * TBL_SIZE + j] = params[i].tbl[j]; + h_temper_tbl[i * TBL_SIZE + j] = params[i].tmp_tbl[j]; + h_single_temper_tbl[i * TBL_SIZE + j] = params[i].flt_tmp_tbl[j]; + } + } + if (cudaMemcpy( p->pos_tbl, + h_pos_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->sh1_tbl, + h_sh1_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->sh2_tbl, + h_sh2_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->param_tbl, + h_param_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->temper_tbl, + h_temper_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->single_temper_tbl, + h_single_temper_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->mask, + h_mask, sizeof(unsigned int), cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } + } + if (h_pos_tbl != NULL) free(h_pos_tbl); + if (h_sh1_tbl != NULL) free(h_sh1_tbl); + if (h_sh2_tbl != NULL) free(h_sh2_tbl); + if (h_param_tbl != NULL) free(h_param_tbl); + if (h_temper_tbl != NULL) free(h_temper_tbl); + if (h_single_temper_tbl != NULL)free(h_single_temper_tbl); + if (h_mask != NULL) free(h_mask); + return status; +} + +/** + * \brief Set up constant parameters for the mtgp32 generator + * + * This host-side helper function re-organizes CURAND_NUM_MTGP32_PARAMS sets of + * generator parameters for use by kernel functions and copies the + * result to the specified location in device memory. + * + * \param params - Pointer to an array of type mtgp32_params_fast_t in host memory + * \param p - pointer to a structure of type mtgp32_kernel_params_t in device memory. + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if host memory could not be allocated + * - CURAND_STATUS_INITIALIZATION_FAILED if the copy to device memory failed + * - CURAND_STATUS_SUCCESS otherwise + */ +static __forceinline__ __host__ +curandStatus_t curandMakeMTGP32Constants(const mtgp32_params_fast_t params[], mtgp32_kernel_params_t * p) +{ + return curandMakeMTGP32ConstantsImpl(params, p, CURAND_NUM_MTGP32_PARAMS); +} + +/** + * \brief Set up initial states for the mtgp32 generator + * + * This host-side helper function initializes a number of states (one parameter set per state) for + * an mtgp32 generator. To accomplish this it allocates a state array in host memory, + * initializes that array, and copies the result to device memory. + * + * \param s - pointer to an array of states in device memory + * \param params - Pointer to an array of type mtgp32_params_fast_t in host memory + * \param k - pointer to a structure of type mtgp32_kernel_params_t in device memory + * \param n - number of parameter sets/states to initialize + * \param seed - seed value + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if host memory state could not be allocated + * - CURAND_STATUS_INITIALIZATION_FAILED if the copy to device memory failed + * - CURAND_STATUS_SUCCESS otherwise + */ +static __forceinline__ __host__ +curandStatus_t CURANDAPI curandMakeMTGP32KernelState(curandStateMtgp32_t *s, + mtgp32_params_fast_t params[], + mtgp32_kernel_params_t *k, + int n, + unsigned long long seed) +{ + int i; + curandStatus_t status = CURAND_STATUS_SUCCESS; + curandStateMtgp32_t *h_status =(curandStateMtgp32_t *) malloc(sizeof(curandStateMtgp32_t) * n); + if (h_status == NULL) { + status = CURAND_STATUS_ALLOCATION_FAILED; + } else { + seed = seed ^ (seed >> 32); + for (i = 0; i < n; i++) { + mtgp32_init_state(&(h_status[i].s[0]), ¶ms[i],(unsigned int)seed + i + 1); + h_status[i].offset = 0; + h_status[i].pIdx = i; + h_status[i].k = k; + } + if (cudaMemcpy(s, h_status, + sizeof(curandStateMtgp32_t) * n, + cudaMemcpyHostToDevice) != cudaSuccess) { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } + } + free(h_status); + return status; +} + +/** @} */ + +#endif + + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExt.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExt.h new file mode 100644 index 0000000000000000000000000000000000000000..8b4d2f33edac12e3186a04e36406dcfdcea26e64 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExt.h @@ -0,0 +1,1668 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +/** \file nvToolsExt.h + */ + +/* ========================================================================= */ +/** \mainpage + * \tableofcontents + * \section INTRODUCTION Introduction + * + * The NVIDIA Tools Extension library is a set of functions that a + * developer can use to provide additional information to tools. + * The additional information is used by the tool to improve + * analysis and visualization of data. + * + * The library introduces close to zero overhead if no tool is + * attached to the application. The overhead when a tool is + * attached is specific to the tool. + * + * \section INITIALIZATION Initialization + * + * Typically the tool's library that plugs into NVTX is indirectly + * loaded via environmental properties that are platform specific. + * For some platform or special cases, the user may be required + * to instead explicitly initialize instead though. This can also + * be helpful to control when the API loads a tool's library instead + * of what would typically be the first function call to emit info. + * For these rare case, see \ref INITIALIZATION for additional information. + * + * \section MARKERS_AND_RANGES Markers and Ranges + * + * Markers and ranges are used to describe events at a specific time (markers) + * or over a time span (ranges) during the execution of the application + * respectively. + * + * \subsection MARKERS Markers + * + * Markers denote specific moments in time. + * + * + * See \ref DOMAINS and \ref EVENT_ATTRIBUTES for additional information on + * how to specify the domain. + * + * \subsection THREAD_RANGES Thread Ranges + * + * Thread ranges denote nested time ranges. Nesting is maintained per thread + * per domain and does not require any additional correlation mechanism. The + * duration of a thread range is defined by the corresponding pair of + * nvtxRangePush* to nvtxRangePop API calls. + * + * See \ref DOMAINS and \ref EVENT_ATTRIBUTES for additional information on + * how to specify the domain. + * + * \subsection PROCESS_RANGES Process Ranges + * + * Process ranges denote a time span that can expose arbitrary concurrency, as + * opposed to thread ranges that only support nesting. In addition the range + * start event can happen on a different thread than the end marker. For the + * correlation of a start/end pair an unique correlation ID is used that is + * returned from the start API call and needs to be passed into the end API + * call. + * + * \subsection EVENT_ATTRIBUTES Event Attributes + * + * \ref MARKERS_AND_RANGES can be annotated with various attributes to provide + * additional information for an event or to guide the tool's visualization of + * the data. Each of the attributes is optional and if left unused the + * attributes fall back to a default value. The attributes include: + * - color + * - category + * + * To specify any attribute other than the text message, the \ref + * EVENT_ATTRIBUTE_STRUCTURE "Event Attribute Structure" must be used. + * + * \section DOMAINS Domains + * + * Domains enable developers to scope annotations. By default all events and + * annotations are in the default domain. Additional domains can be registered. + * This allows developers to scope markers, ranges, and resources names to + * avoid conflicts. + * + * The function ::nvtxDomainCreateA or ::nvtxDomainCreateW is used to create + * a named domain. + * + * Each domain maintains its own + * - categories + * - thread range stacks + * - registered strings + * + * The function ::nvtxDomainDestroy marks the end of the domain. Destroying + * a domain unregisters and destroys all objects associated with it such as + * registered strings, resource objects, named categories, and started ranges. + * + * \section RESOURCE_NAMING Resource Naming + * + * This section covers calls that allow to annotate objects with user-provided + * names in order to allow for a better analysis of complex trace data. All of + * the functions take the handle or the ID of the object to name and the name. + * The functions can be called multiple times during the execution of an + * application, however, in that case it is implementation dependent which + * name will be reported by the tool. + * + * \subsection CATEGORY_NAMING Category Naming + * + * Some function in this library support associating an integer category + * to enable filtering and sorting. The category naming functions allow + * the application to associate a user friendly name with the integer + * category. Support for domains have been added in NVTX_VERSION_2 to + * avoid collisions when domains are developed independently. + * + * \subsection RESOURCE_OBJECTS Resource Objects + * + * Resource objects are a generic mechanism for attaching data to an application + * resource. The identifier field makes the association to a pointer or handle, + * while the type field helps provide deeper understanding of the identifier as + * well as enabling differentiation in cases where handles generated by different + * APIs may collide. The resource object may also have an associated message to + * associate with the application resource, enabling further annotation of this + * object and how it is used. + * + * The resource object was introduced in NVTX_VERSION_2 to supersede existing naming + * functions and allow the application resource identified by those functions to be + * associated to a domain. The other naming functions are still supported for backward + * compatibility but will be associated only to the default domain. + * + * \subsection RESOURCE_NAMING_OS Resource Naming + * + * Some operating system resources creation APIs do not support providing a user friendly + * name, such as some OS thread creation APIs. This API support resource naming though + * both through resource objects and functions following the pattern + * nvtxName[RESOURCE_TYPE][A|W](identifier, name). Resource objects introduced in NVTX_VERSION 2 + * supersede the other functions with a a more general method of assigning names to OS resources, + * along with associating them to domains too. The older nvtxName* functions are only associated + * with the default domain. + * \section EXTENSIONS Optional Extensions + * Optional extensions will either appear within the existing sections the extend or appear + * in the "Related Pages" when they introduce new concepts. + */ + + /** + * Tools Extension API version + */ +#if defined(NVTX_VERSION) && NVTX_VERSION < 3 +#error "Trying to #include NVTX version 3 in a source file where an older NVTX version has already been included. If you are not directly using NVTX (the NVIDIA Tools Extension library), you are getting this error because libraries you are using have included different versions of NVTX. Suggested solutions are: (1) reorder #includes so the newest NVTX version is included first, (2) avoid using the conflicting libraries in the same .c/.cpp file, or (3) update the library using the older NVTX version to use the newer version instead." +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +/* Header guard */ +#if !defined(NVTX_VERSION) +#define NVTX_VERSION 3 + +/* Platform-dependent defines: + * + * - NVTX_API - Calling conventions (only used on Windows, and only effects + * 32-bit x86 builds, i.e. callee pops stack instead of caller) + * + * - NVTX_DYNAMIC_EXPORT - Make function an exported entry point from a + * dynamic library or shared object. + * + * - NVTX_EXPORT_UNMANGLED_FUNCTION_NAME - When used inside the body of a + * function declared with NVTX_DYNAMIC_EXPORT, ensures the symbol exported + * for the function is the exact string of the function's name as written + * in the code. Name-mangling or name-decoration is disabled. Note that + * on many platforms this is not necessary, since either the function name + * is already exported verbatim, or the dynamic loader also checks for + * functions with the mangling applied. Forcing the exports to avoid any + * mangling simplifies usage across platforms and from other languages. + */ +#if defined(_WIN32) + +#define NVTX_API __stdcall + +#if defined(_MSC_VER) +#define NVTX_DYNAMIC_EXPORT __declspec(dllexport) +#else +#define NVTX_DYNAMIC_EXPORT __attribute__((visibility("default"))) __declspec(dllexport) +#endif + +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_ARM64EC)) +#define NVTX_EXPORT_UNMANGLED_FUNCTION_NAME _Pragma("comment(linker, \"/EXPORT:\" __FUNCTION__ \"=\" __FUNCDNAME__)") +#else +#define NVTX_EXPORT_UNMANGLED_FUNCTION_NAME +#endif + +#else /* POSIX-like platform */ + +#define NVTX_API + +#define NVTX_DYNAMIC_EXPORT __attribute__((visibility("default"))) + +#define NVTX_EXPORT_UNMANGLED_FUNCTION_NAME + +#endif /* Platform-dependent defines */ + +/* Compiler-dependent defines: + * + * - NVTX_INLINE_STATIC - Ensure function has internal linkage, and suggest + * avoiding code-gen of the function. Without this, function has external + * linkage with a strong symbol, so linker expects only one definition. + */ +#if defined(_MSC_VER) + +#define NVTX_INLINE_STATIC __inline static + +#else /* GCC-like compiler */ + +#if defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +#define NVTX_INLINE_STATIC inline static +#else +#define NVTX_INLINE_STATIC __inline__ static +#endif + +#endif /* Compiler-dependent defines */ + +#if !defined(NVTX_NULLPTR) +#if defined(__cplusplus) && __cplusplus >= 201103L +#define NVTX_NULLPTR nullptr +#else +#define NVTX_NULLPTR NULL +#endif +#endif + +#if defined(__cplusplus) +#define NVTX_STATIC_CAST(type, value) (static_cast(value)) +#define NVTX_REINTERPRET_CAST(type, value) (reinterpret_cast(value)) +#else +#define NVTX_STATIC_CAST(type, value) ((type)(value)) +#define NVTX_REINTERPRET_CAST(type, value) ((type)(value)) +#endif + + +/* API linkage/export options: + * + * - By default, the NVTX API functions are declared as "inline", with the + * implementations provided in the headers. This allows multiple .c/.cpp + * files in the same project to include NVTX headers without duplicate- + * definition linker errors. An optimizing compiler should inline these + * implementations, ensuring that the overhead of making an NVTX call is as + * low as possible, even without enabling link-time optimizations. + * + * - NVTX_NO_IMPL - Use when writing NVTX tools. If this macro is defined, + * the NVTX headers will provide all the typedefs, macros, and declarations + * of API functions (not marked inline), but no function implementations. + * + * - NVTX_EXPORT_API - NVTX is normally used in C/C++ applications by simply + * including the headers. There is no need to link with a static library, + * or to ship a dynamic library with the application (this was changed in + * NVTX v3). For other languages, it's not convenient to use a header-only + * C library. The best way to provide an idiomatic NVTX API for another + * language is a .c file that includes the NVTX headers and implements + * functions for that language using its native calling conventions and + * datatypes -- this method can allow static linking to avoid depending on + * a separate dynamic library. Alternatively, other languages may support + * using C calling conventions to directly call C functions exported from a + * dynamic library. To build such a library, write a .c file that defines + * NVTX_EXPORT_API and includes any/all of the NVTX headers. Compile this + * file as a dynamic library, and the NVTX API functions from the included + * headers will be exported with no name-mangling or decoration. Defining + * ABI-compatible NVTX struct and enum types in the other language is the + * responsibility of the user of this dynamic library. + * + * Whichever of the above modes is chosen, the following macros are defined + * appropriately below to implement that mode. These macros are only defined + * if not already defined by the user, so they may be overridden by users to + * handle advanced cases. + * + * - NVTX_DECLSPEC - Specify linkage for NVTX API functions. + * + * - NVTX_SET_NAME_MANGLING_OPTIONS - If necessary for the platform, will use + * platform-dependent syntax for ensuring function name is exported with no + * name-mangling or decoration. Certain compiler and calling-convention + * combinations will add name-mangling or decorations when exporting NVTX + * function name symbols, which makes it much harder for other languages + * to access these functions. This macro must be used inside a function's + * body because it uses built-in macros to get the current function's name. + */ +#if defined(NVTX_NO_IMPL) + +/* When omitting implementation, avoid declaring functions inline + * without definitions, since this causes compiler warnings. */ +#if !defined(NVTX_DECLSPEC) +#define NVTX_DECLSPEC +#endif +#if !defined(NVTX_SET_NAME_MANGLING_OPTIONS) +#define NVTX_SET_NAME_MANGLING_OPTIONS +#endif + +#elif defined(NVTX_EXPORT_API) + +/* Add platform-dependent declaration syntax to ensure NVTX API functions are + * exported when compiling as a dynamic library/shared object, and ensure the + * exported names are not mangled/decorated. */ +#if !defined(NVTX_DECLSPEC) +#define NVTX_DECLSPEC NVTX_DYNAMIC_EXPORT +#endif +#if !defined(NVTX_SET_NAME_MANGLING_OPTIONS) +#define NVTX_SET_NAME_MANGLING_OPTIONS NVTX_EXPORT_UNMANGLED_FUNCTION_NAME +#endif + +#else /* Normal NVTX usage */ + +/* Functions definitions are provided, and functions are declared inline to + * avoid duplicate-definition linker errors when using multiple source files. */ +#if !defined(NVTX_DECLSPEC) +#define NVTX_DECLSPEC NVTX_INLINE_STATIC +#endif +#if !defined(NVTX_SET_NAME_MANGLING_OPTIONS) +#define NVTX_SET_NAME_MANGLING_OPTIONS +#endif + +#endif + +/* Platform-dependent helpers for defining global variables in header files. + * Ensures the linker uses only one instance when multiple source files include + * the headers, avoiding duplicate-definition linker errors. */ +#include "nvtxDetail/nvtxLinkOnce.h" + +/* Macros for applying major-version-specific suffix to NVTX global symbols, so + * usage of different versions in different source files is supported without + * violating the one-definition rule. */ +#define NVTX_VERSIONED_IDENTIFIER_L3(NAME, VERSION) NAME##_v##VERSION +#define NVTX_VERSIONED_IDENTIFIER_L2(NAME, VERSION) NVTX_VERSIONED_IDENTIFIER_L3(NAME, VERSION) +#define NVTX_VERSIONED_IDENTIFIER(NAME) NVTX_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION) + +/** + * The NVTX library depends on stdint.h. If the build tool chain in use + * does not include stdint.h, then define NVTX_STDINT_TYPES_ALREADY_DEFINED + * and define the following types: + *
    + *
  • uint8_t + *
  • int8_t + *
  • uint16_t + *
  • int16_t + *
  • uint32_t + *
  • int32_t + *
  • uint64_t + *
  • int64_t + *
  • uintptr_t + *
  • intptr_t + *
+ * Be sure to define NVTX_STDINT_TYPES_ALREADY_DEFINED if you are using your + * own definitions instead of stdint.h. + */ +#ifndef NVTX_STDINT_TYPES_ALREADY_DEFINED +#include +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** +* Result Codes used for the NVTX tool loader. +*/ +#define NVTX_SUCCESS 0 +#define NVTX_FAIL 1 +#define NVTX_ERR_INIT_LOAD_PROPERTY 2 +#define NVTX_ERR_INIT_ACCESS_LIBRARY 3 +#define NVTX_ERR_INIT_LOAD_LIBRARY 4 +#define NVTX_ERR_INIT_MISSING_LIBRARY_ENTRY_POINT 5 +#define NVTX_ERR_INIT_FAILED_LIBRARY_ENTRY_POINT 6 +#define NVTX_ERR_NO_INJECTION_LIBRARY_AVAILABLE 7 + +/** + * Size of the nvtxEventAttributes_t structure. + */ +#define NVTX_EVENT_ATTRIB_STRUCT_SIZE (NVTX_STATIC_CAST(uint16_t, sizeof(nvtxEventAttributes_t))) + +#define NVTX_NO_PUSH_POP_TRACKING (NVTX_STATIC_CAST(int, -2)) + +typedef uint64_t nvtxRangeId_t; + +/* Forward declaration of opaque domain registration structure */ +struct nvtxDomainRegistration_st; +typedef struct nvtxDomainRegistration_st nvtxDomainRegistration; + +/* \brief Domain Handle Structure. +* \anchor DOMAIN_HANDLE_STRUCTURE +* +* This structure is opaque to the user and is used as a handle to reference +* a domain. This type is returned from tools when using the NVTX API to +* create a domain. +* +*/ +typedef nvtxDomainRegistration* nvtxDomainHandle_t; + +/* Forward declaration of opaque string registration structure */ +struct nvtxStringRegistration_st; +typedef struct nvtxStringRegistration_st nvtxStringRegistration; + +/* \brief Registered String Handle Structure. +* \anchor REGISTERED_STRING_HANDLE_STRUCTURE +* +* This structure is opaque to the user and is used as a handle to reference +* a registered string. This type is returned from tools when using the NVTX +* API to create a registered string. +* +*/ +typedef nvtxStringRegistration* nvtxStringHandle_t; + +/* ========================================================================= */ +/** \defgroup GENERAL General + * @{ + */ + +/** --------------------------------------------------------------------------- + * Color Types + * ------------------------------------------------------------------------- */ +typedef enum nvtxColorType_t +{ + NVTX_COLOR_UNKNOWN = 0, /**< Color attribute is unused. */ + NVTX_COLOR_ARGB = 1 /**< An ARGB color is provided. */ +} nvtxColorType_t; + +/** --------------------------------------------------------------------------- + * Message Types + * ------------------------------------------------------------------------- */ +typedef enum nvtxMessageType_t +{ + NVTX_MESSAGE_UNKNOWN = 0, /**< Message attribute is unused. */ + NVTX_MESSAGE_TYPE_ASCII = 1, /**< A character sequence is used as payload. */ + NVTX_MESSAGE_TYPE_UNICODE = 2, /**< A wide character sequence is used as payload. */ + /* NVTX_VERSION_2 */ + NVTX_MESSAGE_TYPE_REGISTERED = 3 /**< A unique string handle that was registered + with \ref nvtxDomainRegisterStringA() or + \ref nvtxDomainRegisterStringW(). */ +} nvtxMessageType_t; + +typedef union nvtxMessageValue_t +{ + const char* ascii; + const wchar_t* unicode; + /* NVTX_VERSION_2 */ + nvtxStringHandle_t registered; +} nvtxMessageValue_t; + + +/* ------------------------------------------------------------------------- */ +/** \brief Force initialization (optional) + * \anchor FORCE_INITIALIZATION +* +* Force NVTX library to initialize. The first call to any NVTX API function +* will automatically initialize the entire API. This can make the first call +* much slower than subsequent calls. In applications where the first call to +* NVTX may be in a performance-critical section, calling nvtxInitialize before +* any performance-critical sections will ensure NVTX initialization occurs at +* an acceptable time. Since nvtxInitialize takes no parameters and has no +* expected behavior besides initialization, it is convenient to add a call to +* nvtxInitialize in NVTX-instrumented applications that need to force earlier +* initialization without changing any other code. For example, if an app's +* first NVTX call is nvtxDomainCreate, and it is difficult to move that call +* earlier because the domain handle must be stored in an object only created +* at that point, adding a call to nvtxInitialize at the top of main() will +* ensure the later call to nvtxDomainCreate is as fast as possible. +* +* \version NVTX_VERSION_3 +* +* \param reserved - must be zero or NULL. +* +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxInitialize(const void* reserved); +/** @} */ + + +/** @} */ /*END defgroup*/ + +/* ========================================================================= */ +/** \defgroup EVENT_ATTRIBUTES Event Attributes +* @{ +*/ + +/** --------------------------------------------------------------------------- +* Payload Types +* ------------------------------------------------------------------------- */ +typedef enum nvtxPayloadType_t +{ + NVTX_PAYLOAD_UNKNOWN = 0, /**< Payload attribute is unused. */ + NVTX_PAYLOAD_TYPE_UNSIGNED_INT64 = 1, /**< A 64 bit unsigned integer value is used as payload. */ + NVTX_PAYLOAD_TYPE_INT64 = 2, /**< A 64 bit signed integer value is used as payload. */ + NVTX_PAYLOAD_TYPE_DOUBLE = 3, /**< A 64 bit floating point value is used as payload. */ + /* NVTX_VERSION_2 */ + NVTX_PAYLOAD_TYPE_UNSIGNED_INT32 = 4, /**< A 32 bit floating point value is used as payload. */ + NVTX_PAYLOAD_TYPE_INT32 = 5, /**< A 32 bit floating point value is used as payload. */ + NVTX_PAYLOAD_TYPE_FLOAT = 6 /**< A 32 bit floating point value is used as payload. */ +} nvtxPayloadType_t; + +/** \brief Event Attribute Structure. + * \anchor EVENT_ATTRIBUTE_STRUCTURE + * + * This structure is used to describe the attributes of an event. The layout of + * the structure is defined by a specific version of the tools extension + * library and can change between different versions of the Tools Extension + * library. + * + * \par Guidelines + * The caller should always perform the following three tasks when using + * attributes: + *
    + *
  • Zero the structure + *
  • Set the version field + *
  • Set the size field + *
+ * + * Zeroing the structure sets all the event attributes types and values + * to the default value. + * + * The version and size field are used by the Tools Extension + * implementation to handle multiple versions of the attributes structure. + * + * It is recommended that the caller use one of the following to methods + * to initialize the event attributes structure: + * + * \par Method 1 + * Initializing nvtxEventAttributes for future compatibility: + * \code + * nvtxEventAttributes_t eventAttrib = {0}; + * eventAttrib.version = NVTX_VERSION; + * eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + * \endcode + * + * \par Method 2 + * Initializing nvtxEventAttributes for a specific version: + * \code + * nvtxEventAttributes_t eventAttrib = {0}; + * eventAttrib.version = 1; + * eventAttrib.size = (uint16_t)(sizeof(nvtxEventAttributes_v1)); + * \endcode + * + * If the caller uses Method 1 it is critical that the entire binary + * layout of the structure be configured to 0 so that all fields + * are initialized to the default value. + * + * The caller should either use both NVTX_VERSION and + * NVTX_EVENT_ATTRIB_STRUCT_SIZE (Method 1) or use explicit values + * and a versioned type (Method 2). Using a mix of the two methods + * will likely cause either source level incompatibility or binary + * incompatibility in the future. + * + * \par Example + * Populate an attributes structure: + * \code + * // Initialize + * nvtxEventAttributes_t eventAttrib = {0}; + * eventAttrib.version = NVTX_VERSION; + * eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + * + * // Configure the Attributes + * eventAttrib.colorType = NVTX_COLOR_ARGB; + * eventAttrib.color = 0xFF880000; + * eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + * eventAttrib.message.ascii = "Example"; + * \endcode + * + * In the example the caller does not have to set the value of + * \ref ::nvtxEventAttributes_v2::category or + * \ref ::nvtxEventAttributes_v2::payload as these fields were set to + * the default value by {0}. + * \sa + * ::nvtxDomainMarkEx + * ::nvtxDomainRangeStartEx + * ::nvtxDomainRangePushEx + */ +typedef struct nvtxEventAttributes_v2 +{ + /** + * \brief Version flag of the structure. + * + * Needs to be set to NVTX_VERSION to indicate the version of NVTX APIs + * supported in this header file. This can optionally be overridden to + * another version of the tools extension library. + */ + uint16_t version; + + /** + * \brief Size of the structure. + * + * Needs to be set to the size in bytes of the event attribute + * structure used to specify the event. + */ + uint16_t size; + + /** + * \brief ID of the category the event is assigned to. + * + * A category is a user-controlled ID that can be used to group + * events. The tool may use category IDs to improve filtering or + * enable grouping of events in the same category. The functions + * \ref ::nvtxNameCategoryA or \ref ::nvtxNameCategoryW can be used + * to name a category. + * + * Default Value is 0 + */ + uint32_t category; + + /** \brief Color type specified in this attribute structure. + * + * Defines the color format of the attribute structure's \ref COLOR_FIELD + * "color" field. + * + * Default Value is NVTX_COLOR_UNKNOWN + */ + int32_t colorType; /* nvtxColorType_t */ + + /** \brief Color assigned to this event. \anchor COLOR_FIELD + * + * The color that the tool should use to visualize the event. + */ + uint32_t color; + + /** + * \brief Payload type specified in this attribute structure. + * + * Defines the payload format of the attribute structure's \ref PAYLOAD_FIELD + * "payload" field. + * + * Default Value is NVTX_PAYLOAD_UNKNOWN + */ + int32_t payloadType; /* nvtxPayloadType_t */ + + int32_t reserved0; + + /** + * \brief Payload assigned to this event. \anchor PAYLOAD_FIELD + * + * A numerical value that can be used to annotate an event. The tool could + * use the payload data to reconstruct graphs and diagrams. + */ + union payload_t + { + uint64_t ullValue; + int64_t llValue; + double dValue; + /* NVTX_VERSION_2 */ + uint32_t uiValue; + int32_t iValue; + float fValue; + } payload; + + /** \brief Message type specified in this attribute structure. + * + * Defines the message format of the attribute structure's \ref MESSAGE_FIELD + * "message" field. + * + * Default Value is NVTX_MESSAGE_UNKNOWN + */ + int32_t messageType; /* nvtxMessageType_t */ + + /** \brief Message assigned to this attribute structure. \anchor MESSAGE_FIELD + * + * The text message that is attached to an event. + */ + nvtxMessageValue_t message; + +} nvtxEventAttributes_v2; + +typedef struct nvtxEventAttributes_v2 nvtxEventAttributes_t; + +/** @} */ /*END defgroup*/ +/* ========================================================================= */ +/** \defgroup MARKERS_AND_RANGES Markers and Ranges + * + * See \ref MARKERS_AND_RANGES for more details + * + * @{ + */ + +/** \name Marker */ + +/* ------------------------------------------------------------------------- */ +/** \brief Marks an instantaneous event in the application. +* +* A marker can contain a text message or specify additional information +* using the event attributes structure. These attributes include a text +* message, color, category, and a payload. Each of the attributes is optional +* and can only be sent out using the \ref nvtxDomainMarkEx function. +* +* nvtxDomainMarkEx(NULL, event) is equivalent to calling +* nvtxMarkEx(event). +* +* \param domain - The domain of scoping the category. +* \param eventAttrib - The event attribute structure defining the marker's +* attribute types and attribute values. +* +* \sa +* ::nvtxMarkEx +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxDomainMarkEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Marks an instantaneous event in the application. + * + * A marker can contain a text message or specify additional information + * using the event attributes structure. These attributes include a text + * message, color, category, and a payload. Each of the attributes is optional + * and can only be sent out using the \ref nvtxMarkEx function. + * If \ref nvtxMarkA or \ref nvtxMarkW are used to specify the marker + * or if an attribute is unspecified then a default value will be used. + * + * \param eventAttrib - The event attribute structure defining the marker's + * attribute types and attribute values. + * + * \par Example + * Place a mark with attributes: + * \code + * // zero the structure + * nvtxEventAttributes_t eventAttrib = {0}; + * // set the version and the size information + * eventAttrib.version = NVTX_VERSION; + * eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + * // configure the attributes. 0 is the default for all attributes. + * eventAttrib.colorType = NVTX_COLOR_ARGB; + * eventAttrib.color = 0xFF880000; + * eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + * eventAttrib.message.ascii = "Example nvtxMarkEx"; + * nvtxMarkEx(&eventAttrib); + * \endcode + * + * \sa + * ::nvtxDomainMarkEx + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxMarkEx(const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Marks an instantaneous event in the application. + * + * A marker created using \ref nvtxMarkA or \ref nvtxMarkW contains only a + * text message. + * + * \param message - The message associated to this marker event. + * + * \par Example + * Place a mark: + * \code + * nvtxMarkA("Example nvtxMarkA"); + * nvtxMarkW(L"Example nvtxMarkW"); + * \endcode + * + * \sa + * ::nvtxDomainMarkEx + * ::nvtxMarkEx + * + * \version NVTX_VERSION_0 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxMarkA(const char* message); +NVTX_DECLSPEC void NVTX_API nvtxMarkW(const wchar_t* message); +/** @} */ + + +/** \name Process Ranges */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a process range in a domain. +* +* \param domain - The domain of scoping the category. +* \param eventAttrib - The event attribute structure defining the range's +* attribute types and attribute values. +* +* \return The unique ID used to correlate a pair of Start and End events. +* +* \remarks Ranges defined by Start/End can overlap. +* +* \par Example +* Start a range with attributes for a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("my domain"); +* nvtxEventAttributes_t eventAttrib = {0}; +* eventAttrib.version = NVTX_VERSION; +* eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; +* eventAttrib.message.ascii = "my range"; +* nvtxRangeId_t rangeId = nvtxDomainRangeStartEx(domain, &eventAttrib); +* // ... +* nvtxDomainRangeEnd(domain, rangeId); +* \endcode +* +* \sa +* ::nvtxDomainRangeEnd +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxDomainRangeStartEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a process range. + * + * \param eventAttrib - The event attribute structure defining the range's + * attribute types and attribute values. + * + * \return The unique ID used to correlate a pair of Start and End events. + * + * \remarks Ranges defined by Start/End can overlap. + * + * \par Example + * Start a range with attributes: + * \code + * nvtxEventAttributes_t eventAttrib = {0}; + * eventAttrib.version = NVTX_VERSION; + * eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + * eventAttrib.category = 3; + * eventAttrib.colorType = NVTX_COLOR_ARGB; + * eventAttrib.color = 0xFF0088FF; + * eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + * eventAttrib.message.ascii = "Example Range"; + * nvtxRangeId_t rangeId = nvtxRangeStartEx(&eventAttrib); + * // ... + * nvtxRangeEnd(rangeId); + * \endcode + * + * \sa + * ::nvtxRangeEnd + * ::nvtxDomainRangeStartEx + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartEx(const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a process range. + * + * \param message - The event message associated to this range event. + * + * \return The unique ID used to correlate a pair of Start and End events. + * + * \remarks Ranges defined by Start/End can overlap. + * + * \par Example + * Start a range: + * \code + * nvtxRangeId_t r1 = nvtxRangeStartA("Range 1"); + * nvtxRangeId_t r2 = nvtxRangeStartW(L"Range 2"); + * nvtxRangeEnd(r1); + * nvtxRangeEnd(r2); + * \endcode + * + * \sa + * ::nvtxRangeEnd + * ::nvtxRangeStartEx + * ::nvtxDomainRangeStartEx + * + * \version NVTX_VERSION_0 + * @{ */ +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartA(const char* message); +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartW(const wchar_t* message); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Ends a process range. +* +* \param domain - The domain +* \param id - The correlation ID returned from a nvtxRangeStart call. +* +* \remarks This function is offered completeness but is an alias for ::nvtxRangeEnd. +* It does not need a domain param since that is associated with the range ID at ::nvtxDomainRangeStartEx +* +* \par Example +* End a range for a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("my domain"); +* nvtxEventAttributes_t eventAttrib = {0}; +* eventAttrib.version = NVTX_VERSION; +* eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; +* eventAttrib.message.ascii = "my range"; +* nvtxRangeId_t rangeId = nvtxDomainRangeStartEx(domain, &eventAttrib); +* // ... +* nvtxDomainRangeEnd(domain, rangeId); +* \endcode +* +* \sa +* ::nvtxDomainRangeStartEx +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxDomainRangeEnd(nvtxDomainHandle_t domain, nvtxRangeId_t id); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Ends a process range. + * + * \param id - The correlation ID returned from an nvtxRangeStart call. + * + * \sa + * ::nvtxDomainRangeStartEx + * ::nvtxRangeStartEx + * ::nvtxRangeStartA + * ::nvtxRangeStartW + * + * \version NVTX_VERSION_0 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxRangeEnd(nvtxRangeId_t id); +/** @} */ + +/** \name Thread Ranges */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a nested thread range. +* +* \param domain - The domain of scoping. +* \param eventAttrib - The event attribute structure defining the range's +* attribute types and attribute values. +* +* \return The 0 based level of range being started. This value is scoped to the domain. +* If an error occurs, a negative value is returned. +* +* \par Example +* Push a range with attributes for a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example domain"); +* nvtxEventAttributes_t eventAttrib = {0}; +* eventAttrib.version = NVTX_VERSION; +* eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib.colorType = NVTX_COLOR_ARGB; +* eventAttrib.color = 0xFFFF0000; +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; +* eventAttrib.message.ascii = "Level 0"; +* nvtxDomainRangePushEx(domain, &eventAttrib); +* +* // Re-use eventAttrib +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_UNICODE; +* eventAttrib.message.unicode = L"Level 1"; +* nvtxDomainRangePushEx(domain, &eventAttrib); +* +* nvtxDomainRangePop(domain); // Level 1 +* nvtxDomainRangePop(domain); // Level 0 +* \endcode +* +* \sa +* ::nvtxDomainRangePop +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC int NVTX_API nvtxDomainRangePushEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a nested thread range. + * + * \param eventAttrib - The event attribute structure defining the range's + * attribute types and attribute values. + * + * \return The 0 based level of range being started. This level is per domain. + * If an error occurs a negative value is returned. + * + * \par Example + * Push a range with attributes: + * \code + * nvtxEventAttributes_t eventAttrib = {0}; + * eventAttrib.version = NVTX_VERSION; + * eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + * eventAttrib.colorType = NVTX_COLOR_ARGB; + * eventAttrib.color = 0xFFFF0000; + * eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + * eventAttrib.message.ascii = "Level 0"; + * nvtxRangePushEx(&eventAttrib); + * + * // Re-use eventAttrib + * eventAttrib.messageType = NVTX_MESSAGE_TYPE_UNICODE; + * eventAttrib.message.unicode = L"Level 1"; + * nvtxRangePushEx(&eventAttrib); + * + * nvtxRangePop(); // Level 1 + * nvtxRangePop(); // Level 0 + * \endcode + * + * \sa + * ::nvtxDomainRangePushEx + * ::nvtxRangePop + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC int NVTX_API nvtxRangePushEx(const nvtxEventAttributes_t* eventAttrib); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Starts a nested thread range. + * + * \param message - The event message associated to this range event. + * + * \return The 0 based level of range being started. If an error occurs a + * negative value is returned. + * + * \par Example + * Push a range: + * \code + * nvtxRangePushA("Level 0"); + * nvtxRangePushW(L"Level 1"); + * nvtxRangePop(); // Level 1 + * nvtxRangePop(); // Level 0 + * \endcode + * + * \sa + * ::nvtxDomainRangePushEx + * ::nvtxRangePop + * + * \version NVTX_VERSION_0 + * @{ */ +NVTX_DECLSPEC int NVTX_API nvtxRangePushA(const char* message); +NVTX_DECLSPEC int NVTX_API nvtxRangePushW(const wchar_t* message); +/** @} */ + + +/* ------------------------------------------------------------------------- */ +/** \brief Ends a nested thread range. +* +* \return The level of the range being ended. If an error occurs a negative +* value is returned on the current thread. +* +* \par Example +* Pop a range for a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example domain"); +* nvtxEventAttributes_t eventAttrib = {0}; +* eventAttrib.version = NVTX_VERSION; +* eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib.colorType = NVTX_COLOR_ARGB; +* eventAttrib.color = 0xFFFF0000; +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; +* eventAttrib.message.ascii = "Level 0"; +* nvtxDomainRangePushEx(domain, &eventAttrib); +* +* // Re-use eventAttrib +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_UNICODE; +* eventAttrib.message.unicode = L"Level 1"; +* nvtxDomainRangePushEx(domain, &eventAttrib); +* +* nvtxDomainRangePop(domain); // Level 1 +* nvtxDomainRangePop(domain); // Level 0 +* \endcode +* +* \sa +* ::nvtxRangePushEx +* ::nvtxRangePushA +* ::nvtxRangePushW +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC int NVTX_API nvtxDomainRangePop(nvtxDomainHandle_t domain); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Ends a nested thread range. + * + * \return The level of the range being ended. If an error occurs a negative + * value is returned on the current thread. + * + * \par Example + * Pop a range: + * \code + * nvtxRangePushA("Level 0"); + * nvtxRangePushW(L"Level 1"); + * nvtxRangePop(); // Level 1 + * nvtxRangePop(); // Level 0 + * \endcode + * + * \sa + * ::nvtxRangePushEx + * ::nvtxRangePushA + * ::nvtxRangePushW + * + * \version NVTX_VERSION_0 + * @{ */ +NVTX_DECLSPEC int NVTX_API nvtxRangePop(void); +/** @} */ + + +/** @} */ /*END defgroup*/ +/* ========================================================================= */ +/** \defgroup RESOURCE_NAMING Resource Naming + * + * See \ref RESOURCE_NAMING for more details + * + * @{ + */ + + +/* ------------------------------------------------------------------------- */ +/** \name Functions for Generic Resource Naming*/ +/* ------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------- */ +/** \cond SHOW_HIDDEN +* \brief Resource typing helpers. +* +* Classes are used to make it easy to create a series of resource types +* per API without collisions +*/ +#define NVTX_RESOURCE_MAKE_TYPE(CLASS, INDEX) (((NVTX_STATIC_CAST(uint32_t, NVTX_RESOURCE_CLASS_ ## CLASS))<<16)|(NVTX_STATIC_CAST(uint32_t, INDEX))) +#define NVTX_RESOURCE_CLASS_GENERIC 1 +/** \endcond */ + +/* ------------------------------------------------------------------------- */ +/** \brief Generic resource type for when a resource class is not available. +* +* \sa +* ::nvtxDomainResourceCreate +* +* \version NVTX_VERSION_2 +*/ +typedef enum nvtxResourceGenericType_t +{ + NVTX_RESOURCE_TYPE_UNKNOWN = 0, + NVTX_RESOURCE_TYPE_GENERIC_POINTER = NVTX_RESOURCE_MAKE_TYPE(GENERIC, 1), /**< Generic pointer assumed to have no collisions with other pointers. */ + NVTX_RESOURCE_TYPE_GENERIC_HANDLE = NVTX_RESOURCE_MAKE_TYPE(GENERIC, 2), /**< Generic handle assumed to have no collisions with other handles. */ + NVTX_RESOURCE_TYPE_GENERIC_THREAD_NATIVE = NVTX_RESOURCE_MAKE_TYPE(GENERIC, 3), /**< OS native thread identifier. */ + NVTX_RESOURCE_TYPE_GENERIC_THREAD_POSIX = NVTX_RESOURCE_MAKE_TYPE(GENERIC, 4) /**< POSIX pthread identifier. */ +} nvtxResourceGenericType_t; + + + +/** \brief Resource Attribute Structure. +* \anchor RESOURCE_ATTRIBUTE_STRUCTURE +* +* This structure is used to describe the attributes of a resource. The layout of +* the structure is defined by a specific version of the tools extension +* library and can change between different versions of the Tools Extension +* library. +* +* \par Guidelines +* The caller should always perform the following three tasks when using +* attributes: +*
    +*
  • Zero the structure +*
  • Set the version field +*
  • Set the size field +*
+* +* Zeroing the structure sets all the resource attributes types and values +* to the default value. +* +* The version and size field are used by the Tools Extension +* implementation to handle multiple versions of the attributes structure. +* +* It is recommended that the caller use one of the following to methods +* to initialize the event attributes structure: +* +* \par Method 1 +* Initializing nvtxEventAttributes for future compatibility: +* \code +* nvtxResourceAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_RESOURCE_ATTRIB_STRUCT_SIZE; +* \endcode +* +* \par Method 2 +* Initializing nvtxEventAttributes for a specific version: +* \code +* nvtxResourceAttributes_v0 attribs = {0}; +* attribs.version = 2; +* attribs.size = (uint16_t)(sizeof(nvtxResourceAttributes_v0)); +* \endcode +* +* If the caller uses Method 1 it is critical that the entire binary +* layout of the structure be configured to 0 so that all fields +* are initialized to the default value. +* +* The caller should either use both NVTX_VERSION and +* NVTX_RESOURCE_ATTRIB_STRUCT_SIZE (Method 1) or use explicit values +* and a versioned type (Method 2). Using a mix of the two methods +* will likely cause either source level incompatibility or binary +* incompatibility in the future. +* +* \par Example +* Register a resource and populate its attributes: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example domain"); +* +* // Initialize +* nvtxResourceAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_RESOURCE_ATTRIB_STRUCT_SIZE; +* +* // Configure the Attributes +* attribs.identifierType = NVTX_RESOURCE_TYPE_GENERIC_POINTER; +* attribs.identifier.pValue = (const void*)pMutex; +* attribs.messageType = NVTX_MESSAGE_TYPE_ASCII; +* attribs.message.ascii = "Single thread access to database."; +* +* nvtxResourceHandle_t handle = nvtxDomainResourceCreate(domain, &attribs); +* \endcode +* +* \sa +* ::nvtxDomainResourceCreate +*/ +typedef struct nvtxResourceAttributes_v0 +{ + /** + * \brief Version flag of the structure. + * + * Needs to be set to NVTX_VERSION to indicate the version of NVTX APIs + * supported in this header file. This can optionally be overridden to + * another version of the tools extension library. + */ + uint16_t version; + + /** + * \brief Size of the structure. + * + * Needs to be set to the size in bytes of this attribute + * structure. + */ + uint16_t size; + + /** + * \brief Identifier type specifies how to interpret the identifier field + * + * Defines the identifier format of the attribute structure's \ref RESOURCE_IDENTIFIER_FIELD + * "identifier" field. + * + * Default Value is NVTX_RESOURCE_TYPE_UNKNOWN + */ + int32_t identifierType; /* values from enums following the pattern nvtxResource[name]Type_t */ + + /** + * \brief Identifier for the resource. + * \anchor RESOURCE_IDENTIFIER_FIELD + * + * An identifier may be a pointer or a handle to an OS or middleware API object. + * The resource type will assist in avoiding collisions where handles values may collide. + */ + union identifier_t + { + const void* pValue; + uint64_t ullValue; + } identifier; + + /** \brief Message type specified in this attribute structure. + * + * Defines the message format of the attribute structure's \ref RESOURCE_MESSAGE_FIELD + * "message" field. + * + * Default Value is NVTX_MESSAGE_UNKNOWN + */ + int32_t messageType; /* nvtxMessageType_t */ + + /** \brief Message assigned to this attribute structure. \anchor RESOURCE_MESSAGE_FIELD + * + * The text message that is attached to a resource. + */ + nvtxMessageValue_t message; + +} nvtxResourceAttributes_v0; + +typedef struct nvtxResourceAttributes_v0 nvtxResourceAttributes_t; + +/* \cond SHOW_HIDDEN +* \version NVTX_VERSION_2 +*/ +#define NVTX_RESOURCE_ATTRIB_STRUCT_SIZE (NVTX_STATIC_CAST(uint16_t, sizeof(nvtxResourceAttributes_v0))) +typedef struct nvtxResourceHandle* nvtxResourceHandle_t; +/** \endcond */ + + + +/* ------------------------------------------------------------------------- */ +/** \brief Create a resource object to track and associate data with OS and middleware objects +* +* Allows users to associate an API handle or pointer with a user-provided name. +* +* +* \param domain - Domain to own the resource object +* \param attribs - Attributes to be associated with the resource +* +* \return A handle that represents the newly created resource object. +* +* \par Example +* Register a resource: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example domain"); +* nvtxResourceAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_RESOURCE_ATTRIB_STRUCT_SIZE; +* attribs.identifierType = NVTX_RESOURCE_TYPE_GENERIC_POINTER; +* attribs.identifier.pValue = (const void*)pMutex; +* attribs.messageType = NVTX_MESSAGE_TYPE_ASCII; +* attribs.message.ascii = "Single thread access to database."; +* nvtxResourceHandle_t handle = nvtxDomainResourceCreate(domain, &attribs); +* \endcode +* +* \sa +* ::nvtxResourceAttributes_t +* ::nvtxDomainResourceDestroy +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC nvtxResourceHandle_t NVTX_API nvtxDomainResourceCreate(nvtxDomainHandle_t domain, nvtxResourceAttributes_t* attribs); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Destroy a resource object to track and associate data with OS and middleware objects +* +* Allows users to associate an API handle or pointer with a user-provided name. +* +* \param resource - Handle to the resource in which to operate. +* +* \par Example +* Unregister a resource: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example domain"); +* nvtxResourceAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_RESOURCE_ATTRIB_STRUCT_SIZE; +* attribs.identifierType = NVTX_RESOURCE_TYPE_GENERIC_POINTER; +* attribs.identifier.pValue = (const void*)pMutex; +* attribs.messageType = NVTX_MESSAGE_TYPE_ASCII; +* attribs.message.ascii = "Single thread access to database."; +* nvtxResourceHandle_t handle = nvtxDomainResourceCreate(domain, &attribs); +* // ... +* nvtxDomainResourceDestroy(handle); +* \endcode +* +* \sa +* ::nvtxDomainResourceCreate +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxDomainResourceDestroy(nvtxResourceHandle_t resource); +/** @} */ + + +/** \name Functions for NVTX Category Naming*/ + +/* ------------------------------------------------------------------------- */ +/** +* \brief Annotate an NVTX category used within a domain. +* +* Categories are used to group sets of events. Each category is identified +* through a unique ID and that ID is passed into any of the marker/range +* events to assign that event to a specific category. The nvtxDomainNameCategory +* function calls allow the user to assign a name to a category ID that is +* specific to the domain. +* +* nvtxDomainNameCategory(NULL, category, name) is equivalent to calling +* nvtxNameCategory(category, name). +* +* \param domain - The domain of scoping the category. +* \param category - The category ID to name. +* \param name - The name of the category. +* +* \remarks The category names are tracked per domain. +* +* \par Example +* Assign names to categories in a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("example"); +* nvtxDomainNameCategoryA(domain, 1, "Memory Allocation"); +* nvtxDomainNameCategoryW(domain, 2, L"Memory Transfer"); +* \endcode +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxDomainNameCategoryA(nvtxDomainHandle_t domain, uint32_t category, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxDomainNameCategoryW(nvtxDomainHandle_t domain, uint32_t category, const wchar_t* name); +/** @} */ + +/** \brief Annotate an NVTX category. + * + * Categories are used to group sets of events. Each category is identified + * through a unique ID and that ID is passed into any of the marker/range + * events to assign that event to a specific category. The nvtxNameCategory + * function calls allow the user to assign a name to a category ID. + * + * \param category - The category ID to name. + * \param name - The name of the category. + * + * \remarks The category names are tracked per process. + * + * \par Example + * Assign names to categories: + * \code + * nvtxNameCategory(1, "Memory Allocation"); + * nvtxNameCategory(2, "Memory Transfer"); + * nvtxNameCategory(3, "Memory Object Lifetime"); + * \endcode + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCategoryA(uint32_t category, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCategoryW(uint32_t category, const wchar_t* name); +/** @} */ + +/** \name Functions for OS Threads Naming*/ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotate an OS thread. + * + * Allows the user to name an active thread of the current process. If an + * invalid thread ID is provided or a thread ID from a different process is + * used the behavior of the tool is implementation dependent. + * + * Tools expect thread ID to be a number that uniquely identifies the thread + * at the time of the call. Note that a thread's ID can be reused after + * it is destroyed. Tools may choose how to handle aliasing of thread IDs. + * + * POSIX pthread_t type returned by pthread_self() may not comply with these + * expectations. Please use OS-specific thread ID instead of pthread_t. + * + * The thread name is associated to the default domain. To support domains + * use resource objects via ::nvtxDomainResourceCreate. + * + * \param threadId - The ID of the thread to name. + * \param name - The name of the thread. + * + * \par Examples + * Name a thread based on the given operating system: + * + * Windows: + * \code + * #include + * nvtxNameOsThread(GetCurrentThreadId(), "Current thread"); + * nvtxNameOsThread(GetThreadId(SomeThreadHandle), "Other thread"); + * \endcode + * + * Android: + * \code + * #include + * nvtxNameOsThreadA(gettid(), "Current thread"); + * nvtxNameOsThreadA(getpid(), "Main thread"); + * \endcode + * + * Linux: + * \code + * #include + * nvtxNameOsThreadA(syscall(SYS_gettid), "Current thread"); + * \endcode + * \code + * #include + * nvtxNameOsThreadA(getpid(), "Main thread"); + * \endcode + * + * macOS: + * \code + * #include + * nvtxNameOsThreadA(syscall(SYS_thread_selfid), "Current thread"); + * \endcode + * \code + * #include + * __uint64_t id; + * pthread_threadid_np(pthread_self(), &id); + * nvtxNameOsThreadA(id, "Current thread"); + * pthread_threadid_np(somePThreadId, &id); + * nvtxNameOsThreadA(id, "Other thread"); + * \endcode + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameOsThreadA(uint32_t threadId, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameOsThreadW(uint32_t threadId, const wchar_t* name); +/** @} */ + + +/** @} */ /*END defgroup*/ +/* ========================================================================= */ +/** \defgroup STRING_REGISTRATION String Registration +* +* Registered strings are intended to increase performance by lowering instrumentation +* overhead. String may be registered once and the handle may be passed in place of +* a string where an the APIs may allow. +* +* See \ref STRING_REGISTRATION for more details +* +* @{ +*/ + +/* ------------------------------------------------------------------------- */ +/** \brief Register a string. + +* Registers an immutable string with NVTX. Once registered the pointer used +* to register the domain name can be used in nvtxEventAttributes_t +* \ref MESSAGE_FIELD. This allows NVTX implementation to skip copying the +* contents of the message on each event invocation. +* +* String registration is an optimization. It is recommended to use string +* registration if the string will be passed to an event many times. +* +* String are not unregistered, except that by unregistering the entire domain +* +* \param domain - Domain handle. If NULL then the global domain is used. +* \param string - A unique pointer to a sequence of characters. +* +* \return A handle representing the registered string. +* +* \par Example +* Register a string: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("com.nvidia.nvtx.example"); +* nvtxStringHandle_t message = nvtxDomainRegisterStringA(domain, "registered string"); +* nvtxEventAttributes_t eventAttrib = {0}; +* eventAttrib.version = NVTX_VERSION; +* eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib.messageType = NVTX_MESSAGE_TYPE_REGISTERED; +* eventAttrib.message.registered = message; +* \endcode +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC nvtxStringHandle_t NVTX_API nvtxDomainRegisterStringA(nvtxDomainHandle_t domain, const char* string); +NVTX_DECLSPEC nvtxStringHandle_t NVTX_API nvtxDomainRegisterStringW(nvtxDomainHandle_t domain, const wchar_t* string); +/** @} */ + +/** @} */ /*END defgroup*/ +/* ========================================================================= */ +/** \defgroup DOMAINS Domains +* +* Domains are used to group events to a developer defined scope. Middleware +* vendors may also scope their own events to avoid collisions with the +* the application developer's events, so that the application developer may +* inspect both parts and easily differentiate or filter them. By default +* all events are scoped to a global domain where NULL is provided or when +* using APIs provided b versions of NVTX below v2 +* +* Domains are intended to be typically long lived objects with the intention +* of logically separating events of large modules from each other such as +* middleware libraries from each other and the main application. +* +* See \ref DOMAINS for more details +* +* @{ +*/ + +/* ------------------------------------------------------------------------- */ +/** \brief Register a NVTX domain. +* +* Domains are used to scope annotations. All NVTX_VERSION_0 and NVTX_VERSION_1 +* annotations are scoped to the global domain. The function nvtxDomainCreate +* creates a new named domain. +* +* Each domain maintains its own nvtxRangePush and nvtxRangePop stack. +* +* \param name - A unique string representing the domain. +* +* \return A handle representing the domain. +* +* \par Example +* Create a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("com.nvidia.nvtx.example"); +* +* nvtxMarkA("nvtxMarkA to global domain"); +* +* nvtxEventAttributes_t eventAttrib1 = {0}; +* eventAttrib1.version = NVTX_VERSION; +* eventAttrib1.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib1.message.ascii = "nvtxDomainMarkEx to global domain"; +* nvtxDomainMarkEx(NULL, &eventAttrib1); +* +* nvtxEventAttributes_t eventAttrib2 = {0}; +* eventAttrib2.version = NVTX_VERSION; +* eventAttrib2.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; +* eventAttrib2.message.ascii = "nvtxDomainMarkEx to com.nvidia.nvtx.example"; +* nvtxDomainMarkEx(domain, &eventAttrib2); +* +* nvtxDomainDestroy(domain); +* \endcode +* +* \sa +* ::nvtxDomainDestroy +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC nvtxDomainHandle_t NVTX_API nvtxDomainCreateA(const char* name); +NVTX_DECLSPEC nvtxDomainHandle_t NVTX_API nvtxDomainCreateW(const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Unregister a NVTX domain. +* +* Unregisters the domain handle and frees all domain specific resources. +* +* \param domain - the domain handle +* +* \par Example +* Destroy a domain: +* \code +* nvtxDomainHandle_t domain = nvtxDomainCreateA("com.nvidia.nvtx.example"); +* // ... +* nvtxDomainDestroy(domain); +* \endcode +* +* \sa +* ::nvtxDomainCreateA +* ::nvtxDomainCreateW +* +* \version NVTX_VERSION_2 +* @{ */ +NVTX_DECLSPEC void NVTX_API nvtxDomainDestroy(nvtxDomainHandle_t domain); +/** @} */ + + +/** @} */ /*END defgroup*/ +/* ========================================================================= */ +/** \cond SHOW_HIDDEN */ + +#ifdef UNICODE + #define nvtxMark nvtxMarkW + #define nvtxRangeStart nvtxRangeStartW + #define nvtxRangePush nvtxRangePushW + #define nvtxNameCategory nvtxNameCategoryW + #define nvtxNameOsThread nvtxNameOsThreadW + /* NVTX_VERSION_2 */ + #define nvtxDomainCreate nvtxDomainCreateW + #define nvtxDomainRegisterString nvtxDomainRegisterStringW + #define nvtxDomainNameCategory nvtxDomainNameCategoryW +#else + #define nvtxMark nvtxMarkA + #define nvtxRangeStart nvtxRangeStartA + #define nvtxRangePush nvtxRangePushA + #define nvtxNameCategory nvtxNameCategoryA + #define nvtxNameOsThread nvtxNameOsThreadA + /* NVTX_VERSION_2 */ + #define nvtxDomainCreate nvtxDomainCreateA + #define nvtxDomainRegisterString nvtxDomainRegisterStringA + #define nvtxDomainNameCategory nvtxDomainNameCategoryA +#endif + +/** \endcond */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#define NVTX_IMPL_GUARD /* Ensure other headers cannot be included directly */ + +#include "nvtxDetail/nvtxTypes.h" + +#ifndef NVTX_NO_IMPL +#include "nvtxDetail/nvtxImpl.h" +#endif /*NVTX_NO_IMPL*/ + +#undef NVTX_IMPL_GUARD + +#endif /* !defined(NVTX_VERSION) */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCounters.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCounters.h new file mode 100644 index 0000000000000000000000000000000000000000..71297e76659664e82b48c8ddb11e10d13c18d597 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCounters.h @@ -0,0 +1,311 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExtPayload.h" + +/** + * \brief The compatibility ID is used for versioning of this extension. + */ +#ifndef NVTX_EXT_COUNTERS_COMPATID +#define NVTX_EXT_COUNTERS_COMPATID 0x0102 +#endif + +/** + * \brief The module ID identifies the payload extension. It has to be unique + * among the extension modules. + */ +#ifndef NVTX_EXT_COUNTERS_MODULEID +#define NVTX_EXT_COUNTERS_MODULEID 4 +#endif + +#ifndef NVTX_COUNTER_IDS_V1 +#define NVTX_COUNTER_IDS_V1 + +/** The counter ID is not specified. */ +#define NVTX_COUNTER_ID_NONE 0 + +/** Static (user-provided, feed-forward) counter (group) IDs. */ +#define NVTX_COUNTER_ID_STATIC_START (1 << 24) + +/** Dynamically (tool) generated counter (group) IDs */ +#define NVTX_COUNTER_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32) + +#endif /* NVTX_COUNTER_IDS_V1 */ + +/** Reasons for the missing sample value. */ +#ifndef NVTX_COUNTER_SAMPLES_V1 +#define NVTX_COUNTER_SAMPLES_V1 + +#define NVTX_COUNTER_SAMPLE_ZERO 0 +#define NVTX_COUNTER_SAMPLE_UNCHANGED 1 +#define NVTX_COUNTER_SAMPLE_UNAVAILABLE 2 /* Failed to get a counter sample. */ + +#endif /* NVTX_COUNTER_SAMPLES_V1 */ + +/** + * Counter batch timestamp array flags. + * Values must not overlap with `NVTX_BATCH_FLAG_*`. + * By default, one timestamp per sample is assumed. + */ +#ifndef NVTX_COUNTER_BATCH_FLAGS_V1 +#define NVTX_COUNTER_BATCH_FLAGS_V1 + +#define NVTX_COUNTER_BATCH_FLAG_BEGINTIME_INTERVAL_PAIR (1 << 32) +#define NVTX_COUNTER_BATCH_FLAG_ENDTIME_INTERVAL_PAIR (2 << 32) + +#endif /* NVTX_COUNTER_BATCH_FLAGS_V1 */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef NVTX_COUNTER_TYPEDEFS_V1 +#define NVTX_COUNTER_TYPEDEFS_V1 + +/** + * \brief Attributes of a counter or counter group. + */ +typedef struct nvtxCounterAttr_v1 +{ + size_t structSize; + + /** + * A schema ID referring to the data layout of the counter group or a + * predefined NVTX payloads number type. + */ + uint64_t schemaId; + + /** Name of the counter (group). */ + const char* name; + + /** + * Optional detailed description of the counter (group). A description for + * individual counters can be set in the schema registration. + */ + const char* description; + + /** + * Identifier of the counters' scope. A valid scope ID is either a + * predefined scope or the value returned by `nvtxScopeRegister` called for + * the same NVTX domain as `nvtxCounterRegister`. An invalid scope ID will + * be handled like `NVTX_SCOPE_NONE`. + */ + uint64_t scopeId; + + /** + * Optional semantics for a counter (group). The specified semantics apply + * to all counters in a group. If the semantics should only refer to a + * single counter in a group, the semantics field of the payload entry has + * to be used. Accepted semantics are `nvtxSemanticsCounter_t` and + * `nvtxSemanticsTime_t`. + */ + const nvtxSemanticsHeader_t* semantics; + + /** + * A static counter ID must be unique within the domain, + * >= NVTX_COUNTER_ID_STATIC_START, and < NVTX_COUNTER_ID_DYNAMIC_START. + * Use NVTX_COUNTER_ID_NONE to let the tool create a (dynamic) counter ID. + */ + uint64_t counterId; +} nvtxCounterAttr_t; + +/** + * \brief Helper struct to submit a batch of counters. + * + * The size of one sample is specified via the `payloadStaticSize` field of the + * counter's data layout schema or the size of the predefined payload entry type + * and must include padding. There should be no remainder when dividing + * `countersSize` by `nvtxPayloadSchemaAttr_t::payloadStaticSize`. + */ +typedef struct nvtxCounterBatch_v1 +{ + /** + * Identifier of a counter group (data layout, scope, etc.). All counter + * samples in the batch have the same layout and size. + */ + uint64_t counterId; + + /** Batch of counter (group) samples. */ + const void* counters; + + /** Size of the counter batch (in bytes). */ + size_t countersSize; + + /** + * Timestamp ordering, timestamp style, etc. + * See `NVTX_BATCH_FLAG_*` and `NVTX_COUNTER_BATCH_FLAG_*`. + */ + uint64_t flags; + + /** + * Array of timestamps or a timestamp/interval pair. This field can be + * `NULL`, if timestamps are included in the counter samples as part of the + * counter group layout. By default, one timestamp per sample is assumed. + * The timestamp source is specified via time semantics passed during the + * counter group registration. + * This overrides the timestamps embedded in counter samples. + */ + const int64_t* timestamps; + + /** Size of the timestamps array or timestamp/interval pair (in bytes). */ + size_t timestampsSize; +} nvtxCounterBatch_t; + +#endif /* NVTX_COUNTER_TYPEDEFS_V1 */ + +#ifndef NVTX_COUNTER_API_FUNCTIONS_V1 +#define NVTX_COUNTER_API_FUNCTIONS_V1 + +/** + * \brief Register a counter (group). + * + * @param hDomain NVTX domain handle. + * @param attr Pointer to the attributes of the counter (group). + * + * @return Identifier of a counter (group). The counter ID is unique within + * the NVTX domain. + */ +NVTX_DECLSPEC uint64_t NVTX_API nvtxCounterRegister( + nvtxDomainHandle_t hDomain, + const nvtxCounterAttr_t* attr); + +/** + * Sample one integer counter by value immediately + * (the NVTX tool determines the timestamp). + * + * @param hDomain handle of the NVTX domain. + * @param counterId identifier of the NVTX counter (group). + * @param value 64-bit integer counter value. + */ +NVTX_DECLSPEC void NVTX_API nvtxCounterSampleInt64( + nvtxDomainHandle_t hDomain, + uint64_t counterId, + int64_t value); + +/** + * Sample one floating point counter by value immediately + * (the NVTX tool determines the timestamp). + * + * @param hDomain handle of the NVTX domain. + * @param counterId identifier of the NVTX counter (group). + * @param value 64-bit floating-point counter value. + */ +NVTX_DECLSPEC void NVTX_API nvtxCounterSampleFloat64( + nvtxDomainHandle_t hDomain, + uint64_t counterId, + double value); + +/** + * Sample a counter (group) by reference immediately + * (the NVTX tool determines the timestamp). + * + * @param hDomain handle of the NVTX domain. + * @param counterId identifier of the NVTX counter (group). + * @param value pointer to one or more counter values. + * @param size size of the counter value(s) in bytes. + */ +NVTX_DECLSPEC void NVTX_API nvtxCounterSample( + nvtxDomainHandle_t hDomain, + uint64_t counterId, + const void* value, + size_t size); + +/** + * \brief Sample without value. + * + * @param hDomain handle of the NVTX domain. + * @param counterId identifier of the NVTX counter (group). + * @param reason reason for the missing sample value. + */ +NVTX_DECLSPEC void NVTX_API nvtxCounterSampleNoValue( + nvtxDomainHandle_t hDomain, + uint64_t counterId, + uint8_t reason); + +/** + * \brief Submit a batch of counters in the given domain. + * + * The size of a data sampling point is defined by the `payloadStaticSize` field + * of the payload schema. An NVTX tool can assume that the counter samples are + * stored as an array with each entry being `payloadStaticSize` bytes. + * + * @param hDomain handle of the NVTX domain + * @param counterData Pointer to the counter data to be submitted. + */ +NVTX_DECLSPEC void NVTX_API nvtxCounterBatchSubmit( + nvtxDomainHandle_t hDomain, + const nvtxCounterBatch_t* counterData); + +#endif /* NVTX_COUNTER_API_FUNCTIONS_V1 */ + +#ifndef NVTX_COUNTER_CALLBACK_ID_V1 +#define NVTX_COUNTER_CALLBACK_ID_V1 + +#define NVTX3EXT_CBID_nvtxCounterRegister 0 +#define NVTX3EXT_CBID_nvtxCounterSampleInt64 1 +#define NVTX3EXT_CBID_nvtxCounterSampleFloat64 2 +#define NVTX3EXT_CBID_nvtxCounterSample 3 +#define NVTX3EXT_CBID_nvtxCounterSampleNoValue 4 +#define NVTX3EXT_CBID_nvtxCounterBatchSubmit 5 + +#endif /* NVTX_COUNTER_CALLBACK_ID_V1 */ + +/* Macros to create versioned symbols. */ +#ifndef NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \ + NAME##_v##VERSION##_cnt##COMPATID +#define NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \ + NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) +#define NVTX_EXT_COUNTERS_VERSIONED_ID(NAME) \ + NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_COUNTERS_COMPATID) +#endif /* NVTX_EXT_COUNTERS_VERSIONED_IDENTIFIERS_V1 */ + +#ifdef __GNUC__ +#pragma GCC visibility push(internal) +#endif + +#define NVTX_EXT_TYPES_GUARD /* Ensure other headers cannot be included directly. */ +#include "nvtxDetail/nvtxExtTypes.h" +#undef NVTX_EXT_TYPES_GUARD + +#ifndef NVTX_NO_IMPL +#define NVTX_EXT_IMPL_COUNTERS_GUARD /* Ensure other headers cannot be included directly. */ +#include "nvtxDetail/nvtxExtImplCounters_v1.h" +#undef NVTX_EXT_IMPL_COUNTERS_GUARD +#endif /*NVTX_NO_IMPL*/ + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCuda.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCuda.h new file mode 100644 index 0000000000000000000000000000000000000000..fb670fd3a70ad1c83495738c66e158dbe22bff73 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCuda.h @@ -0,0 +1,164 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +#include "cuda.h" + +#ifndef NVTOOLSEXT_CUDA_V3 +#define NVTOOLSEXT_CUDA_V3 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* ========================================================================= */ +/** \name Functions for CUDA Resource Naming +*/ +/** \addtogroup RESOURCE_NAMING + * \section RESOURCE_NAMING_CUDA CUDA Resource Naming + * + * This section covers the API functions that allow to annotate CUDA resources + * with user-provided names. + * + * @{ + */ + +/* ------------------------------------------------------------------------- */ +/* \cond SHOW_HIDDEN +* \brief Used to build a non-colliding value for resource types separated class +* \version NVTX_VERSION_2 +*/ +#define NVTX_RESOURCE_CLASS_CUDA 4 +/** \endcond */ + +/* ------------------------------------------------------------------------- */ +/** \brief Resource types for CUDA +*/ +typedef enum nvtxResourceCUDAType_t +{ + NVTX_RESOURCE_TYPE_CUDA_DEVICE = NVTX_RESOURCE_MAKE_TYPE(CUDA, 1), /* CUdevice */ + NVTX_RESOURCE_TYPE_CUDA_CONTEXT = NVTX_RESOURCE_MAKE_TYPE(CUDA, 2), /* CUcontext */ + NVTX_RESOURCE_TYPE_CUDA_STREAM = NVTX_RESOURCE_MAKE_TYPE(CUDA, 3), /* CUstream */ + NVTX_RESOURCE_TYPE_CUDA_EVENT = NVTX_RESOURCE_MAKE_TYPE(CUDA, 4) /* CUevent */ +} nvtxResourceCUDAType_t; + + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA device. + * + * Allows the user to associate a CUDA device with a user-provided name. + * + * \param device - The handle of the CUDA device to name. + * \param name - The name of the CUDA device. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCuDeviceA(CUdevice device, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCuDeviceW(CUdevice device, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA context. + * + * Allows the user to associate a CUDA context with a user-provided name. + * + * \param context - The handle of the CUDA context to name. + * \param name - The name of the CUDA context. + * + * \par Example + * Name a CUDA context: + * \code + * CUresult status = cuCtxCreate( &cuContext, 0, cuDevice ); + * if ( CUDA_SUCCESS != status ) + * goto Error; + * nvtxNameCuContext(cuContext, "CTX_NAME"); + * \endcode + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCuContextA(CUcontext context, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCuContextW(CUcontext context, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA stream. + * + * Allows the user to associate a CUDA stream with a user-provided name. + * + * \param stream - The handle of the CUDA stream to name. + * \param name - The name of the CUDA stream. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCuStreamA(CUstream stream, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCuStreamW(CUstream stream, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA event. + * + * Allows the user to associate a CUDA event with a user-provided name. + * + * \param event - The handle of the CUDA event to name. + * \param name - The name of the CUDA event. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCuEventA(CUevent event, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCuEventW(CUevent event, const wchar_t* name); +/** @} */ + +/** @} */ /* END RESOURCE_NAMING */ + +/* ========================================================================= */ +#ifdef UNICODE + #define nvtxNameCuDevice nvtxNameCuDeviceW + #define nvtxNameCuContext nvtxNameCuContextW + #define nvtxNameCuStream nvtxNameCuStreamW + #define nvtxNameCuEvent nvtxNameCuEventW +#else + #define nvtxNameCuDevice nvtxNameCuDeviceA + #define nvtxNameCuContext nvtxNameCuContextA + #define nvtxNameCuStream nvtxNameCuStreamA + #define nvtxNameCuEvent nvtxNameCuEventA +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifndef NVTX_NO_IMPL +#define NVTX_IMPL_GUARD_CUDA /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxImplCuda_v3.h" +#undef NVTX_IMPL_GUARD_CUDA +#endif /*NVTX_NO_IMPL*/ + +#endif /* NVTOOLSEXT_CUDA_V3 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCudaRt.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCudaRt.h new file mode 100644 index 0000000000000000000000000000000000000000..ed538fddeb483aeb7212a2ff275718cd6c23e16f --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtCudaRt.h @@ -0,0 +1,139 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +#include "cuda.h" +#include "driver_types.h" + +#ifndef NVTOOLSEXT_CUDART_V3 +#define NVTOOLSEXT_CUDART_V3 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* ========================================================================= */ +/** \name Functions for CUDA Resource Naming +*/ +/** \addtogroup RESOURCE_NAMING + * \section RESOURCE_NAMING_CUDART CUDA Runtime Resource Naming + * + * This section covers the API functions that allow to annotate CUDA resources + * with user-provided names. + * + * @{ + */ + +/* ------------------------------------------------------------------------- */ +/* \cond SHOW_HIDDEN +* \brief Used to build a non-colliding value for resource types separated class +* \version NVTX_VERSION_2 +*/ +#define NVTX_RESOURCE_CLASS_CUDART 5 +/** \endcond */ + +/* ------------------------------------------------------------------------- */ +/** \brief Resource types for CUDART +*/ +typedef enum nvtxResourceCUDARTType_t +{ + NVTX_RESOURCE_TYPE_CUDART_DEVICE = NVTX_RESOURCE_MAKE_TYPE(CUDART, 0), /* int device */ + NVTX_RESOURCE_TYPE_CUDART_STREAM = NVTX_RESOURCE_MAKE_TYPE(CUDART, 1), /* cudaStream_t */ + NVTX_RESOURCE_TYPE_CUDART_EVENT = NVTX_RESOURCE_MAKE_TYPE(CUDART, 2) /* cudaEvent_t */ +} nvtxResourceCUDARTType_t; + + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA device. + * + * Allows the user to associate a CUDA device with a user-provided name. + * + * \param device - The id of the CUDA device to name. + * \param name - The name of the CUDA device. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCudaDeviceA(int device, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCudaDeviceW(int device, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA stream. + * + * Allows the user to associate a CUDA stream with a user-provided name. + * + * \param stream - The handle of the CUDA stream to name. + * \param name - The name of the CUDA stream. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCudaStreamA(cudaStream_t stream, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCudaStreamW(cudaStream_t stream, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates a CUDA event. + * + * Allows the user to associate a CUDA event with a user-provided name. + * + * \param event - The handle of the CUDA event to name. + * \param name - The name of the CUDA event. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameCudaEventA(cudaEvent_t event, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameCudaEventW(cudaEvent_t event, const wchar_t* name); +/** @} */ + +/** @} */ /* END RESOURCE_NAMING */ + +/* ========================================================================= */ +#ifdef UNICODE + #define nvtxNameCudaDevice nvtxNameCudaDeviceW + #define nvtxNameCudaStream nvtxNameCudaStreamW + #define nvtxNameCudaEvent nvtxNameCudaEventW +#else + #define nvtxNameCudaDevice nvtxNameCudaDeviceA + #define nvtxNameCudaStream nvtxNameCudaStreamA + #define nvtxNameCudaEvent nvtxNameCudaEventA +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifndef NVTX_NO_IMPL +#define NVTX_IMPL_GUARD_CUDART /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxImplCudaRt_v3.h" +#undef NVTX_IMPL_GUARD_CUDART +#endif /*NVTX_NO_IMPL*/ + +#endif /* NVTOOLSEXT_CUDART_V3 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMem.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMem.h new file mode 100644 index 0000000000000000000000000000000000000000..f31fef8c7e38e90c1a5f93ada08648e342bc0ad9 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMem.h @@ -0,0 +1,749 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef NVTX_EXT_MODULEID_MEM +#define NVTX_EXT_MODULEID_MEM 1 +#endif + +/* \cond SHOW_HIDDEN + * \brief A compatibility ID value used in structures and initialization to + * identify version differences. + */ +#ifndef NVTX_EXT_COMPATID_MEM +#define NVTX_EXT_COMPATID_MEM 0x0102 +#endif +/* \endcond + */ + +#ifndef NVTX_MEM_CONTENTS_V1 +#define NVTX_MEM_CONTENTS_V1 + +/* \cond SHOW_HIDDEN + * \brief This value is returned by functions that return `nvtxMemHeapHandle_t`, + * if a tool is not attached. + */ +#define NVTX_MEM_HEAP_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemHeapHandle_t, NVTX_STATIC_CAST(intptr_t, -1))) +/* \endcond + */ + +/* \cond SHOW_HIDDEN + * \brief This value is returned by functions that return `nvtxMemRegionHandle_t` + * if a tool is not attached. + */ +#define NVTX_MEM_REGION_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemRegionHandle_t, NVTX_STATIC_CAST(intptr_t, -1))) +/* \endcond + */ + +/* \cond SHOW_HIDDEN + * \brief This value is returned by functions that return `nvtxMemPermissionsHandle_t` + * if a tool is not attached. + */ +#define NVTX_MEM_PERMISSIONS_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemPermissionsHandle_t, -1)) +/* \endcond + */ + + +/* \cond SHOW_HIDDEN + * \brief This should not be used and is considered an error but defined to + * detect an accidental use of zero or NULL. + */ +#define NVTX_MEM_HEAP_USAGE_UNKNOWN 0x0 +/* \endcond + */ + + +/* \cond SHOW_HIDDEN + * \brief This should not be used and is considered an error but defined to + * detect an accidental use of zero or NULL. + */ +#define NVTX_MEM_TYPE_UNKNOWN 0x0 +/* \endcond + */ + + +/* ------------------------------------------------------------------------- */ +/** \defgroup MEMORY Memory + * See page \ref PAGE_MEMORY. + * @{ + */ + +/** + * \brief To indicate the full process virtual address space as a heap for + * functions where a nvtxMemHeapHandle_t is accepted. + * + * The heap by default is always read-write-execute permissions without creating regions. + * Regions created in this heap have read-write access by default but not execute. + */ +#define NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE (NVTX_STATIC_CAST(nvtxMemHeapHandle_t, 0)) + +/** \brief This heap is a sub-allocator. + * + * Heap created with this usage should not be accessed by the user until regions are registered. + * Regions from a heap with this usage have read-write access by default but not execute. + */ +#define NVTX_MEM_HEAP_USAGE_TYPE_SUB_ALLOCATOR 0x1 + +/** + * \brief This is a heap of memory that has an explicit layout. + * + * The layout could be static or dynamic (calculated). This often represents an algorithm's + * structures that are packed together. By default this heap is assumed to be accessible for + * scopes where the memory is naturally accessible by hardware. Regions may be use to further + * annotate or restrict access. A tool may have an option to be more strict, but special + * consideration must be made for `NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE`. + * + * The behavior of this usage is similar to NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE but + * a tool can use it to track special behaviors and reservation. + * + * Memory in a heap with this usage has read-write permissions by default but not execute without + * creating regions. Regions created in this heap have the same default permission access. + */ +#define NVTX_MEM_HEAP_USAGE_TYPE_LAYOUT 0x2 + + +/** + * \brief Standard process userspace virtual addresses for linear allocations. + * + * APIs that map into this space, such as CUDA UVA should use this type. + * + * Relevant functions: cudaMalloc, cudaMallocManaged, cudaHostAlloc, cudaMallocHost + * NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is supported + * + * nvtxMemHeapRegister receives a heapDesc of type nvtxMemVirtualRangeDesc_t + */ +#define NVTX_MEM_TYPE_VIRTUAL_ADDRESS 0x1 + + +/** + * \brief To indicate you are modifying permissions to the process-wide + * full virtual address space. + * + * This is a companion object to `NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE`. + */ +#define NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE (NVTX_STATIC_CAST(nvtxMemPermissionsHandle_t, 0)) + +#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_NONE 0x0 +#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_READ 0x1 +#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_WRITE 0x2 +#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_ATOMIC 0x4 + + +/* \cond SHOW_HIDDEN + * \brief Forward declaration of opaque memory heap structure. + */ +struct nvtxMemHeap_v1; +typedef struct nvtxMemHeap_v1 nvtxMemHeap_t; +/* \endcond + */ + +/** \brief A handle returned by a tool to represent a memory heap. */ +typedef nvtxMemHeap_t* nvtxMemHeapHandle_t; + +/* \cond SHOW_HIDDEN + * \brief Forward declaration of opaque memory heap structure. + */ +struct nvtxMemRegion_v1; +typedef struct nvtxMemRegion_v1 nvtxMemRegion_t; +/* \endcond + */ + +/** \brief A handle returned by a tool to represent a memory region. */ +typedef nvtxMemRegion_t* nvtxMemRegionHandle_t; + +/** \brief A reference to a memory region (by pointer or handle). + * Which member of the union will be determined by a type or flag field outside. + */ +typedef union nvtxMemRegionRef_t +{ + void const* pointer; + nvtxMemRegionHandle_t handle; +} nvtxMemRegionRef_t; + +/* \cond SHOW_HIDDEN + * \brief Forward declaration of opaque memory permissions structure + */ +struct nvtxMemPermissions_v1; +typedef struct nvtxMemPermissions_v1 nvtxMemPermissions_t; +/* \endcond + */ + +/** \brief A handle returned by a tool to represent a memory permissions mask. */ +typedef nvtxMemPermissions_t* nvtxMemPermissionsHandle_t; + + +typedef struct nvtxMemVirtualRangeDesc_v1 +{ + size_t size; + void const* ptr; +} nvtxMemVirtualRangeDesc_v1 ; +typedef nvtxMemVirtualRangeDesc_v1 nvtxMemVirtualRangeDesc_t; + + +/** \brief structure to describe a heap in process virtual memory. */ +typedef struct nvtxMemHeapDesc_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + uint32_t reserved0; + + /** \brief Usage characteristics of the heap + * + * Usage characteristics help tools like memcheckers, sanitizers, + * as well as other debugging and profiling tools to determine some + * special behaviors they should apply to the heap and its regions. + * The value follows the convention NVTX_MEM_HEAP_USAGE_* + * + * Default Value is 0, which is invalid. + */ + uint32_t usage; + + /** \brief Memory type characteristics of the heap + * + * The 'type' indicates how to interpret the ptr field of the heapDesc. + * This is intended to support many additional types of memory, beyond + * standard process virtual memory, such as API specific memory only + * addressed by handles or multi-dimensional memory requiring more complex + * descriptions to handle features like strides, tiling, or interlace. + * + * The values conforms to NVTX_MEM_TYPE_* + * + * The value in the field 'type' identifies the descriptor type that will + * be in the field 'typeSpecificDesc'. 'typeSpecificDesc' is void* because + * it is extensible. Example usage is if type is NVTX_MEM_TYPE_VIRTUAL_ADDRESS, + * then typeSpecificDesc points to a nvtxMemVirtualRangeDesc_t. + * + * Default Value is 0, which is invalid. + */ + uint32_t type; + + /** \brief size of the heap memory descriptor pointed to by typeSpecificDesc + * + * Default Value is 0 which is invalid. + */ + size_t typeSpecificDescSize; + + /** \brief Pointer to the heap memory descriptor + * + * The value in the field 'type' identifies the descriptor type that will + * be in the field 'typeSpecificDesc'. 'typeSpecificDesc' is void* because + * it is extensible. Example usage is if type is NVTX_MEM_TYPE_VIRTUAL_ADDRESS, + * then typeSpecificDesc points to a nvtxMemVirtualRangeDesc_t. + * + * Default Value is 0, which is invalid. + */ + void const* typeSpecificDesc; + + /** \brief ID of the category the event is assigned to. + * + * A category is a user-controlled ID that can be used to group + * events. The tool may use category IDs to improve filtering or + * enable grouping of events in the same category. The functions + * \ref ::nvtxNameCategoryA or \ref ::nvtxNameCategoryW can be used + * to name a category. + * + * Default Value is 0. + */ + uint32_t category; + + /** \brief Message type specified in this attribute structure. + * + * Defines the message format of the attribute structure's \ref MEM_MESSAGE_FIELD + * "message" field. + * + * Default Value is `NVTX_MESSAGE_UNKNOWN`. + */ + uint32_t messageType; /* nvtxMessageType_t */ + + /** \brief Message assigned to this attribute structure. \anchor MEM_MESSAGE_FIELD + * + * The text message that is attached to an event. + */ + nvtxMessageValue_t message; + +} nvtxMemHeapDesc_v1 ; +typedef nvtxMemHeapDesc_v1 nvtxMemHeapDesc_t; + +/** + * \brief Create a memory heap to represent a object or range of memory that will be further + * sub-divided into regions. + * + * The handle used to address the heap will depend on the heap's type. Where the heap is virtual + * memory accessible, the address of the heap's memory itself is its handle. This will likewise + * be returned from the function. + * + * For more advanced types, where the heap is not virtual memory accessible the tools may be + * responsible for returning a void const * that that uniquely identifies the object. Please see + * the description of each heap type for more details on whether this is expected to be a uniquely + * generated by the tool or otherwise. + */ +NVTX_DECLSPEC nvtxMemHeapHandle_t NVTX_API nvtxMemHeapRegister( + nvtxDomainHandle_t domain, + nvtxMemHeapDesc_t const* desc); + + /** \brief Destroy a memory heap. */ +NVTX_DECLSPEC void NVTX_API nvtxMemHeapUnregister( + nvtxDomainHandle_t domain, + nvtxMemHeapHandle_t heap);/* NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is not supported */ + +/** + * \brief Reset the memory heap wipes out any changes, as if it were a fresh heap. + * + * This includes invalidating all regions and their handles. + */ +NVTX_DECLSPEC void NVTX_API nvtxMemHeapReset( + nvtxDomainHandle_t domain, + nvtxMemHeapHandle_t heap); /* NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is supported */ + +/** + * \brief Register a region of memory inside of a heap. + * + * The heap refers the the heap within which the region resides. This can be from + * `nvtxMemHeapRegister`, `NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE`, or one provided + * from other extension API. + * + * The regionType arg will define which type is used in regionDescArray. + * The most commonly used type is `NVTX_MEM_TYPE_VIRTUAL_ADDRESS`. + * In this case regionDescElements is an array of `nvtxMemVirtualRangeDesc_t`. + * + * The regionCount arg is how many element are in regionDescArray and regionHandleArrayOut. + * + * The regionHandleArrayOut arg points to an array where the tool will provide region handles. If + * a pointer is provided, it is expected to have regionCount elements. This pointer can be NULL if + * regionType is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. In this case, the user can use the pointer to the + * virtual memory to reference the region in other related functions which accept nvtxMemRegionRef_t. + */ +typedef struct nvtxMemRegionsRegisterBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t regionType; /* NVTX_MEM_TYPE_* */ + + nvtxMemHeapHandle_t heap; + + size_t regionCount; + size_t regionDescElementSize; + void const* regionDescElements; /* This will also become the handle for this region. */ + nvtxMemRegionHandle_t* regionHandleElementsOut; /* This will also become the handle for this region. */ + +} nvtxMemRegionsRegisterBatch_v1; +typedef nvtxMemRegionsRegisterBatch_v1 nvtxMemRegionsRegisterBatch_t; + + /** \brief Register a region of memory inside of a heap of linear process virtual memory + */ +NVTX_DECLSPEC void NVTX_API nvtxMemRegionsRegister( + nvtxDomainHandle_t domain, + nvtxMemRegionsRegisterBatch_t const* desc); + + + +/** + * \brief Register a region of memory inside of a heap. + * + * The heap refers the the heap within which the region resides. + * This can be from nvtxMemHeapRegister, NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE, or + * one provided from other extension API. + * + * The regionType arg will define which type is used in regionDescArray. + * The most commonly used type is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. + * + * The regionCount arg is how many element are in regionDescArray and regionHandleArrayOut. + * + * The regionHandleArrayOut arg points to an array where the tool will provide region handles. If + * a pointer if provided, it is expected to have regionCount elements. This pointer can be NULL if + * regionType is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. In this case, the user can use the pointer to the + * virtual memory to reference the region in other related functions which accept nvtxMemRegionRef_t. + */ +typedef struct nvtxMemRegionsResizeBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t regionType; /* NVTX_MEM_TYPE_* */ + + size_t regionDescCount; + size_t regionDescElementSize; + void const* regionDescElements; /* This will also become the handle for this region. */ + +} nvtxMemRegionsResizeBatch_v1; +typedef nvtxMemRegionsResizeBatch_v1 nvtxMemRegionsResizeBatch_t; + + /** \brief Register a region of memory inside of a heap of linear process virtual memory + */ +NVTX_DECLSPEC void NVTX_API nvtxMemRegionsResize( + nvtxDomainHandle_t domain, + nvtxMemRegionsResizeBatch_t const* desc); + + +#define NVTX_MEM_REGION_REF_TYPE_UNKNOWN 0x0 +#define NVTX_MEM_REGION_REF_TYPE_POINTER 0x1 +#define NVTX_MEM_REGION_REF_TYPE_HANDLE 0x2 + +/** + * \brief Register a region of memory inside of a heap. + * + * The heap refers the the heap within which the region resides. + * This can be from nvtxMemHeapRegister, `NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE`, or + * one provided from other extension API. + * + * The regionType arg will define which type is used in `regionDescArray`. + * The most commonly used type is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. + * + * The regionCount arg is how many element are in regionDescArray and regionHandleArrayOut. + * + * The regionHandleArrayOut arg points to an array where the tool will provide region handles. + * If a pointer if provided, it is expected to have regionCount elements. + * This pointer can be NULL if regionType is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. In this case, + * the user can use the pointer to the virtual memory to reference the region in other + * related functions which accept a nvtxMemRegionRef_t. + */ +typedef struct nvtxMemRegionsUnregisterBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t refType; /* NVTX_MEM_REGION_REF_TYPE_* */ + + size_t refCount; /* count of elements in refArray */ + size_t refElementSize; + nvtxMemRegionRef_t const* refElements; /* This will also become the handle for this region. */ + +} nvtxMemRegionsUnregisterBatch_v1; +typedef nvtxMemRegionsUnregisterBatch_v1 nvtxMemRegionsUnregisterBatch_t; + +/** + * \brief Unregistration for regions of process virtual memory + * + * This is not necessary if the nvtx heap destroy function has been called that + * contains this object. + */ +NVTX_DECLSPEC void NVTX_API nvtxMemRegionsUnregister( + nvtxDomainHandle_t domain, + nvtxMemRegionsUnregisterBatch_t const* desc); + +typedef struct nvtxMemRegionNameDesc_v1 +{ + uint32_t regionRefType; /* NVTX_MEM_REGION_REF_TYPE_* */ + uint32_t nameType; /* nvtxMessageType_t */ + + nvtxMemRegionRef_t region; + nvtxMessageValue_t name; + + uint32_t category; + uint32_t reserved0; +} nvtxMemRegionNameDesc_v1; +typedef nvtxMemRegionNameDesc_v1 nvtxMemRegionNameDesc_t; + + +typedef struct nvtxMemRegionsNameBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t reserved0; + + size_t regionCount; + size_t regionElementSize; + nvtxMemRegionNameDesc_t const* regionElements; + size_t reserved1; +} nvtxMemRegionsNameBatch_v1 ; +typedef nvtxMemRegionsNameBatch_v1 nvtxMemRegionsNameBatch_t; + + + /** \brief Name or rename a region. */ +NVTX_DECLSPEC void NVTX_API nvtxMemRegionsName( + nvtxDomainHandle_t domain, + nvtxMemRegionsNameBatch_t const* desc); + +/** \brief There are no permissions for this memory. */ +#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_NONE 0x0 + +/** \brief The memory is readable. */ +#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_READ 0x1 + +/** \brief The memory is writable. */ +#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_WRITE 0x2 + +/** \brief The memory is for atomic RW. */ +#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_ATOMIC 0x4 + +/** + * \brief The memory access permissions are reset for a region. + * + * This is as if never set, rather than documented defaults. As as result any flags + * indicating how unspecified regions are handle will affect this area. + * + * This should not be used with READ, WRITE, nor ATOMIC, as those flags would have no effect. + */ +#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_RESET 0x8 + + +typedef struct nvtxMemPermissionsAssignRegionDesc_v1 +{ + uint32_t flags; /* NVTX_MEM_PERMISSIONS_REGION_FLAGS_* */ + uint32_t regionRefType; /* NVTX_MEM_REGION_REF_TYPE_* */ + nvtxMemRegionRef_t region; + +} nvtxMemPermissionsAssignRegionDesc_v1 ; +typedef nvtxMemPermissionsAssignRegionDesc_v1 nvtxMemPermissionsAssignRegionDesc_t; + + +typedef struct nvtxMemPermissionsAssignBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t reserved0; + + nvtxMemPermissionsHandle_t permissions; + + size_t regionCount; + size_t regionElementSize; + nvtxMemPermissionsAssignRegionDesc_t const* regionElements; + + size_t reserved1; +} nvtxMemPermissionsAssignBatch_v1 ; +typedef nvtxMemPermissionsAssignBatch_v1 nvtxMemPermissionsAssignBatch_t; + + + /** \brief Change the permissions of a region of process virtual memory. */ +NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsAssign( + nvtxDomainHandle_t domain, + nvtxMemPermissionsAssignBatch_t const* desc); + + +/** + * \brief Create a permissions object for fine grain thread-local control in + * multi-threading scenarios + * + * Unlike the global permissions object (NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE), a new + * permissions object is empty. There are no regions registered to it, so more memory is accessible + * if bound(bind) without calls to nvtxMemPermissionsSetAccess* first. The permissions are not + * active until nvtxMemPermissionsBind. See `nvtxMemPermissionsBind` for more details. + * + * Use the flags NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_* to control how the regions in + * this permission object will interact with global permissions when bound. You may choose to + * either replace global memory regions setting or overlay on top of them. The most common uses are + * as follows: + * * To limit tools to validate writing exclusively specified in this object but inherit all + * global read access regions use `NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_WRITE` + * * To limit tools to validate both read & write permissions exclusively specified in this + * object use NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_READ + * & NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_WRITE + * + * Also see `nvtxMemPermissionsBind` & `nvtxMemPermissionsSetAccess*`. + */ +NVTX_DECLSPEC nvtxMemPermissionsHandle_t NVTX_API nvtxMemPermissionsCreate( + nvtxDomainHandle_t domain, + int32_t creationflags); /* NVTX_MEM_PERMISSIONS_CREATE_FLAGS_* */ + +/** + * \brief Destroy the permissions object. + * + * If bound(bind), destroy will also unbind it. + */ +NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsDestroy( + nvtxDomainHandle_t domain, + nvtxMemPermissionsHandle_t permissionsHandle); /* only supported on objects from nvtxMemPermissionsCreate */ + +/** \brief Reset the permissions object back to its created state. */ +NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsReset( + nvtxDomainHandle_t domain, + nvtxMemPermissionsHandle_t permissionsHandle); +/* NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE and other special handles are supported */ + + +#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_NONE 0x0 + + /** \brief Upon binding, with the thread, exclude parent scope write regions instead of overlaying on top of them. + * + * EX A developer may chose to first prevent all writes except the ones specified to avoid + * OOB writes, since there are typically fewer regions written to than read from. + **/ +#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_WRITE 0x2 + + /** \brief Upon binding, with the thread, exclude parent scope read regions instead of overlaying on top of them. + * + * EX After eliminating any errors when applying strict writes, a developer may then choose to + * annotate and enforce strict reads behaviors in segments of code. + **/ +#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_READ 0x1 + + /** \brief Upon binding, with the thread, exclude parent scope atomic RW regions instead of overlaying on top of them. + * + * EX After eliminating any errors from read and write, a developer may chose to ensure + * that atomics are in their own region, removing standard read/write, and replacing with + * this strict atomic only access. This way they know that conventional reads or writes + * will not cause unexpected issues. + **/ +#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_ATOMIC 0x4 + + +#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_UNKNOWN 0x0 + + /** \brief Bind to thread scope. In this case, tools should validate that local thread's + * execution is honoring the permissions as well as the state of NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE + * at the time of binding. If this is not bound then NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE should be + * used to validate the memory. + * + * Not all tools will support every scope, such a GPU sanitizer. + **/ +#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_CPU_THREAD 0x1 + +/** + * \brief Bind to CUDA stream scope. + * + * In this case, work enqueued to a CUDA stream should be validated by the tool, + * when it executes, that it respect the permission of the permission at the point + * of binding, as well as the appropriate nvtxMemCudaGetDevicePermissions at the + * time of binding. If this is not bound then nvtxMemCudaGetDevicePermissions at + * the time of stream enqueue should be used to validate the memory. + * + * This could apply to work done either on the GPU like a kernel launch or to + * CPU based callbacks like cudaStreamAddCallback if the tools supports it. + * + * Binding is applies locally to a CPU thread so that if N CPU threads are enqueuing + * work to the same stream (like the default stream) that there cannot be a race + * condition between thread binding vs launching their work. IE users should + * expect the permissions bound in the thread to be honored by the proceeding + * work (launches, copies, etc) invoked from in the CPU thread until unbound. + */ +#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_CUDA_STREAM 0x2 + + +/** + * \brief Bind the permissions object into a particular scope on the caller thread + * + * Permissions do not take affect until binding. Binding permissions is a thread local + * activity that overrides global behaviors. This is to avoid multi-threaded race conditions, + * + * The scope dictates what type of processing it applies to, and when in some cases. + * EX1: NVTX_MEM_PERMISSIONS_BIND_SCOPE_CPU_THREAD applies to CPU code accessing memory while bound. + * EX2: NVTX_MEM_PERMISSIONS_BIND_SCOPE_CUDA_STREAM applies to CUDA streams, and the permissions + * must be recorded and applied when the work in the stream dequeues to executes. In this case + * it could be GPU or CPU, if the tool support both. + * + * Bind can be called again on the same object and thread to take any updates to the + * specified permission object or the inherited properties. + * + * Bind flags support changing how the binding process inherits region access control. + * In the case of thread scope this is NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE and from CUDA_STREAM + * this is nvtxMemCudaGetDevicePermissions. Choosing stricter modes allows the user to + * further reduce the access with less work, since memory by default, behaves as natural + * until the NVTX annotations instructs a tool to treat it anther way. See strict flags + * for more details. + * + * Also see nvtxMemPermissionsUnbind + */ +NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsBind( + nvtxDomainHandle_t domain, + nvtxMemPermissionsHandle_t permissions, /* special object like NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE are not supported */ + uint32_t bindScope, /* NVTX_MEM_PERMISSIONS_BIND_SCOPE_* */ + uint32_t bindFlags); /* NVTX_MEM_PERMISSIONS_BIND_FLAGS_* */ + +/** + * \brief Unbind the permissions object bound to the caller thread. + * + * Upon unbind, the thread local permissions for a scope are restored to the default + * behavior defined by the scope. + */ +NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsUnbind( + nvtxDomainHandle_t domain, + uint32_t bindScope); + +/** @} */ + +#endif /* NVTX_MEM_CONTENTS_V1 */ + +#ifndef NVTX_MEM_CALLBACK_ID_V1 +#define NVTX_MEM_CALLBACK_ID_V1 + +#define NVTX3EXT_CBID_nvtxMemHeapRegister 0 +#define NVTX3EXT_CBID_nvtxMemHeapUnregister 1 +#define NVTX3EXT_CBID_nvtxMemHeapReset 2 +#define NVTX3EXT_CBID_nvtxMemRegionsRegister 3 +#define NVTX3EXT_CBID_nvtxMemRegionsResize 4 +#define NVTX3EXT_CBID_nvtxMemRegionsUnregister 5 +#define NVTX3EXT_CBID_nvtxMemRegionsName 6 +#define NVTX3EXT_CBID_nvtxMemPermissionsAssign 7 +#define NVTX3EXT_CBID_nvtxMemPermissionsCreate 8 +#define NVTX3EXT_CBID_nvtxMemPermissionsDestroy 9 +#define NVTX3EXT_CBID_nvtxMemPermissionsReset 10 +#define NVTX3EXT_CBID_nvtxMemPermissionsBind 11 +#define NVTX3EXT_CBID_nvtxMemPermissionsUnbind 12 + +/* 13-16 in nvtxExtImplMemCudaRt_v1.h */ +#define NVTX3EXT_CBID_nvtxMemCudaGetProcessWidePermissions 13 +#define NVTX3EXT_CBID_nvtxMemCudaGetDeviceWidePermissions 14 +#define NVTX3EXT_CBID_nvtxMemCudaSetPeerAccess 15 +#define NVTX3EXT_CBID_nvtxMemCudaMarkInitialized 16 + +#endif /* NVTX_MEM_CALLBACK_ID_V1 */ + +/* Macros to create versioned symbols. */ +#ifndef NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \ + NAME##_v##VERSION##_mem##COMPATID +#define NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \ + NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) +#define NVTX_EXT_MEM_VERSIONED_ID(NAME) \ + NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_COMPATID_MEM) +#endif /* NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1 */ + +#ifdef __GNUC__ +#pragma GCC visibility push(internal) +#endif + +/* Extension types are required for the implementation and the NVTX handler. */ +#define NVTX_EXT_TYPES_GUARD /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxExtTypes.h" +#undef NVTX_EXT_TYPES_GUARD + +#ifndef NVTX_NO_IMPL +/* Ensure other headers cannot be included directly */ +#define NVTX_EXT_IMPL_MEM_GUARD +#include "nvtxDetail/nvtxExtImplMem_v1.h" +#undef NVTX_EXT_IMPL_MEM_GUARD +#endif /*NVTX_NO_IMPL*/ + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMemCudaRt.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMemCudaRt.h new file mode 100644 index 0000000000000000000000000000000000000000..c12cb1f94bcee9b5e958ed2ade10bb852ca5e9fe --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtMemCudaRt.h @@ -0,0 +1,217 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExtMem.h" + +#include "cuda.h" +#include "cuda_runtime.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef NVTX_MEM_CUDART_CONTENTS_V1 +#define NVTX_MEM_CUDART_CONTENTS_V1 + +/** \defgroup MEMORY_CUDART Memory CUDA Runtime + * See page \ref PAGE_MEMORY_CUDART. + * @{ + */ + +/** \brief The memory is from a CUDA runtime array. + * + * Relevant functions: cudaMallocArray, cudaMalloc3DArray + * Also cudaArray_t from other types such as cudaMipmappedArray_t + * + * NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is not supported + * + * nvtxMemHeapRegister receives a heapDesc of type cudaArray_t because the description can be retrieved by tools through cudaArrayGetInfo() + * nvtxMemRegionRegisterEx receives a regionDesc of type nvtxMemCudaArrayRangeDesc_t + */ +#define NVTX_MEM_TYPE_CUDA_ARRAY 0x11 + +/** \brief structure to describe memory in a CUDA array object + */ +typedef struct nvtxMemCudaArrayRangeDesc_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + uint32_t reserved0; + cudaArray_t src; + size_t offset[3]; + size_t extent[3]; +} nvtxMemCudaArrayRangeDesc_v1; +typedef nvtxMemCudaArrayRangeDesc_v1 nvtxMemCudaArrayRangeDesc_t; + + +/** \brief The memory is from a CUDA device array. + * + * Relevant functions: cuArrayCreate, cuArray3DCreate + * Also CUarray from other types such as CUmipmappedArray + * + * NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is not supported + * + * nvtxMemHeapRegister receives a heapDesc of type cudaArray_t because the description can be retrieved by tools through cudaArrayGetInfo() + * nvtxMemRegionRegisterEx receives a regionDesc of type nvtxMemCuArrayRangeDesc_t + */ +#define NVTX_MEM_TYPE_CU_ARRAY 0x12 + +/** \brief structure to describe memory in a CUDA array object + */ +typedef struct nvtxMemCuArrayRangeDesc_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + uint32_t reserved0; + CUarray src; + size_t offset[3]; + size_t extent[3]; +} nvtxMemCuArrayRangeDesc_v1; +typedef nvtxMemCuArrayRangeDesc_v1 nvtxMemCuArrayRangeDesc_t; + +/* Reserving 0x2-0xF for more common types */ + +#define NVTX_MEM_CUDA_PEER_ALL_DEVICES -1 + +/** \brief Get the permission object that represent the CUDA runtime device + * or cuda driver context + * + * This object will allow developers to adjust permissions applied to work executed + * on the GPU. It may be inherited or overridden by permissions object bound + * with NVTX_MEM_PERMISSIONS_BIND_SCOPE_CUDA_STREAM, depending on the binding flags. + * + * Ex. change the peer to peer access permissions between devices in entirety + * or punch through special holes + * + * By default, all memory is accessible that naturally would be to a CUDA kernel until + * modified otherwise by nvtxMemCudaSetPeerAccess or changing regions. + * + * This object should also represent the CUDA driver API level context. +*/ +NVTX_DECLSPEC nvtxMemPermissionsHandle_t NVTX_API nvtxMemCudaGetProcessWidePermissions( + nvtxDomainHandle_t domain); + +/** \brief Get the permission object that represent the CUDA runtime device + * or cuda driver context + * + * This object will allow developers to adjust permissions applied to work executed + * on the GPU. It may be inherited or overridden by permissions object bound + * with NVTX_MEM_PERMISSIONS_BIND_SCOPE_CUDA_STREAM, depending on the binding flags. + * + * Ex. change the peer to peer access permissions between devices in entirety + * or punch through special holes + * + * By default, all memory is accessible that naturally would be to a CUDA kernel until + * modified otherwise by nvtxMemCudaSetPeerAccess or changing regions. + * + * This object should also represent the CUDA driver API level context. +*/ +NVTX_DECLSPEC nvtxMemPermissionsHandle_t NVTX_API nvtxMemCudaGetDeviceWidePermissions( + nvtxDomainHandle_t domain, + int device); + +/** \brief Change the default behavior for all memory mapped in from a particular device. + * + * While typically all memory defaults to readable and writable, users may desire to limit + * access to reduced default permissions such as read-only and a per-device basis. + * + * Regions can used to further override smaller windows of memory. + * + * devicePeer can be NVTX_MEM_CUDA_PEER_ALL_DEVICES + * +*/ +NVTX_DECLSPEC void NVTX_API nvtxMemCudaSetPeerAccess( + nvtxDomainHandle_t domain, + nvtxMemPermissionsHandle_t permissions, + int devicePeer, /* device number such as from cudaGetDevice() or NVTX_MEM_CUDA_PEER_ALL_DEVICES */ + uint32_t flags); /* NVTX_MEM_PERMISSIONS_REGION_FLAGS_* */ + +/** \brief Mark memory ranges as initialized. +* +* The heap refers the the heap within which the region resides. +* This can be from nvtxMemHeapRegister, NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE, or one provided from other extension API. +* +* The regionType arg will define which type is used in regionDescArray. +* The most commonly used type is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. +* +* The regionCount arg is how many element are in regionDescArray and regionHandleArrayOut. +* +* The regionHandleArrayOut arg points to an array where the tool will provide region handles. +* If a pointer if provided, it is expected to have regionCount elements. +* This pointer can be NULL if regionType is NVTX_MEM_TYPE_VIRTUAL_ADDRESS. In this case, +* the user can use the pointer to the virtual memory to reference the region in other +* related functions which accept a nvtxMemRegionRef_t. +*/ +typedef struct nvtxMemMarkInitializedBatch_v1 +{ + uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */ + uint16_t structSize; /* Size of the structure. */ + + uint32_t regionType; /* NVTX_MEM_TYPE_* */ + + size_t regionDescCount; + size_t regionDescElementSize; + void const* regionDescElements; /* this will also become the handle for this region */ + +} nvtxMemMarkInitializedBatch_v1; +typedef nvtxMemMarkInitializedBatch_v1 nvtxMemMarkInitializedBatch_t; + +/** \brief Register a region of memory inside of a heap of linear process virtual memory +* +* stream is the CUDA stream where the range was accessed and initialized. +*/ +NVTX_DECLSPEC void NVTX_API nvtxMemCudaMarkInitialized( + nvtxDomainHandle_t domain, + cudaStream_t stream, + uint8_t isPerThreadStream, /* 0 for false, otherwise true */ + nvtxMemMarkInitializedBatch_t const* desc); + +/** @} */ + +#endif /* NVTX_MEM_CUDART_CONTENTS_V1 */ + +#ifdef __GNUC__ +#pragma GCC visibility push(internal) +#endif + +#ifndef NVTX_NO_IMPL +#define NVTX_EXT_IMPL_MEM_CUDART_GUARD /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxExtImplMemCudaRt_v1.h" +#undef NVTX_EXT_IMPL_MEM_CUDART_GUARD +#endif /*NVTX_NO_IMPL*/ + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtOpenCL.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtOpenCL.h new file mode 100644 index 0000000000000000000000000000000000000000..3887bc1be050f8ba3912e8e7fbfc335394d4c2fa --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtOpenCL.h @@ -0,0 +1,213 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +#include + +#ifndef NVTOOLSEXT_OPENCL_V3 +#define NVTOOLSEXT_OPENCL_V3 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* ========================================================================= */ +/** \name Functions for OpenCL Resource Naming + */ +/** \addtogroup RESOURCE_NAMING + * \section RESOURCE_NAMING_OPENCL OpenCL Resource Naming + * + * This section covers the API functions that allow to annotate OpenCL resources + * with user-provided names. + * + * @{ + */ + +/* ------------------------------------------------------------------------- */ +/* \cond SHOW_HIDDEN +* \brief Used to build a non-colliding value for resource types separated class +* \version NVTX_VERSION_2 +*/ +#define NVTX_RESOURCE_CLASS_OPENCL 6 +/** \endcond */ + +/* ------------------------------------------------------------------------- */ +/** \brief Resource types for OpenCL +*/ +typedef enum nvtxResourceOpenCLType_t +{ + NVTX_RESOURCE_TYPE_OPENCL_DEVICE = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 1), + NVTX_RESOURCE_TYPE_OPENCL_CONTEXT = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 2), + NVTX_RESOURCE_TYPE_OPENCL_COMMANDQUEUE = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 3), + NVTX_RESOURCE_TYPE_OPENCL_MEMOBJECT = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 4), + NVTX_RESOURCE_TYPE_OPENCL_SAMPLER = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 5), + NVTX_RESOURCE_TYPE_OPENCL_PROGRAM = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 6), + NVTX_RESOURCE_TYPE_OPENCL_EVENT = NVTX_RESOURCE_MAKE_TYPE(OPENCL, 7) +} nvtxResourceOpenCLType_t; + + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL device. + * + * Allows to associate an OpenCL device with a user-provided name. + * + * \param device - The handle of the OpenCL device to name. + * \param name - The name of the OpenCL device. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClDeviceA(cl_device_id device, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClDeviceW(cl_device_id device, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL context. + * + * Allows to associate an OpenCL context with a user-provided name. + * + * \param context - The handle of the OpenCL context to name. + * \param name - The name of the OpenCL context. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClContextA(cl_context context, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClContextW(cl_context context, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL command queue. + * + * Allows to associate an OpenCL command queue with a user-provided name. + * + * \param command_queue - The handle of the OpenCL command queue to name. + * \param name - The name of the OpenCL command queue. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClCommandQueueA(cl_command_queue command_queue, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClCommandQueueW(cl_command_queue command_queue, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL memory object. + * + * Allows to associate an OpenCL memory object with a user-provided name. + * + * \param memobj - The handle of the OpenCL memory object to name. + * \param name - The name of the OpenCL memory object. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClMemObjectA(cl_mem memobj, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClMemObjectW(cl_mem memobj, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL sampler. + * + * Allows to associate an OpenCL sampler with a user-provided name. + * + * \param sampler - The handle of the OpenCL sampler to name. + * \param name - The name of the OpenCL sampler. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClSamplerA(cl_sampler sampler, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClSamplerW(cl_sampler sampler, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL program. + * + * Allows to associate an OpenCL program with a user-provided name. + * + * \param program - The handle of the OpenCL program to name. + * \param name - The name of the OpenCL program. + * + * \code + * cpProgram = clCreateProgramWithSource(cxGPUContext, 1, + * (const char **) &cSourceCL, &program_length, &ciErrNum); + * shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup); + * nvtxNameClProgram(cpProgram, L"PROGRAM_NAME"); + * \endcode + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClProgramA(cl_program program, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClProgramW(cl_program program, const wchar_t* name); +/** @} */ + +/* ------------------------------------------------------------------------- */ +/** \brief Annotates an OpenCL event. + * + * Allows to associate an OpenCL event with a user-provided name. + * + * \param evnt - The handle of the OpenCL event to name. + * \param name - The name of the OpenCL event. + * + * \version NVTX_VERSION_1 + * @{ */ +NVTX_DECLSPEC void NVTX_API nvtxNameClEventA(cl_event evnt, const char* name); +NVTX_DECLSPEC void NVTX_API nvtxNameClEventW(cl_event evnt, const wchar_t* name); +/** @} */ + +/** @} */ /* END RESOURCE_NAMING */ + +/* ========================================================================= */ +#ifdef UNICODE + #define nvtxNameClDevice nvtxNameClDeviceW + #define nvtxNameClContext nvtxNameClContextW + #define nvtxNameClCommandQueue nvtxNameClCommandQueueW + #define nvtxNameClMemObject nvtxNameClMemObjectW + #define nvtxNameClSampler nvtxNameClSamplerW + #define nvtxNameClProgram nvtxNameClProgramW + #define nvtxNameClEvent nvtxNameClEventW +#else + #define nvtxNameClDevice nvtxNameClDeviceA + #define nvtxNameClContext nvtxNameClContextA + #define nvtxNameClCommandQueue nvtxNameClCommandQueueA + #define nvtxNameClMemObject nvtxNameClMemObjectA + #define nvtxNameClSampler nvtxNameClSamplerA + #define nvtxNameClProgram nvtxNameClProgramA + #define nvtxNameClEvent nvtxNameClEventA +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifndef NVTX_NO_IMPL +#define NVTX_IMPL_GUARD_OPENCL /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxImplOpenCL_v3.h" +#undef NVTX_IMPL_GUARD_OPENCL +#endif /*NVTX_NO_IMPL*/ + +#endif /* NVTOOLSEXT_OPENCL_V3 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayload.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayload.h new file mode 100644 index 0000000000000000000000000000000000000000..ff5d4262ebf61288d430da79b3beed8bfc7b7262 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayload.h @@ -0,0 +1,1478 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +/* Optionally include helper macros. */ +/* #include "nvToolsExtPayloadHelper.h" */ + +/** + * If needed, semantic extension headers can be included after this header. + */ + +/** + * \brief The compatibility ID is used for versioning of this extension. + */ +#ifndef NVTX_EXT_PAYLOAD_COMPATID +#define NVTX_EXT_PAYLOAD_COMPATID 0x0104 +#endif + +/** + * \brief The module ID identifies the payload extension. It has to be unique + * among the extension modules. + */ +#ifndef NVTX_EXT_PAYLOAD_MODULEID +#define NVTX_EXT_PAYLOAD_MODULEID 2 +#endif + +/** + * \brief Additional value for the enum @ref nvtxPayloadType_t + */ +#ifndef NVTX_PAYLOAD_TYPE_EXT +#define NVTX_PAYLOAD_TYPE_EXT (NVTX_STATIC_CAST(int32_t, 0xDFBD0009)) +#endif + +/** --------------------------------------------------------------------------- + * Payload schema entry flags. Used for @ref nvtxPayloadSchemaEntry_t::flags. + * ------------------------------------------------------------------------- */ +#ifndef NVTX_PAYLOAD_ENTRY_FLAGS_V1 +#define NVTX_PAYLOAD_ENTRY_FLAGS_V1 + +#define NVTX_PAYLOAD_ENTRY_FLAG_UNUSED 0 + +/** + * Absolute pointer into a payload (entry) of the same event. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_POINTER (1 << 1) + +/** + * Offset from base address of the payload. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_BASE (1 << 2) + +/** + * Offset from the end of this payload entry. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_HERE (1 << 3) + +/** + * The value is an array with fixed length, set with the field `arrayLength`. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE (1 << 4) + +/** + * The value is a zero-/null-terminated array. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED (2 << 4) + +/** + * \brief A single or multi-dimensional array of variable length. + * + * The field `arrayOrUnionDetail` contains the index of the schema entry that + * holds the length(s). If the length entry is a scalar, then this entry is a 1D + * array. If the length entry is a fixed-size array, then the number of + * dimensions is defined with the registration of the schema. If the length + * entry is a zero-terminated array, then the array of the dimensions can be + * determined at runtime. + * For multidimensional arrays, values are stored in row-major order, with rows + * being stored consecutively in contiguous memory. The size of the entry (in + * bytes) is the product of the dimensions multiplied with size of the array + * element. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX (3 << 4) + +/** + * \brief A single or multi-dimensional array of variable length, where the + * dimensions are stored in a different payload (index) of the same event. + * + * This enables an existing address to an array to be directly passed, while the + * dimensions are defined in a separate payload (with only one payload entry). + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX (4 << 4) + +/** + * \brief The value or data that is pointed to by this payload entry value shall + * be copied by the NVTX handler. + * + * A tool may not support deep copy and just ignore this flag. + * See @ref NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY for more details. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_DEEP_COPY (1 << 8) + +/** + * Notifies the NVTX handler to hide this entry in case of visualization. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_HIDE (1 << 9) + +/** + * The entry specifies the event message. Any string type can be used. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_MESSAGE (1 << 10) + +/** + * \brief The entry contains a timestamp. + * + * The time source might be provided via the entry semantics field. In most + * cases, the timestamp (entry) type is @ref NVTX_PAYLOAD_ENTRY_TYPE_INT64. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_TIMESTAMP (2 << 10) + +/** + * These flags specify the NVTX event type to which an entry refers. + */ +#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_BEGIN (1 << 12) +#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12) +#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12) +#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12) + +#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */ +/** --------------------------------------------------------------------------- + * END: Payload schema entry flags. + * ------------------------------------------------------------------------- */ + +/** + * @note The 'array' flags assume that the array is embedded. Otherwise, + * @ref NVTX_PAYLOAD_ENTRY_FLAG_POINTER has to be additionally specified. Some + * combinations may be invalid based on the `NVTX_PAYLOAD_SCHEMA_TYPE_*` this + * entry is enclosed. For instance, variable length embedded arrays are valid + * within @ref NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC but invalid with + * @ref NVTX_PAYLOAD_SCHEMA_TYPE_STATIC. See `NVTX_PAYLOAD_SCHEMA_TYPE_*` for + * additional details. + */ + +/* Helper macro to check if an entry represents an array. */ +#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY (\ + NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | \ + NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \ + NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX) + +#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) \ + ((F) & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY) + + +/** --------------------------------------------------------------------------- + * Types of entries in a payload schema. + * + * @note Several of the predefined types contain the size (in bits) in their + * names. For some data types the size (in bytes) is not fixed and may differ + * for different platforms/operating systems/compilers. To provide portability, + * an array of sizes (in bytes) for type 1 to 28 ( @ref + * NVTX_PAYLOAD_ENTRY_TYPE_CHAR to @ref NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE) + * is passed to the NVTX extension initialization function + * @ref InitializeInjectionNvtxExtension via the `extInfo` field of + * @ref nvtxExtModuleInfo_t. + * ------------------------------------------------------------------------- */ +#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1 +#define NVTX_PAYLOAD_ENTRY_TYPES_V1 + +#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0 + +/** + * Basic integer types. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1 +#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2 +#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3 +#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4 +#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6 +#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7 +#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8 +#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9 +#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10 + +/** + * Integer types with explicit size. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12 +#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14 +#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16 +#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18 + +/** + * Floating point types + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19 +#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20 +#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21 + +/** + * Size type (`size_t` in C). + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22 + +/** + * Any address, e.g. `void*`. If the pointer type matters, use the flag @ref + * NVTX_PAYLOAD_ENTRY_FLAG_POINTER and the respective type instead. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23 + +/** + * Special character types. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26 +#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27 + +/** + * There is type size and alignment information for all previous types. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1) + +/** + * Store raw 8-bit binary data. As with `char`, 1-byte alignment is assumed. + * Typically, a tool will display this as hex or binary. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32 + +/** + * These types do not have standardized equivalents. It is assumed that the + * number at the end corresponds to the bits used to store the value and that + * the alignment corresponds to standardized types of the same size. + * A tool may not support these types. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33 +#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34 + +#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42 +#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43 +#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44 +#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45 + +#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50 +#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52 + +/** + * Data types are as defined by NVTXv3 core. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */ +#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */ + +/** + * The scope of events or counters (see `nvtxScopeRegister`). + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */ + +/** + * Process ID as scope. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT32 71 +#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT64 72 + +/** + * Thread ID as scope. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73 +#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74 + +/** + * \brief String types. + * + * If no flags are set for the entry and `arrayOrUnionDetail > 0`, the entry is + * assumed to be a fixed-size string with the given length, embedded in the payload. + * `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE` is redundant for fixed-size strings. + * + * Setting the flag `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED` specifies a + * zero-terminated string. If `arrayOrUnionDetail > 0`, the entry is handled as + * a zero-terminated array of fixed-size strings. + * + * Setting the flag `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX` specifies a + * variable-length string with the length given in the entry specified by the + * field `arrayOrUnionDetail`. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */ +#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76 +#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77 +#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78 + +/** + * The entry value is of type @ref nvtxStringHandle_t returned by + * @ref nvtxDomainRegisterString. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80 + +/** + * This type marks the union selector member (entry index) in schemas used by + * a union with internal selector. + * See @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR. + */ +#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100 + +/** + * \brief Predefined schema ID for payload data that is referenced in another payload. + * + * This schema ID can be used in @ref nvtxPayloadData_t::schema_id to indicate that the + * payload is a blob of memory which other payload entries may point into. + * A tool will not expose this payload directly. + * + * This schema ID cannot be used as schema entry type! + */ +#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022 + +/** + * \brief Predefined schema ID for raw payload data. + * + * This schema ID can be used in @ref nvtxPayloadData_t::schema_id to indicate + * that the payload is a blob, which can be shown with an arbitrary data viewer. + * This schema ID cannot be used as schema entry type! + */ +#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023 + +/* Custom (static) schema IDs. */ +#define NVTX_PAYLOAD_SCHEMA_ID_STATIC_START (1 << 24) + +/* Dynamic schema IDs (generated by the tool) start here. */ +#define NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32) + +#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */ +/** --------------------------------------------------------------------------- + * END: Payload schema entry types. + * ------------------------------------------------------------------------- */ + + +#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1 +#define NVTX_PAYLOAD_SCHEMA_TYPES_V1 + +/** + * \brief The payload schema type. + * + * A schema can be either of the following types. It is set with + * @ref nvtxPayloadSchemaAttr_t::type. + */ +#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0 +#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1 +#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2 +#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3 +#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4 + +#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */ + + +#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1 +#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1 + +/** + * \brief Flags for static and dynamic schemas. + * + * The schema flags are used with @ref nvtxPayloadSchemaAttr_t::flags. + */ +#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0 + +/** + * This flag indicates that a schema and the corresponding payloads can + * contain fields which require a deep copy. + */ +#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1) + +/** + * This flag indicates that a schema and the corresponding payload can be + * referenced by another payload of the same event. If the schema is not + * intended to be visualized directly, it is possible use + * @ref NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED instead. + */ +#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2) + +/** + * The schema defines a counter group. An NVTX handler can expect that the schema + * contains entries with counter semantics. + */ +#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3) + +/** + * The schema defines a range or marker. An NVTX handler can expect that the + * schema contains a message and timestamp(s). + */ +#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSHPOP (2 << 3) +#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_STARTEND (3 << 3) +#define NVTX_PAYLOAD_SCHEMA_FLAG_MARK (4 << 3) + +#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */ + + +#ifndef NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 + +/** + * The values allow the valid fields in @ref nvtxPayloadSchemaAttr_t to be + * specified via setting the field `fieldMask`. + */ +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME (1 << 1) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE (1 << 2) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS (1 << 3) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES (1 << 4) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES (1 << 5) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE (1 << 6) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ALIGNMENT (1 << 7) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID (1 << 8) +#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_EXTENSION (1 << 9) + +#endif /* NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 */ + + +#ifndef NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 +#define NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 + +/** + * The values are used to set the field `fieldMask` and specify which fields in + * @ref nvtxPayloadEnumAttr_t are set. + */ +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NAME (1 << 1) +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_ENTRIES (1 << 2) +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NUM_ENTRIES (1 << 3) +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SIZE (1 << 4) +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SCHEMA_ID (1 << 5) +#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_EXTENSION (1 << 6) + +#endif /* NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 */ + +/** + * An NVTX scope specifies the execution scope or source of events or counters. + * A tool determines the value for a predefined scope when the sample is taken. + */ +#ifndef NVTX_SCOPES_V1 +#define NVTX_SCOPES_V1 + +#define NVTX_SCOPE_NONE 0 /* No scope specified. */ +#define NVTX_SCOPE_ROOT 1 /* The root in a hierarchy. */ + +/* Hardware events */ +#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */ +#define NVTX_SCOPE_CURRENT_HW_SOCKET 3 +#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */ +#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */ +/* Innermost HW execution context */ +#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15 + +/* Virtualized hardware, virtual machines */ +#define NVTX_SCOPE_CURRENT_HYPERVISOR 16 +#define NVTX_SCOPE_CURRENT_VM 17 +#define NVTX_SCOPE_CURRENT_KERNEL 18 +#define NVTX_SCOPE_CURRENT_CONTAINER 19 +#define NVTX_SCOPE_CURRENT_OS 20 + +/* Software scopes */ +#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */ +#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */ +/* Innermost SW execution context */ +#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31 + +/** Static (user-provided) scope IDs (feed forward) */ +#define NVTX_SCOPE_ID_STATIC_START (1 << 24) + +/* Dynamically (tool) generated scope IDs */ +#define NVTX_SCOPE_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32) + +#endif /* NVTX_SCOPES_V1 */ + +#ifndef NVTX_TIME_V1 +#define NVTX_TIME_V1 + +/** + * Timestamp source is not known, e.g. NIC or switch. The NVTX handler can + * assume that at least two synchronization points are created with NVTX + * instrumentation. + */ +#define NVTX_TIMESTAMP_TYPE_NONE 0 + +/** The timestamp was provided by the NVTX handler via `nvtxTimestampGet()`. */ +#define NVTX_TIMESTAMP_TYPE_TOOL_PROVIDED 1 + +/** CPU timestamp sources */ +#define NVTX_TIMESTAMP_TYPE_CPU_TSC /* RDTSC on x86, CNTVCT on ARM */ 10 +#define NVTX_TIMESTAMP_TYPE_CPU_TSC_NONVIRTUALIZED /* CNTPCT on ARM */ 11 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME 12 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME_COARSE 13 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC 14 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_RAW 15 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_COARSE 16 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_BOOTTIME 17 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_PROCESS_CPUTIME_ID 18 +#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_THREAD_CPUTIME_ID 19 + +#define NVTX_TIMESTAMP_TYPE_WIN_QPC 30 +#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFT 31 +#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFTP 32 + +#define NVTX_TIMESTAMP_TYPE_C_TIME 40 +#define NVTX_TIMESTAMP_TYPE_C_CLOCK 41 +#define NVTX_TIMESTAMP_TYPE_C_TIMESPEC_GET 42 + +#define NVTX_TIMESTAMP_TYPE_CPP_STEADY_CLOCK 50 +#define NVTX_TIMESTAMP_TYPE_CPP_HIGH_RESOLUTION_CLOCK 51 +#define NVTX_TIMESTAMP_TYPE_CPP_SYSTEM_CLOCK 52 +#define NVTX_TIMESTAMP_TYPE_CPP_UTC_CLOCK 53 +#define NVTX_TIMESTAMP_TYPE_CPP_TAI_CLOCK 54 +#define NVTX_TIMESTAMP_TYPE_CPP_GPS_CLOCK 55 +#define NVTX_TIMESTAMP_TYPE_CPP_FILE_CLOCK 56 + +/** GPU timestamp sources */ +#define NVTX_TIMESTAMP_TYPE_GPU_GLOBALTIMER 80 /* e.g. PTIMER */ + +/** Returned by `nvtxTimeDomainRegister` if time domain registration failed. */ +#define NVTX_TIME_DOMAIN_ID_NONE 0 + +/** Static (user-provided) time domain IDs (feed forward) */ +#define NVTX_TIME_DOMAIN_ID_STATIC_START (1 << 24) + +/* Dynamically (tool) generated time domain IDs */ +#define NVTX_TIME_DOMAIN_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32) + +/** Timer properties */ +#define NVTX_TIMER_FLAG_NONE 0 +#define NVTX_TIMER_FLAG_CLOCK_MONOTONIC (1 << 1) +#define NVTX_TIMER_FLAG_CLOCK_STEADY (1 << 2) + +/** Point in time when the timer starts (its value is 0). */ +#define NVTX_TIMER_START_UNKNOWN 0 +#define NVTX_TIMER_START_SYSTEM_BOOT 1 +#define NVTX_TIMER_START_VM_BOOT 2 +#define NVTX_TIMER_START_UNIX_EPOCH 3 /* 1 January 1970 */ +#define NVTX_TIMER_START_WIN_FILETIME 4 /* 1 January 1601 */ + +/** + * Flags specifying whether it is safe or unsafe to call the timestamp + * provider after process teardown. + */ +#define NVTX_TIMER_SOURCE_SAFE_CALL_AFTER_PROCESS_TEARDOWN 0 +#define NVTX_TIMER_SOURCE_UNSAFE_CALL_AFTER_PROCESS_TEARDOWN 1 + +#endif /* NVTX_TIME_V1 */ + +#ifndef NVTX_BATCH_FLAGS_V1 +#define NVTX_BATCH_FLAGS_V1 + +/** + * Timestamp ordering flags for a batch of deferred events or counters. + * By default, chronological order by the first timestamp of the event or + * counter is assumed. + */ +#define NVTX_BATCH_FLAG_TIME_SORTED 0 +#define NVTX_BATCH_FLAG_TIME_SORTED_PARTIALLY (1 << 1) +#define NVTX_BATCH_FLAG_TIME_SORTED_PER_SCOPE (2 << 1) +#define NVTX_BATCH_FLAG_UNSORTED (3 << 1) + +#endif /* NVTX_BATCH_FLAGS_V1 */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef NVTX_PAYLOAD_TYPEDEFS_V1 +#define NVTX_PAYLOAD_TYPEDEFS_V1 + +/** + * \brief Size and alignment information for predefined payload entry types. + * + * The struct contains the size and the alignment size in bytes. A respective + * array for the predefined types is passed via nvtxExtModuleInfo_t to the NVTX + * client/handler. The type (ID) is used as index into this array. + */ +typedef struct nvtxPayloadEntryTypeInfo_v1 +{ + uint16_t size; + uint16_t align; +} nvtxPayloadEntryTypeInfo_t; + +/** + * \brief Binary payload data, size and decoding information. + * + * An array of type `nvtxPayloadData_t` is passed to the NVTX event attached to + * an NVTX event via the `payload.ullvalue` field of NVTX event attributes. + * + * The `schemaId` be a predefined schema entry type (`NVTX_PAYLOAD_ENTRY_TYPE*`), + * a schema ID (statically specified or dynamically created) or one of + * `NVTX_PAYLOAD_TYPE_REFERENCED` or `NVTX_PAYLOAD_TYPE_RAW`. + * + * Setting the size of a payload to `MAX_SIZE` can be useful to reduce the + * overhead of NVTX instrumentation, when no NVTX handler is attached. However, + * a tool might not be able to detect the size of a payload and thus skip it. + * A reasonable use case is a payload that represents a null-terminated + * C string, where the NVTX handler can call `strlen()`. + */ +typedef struct nvtxPayloadData_v1 +{ + /** + * The schema ID, which defines the layout of the binary data. + */ + uint64_t schemaId; + + /** + * Size of the payload (blob) in bytes. `SIZE_MAX` (`-1`) indicates the tool + * that it should figure out the size, which might not be possible. + */ + size_t size; + + /** + * Pointer to the binary payload data. + */ + const void* payload; +} nvtxPayloadData_t; + + +/** + * \brief Header of the payload entry's semantic field. + * + * If the semantic field of the payload schema entry is set, the first four + * fields (header) are defined with this type. A tool can iterate through the + * extensions and check, if it supports (can handle) it. + */ +typedef struct nvtxSemanticsHeader_v1 +{ + uint32_t structSize; /** Size of semantic extension struct. */ + uint16_t semanticId; + uint16_t version; + const struct nvtxSemanticsHeader_v1* next; /** linked list */ + /* Additional fields are defined by the specific semantic extension. */ +} nvtxSemanticsHeader_t; + +/** + * \brief Entry in a schema. + * + * A payload schema consists of an array of payload schema entries. It is + * registered with @ref nvtxPayloadSchemaRegister. `flag` can be set to `0` for + * simple values, 'type' is the only "required" field. If not set explicitly, + * all other fields are zero-initialized, which means that the entry has no name + * and the offset is determined based on self-alignment rules. + * + * Example schema: + * nvtxPayloadSchemaEntry_t schema[] = { + * {0, NVTX_EXT_PAYLOAD_TYPE_UINT8, "one byte"}, + * {0, NVTX_EXT_PAYLOAD_TYPE_INT32, "four bytes"} + * }; + */ +typedef struct nvtxPayloadSchemaEntry_v1 +{ + /** + * \brief Flags to augment the basic type. + * + * This field allows additional properties of the payload entry to be + * specified. Valid values are `NVTX_PAYLOAD_ENTRY_FLAG_*`. + */ + uint64_t flags; + + /** + * \brief Predefined payload schema entry type or custom schema ID. + * + * Predefined types are `NVTX_PAYLOAD_ENTRY_TYPE_*`. Passing a schema ID + * enables nesting of schemas. + */ + uint64_t type; + + /** + * \brief Name or label of the payload entry. (Optional) + * + * A meaningful name or label can help organizing and interpreting the data. + */ + const char* name; + + /** + * \brief Description of the payload entry. (Optional) + * + * A more detail description of the data that is stored with this entry. + */ + const char* description; + + /** + * \brief String length, array length or member selector for union types. + * + * If @ref type is a C string type, this field specifies the string length. + * + * If @ref flags specify that the entry is an array, this field specifies + * the array length. See `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_*` for more details. + * + * If @ref type is a union with schema type @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION + * (external selection of the union member), this field contains the index + * (starting with 0) to an entry of integral type in the same schema. The + * associated field value specifies the selected union member. + * + * @note An array of schema type @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION is not + * supported. @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR can + * be used instead. + */ + uint64_t arrayOrUnionDetail; + + /** + * \brief Offset in the binary payload data (in bytes). + * + * This field specifies the byte offset from the base address of the actual + * binary data (blob) to the start address of the data of this entry. + * + * It is recommended (but not required) to provide the offset it. Otherwise, + * the NVTX handler will determine the offset from natural alignment rules. + * In some cases, e.g. dynamic schema layouts, the offset cannot be set and + * has to be determined based on the data of prior entries. + * + * Setting the offset can also be used to skip entries during payload parsing. + */ + uint64_t offset; + + /** + * \brief Additional semantics of the payload entry. + * + * The field points to the first element in a linked list, which enables + * multiple semantic extensions. + */ + const nvtxSemanticsHeader_t* semantics; + + /** + * \brief Reserved for future use. Do not use it! + */ + const void* reserved; +} nvtxPayloadSchemaEntry_t; + +/** + * \brief NVTX payload schema attributes. + */ +typedef struct nvtxPayloadSchemaAttr_v1 +{ + /** + * \brief Mask of valid fields in this struct. + * + * Use the `NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_*` defines. + */ + uint64_t fieldMask; + + /** + * \brief Name of the payload schema. (Optional) + */ + const char* name; + + /** + * \brief Payload schema type. (Mandatory) \anchor PAYLOAD_TYPE_FIELD + * + * Use the `NVTX_PAYLOAD_SCHEMA_TYPE_*` defines. + */ + uint64_t type; + + /** + * \brief Payload schema flags. (Optional) + * + * Flags defined by `NVTX_PAYLOAD_SCHEMA_FLAG_*` can be used to set + * additional properties of the schema. + */ + uint64_t flags; + + /** + * \brief Entries of a payload schema. (Mandatory) \anchor ENTRIES_FIELD + * + * This field is a pointer to an array of schema entries, each describing a + * field in a data structure, e.g. in a C struct or union. + */ + const nvtxPayloadSchemaEntry_t* entries; + + /** + * \brief Number of entries in the payload schema. (Mandatory) + * + * Number of entries in the array of payload entries \ref ENTRIES_FIELD. + */ + size_t numEntries; + + /** + * \brief The binary payload size in bytes for static payload schemas. + * + * If \ref PAYLOAD_TYPE_FIELD is @ref NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC this + * value is ignored. If this field is not specified for a schema of type + * @ref NVTX_PAYLOAD_SCHEMA_TYPE_STATIC, the size can be automatically + * determined by a tool. + */ + size_t payloadStaticSize; + + /** + * \brief The byte alignment for packed structures. + * + * If not specified, this field defaults to `0`, which means that the fields + * in the data structure are not packed and natural alignment rules can be + * applied. + */ + size_t packAlign; + + /** + * A static payload schema ID must be unique within the domain, + * >= NVTX_PAYLOAD_SCHEMA_ID_STATIC_START and + * < NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START + */ + uint64_t schemaId; + + /** + * Flexible extension for schema attributes. + * (Do not use. Reserved for future use.) + */ + void* extension; +} nvtxPayloadSchemaAttr_t; + +/** + * \brief This type is used to describe an enumeration. + * + * Since the value of an enum entry might not be meaningful for the analysis + * and/or visualization, a tool can show the name of enum entry instead. + * + * An array of this struct is passed to @ref nvtxPayloadEnumAttr_t::entries to be + * finally registered via @ref nvtxPayloadEnumRegister with the NVTX handler. + * + * @note EXPERIMENTAL + */ +typedef struct nvtxPayloadEnum_v1 +{ + /** + * Name of the enum value. + */ + const char* name; + + /** + * Value of the enum entry. + */ + uint64_t value; + + /** + * Indicates that this entry sets a specific set of bits, which can be used + * to define bitsets. + */ + int8_t isFlag; +} nvtxPayloadEnum_t; + +/** + * \brief NVTX payload enumeration type attributes. + * + * A pointer to this struct is passed to @ref nvtxPayloadEnumRegister. + */ +typedef struct nvtxPayloadEnumAttr_v1 +{ + /** + * Mask of valid fields in this struct. See `NVTX_PAYLOAD_ENUM_ATTR_FIELD_*`. + */ + uint64_t fieldMask; + + /** + * Name of the enum. (Optional) + */ + const char* name; + + /** + * Entries of the enum. (Mandatory) + */ + const nvtxPayloadEnum_t* entries; + + /** + * Number of entries in the enum. (Mandatory) + */ + size_t numEntries; + + /** + * Size of enumeration type in bytes + */ + size_t sizeOfEnum; + + /** + * A static payload schema ID must be unique within the domain, + * >= NVTX_PAYLOAD_SCHEMA_ID_STATIC_START and + * < NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START + */ + uint64_t schemaId; + + /** + * Flexible extension for enumeration attributes. + * (Do not use. Reserved for future use.) + */ + void* extension; +} nvtxPayloadEnumAttr_t; + +typedef struct nvtxScopeAttr_v1 +{ + size_t structSize; + + /** + * Path delimited by '/' characters, relative to @ref parentScope. Leading + * slashes are ignored. Nodes in the path may use name[key] syntax to + * indicate an array of sibling nodes, which may be combined with other + * non-array nodes or different arrays at the same scope. Node names should + * be UTF8 printable characters. '\' has to be used to escape '/', '[', and + * ']' characters in node names. An empty C string "" and `NULL` are valid + * inputs and treated equivalently. + * + * A GPU can be specified using its: + * - Unique identifier (UUID) with "GPU[UUID:#]", + * - CUDA device ID (sensitive to CUDA_VISIBLE_DEVICES) with "GPU[CUDAID:#]", + * - NVML (nvidia-smi) device ID with "GPU[NVSMI:#]" + * + * (replace `#` with the actual device ID). + * For display purposes, a tool is recommended to show a pretty name. + * To clearly identify a GPU, the @ref parentScope should also match + * the GPU's execution context. + */ + const char* path; + + /** Identifier of the parent scope, to which `path` is appended. */ + uint64_t parentScope; + + /** + * Static scope ID. Must be unique within the domain, + * >= NVTX_SCOPE_ID_STATIC_START, and < NVTX_SCOPE_ID_DYNAMIC_START. + * Use NVTX_SCOPE_NONE to let the tool create a (dynamic) scope ID. + */ + uint64_t scopeId; +} nvtxScopeAttr_t; + +#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */ + +#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 +#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 + +/** Attributes of an NVTX time domain. */ +typedef struct nvtxTimeDomainAttr_v1 +{ + /** Identifyer of the NVTX scope the time domain is associated with. */ + uint64_t scopeId; + + /** Predefined `NVTX_TIMESTAMP_TYPE_*`. */ + uint64_t timestampTypeId; + + /** + * Static (feed-forward) time domain ID. `0` makes the tool generate the ID. + * The static schema ID must be >= NVTX_TIME_DOMAIN_ID_STATIC_START and + * < NVTX_TIME_DOMAIN_ID_DYNAMIC_START + */ + uint64_t timeDomainId; + + /** Properties of the timer (use NVTX_TIMER_FLAG_*). */ + uint64_t timerFlags; + + /** Ticks per second (0 means unknown). */ + int64_t timerResolution; + + /** Point in time when the timer starts (use NVTX_TIMER_START_*). */ + uint64_t timerStart; +} nvtxTimeDomainAttr_t; + +/** Synchronization point between two time domains. */ +typedef struct nvtxSyncPoint_v1 +{ + int64_t src; + int64_t dst; +} nvtxSyncPoint_t; + +/** + * \brief Helper struct to submit a batch of events (marks or ranges). + * + * By default, events are assumed to be chronologically sorted by the first + * timestamp in the event (start time in a range). If the events are not sorted, + * the `flags` field must be set accordingly (see `NVTX_BATCH_FLAG_*`). + */ +typedef struct nvtxEventBatch_v1 +{ + /** + * Identifier of the data layout of a deferred event in the array of events. + * Only layouts with static payload size are allowed. The size of an event + * in the array is specified by the static payload size during the schema + * registration. The time domain of event timestamps is provided via time + * semantics in the schema registration. + */ + uint64_t eventSchemaId; + + /** Size of the array of deferred events (in bytes). */ + size_t size; + + /** Pointer to the array of deferred events. */ + const void* events; + + /** Scope of all events or counters in the batch. */ + uint64_t scope; + + /** Timestamp ordering (sorted, partially sorted, unsorted), etc. */ + uint64_t flags; + + /** Flexible data which can be referenced by events in the batch. */ + const void* flexData; + + /** Size of the flexible data memory blob. */ + size_t flexDataSize; + + /** + * Offset from the `flexData` pointer to the begin of the flexible data + * in bytes. + */ + size_t flexDataOffset; +} nvtxEventBatch_t; + +#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */ + +#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1 +#define NVTX_PAYLOAD_API_FUNCTIONS_V1 + +/** + * \brief Register a payload schema. + * + * @param domain NVTX domain handle. + * @param attr NVTX payload schema attributes. + */ +NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister( + nvtxDomainHandle_t domain, + const nvtxPayloadSchemaAttr_t* attr); + +/** + * \brief Register an enumeration type with the payload extension. + * + * @param domain NVTX domain handle + * @param attr NVTX payload enumeration type attributes. + */ +NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister( + nvtxDomainHandle_t domain, + const nvtxPayloadEnumAttr_t* attr); + +/** + * \brief Register a scope. + * + * @param domain NVTX domain handle + * @param attr Scope attributes. + * + * @return an identifier for the scope. If the operation was not successful, + * `NVTX_SCOPE_NONE` is returned. + */ +NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister( + nvtxDomainHandle_t domain, + const nvtxScopeAttr_t* attr); + +/** + * \brief Marks an instantaneous event in the application with the attributes + * being passed via the extended payload. + * + * An NVTX handler can assume that the payload contains the event message. + * Otherwise, it might ignore the event. + * + * @param domain NVTX domain handle + * @param payloadData pointer to an array of structured payloads. + * @param count number of payload BLOBs. + */ +NVTX_DECLSPEC void NVTX_API nvtxMarkPayload( + nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, + size_t count); + +/** + * \brief Begin a nested thread range with the attributes being passed via the + * payload. + * + * @param domain NVTX domain handle + * @param payloadData Pointer to an array of extended payloads. + * @param count Number of payloads. + * + * @return The level of the range being ended. If an error occurs a negative + * value is returned on the current thread. + */ +NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload( + nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, + size_t count); + +/** + * \brief End a nested thread range with an additional custom payload. + * + * NVTX event attributes passed to this function (via the payloads) overwrite + * event attributes (message and color) that have been set in the push event. + * Other payload entries extend the data of the range. + * + * @param domain NVTX domain handle + * @param payloadData pointer to an array of structured payloads. + * @param count number of payload BLOBs. + * + * @return The level of the range being ended. If an error occurs a negative + * value is returned on the current thread. + */ +NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload( + nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, + size_t count); + +/** + * \brief Start a thread range with attributes passed via the extended payload. + * + * @param domain NVTX domain handle + * @param payloadData pointer to an array of structured payloads. + * @param count number of payload BLOBs. + * + * @return The level of the range being ended. If an error occurs a negative + * value is returned on the current thread. + */ +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload( + nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, + size_t count); + +/** + * \brief End a thread range and pass a custom payload. + * + * NVTX event attributes passed to this function (via the payloads) overwrite + * event attributes (message and color) that have been set in the start event. + * Other payload entries extend the data of the range. + * + * @param domain NVTX domain handle + * @param id The correlation ID returned from a NVTX range start call. + * @param payloadData pointer to an array of structured payloads. + * @param count number of payload BLOBs. + */ +NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload( + nvtxDomainHandle_t domain, + nvtxRangeId_t id, + const nvtxPayloadData_t* payloadData, + size_t count); + +/** + * \brief Checks if the given NVTX domain is enabled. + * + * This function can be used to guard expensive code instrumentation. + * In general, it is recommended to avoid different execution branches based on + * NVTX instrumenation. + * + * If no tool is attached, this function will always return `0`. + * If a tool is attached, but does not handle this function, `1` is returned. + * If a tool is attached and handles this function, the return value is + * determined by the tool. Positive (>0) return values indicate that the domain + * is enabled, `0` indicates that the domain is disabled. + * + * @param domain NVTX domain handle + * @return 0 if the domain is disabled. Values > 0 indicate an enabled domain. + */ +NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled( + nvtxDomainHandle_t domain); + +#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */ + +#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 +#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 + +/** + * Get a timestamp from the NVTX handler or tool. If no tool is attached, the + * CPU TSC might be returned. No guarantees are made. + * The returned timestamp is just meant to be used in deferred events/counters. + */ +NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void); + +/** + * Register a time domain. Associates an NVTX scope with the time domain. + * Timestamps of NVTX events or counters in the scope are interpreted according + * to the time domain definitions. + * + * @param domain NVTX domain handle. + * @param timeAttr Time domain attributes (timestamp type, scope, flags, etc.). + * @return time domain ID. + */ +NVTX_DECLSPEC uint64_t NVTX_API nvtxTimeDomainRegister( + nvtxDomainHandle_t domain, + const nvtxTimeDomainAttr_t* timeAttr); + +/** + * Provide the pointer to a function that returns a timestamp. + * This enables the tool to create time synchronization points. + * + * @param domain NVTX domain handle. + * @param timeDomainId time domain identifier or timestamp type ID, if it is + * unambiguous. + * @param flags indicates if it is safe to call the timestamp provider after + * process teardown. + * @param timestampProviderFn Pointer to a function that returns a timestamp. + */ +NVTX_DECLSPEC void NVTX_API nvtxTimerSource( + nvtxDomainHandle_t domain, + uint64_t timeDomainId, + uint64_t flags, + int64_t (*timestampProviderFn)(void)); + +/** + * Same as `nvtxTimerSource`, but with an additional data pointer argument. + * + * @param domain NVTX domain handle. + * @param timeDomainId time domain identifier or timestamp type ID, if it is + * unambiguous. + * @param flags indicates if it is safe to call the timestamp provider after + * process teardown. + * @param timestampProviderFn Pointer to a function that returns a timestamp. + * @param data Pointer to data that is passed to the timestamp provider function. + */ +NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData( + nvtxDomainHandle_t domain, + uint64_t timeDomainId, + uint64_t flags, + int64_t (*timestampProviderFn)(void* data), + void* data); + +/** + * Provides a synchronization point between two time domains. + * Two synchronization points are required to enable a timestamp conversion. + * The tool must know one of the time domains or it least must be able to chain + * conversions to enable the conversion between the given timestamps. + * + * @param domain NVTX domain handle. + * @param timeDomainId1 time domain 1 ID or timestamp type ID, if it is + * unambiguous. + * @param timeDomainId2 time domain 2 ID or timestamp type ID, if it is + * unambiguous. + * @param timestamp1 Timestamp in the first time domain. + * @param timestamp2 Timestamp in the second time domain. + */ +NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint( + nvtxDomainHandle_t domain, + uint64_t timeDomainId1, + uint64_t timeDomainId2, + int64_t timestamp1, + int64_t timestamp2); + +/** + * The same as `nvtxTimeSyncPoint` but with multiple synchronization points. + * + * @param domain NVTX domain handle. + * @param timeDomainIdSrc source time domain ID or timestamp type ID, if it is + * unambiguous. + * @param timeDomainIdDst destination time domain ID or timestamp type ID, if it + * is unambiguous. + * @param syncPoints Pointer to an array of synchronization points. + * @param count Number of synchronization points. + */ +NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable( + nvtxDomainHandle_t domain, + uint64_t timeDomainIdSrc, + uint64_t timeDomainIdDst, + const nvtxSyncPoint_t* syncPoints, + size_t count); + +/** + * @brief Pass a conversion factor between two time domains to the NVTX handler. + * + * @param domain NVTX domain handle. + * @param timeDomainIdSrc source time domain ID or timestamp type ID, if it is + * unambiguous. + * @param timeDomainIdDst destination time domain ID or timestamp type ID, if it + * is unambiguous. + * @param slope Conversion factor between the two time domains. + * @param timestampSrc Timestamp in the source time domain. + * @param timestampDst Timestamp in the destination time domain. + */ +NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor( + nvtxDomainHandle_t domain, + uint64_t timeDomainIdSrc, + uint64_t timeDomainIdDst, + double slope, + int64_t timestampSrc, + int64_t timestampDst); + +/** + * @brief Submit one deferred event. + * + * @param domain NVTX domain handle. + * @param payloadData Pointer to an array of structured payloads. + * @param numPayloads Number of payloads of the event. + */ +NVTX_DECLSPEC void NVTX_API nvtxEventSubmit( + nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, + size_t numPayloads); + +/** + * \brief Submit a batch of deferred events in the given domain. + * + * @param domain NVTX domain handle. + * @param eventBatch Pointer to deferred events batch details. + */ +NVTX_DECLSPEC void NVTX_API nvtxEventBatchSubmit( + nvtxDomainHandle_t domain, + const nvtxEventBatch_t* eventBatch); + +#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */ + +/** + * \brief Callback IDs of API functions in the payload extension. + * + * The NVTX handler can use these values to register a handler function. When + * `InitializeInjectionNvtxExtension(nvtxExtModuleInfo_t* moduleInfo)` is + * executed, a handler routine can be registered as follows: + * \code{.c} + * moduleInfo->segments->slots[NVTX3EXT_CBID_nvtxPayloadSchemaRegister] = + * (intptr_t)PayloadSchemaRegisterHandlerFn; + * \endcode + */ +#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1 +#define NVTX_PAYLOAD_CALLBACK_ID_V1 + +#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0 +#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1 +#define NVTX3EXT_CBID_nvtxMarkPayload 2 +#define NVTX3EXT_CBID_nvtxRangePushPayload 3 +#define NVTX3EXT_CBID_nvtxRangePopPayload 4 +#define NVTX3EXT_CBID_nvtxRangeStartPayload 5 +#define NVTX3EXT_CBID_nvtxRangeEndPayload 6 +#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7 +#define NVTX3EXT_CBID_nvtxScopeRegister 12 + +#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */ + +#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 +#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 + +#define NVTX3EXT_CBID_nvtxTimestampGet 8 +#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9 +#define NVTX3EXT_CBID_nvtxTimerSource 10 +#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11 +#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13 +#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14 +#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15 +#define NVTX3EXT_CBID_nvtxEventSubmit 16 +#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17 + +#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */ + +/*** Helper utilities ***/ + +/** \brief Helper macro for safe double-cast of pointer to uint64_t value. */ +#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE +# ifdef __cplusplus +# define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \ + static_cast(reinterpret_cast(p)) +# else +#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p)) +# endif +#endif + +#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA +/** + * \brief Helper macro to attach a single payload to an NVTX event attribute. + * + * @param evtAttr NVTX event attribute (variable name) + * @param pldata_addr Address of `nvtxPayloadData_t` variable. + * @param schema_id NVTX binary payload schema ID. + * @param pl_addr Address of the (actual) payload. + * @param sz size of the (actual) payload. + */ +#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \ + (pldata_addr)->schemaId = schema_id; \ + (pldata_addr)->size = sz; \ + (pldata_addr)->payload = pl_addr; \ + (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \ + (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \ + (evtAttr).reserved0 = 1; +#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */ + +#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE +/** + * \brief Helper macro to attach multiple payloads to an NVTX event attribute. + * + * @param evtAttr NVTX event attribute (variable name) + * @param pldata Payload data array (of type `nvtxPayloadData_t`) + */ +#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \ + (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \ + (evtAttr).reserved0 = sizeof(pldata)/sizeof(nvtxPayloadData_t); \ + (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata); +#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */ + +#ifndef NVTX_PAYLOAD_EVTATTR_SET +/* + * Do not use this macro directly! It is a helper to attach a single payload to + * an NVTX event attribute. + * @warning The NVTX push, start or mark operation must not be in an outer scope. + */ +#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \ + nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = \ + {{schema_id, sz, pl_addr}}; \ + (evtAttr)->payload.ullValue = \ + NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \ + (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \ + (evtAttr)->reserved0 = 1; +#endif /* NVTX_PAYLOAD_EVTATTR_SET */ + +#ifndef nvtxPayloadRangePush +/** + * \brief Helper macro to push a range with extended payload. + * + * @param domain NVTX domain handle + * @param evtAttr pointer to NVTX event attribute. + * @param schemaId NVTX payload schema ID + * @param plAddr Pointer to the binary data (actual payload) + * @param size Size of the binary payload data in bytes. + */ +#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \ +do { \ + NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \ + nvtxDomainRangePushEx(domain, evtAttr); \ +} while (0) +#endif /* nvtxPayloadRangePush */ + +#ifndef nvtxPayloadMark +/** + * \brief Helper macro to set a marker with extended payload. + * + * @param domain NVTX domain handle + * @param evtAttr pointer to NVTX event attribute. + * @param schemaId NVTX payload schema ID + * @param plAddr Pointer to the binary data (actual payload) + * @param size Size of the binary payload data in bytes. + */ +#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \ +do { \ + NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \ + nvtxDomainMarkEx(domain, evtAttr); \ +} while (0) +#endif /* nvtxPayloadMark */ + +/* Macros to create versioned symbols. */ +#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 +#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \ + NAME##_v##VERSION##_bpl##COMPATID +#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \ + NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) +#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \ + NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID) +#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */ + +#ifdef __GNUC__ +#pragma GCC visibility push(internal) +#endif + +/* Extension types are required for the implementation and the NVTX handler. */ +#define NVTX_EXT_TYPES_GUARD +#include "nvtxDetail/nvtxExtTypes.h" +#undef NVTX_EXT_TYPES_GUARD + +#ifndef NVTX_NO_IMPL +#define NVTX_EXT_IMPL_PAYLOAD_GUARD +#include "nvtxDetail/nvtxExtImplPayload_v1.h" +#undef NVTX_EXT_IMPL_PAYLOAD_GUARD +#endif /* NVTX_NO_IMPL */ + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayloadHelper.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayloadHelper.h new file mode 100644 index 0000000000000000000000000000000000000000..1a73bf1a5b431dfe59127af9cdc30ee65f3c094c --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtPayloadHelper.h @@ -0,0 +1,192 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvtxDetail/nvtxExtPayloadHelperInternal.h" + + +/* This is just an empty marker (for readability), which can be omitted. */ +/* TODO: Fix issue with trailing comma at end of entry list. */ +#define NVTX_PAYLOAD_ENTRIES + + +/** + * Use this macro for payload entries that are defined by a schema (nested + * payload schema). + */ +#define NVTX_PAYLOAD_NESTED(schemaId) _NVTX_PAYLOAD_NESTED(schemaId) + + +/** + * \brief Define a payload schema for an existing C `struct` definition. + * + * This macro does + * 1) create schema description (array of schema entries). + * 2) set the schema attributes for a static data layout. + * + * It can be used in static code or within a function context. + * + * Example: + * NVTX_DEFINE_SCHEMA_FOR_STRUCT(your_struct, "SchemaName", + * NVTX_PAYLOAD_ENTRIES( + * (index, TYPE_INT, "integer value"), + * (dpfloat, TYPE_DOUBLE, "fp64 value"), + * (text, TYPE_CSTRING, "text", NULL, 24) + * ) + * ) + * + * It is required to at least provide the struct name and the payload entries. + * The first two fields (member name and NVTX entry type) of each payload entry + * are required. + * + * The optional parameters are only allowed to be passed in the predefined order. + * Hence, `payload_flags` requires `payload_schema` to be given and + * `prefix` requires `payload_flags` and `payload_schema` to be given. + * The payload entries are always the last parameter. A maximum of 16 schema + * entries is supported. + * + * It is recommended to use `NVTX_PAYLOAD_SCHEMA_REGISTER` to register the schema. + * + * @param struct_id The name of the struct. + * @param schema_name (Optional 1) name of the payload schema. Default is `NULL`. + * @param prefix (Optional 2) prefix before the schema and attributes variables, + * e.g. `static const`. Leave this empty, if no prefix is desired. + * @param schema_flags (Optional 2) flags to augment the payload schema. + * Default is `NVTX_PAYLOAD_SCHEMA_FLAG_NONE`. + * @param schema_id (Optional 4) User-defined payload schema ID. + * @param entries (Mandatory) Payload schema entries. This is always the last + * parameter to the macro. + */ +#define NVTX_DEFINE_SCHEMA_FOR_STRUCT(struct_id, ...) \ + _NVTX_DEFINE_SCHEMA_FOR_STRUCT(struct_id, __VA_ARGS__) + + +/** + * \brief Define a C struct together with a matching schema. + * + * This macro does + * 1) define the payload type (typedef struct). + * 2) create schema description (array of schema entries). + * 3) set the schema attributes for a static data layout. + * + * The macro can be used in static code or within a function context. + * + * It defines the schema attributes in `struct_id##Attr`. Thus, it is recommended + * to use `NVTX_PAYLOAD_SCHEMA_REGISTER(domain, struct_id)` to register the schema. + * + * Example: + * NVTX_DEFINE_STRUCT_WITH_SCHEMA(your_struct_name, "Your schema name", + * NVTX_PAYLOAD_ENTRIES( + * (int, index, TYPE_INT, "integer value"), + * (double, dpfloat, TYPE_DOUBLE, "fp64 value"), + * (const char, (text, 24), TYPE_CSTRING, "text", NULL, 24) + * ) + * ) + * + * The first three fields (C type, member, entry type) of each entry are required. + * A fixed-size array or string requires a special notation with the member + * name and the size separated by comma and put into brackets (see last entry + * in the example). + * + * The optional parameters are positional (only allowed to be passed in the + * predefined order). A maximum of 16 schema entries is supported. + * + * @param struct_id The name of the struct. + * @param schema_name (Optional 1) name of the payload schema. Default is `NULL`. + * @param prefix (Optional 2) prefix before the schema and attributes variables, + * e.g. `static const`. Leave this empty, if no prefix is desired. + * @param schema_flags (Optional 3) flags to augment the payload schema. + * Default is `NVTX_PAYLOAD_SCHEMA_FLAG_NONE`. + * @param schema_id (Optional 4) User-defined payload schema ID. + * @param entries (Mandatory) The schema entries. This is always the last + * parameter to the macro. + */ +#define NVTX_DEFINE_STRUCT_WITH_SCHEMA(struct_id, ...) \ + _NVTX_DEFINE_STRUCT_WITH_SCHEMA(struct_id, __VA_ARGS__) + +/** + * \brief Initialize and register the NVTX binary payload schema. + * + * This does essentially the same as `NVTX_DEFINE_STRUCT_WITH_SCHEMA`, but in + * addition the schema is registered. The schema ID will be defined as follows: + * `const uint64_t struct_id##_schemaId`. + * + * @param domain The NVTX domain handle. + * All other parameters are similar to `NVTX_DEFINE_STRUCT_WITH_SCHEMA`. + */ +#define NVTX_DEFINE_STRUCT_WITH_SCHEMA_AND_REGISTER(domain, struct_id, ...) \ + _NVTX_DEFINE_STRUCT_WITH_SCHEMA(struct_id, __VA_ARGS__) \ + const uint64_t struct_id##_schemaId = nvtxPayloadSchemaRegister(domain, &struct_id##Attr); + +/** + * \brief Define payload schema for an existing `struct` and register the schema. + * + * This does essentially the same as `NVTX_PAYLOAD_STATIC_SCHEMA_DEFINE`, but in + * addition, the schema is registered and `uint64_t struct_id##_schemaId` set. + * + * @param domain The NVTX domain handle. + * All other parameters are similar to `NVTX_PAYLOAD_STATIC_SCHEMA_DEFINE`. + */ +#define NVTX_DEFINE_SCHEMA_FOR_STRUCT_AND_REGISTER(domain, struct_id, ...) \ + _NVTX_DEFINE_SCHEMA_FOR_STRUCT(struct_id, __VA_ARGS__) \ + const uint64_t struct_id##_schemaId = nvtxPayloadSchemaRegister(domain, &struct_id##Attr); + +/** + * \brief Create a type definition for the given struct ID and members. + * + * This is a convenience macro. A normal `typedef` can be used instead. + * + * Example usage: + * NVTX_DEFINE_STRUCT(your_struct, + * (double, fp64), + * (uint8_t, u8), + * (float, fp32[3]) + * ) + * + * @param struct_id The name of the struct. + * @param members The members of the struct. + */ +#define NVTX_DEFINE_STRUCT(struct_id, ...) \ + _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, __VA_ARGS__) + +/** + * \brief Register an NVTX binary payload schema. + * + * This is a convenience macro, which takes the same `struct_id` that has been + * used in other helper macros. Instead, `nvtxPayloadSchemaRegister` can also be + * used, but `&struct_id##Attr` has to be passed. + * + * @param domain The NVTX domain handle. + * @param struct_id The name of the struct. + * + * @return NVTX schema ID + */ +#define NVTX_PAYLOAD_SCHEMA_REGISTER(domain, struct_id) \ + nvtxPayloadSchemaRegister(domain, &struct_id##Attr); + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsCounters.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsCounters.h new file mode 100644 index 0000000000000000000000000000000000000000..b3387fa2a745a387fca972eda5bc503d012317cf --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsCounters.h @@ -0,0 +1,132 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExtPayload.h" + +/** Identifier of the semantic extension for counters. */ +#ifndef NVTX_SEMANTIC_ID_COUNTERS_V1 +#define NVTX_SEMANTIC_ID_COUNTERS_V1 5 + +/* Use with the version field of `nvtxSemanticsHeader_t`. */ +#define NVTX_COUNTER_SEMANTIC_VERSION 2 + +/*** Flags to augment the counter value. ***/ +#define NVTX_COUNTER_FLAGS_NONE 0 + +/** + * Convert the fixed point value to a normalized floating point. + * Use the sign/unsign from the underlying type this flag is applied to. + * Unsigned [0f : 1f] or signed [-1f : 1f] + */ +#define NVTX_COUNTER_FLAG_NORMALIZE (1 << 1) + +/** + * Tools should apply scale and limits when graphing, ideally in a "soft" way to + * to see when limits are exceeded. + */ +#define NVTX_COUNTER_FLAG_LIMIT_MIN (1 << 2) +#define NVTX_COUNTER_FLAG_LIMIT_MAX (1 << 3) +#define NVTX_COUNTER_FLAG_LIMITS \ + (NVTX_COUNTER_FLAG_LIMIT_MIN | NVTX_COUNTER_FLAG_LIMIT_MAX) + +/** + * Counter value types + */ +#define NVTX_COUNTER_FLAG_VALUETYPE_ABSOLUTE (1 << 4) +/* Delta to previous sample, tool-defined if no previous sample is available. */ +#define NVTX_COUNTER_FLAG_VALUETYPE_DELTA (2 << 4) +#define NVTX_COUNTER_FLAG_VALUETYPE_DELTA_SINCE_START (3 << 4) + +/** + * Counter interpolation / effective range of counters. + */ +/* No interpolation between samples. */ +#define NVTX_COUNTER_FLAG_INTERPOLATION_POINT (1 << 8) +/* Piecewise constant interpolation between the current and the last sample. */ +#define NVTX_COUNTER_FLAG_INTERPOLATION_SINCE_LAST (2 << 8) +/* Piecewise constant interpolation between the current and the next sample. */ +#define NVTX_COUNTER_FLAG_INTERPOLATION_UNTIL_NEXT (3 << 8) +/* Piecewise linear interpolation between samples. */ +#define NVTX_COUNTER_FLAG_INTERPOLATION_LINEAR (4 << 8) + +/** + * Datatype for limits union (value of `limitType`). + */ +#define NVTX_COUNTER_LIMIT_UNDEFINED 0 +#define NVTX_COUNTER_LIMIT_I64 1 +#define NVTX_COUNTER_LIMIT_U64 2 +#define NVTX_COUNTER_LIMIT_F64 3 + + +/** + * Union of datatypes that can be used as counter value limits. + */ +typedef union +{ + int64_t i64; + uint64_t u64; + double f64; +} nvtxCounterLimit_t; + +/** + * \brief Specify additional properties of a counter or counter group. + */ +typedef struct nvtxSemanticsCounter_v1 +{ + /** Header of the semantic extension (with identifier, version, etc.). */ + struct nvtxSemanticsHeader_v1 header; + + /** + * Flag if normalization, scale limits, etc. should be applied to counter + * values. + */ + uint64_t flags; + + /** Unit of the counter value (case insensitive) */ + const char* unit; + + /** Should be 1 if not used. */ + uint64_t unitScaleNumerator; + + /** Should be 1 if not used. */ + uint64_t unitScaleDenominator; + + /** + * Specifies the used union member for `min` and `max`. + * Use the defines `NVTX_COUNTER_LIMIT_*`. + */ + int64_t limitType; + + /** Value limits. */ + nvtxCounterLimit_t min; + nvtxCounterLimit_t max; +} nvtxSemanticsCounter_t; + +#endif /* NVTX_SEMANTIC_ID_COUNTERS_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsScope.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsScope.h new file mode 100644 index 0000000000000000000000000000000000000000..cdaecff554c9f0820f1fc0e4de5f592c46abc5d6 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsScope.h @@ -0,0 +1,50 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExtPayload.h" + +#ifndef NVTX_SEMANTIC_ID_SCOPE_V1 +#define NVTX_SEMANTIC_ID_SCOPE_V1 1 + +/** + * \brief Specify the NVTX scope for a payload entry. + * + * This allows the scope to be set for a specific value or counter in a payload. + * The scope must be known at schema registration time. + */ +typedef struct nvtxSemanticsScope_v1 +{ + struct nvtxSemanticsHeader_v1 header; + + /** Specifies the scope of a payload entry, e.g. a counter or timestamp. */ + uint64_t scopeId; +} nvtxSemanticsScope_t; + +#endif /* NVTX_SEMANTIC_ID_SCOPE_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsTime.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsTime.h new file mode 100644 index 0000000000000000000000000000000000000000..a3265e23304dd340d390424623ab40cf0fe0701d --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSemanticsTime.h @@ -0,0 +1,49 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExtPayload.h" + +/** Identifier of the semantic extension for timestamps. */ +#ifndef NVTX_SEMANTIC_ID_TIME_V1 +#define NVTX_SEMANTIC_ID_TIME_V1 2 + +/* Use with the version field of `nvtxSemanticsHeader_t`. */ +#define NVTX_TIME_SEMANTIC_VERSION 1 + +/** Semantic extension specifying timestamp properties. */ +typedef struct nvtxSemanticsTime_v1 +{ + struct nvtxSemanticsHeader_v1 header; + + /** Time domain ID or predefined `NVTX_TIMESTAMP_TYPE_*`. */ + uint64_t timeDomainId; +} nvtxSemanticsTime_t; + +#endif /* NVTX_SEMANTIC_ID_TIME_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSync.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSync.h new file mode 100644 index 0000000000000000000000000000000000000000..f8c0a6792f5826ea3d330b0a44fb44b3571bc604 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvToolsExtSync.h @@ -0,0 +1,406 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include "nvToolsExt.h" + +#ifndef NVTOOLSEXT_SYNC_V3 +#define NVTOOLSEXT_SYNC_V3 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* \cond SHOW_HIDDEN +* \version NVTX_VERSION_2 +*/ +#define NVTX_SYNCUSER_ATTRIB_STRUCT_SIZE (NVTX_STATIC_CAST(uint16_t, sizeof(nvtxSyncUserAttributes_v0))) +/** \endcond */ + + +/** +* \page PAGE_SYNCHRONIZATION Synchronization +* +* This section covers a subset of the API that allow users to track additional +* synchronization details of their application. Naming OS synchronization primitives +* may allow users to better understand the data collected by traced synchronization +* APIs. Additionally, a user defined synchronization object can allow the users to +* to tell the tools when the user is building their own synchronization system +* that do not rely on the OS to provide behaviors and instead use techniques like +* atomic operations and spinlocks. +* +* See module \ref SYNCHRONIZATION for details. +* +* \par Example +* Instrument a mutex class: +* \code +* class MyMutex +* { +* volatile long bLocked; +* nvtxSyncUser_t hSync; +* public: +* MyMutex(const char* name, nvtxDomainHandle_t d) { +* bLocked = 0; +* +* nvtxSyncUserAttributes_t attribs = { 0 }; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_SYNCUSER_ATTRIB_STRUCT_SIZE; +* attribs.messageType = NVTX_MESSAGE_TYPE_ASCII; +* attribs.message.ascii = name; +* hSync = nvtxDomainSyncUserCreate(d, &attribs); +* } +* +* ~MyMutex() { +* nvtxDomainSyncUserDestroy(hSync); +* } +* +* bool Lock() { +* nvtxDomainSyncUserAcquireStart(hSync); +* bool acquired = __sync_bool_compare_and_swap(&bLocked, 0, 1); // atomic compiler intrinsic +* +* if (acquired) { +* nvtxDomainSyncUserAcquireSuccess(hSync); +* } +* else { +* nvtxDomainSyncUserAcquireFailed(hSync); +* } +* return acquired; +* } +* +* void Unlock() { +* nvtxDomainSyncUserReleasing(hSync); +* bLocked = false; +* } +* }; +* \endcode +* +* \version NVTX_VERSION_2 +*/ + +/* ------------------------------------------------------------------------- */ +/* \cond SHOW_HIDDEN +* \brief Used to build a non-colliding value for resource types separated class +* \version NVTX_VERSION_2 +*/ +#define NVTX_RESOURCE_CLASS_SYNC_OS 2 /**< Synchronization objects that are OS specific. */ +#define NVTX_RESOURCE_CLASS_SYNC_PTHREAD 3 /**< Synchronization objects that are from the POSIX Threads API (pthread)*/ +/** \endcond */ + + +/* ------------------------------------------------------------------------- */ +/** \defgroup SYNCHRONIZATION Synchronization +* See page \ref PAGE_SYNCHRONIZATION. +* @{ +*/ + +/** \brief Resource type values for OSs with POSIX Thread API support + */ +typedef enum nvtxResourceSyncPosixThreadType_t +{ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_MUTEX = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 1), /* pthread_mutex_t */ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_CONDITION = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 2), /* pthread_cond_t */ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_RWLOCK = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 3), /* pthread_rwlock_t */ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_BARRIER = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 4), /* pthread_barrier_t */ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_SPINLOCK = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 5), /* pthread_spinlock_t */ + NVTX_RESOURCE_TYPE_SYNC_PTHREAD_ONCE = NVTX_RESOURCE_MAKE_TYPE(SYNC_PTHREAD, 6) /* pthread_once_t */ +} nvtxResourceSyncPosixThreadType_t; + +/** \brief Resource type values for Windows OSs +*/ +typedef enum nvtxResourceSyncWindowsType_t +{ + NVTX_RESOURCE_TYPE_SYNC_WINDOWS_MUTEX = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 1), + NVTX_RESOURCE_TYPE_SYNC_WINDOWS_SEMAPHORE = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 2), + NVTX_RESOURCE_TYPE_SYNC_WINDOWS_EVENT = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 3), + NVTX_RESOURCE_TYPE_SYNC_WINDOWS_CRITICAL_SECTION = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 4), + NVTX_RESOURCE_TYPE_SYNC_WINDOWS_SRWLOCK = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 5) +} nvtxResourceSyncWindowsType_t; + +/** \brief Resource type values for Linux and Linux derived OSs such as Android +* \sa +* ::nvtxResourceSyncPosixThreadType_t +*/ +typedef enum nvtxResourceSyncLinuxType_t +{ + NVTX_RESOURCE_TYPE_SYNC_LINUX_MUTEX = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 1), + NVTX_RESOURCE_TYPE_SYNC_LINUX_FUTEX = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 2), + NVTX_RESOURCE_TYPE_SYNC_LINUX_SEMAPHORE = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 3), + NVTX_RESOURCE_TYPE_SYNC_LINUX_COMPLETION = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 4), + NVTX_RESOURCE_TYPE_SYNC_LINUX_SPINLOCK = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 5), + NVTX_RESOURCE_TYPE_SYNC_LINUX_SEQLOCK = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 6), + NVTX_RESOURCE_TYPE_SYNC_LINUX_RCU = NVTX_RESOURCE_MAKE_TYPE(SYNC_OS, 7) +} nvtxResourceSyncLinuxType_t; + +/** \brief Resource type values for Android come from Linux. +* \sa +* ::nvtxResourceSyncLinuxType_t +* ::nvtxResourceSyncPosixThreadType_t +*/ +typedef enum nvtxResourceSyncLinuxType_t nvtxResourceSyncAndroidType_t; + +/** \brief User Defined Synchronization Object Handle . +* \anchor SYNCUSER_HANDLE_STRUCTURE +* +* This structure is opaque to the user and is used as a handle to reference +* a user defined synchronization object. The tools will return a pointer through the API for the application +* to hold on its behalf to reference the string in the future. +* +*/ +typedef struct nvtxSyncUser* nvtxSyncUser_t; + +/** \brief User Defined Synchronization Object Attributes Structure. +* \anchor USERDEF_SYNC_ATTRIBUTES_STRUCTURE +* +* This structure is used to describe the attributes of a user defined synchronization +* object. The layout of the structure is defined by a specific version of the tools +* extension library and can change between different versions of the Tools Extension +* library. +* +* \par Guidelines +* The caller should always perform the following three tasks when using +* attributes: +*
    +*
  • Zero the structure +*
  • Set the version field +*
  • Set the size field +*
+* +* Zeroing the structure sets all the event attributes types and values +* to the default value. +* +* The version and size field are used by the Tools Extension +* implementation to handle multiple versions of the attributes structure. +* +* It is recommended that the caller use one of the following to methods +* to initialize the event attributes structure: +* +* \par Method 1 +* Initializing nvtxEventAttributes for future compatibility: +* \code +* nvtxSyncUserAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_SYNCUSER_ATTRIB_STRUCT_SIZE; +* \endcode +* +* \par Method 2 +* Initializing nvtxSyncUserAttributes_t for a specific version: +* \code +* nvtxSyncUserAttributes_t attribs = {0}; +* attribs.version = 1; +* attribs.size = (uint16_t)(sizeof(nvtxSyncUserAttributes_t)); +* \endcode +* +* If the caller uses Method 1 it is critical that the entire binary +* layout of the structure be configured to 0 so that all fields +* are initialized to the default value. +* +* The caller should either use both NVTX_VERSION and +* NVTX_SYNCUSER_ATTRIB_STRUCT_SIZE (Method 1) or use explicit values +* and a versioned type (Method 2). Using a mix of the two methods +* will likely cause either source level incompatibility or binary +* incompatibility in the future. +* +* \par Example +* Populate a sync attributes structure: +* \code +* // Initialize +* nvtxSyncUserAttributes_t attribs = {0}; +* attribs.version = NVTX_VERSION; +* attribs.size = NVTX_SYNCUSER_ATTRIB_STRUCT_SIZE; +* +* // Configure the Attributes +* attribs.messageType = NVTX_MESSAGE_TYPE_ASCII; +* attribs.message.ascii = "Example"; +* \endcode +* +* \sa +* ::nvtxDomainSyncUserCreate +*/ +typedef struct nvtxSyncUserAttributes_v0 +{ + /** + * \brief Version flag of the structure. + * + * Needs to be set to NVTX_VERSION to indicate the version of NVTX APIs + * supported in this header file. This can optionally be overridden to + * another version of the tools extension library. + */ + uint16_t version; + + /** + * \brief Size of the structure. + * + * Needs to be set to the size in bytes of the event attribute + * structure used to specify the event. + */ + uint16_t size; + + /** \brief Message type specified in this attribute structure. + * + * Defines the message format of the attribute structure's \ref nvtxSyncUserAttributes_v0::message + * "message" field. + * + * Default Value is NVTX_MESSAGE_UNKNOWN + */ + int32_t messageType; /* nvtxMessageType_t */ + + /** \brief Message assigned to this attribute structure. + * + * The text message that is attached to an event. + */ + nvtxMessageValue_t message; + +} nvtxSyncUserAttributes_v0; + +typedef struct nvtxSyncUserAttributes_v0 nvtxSyncUserAttributes_t; + +/* ------------------------------------------------------------------------- */ +/** \brief Create a user defined synchronization object +* This is used to track non-OS synchronization working with spinlocks and atomics +* +* \param domain - Domain to own the resource +* \param attribs - A structure to assign multiple attributes to the object. +* +* \return A handle that represents the newly created user defined synchronization object. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC nvtxSyncUser_t NVTX_API nvtxDomainSyncUserCreate(nvtxDomainHandle_t domain, const nvtxSyncUserAttributes_t* attribs); + +/* ------------------------------------------------------------------------- */ +/** \brief Destroy a user defined synchronization object +* This is used to track non-OS synchronization working with spinlocks and atomics +* +* \param handle - A handle to the object to operate on. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserDestroy(nvtxSyncUser_t handle); + +/* ------------------------------------------------------------------------- */ +/** \brief Signal to tools that an attempt to acquire a user defined synchronization object +* +* \param handle - A handle to the object to operate on. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireStart(nvtxSyncUser_t handle); + +/* ------------------------------------------------------------------------- */ +/** \brief Signal to tools of failure in acquiring a user defined synchronization object +* This should be called after \ref nvtxDomainSyncUserAcquireStart +* +* \param handle - A handle to the object to operate on. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireFailed(nvtxSyncUser_t handle); + +/* ------------------------------------------------------------------------- */ +/** \brief Signal to tools of success in acquiring a user defined synchronization object +* This should be called after \ref nvtxDomainSyncUserAcquireStart. +* +* \param handle - A handle to the object to operate on. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireSuccess(nvtxSyncUser_t handle); + +/* ------------------------------------------------------------------------- */ +/** \brief Signal to tools of releasing a reservation on user defined synchronization object +* This should be called after \ref nvtxDomainSyncUserAcquireSuccess. +* +* \param handle - A handle to the object to operate on. +* +* \sa +* ::nvtxDomainSyncUserCreate +* ::nvtxDomainSyncUserDestroy +* ::nvtxDomainSyncUserAcquireStart +* ::nvtxDomainSyncUserAcquireFailed +* ::nvtxDomainSyncUserAcquireSuccess +* ::nvtxDomainSyncUserReleasing +* +* \version NVTX_VERSION_2 +*/ +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserReleasing(nvtxSyncUser_t handle); + + +/** @} */ /*END defgroup*/ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifndef NVTX_NO_IMPL +#define NVTX_IMPL_GUARD_SYNC /* Ensure other headers cannot be included directly */ +#include "nvtxDetail/nvtxImplSync_v3.h" +#undef NVTX_IMPL_GUARD_SYNC +#endif /*NVTX_NO_IMPL*/ + +#endif /* NVTOOLSEXT_SYNC_V3 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtx3.hpp b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtx3.hpp new file mode 100644 index 0000000000000000000000000000000000000000..33a9f3d26fdff53b006063bc7cb4edab7064b88b --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtx3.hpp @@ -0,0 +1,2941 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2020-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +/* Temporary helper #defines, #undef'ed at end of header */ +#define NVTX3_CPP_VERSION_MAJOR 1 +#define NVTX3_CPP_VERSION_MINOR 0 + +/* This section handles the decision of whether to provide unversioned symbols. + * If NVTX3_CPP_REQUIRE_EXPLICIT_VERSION is #defined, unversioned symbols are + * not provided, and explicit-version symbols such as nvtx3::v1::scoped_range + * and NVTX3_V1_FUNC_RANGE must be used. By default, the first #include of this + * header will define the unversioned symbols such as nvtx3::scoped_range and + * NVTX3_FUNC_RANGE. Subsequently including a different major version of this + * header without #defining NVTX3_CPP_REQUIRE_EXPLICIT_VERSION triggers an error + * since the symbols would conflict. Subsequently including of a different + * minor version within the same major version is allowed. Functionality of + * minor versions is cumulative, regardless of include order. + * + * Since NVTX3_CPP_REQUIRE_EXPLICIT_VERSION allows all combinations of versions + * to coexist without problems within a translation unit, the recommended best + * practice for instrumenting header-based libraries with NVTX C++ Wrappers is + * is to #define NVTX3_CPP_REQUIRE_EXPLICIT_VERSION before including nvtx3.hpp, + * #undef it afterward, and only use explicit-version symbols. This is not + * necessary in common cases, such as instrumenting a standalone application, or + * static/shared libraries in .cpp files or headers private to those projects. + */ +/* clang-format off */ +#if !defined(NVTX3_CPP_REQUIRE_EXPLICIT_VERSION) + /* Define macro used by all definitions in this header to indicate the + * unversioned symbols should be defined in addition to the versioned ones. + */ + #define NVTX3_INLINE_THIS_VERSION + + #if !defined(NVTX3_CPP_INLINED_VERSION_MAJOR) + /* First occurrence of this header in the translation unit. Define macros + * indicating which version shall be used for unversioned symbols. + */ + + /** + * @brief Semantic major version number for NVTX C++ wrappers of unversioned symbols + * + * Breaking changes may occur between major versions, and different major versions + * cannot provide unversioned symbols in the same translation unit (.cpp file). + * + * Note: If NVTX3_CPP_REQUIRE_EXPLICIT_VERSION is defined, this macro is not defined. + * + * Not to be confused with the version number of the NVTX core library. + */ + #define NVTX3_CPP_INLINED_VERSION_MAJOR 1 // NVTX3_CPP_VERSION_MAJOR + + /** + * @brief Semantic minor version number for NVTX C++ wrappers of unversioned symbols + * + * No breaking changes occur between minor versions -- minor version changes within + * a major version are purely additive. + * + * Note: If NVTX3_CPP_REQUIRE_EXPLICIT_VERSION is defined, this macro is not defined. + * + * Not to be confused with the version number of the NVTX core library. + */ + #define NVTX3_CPP_INLINED_VERSION_MINOR 0 // NVTX3_CPP_VERSION_MINOR + #elif NVTX3_CPP_INLINED_VERSION_MAJOR != NVTX3_CPP_VERSION_MAJOR + /* Unsupported case -- cannot define unversioned symbols for different major versions + * in the same translation unit. + */ + #error \ + "Two different major versions of the NVTX C++ Wrappers are being included in a single .cpp file, with unversioned symbols enabled in both. Only one major version can enable unversioned symbols in a .cpp file. To disable unversioned symbols, #define NVTX3_CPP_REQUIRE_EXPLICIT_VERSION before #including nvtx3.hpp, and use the explicit-version symbols instead -- this is the preferred way to use nvtx3.hpp from a header file." + #elif (NVTX3_CPP_INLINED_VERSION_MAJOR == NVTX3_CPP_VERSION_MAJOR) && \ + (NVTX3_CPP_INLINED_VERSION_MINOR < NVTX3_CPP_VERSION_MINOR) + /* An older minor version of the same major version already defined unversioned + * symbols. The new features provided in this header will be inlined + * redefine the minor version macro to this header's version. + */ + #undef NVTX3_CPP_INLINED_VERSION_MINOR + #define NVTX3_CPP_INLINED_VERSION_MINOR 0 // NVTX3_CPP_VERSION_MINOR + // else, already have this version or newer, nothing to do + #endif +#endif +/* clang-format on */ + +/** + * @file nvtx3.hpp + * + * @brief Provides C++ constructs making the NVTX library safer and easier to + * use with zero overhead. + */ + +/** + * \mainpage + * \tableofcontents + * + * \section QUICK_START Quick Start + * + * To add NVTX ranges to your code, use the `nvtx3::scoped_range` RAII object. A + * range begins when the object is created, and ends when the object is + * destroyed. + * + * \code{.cpp} + * #include "nvtx3/nvtx3.hpp" + * void some_function() { + * // Begins a NVTX range with the message "some_function" + * // The range ends when some_function() returns and `r` is destroyed + * nvtx3::scoped_range r{"some_function"}; + * + * for(int i = 0; i < 5; ++i) { + * nvtx3::scoped_range loop{"loop range"}; + * std::this_thread::sleep_for(std::chrono::seconds{1}); + * } + * } // Range ends when `r` is destroyed + * \endcode + * + * The example code above generates the following timeline view in Nsight + * Systems: + * + * \image html + * https://raw.githubusercontent.com/NVIDIA/NVTX/release-v3/docs/images/example_range.png + * + * Alternatively, use the \ref MACROS like `NVTX3_FUNC_RANGE()` to add + * ranges to your code that automatically use the name of the enclosing function + * as the range's message. + * + * \code{.cpp} + * #include "nvtx3/nvtx3.hpp" + * void some_function() { + * // Creates a range with a message "some_function" that ends when the + * // enclosing function returns + * NVTX3_FUNC_RANGE(); + * ... + * } + * \endcode + * + * + * \section Overview + * + * The NVTX library provides a set of functions for users to annotate their code + * to aid in performance profiling and optimization. These annotations provide + * information to tools like Nsight Systems to improve visualization of + * application timelines. + * + * \ref RANGES are one of the most commonly used NVTX constructs for annotating + * a span of time. For example, imagine a user wanted to see every time a + * function, `my_function`, is called and how long it takes to execute. This can + * be accomplished with an NVTX range created on the entry to the function and + * terminated on return from `my_function` using the push/pop C APIs: + * + * \code{.cpp} + * void my_function(...) { + * nvtxRangePushA("my_function"); // Begins NVTX range + * // do work + * nvtxRangePop(); // Ends NVTX range + * } + * \endcode + * + * One of the challenges with using the NVTX C API is that it requires manually + * terminating the end of the range with `nvtxRangePop`. This can be challenging + * if `my_function()` has multiple returns or can throw exceptions as it + * requires calling `nvtxRangePop()` before all possible return points. + * + * NVTX C++ solves this inconvenience through the "RAII" technique by providing + * a `nvtx3::scoped_range` class that begins a range at construction and ends + * the range on destruction. The above example then becomes: + * + * \code{.cpp} + * void my_function(...) { + * nvtx3::scoped_range r{"my_function"}; // Begins NVTX range + * // do work + * } // Range ends on exit from `my_function` when `r` is destroyed + * \endcode + * + * The range object `r` is deterministically destroyed whenever `my_function` + * returns---ending the NVTX range without manual intervention. For more + * information, see \ref RANGES and `nvtx3::scoped_range_in`. + * + * Another inconvenience of the NVTX C APIs are the several constructs where the + * user is expected to initialize an object at the beginning of an application + * and reuse that object throughout the lifetime of the application. For example + * see domains, categories, and registered messages. + * + * Example: + * \code{.cpp} + * nvtxDomainHandle_t D = nvtxDomainCreateA("my domain"); + * // Reuse `D` throughout the rest of the application + * \endcode + * + * This can be problematic if the user application or library does not have an + * explicit initialization function called before all other functions to + * ensure that these long-lived objects are initialized before being used. + * + * NVTX C++ makes use of the "construct on first use" technique to alleviate + * this inconvenience. In short, a function local static object is constructed + * upon the first invocation of a function and returns a reference to that + * object on all future invocations. See the documentation for `nvtx3::domain`, + * `nvtx3::named_category`, `nvtx3::registered_string`, and + * https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use for more + * information. + * + * Using construct on first use, the above example becomes: + * \code{.cpp} + * struct my_domain{ static constexpr char const* name{"my domain"}; }; + * + * // The first invocation of `domain::get` for the type `my_domain` will + * // construct a `nvtx3::domain` object and return a reference to it. Future + * // invocations simply return a reference. + * nvtx3::domain const& D = nvtx3::domain::get(); + * \endcode + * For more information about NVTX and how it can be used, see + * https://docs.nvidia.com/cuda/profiler-users-guide/index.html#nvtx and + * https://devblogs.nvidia.com/cuda-pro-tip-generate-custom-application-profile-timelines-nvtx/ + * for more information. + * + * \section RANGES Ranges + * + * Ranges are used to describe a span of time during the execution of an + * application. Common examples are using ranges to annotate the time it takes + * to execute a function or an iteration of a loop. + * + * NVTX C++ uses RAII to automate the generation of ranges that are tied to the + * lifetime of objects. Similar to `std::lock_guard` in the C++ Standard + * Template Library. + * + * \subsection scoped_range Scoped Range + * + * `nvtx3::scoped_range_in` is a class that begins a range upon construction + * and ends the range at destruction. This is one of the most commonly used + * constructs in NVTX C++ and is useful for annotating spans of time on a + * particular thread. These ranges can be nested to arbitrary depths. + * + * `nvtx3::scoped_range` is an alias for a `nvtx3::scoped_range_in` in the + * global NVTX domain. For more information about Domains, see \ref DOMAINS. + * + * Various attributes of a range can be configured constructing a + * `nvtx3::scoped_range_in` with a `nvtx3::event_attributes` object. For + * more information, see \ref ATTRIBUTES. + * + * Example: + * + * \code{.cpp} + * void some_function() { + * // Creates a range for the duration of `some_function` + * nvtx3::scoped_range r{}; + * + * while(true) { + * // Creates a range for every loop iteration + * // `loop_range` is nested inside `r` + * nvtx3::scoped_range loop_range{}; + * } + * } + * \endcode + * + * \subsection unique_range Unique Range + * + * `nvtx3::unique_range` is similar to `nvtx3::scoped_range`, with a few key differences: + * - `unique_range` objects can be destroyed in any order whereas `scoped_range` objects must be + * destroyed in exact reverse creation order + * - `unique_range` can start and end on different threads + * - `unique_range` is movable + * - `unique_range` objects can be constructed as heap objects + * + * There is extra overhead associated with `unique_range` constructs and therefore use of + * `nvtx3::scoped_range_in` should be preferred. + * + * \section MARKS Marks + * + * `nvtx3::mark` annotates an instantaneous point in time with a "marker". + * + * Unlike a "range" which has a beginning and an end, a marker is a single event + * in an application, such as detecting a problem: + * + * \code{.cpp} + * bool success = do_operation(...); + * if (!success) { + * nvtx3::mark("operation failed!"); + * } + * \endcode + * + * \section DOMAINS Domains + * + * Similar to C++ namespaces, domains allow for scoping NVTX events. By default, + * all NVTX events belong to the "global" domain. Libraries and applications + * should scope their events to use a custom domain to differentiate where the + * events originate from. + * + * It is common for a library or application to have only a single domain and + * for the name of that domain to be known at compile time. Therefore, Domains + * in NVTX C++ are represented by _tag types_. + * + * For example, to define a custom domain, simply define a new concrete type + * (a `class` or `struct`) with a `static` member called `name` that contains + * the desired name of the domain. + * + * \code{.cpp} + * struct my_domain{ static constexpr char const* name{"my domain"}; }; + * \endcode + * + * For any NVTX C++ construct that can be scoped to a domain, the type + * `my_domain` can be passed as an explicit template argument to scope it to + * the custom domain. + * + * The tag type `nvtx3::domain::global` represents the global NVTX domain. + * + * \code{.cpp} + * // By default, `scoped_range_in` belongs to the global domain + * nvtx3::scoped_range_in<> r0{}; + * + * // Alias for a `scoped_range_in` in the global domain + * nvtx3::scoped_range r1{}; + * + * // `r` belongs to the custom domain + * nvtx3::scoped_range_in r{}; + * \endcode + * + * When using a custom domain, it is recommended to define type aliases for NVTX + * constructs in the custom domain. + * \code{.cpp} + * using my_scoped_range = nvtx3::scoped_range_in; + * using my_registered_string = nvtx3::registered_string_in; + * using my_named_category = nvtx3::named_category_in; + * \endcode + * + * See `nvtx3::domain` for more information. + * + * \section ATTRIBUTES Event Attributes + * + * NVTX events can be customized with various attributes to provide additional + * information (such as a custom message) or to control visualization of the + * event (such as the color used). These attributes can be specified per-event + * via arguments to a `nvtx3::event_attributes` object. + * + * NVTX events can be customized via four "attributes": + * - \ref COLOR : color used to visualize the event in tools. + * - \ref MESSAGES : Custom message string. + * - \ref PAYLOAD : User-defined numerical value. + * - \ref CATEGORY : Intra-domain grouping. + * + * It is possible to construct a `nvtx3::event_attributes` from any number of + * attribute objects (nvtx3::color, nvtx3::message, nvtx3::payload, + * nvtx3::category) in any order. If an attribute is not specified, a tool + * specific default value is used. See `nvtx3::event_attributes` for more + * information. + * + * \code{.cpp} + * // Set message, same as passing nvtx3::message{"message"} + * nvtx3::event_attributes attr{"message"}; + * + * // Set message and color + * nvtx3::event_attributes attr{"message", nvtx3::rgb{127, 255, 0}}; + * + * // Set message, color, payload, category + * nvtx3::event_attributes attr{"message", + * nvtx3::rgb{127, 255, 0}, + * nvtx3::payload{42}, + * nvtx3::category{1}}; + * + * // Same as above -- can use any order of arguments + * nvtx3::event_attributes attr{nvtx3::payload{42}, + * nvtx3::category{1}, + * "message", + * nvtx3::rgb{127, 255, 0}}; + * + * // Multiple arguments of the same type are allowed, but only the first is + * // used -- in this example, payload is set to 42: + * nvtx3::event_attributes attr{ nvtx3::payload{42}, nvtx3::payload{7} }; + * + * // Using the nvtx3 namespace in a local scope makes the syntax more succinct: + * using namespace nvtx3; + * event_attributes attr{"message", rgb{127, 255, 0}, payload{42}, category{1}}; + * \endcode + * + * \subsection MESSAGES message + * + * `nvtx3::message` sets the message string for an NVTX event. + * + * Example: + * \code{.cpp} + * // Create an `event_attributes` with the message "my message" + * nvtx3::event_attributes attr{nvtx3::message{"my message"}}; + * + * // strings and string literals implicitly assumed to be a `nvtx3::message` + * nvtx3::event_attributes attr{"my message"}; + * \endcode + * + * \subsubsection REGISTERED_MESSAGE Registered Messages + * + * Associating a `nvtx3::message` with an event requires copying the contents of + * the message every time the message is used, i.e., copying the entire message + * string. This may cause non-trivial overhead in performance sensitive code. + * + * To eliminate this overhead, NVTX allows registering a message string, + * yielding a "handle" that is inexpensive to copy that may be used in place of + * a message string. When visualizing the events, tools such as Nsight Systems + * will take care of mapping the message handle to its string. + * + * A message should be registered once and the handle reused throughout the rest + * of the application. This can be done by either explicitly creating static + * `nvtx3::registered_string` objects, or using the + * `nvtx3::registered_string::get` construct on first use helper (recommended). + * + * Similar to \ref DOMAINS, `nvtx3::registered_string::get` requires defining a + * custom tag type with a static `message` member whose value will be the + * contents of the registered string. + * + * Example: + * \code{.cpp} + * // Explicitly constructed, static `registered_string` in my_domain: + * static registered_string_in static_message{"my message"}; + * + * // Or use construct on first use: + * // Define a tag type with a `message` member string to register + * struct my_message{ static constexpr char const* message{ "my message" }; }; + * + * // Uses construct on first use to register the contents of + * // `my_message::message` + * auto& msg = nvtx3::registered_string_in::get(); + * \endcode + * + * \subsection COLOR color + * + * Associating a `nvtx3::color` with an event allows controlling how the event + * is visualized in a tool such as Nsight Systems. This is a convenient way to + * visually differentiate among different events. + * + * \code{.cpp} + * // Define a color via rgb color values + * nvtx3::color c{nvtx3::rgb{127, 255, 0}}; + * nvtx3::event_attributes attr{c}; + * + * // rgb color values can be passed directly to an `event_attributes` + * nvtx3::event_attributes attr1{nvtx3::rgb{127,255,0}}; + * \endcode + * + * \subsection CATEGORY category + * + * A `nvtx3::category` is simply an integer id that allows for fine-grain + * grouping of NVTX events. For example, one might use separate categories for + * IO, memory allocation, compute, etc. + * + * \code{.cpp} + * nvtx3::event_attributes{nvtx3::category{1}}; + * \endcode + * + * \subsubsection NAMED_CATEGORIES Named Categories + * + * Associates a `name` string with a category `id` to help differentiate among + * categories. + * + * For any given category id `Id`, a `named_category{Id, "name"}` should only + * be constructed once and reused throughout an application. This can be done by + * either explicitly creating static `nvtx3::named_category` objects, or using + * the `nvtx3::named_category::get` construct on first use helper (recommended). + * + * Similar to \ref DOMAINS, `nvtx3::named_category::get` requires defining a + * custom tag type with static `name` and `id` members. + * + * \code{.cpp} + * // Explicitly constructed, static `named_category` in my_domain: + * static nvtx3::named_category_in static_category{42, "my category"}; + * + * // Or use construct on first use: + * // Define a tag type with `name` and `id` members + * struct my_category { + * static constexpr char const* name{"my category"}; // category name + * static constexpr uint32_t id{42}; // category id + * }; + * + * // Use construct on first use to name the category id `42` + * // with name "my category": + * auto& cat = named_category_in::get(); + * + * // Range `r` associated with category id `42` + * nvtx3::event_attributes attr{cat}; + * \endcode + * + * \subsection PAYLOAD payload + * + * Allows associating a user-defined numerical value with an event. + * + * \code{.cpp} + * // Constructs a payload from the `int32_t` value 42 + * nvtx3:: event_attributes attr{nvtx3::payload{42}}; + * \endcode + * + * + * \section EXAMPLE Example + * + * Putting it all together: + * \code{.cpp} + * // Define a custom domain tag type + * struct my_domain{ static constexpr char const* name{"my domain"}; }; + * + * // Define a named category tag type + * struct my_category{ + * static constexpr char const* name{"my category"}; + * static constexpr uint32_t id{42}; + * }; + * + * // Define a registered string tag type + * struct my_message{ static constexpr char const* message{"my message"}; }; + * + * // For convenience, use aliases for domain scoped objects + * using my_scoped_range = nvtx3::scoped_range_in; + * using my_registered_string = nvtx3::registered_string_in; + * using my_named_category = nvtx3::named_category_in; + * + * // Default values for all attributes + * nvtx3::event_attributes attr{}; + * my_scoped_range r0{attr}; + * + * // Custom (unregistered) message, and unnamed category + * nvtx3::event_attributes attr1{"message", nvtx3::category{2}}; + * my_scoped_range r1{attr1}; + * + * // Alternatively, pass arguments of `event_attributes` constructor directly + * // to `my_scoped_range` + * my_scoped_range r2{"message", nvtx3::category{2}}; + * + * // construct on first use a registered string + * auto& msg = my_registered_string::get(); + * + * // construct on first use a named category + * auto& cat = my_named_category::get(); + * + * // Use registered string and named category with a custom payload + * my_scoped_range r3{msg, cat, nvtx3::payload{42}}; + * + * // Any number of arguments in any order + * my_scoped_range r{nvtx3::rgb{127, 255, 0}, msg}; + * + * \endcode + * \section MACROS Convenience Macros + * + * Oftentimes users want to quickly and easily add NVTX ranges to their library + * or application to aid in profiling and optimization. + * + * A convenient way to do this is to use the \ref NVTX3_FUNC_RANGE and + * \ref NVTX3_FUNC_RANGE_IN macros. These macros take care of constructing an + * `nvtx3::scoped_range_in` with the name of the enclosing function as the + * range's message. + * + * \code{.cpp} + * void some_function() { + * // Automatically generates an NVTX range for the duration of the function + * // using "some_function" as the event's message. + * NVTX3_FUNC_RANGE(); + * } + * \endcode + * + */ + +/* Temporary helper #defines, removed with #undef at end of header */ + +/* Some compilers do not correctly support SFINAE, which is used in this API + * to detect common usage errors and provide clearer error messages (by using + * static_assert) than the compiler would produce otherwise. These compilers + * will generate errors while compiling this file such as: + * + * error: 'name' is not a member of 'nvtx3::v1::domain::global' + * + * The following compiler versions are known to have this problem, and so are + * set by default to disable the SFINAE-based checks: + * + * - All MSVC versions prior to VS2017 Update 7 (15.7) + * - GCC 8.1-8.3 (the problem was fixed in GCC 8.4) + * + * If you find your compiler hits this problem, you can work around it by + * defining NVTX3_USE_CHECKED_OVERLOADS_FOR_GET to 0 before including this + * header, or you can add a check for your compiler version to this #if. + * Also, please report the issue on the NVTX GitHub page. + */ +#if !defined(NVTX3_USE_CHECKED_OVERLOADS_FOR_GET) +#if defined(_MSC_VER) && _MSC_VER < 1914 \ + || defined(__GNUC__) && __GNUC__ == 8 && __GNUC_MINOR__ < 4 +#define NVTX3_USE_CHECKED_OVERLOADS_FOR_GET 0 +#else +#define NVTX3_USE_CHECKED_OVERLOADS_FOR_GET 1 +#endif +#define NVTX3_USE_CHECKED_OVERLOADS_FOR_GET_DEFINED_HERE +#endif + +/* Within this header, nvtx3::NVTX3_VERSION_NAMESPACE resolves to nvtx3::vX, + * where "X" is the major version number. */ +#define NVTX3_CONCAT(A, B) A##B +#define NVTX3_NAMESPACE_FOR(VERSION) NVTX3_CONCAT(v, VERSION) +#define NVTX3_VERSION_NAMESPACE NVTX3_NAMESPACE_FOR(NVTX3_CPP_VERSION_MAJOR) + +/* Avoid duplicating #if defined(NVTX3_INLINE_THIS_VERSION) for namespaces + * in each minor version by making a macro to use unconditionally, which + * resolves to "inline" or nothing as appropriate. */ +#if defined(NVTX3_INLINE_THIS_VERSION) +#define NVTX3_INLINE_IF_REQUESTED inline +#else +#define NVTX3_INLINE_IF_REQUESTED +#endif + +/* Enables the use of constexpr when support for C++14 constexpr is present. + * + * Initialization of a class member that is a union to a specific union member + * can only be done in the body of a constructor, not in a member initializer + * list. A constexpr constructor must have an empty body until C++14, so there + * is no way to make an initializer of a member union constexpr in C++11. This + * macro allows making functions constexpr in C++14 or newer, but non-constexpr + * in C++11 compilation. It is used here on constructors that initialize their + * member unions. + */ +#if __cpp_constexpr >= 201304L +#define NVTX3_CONSTEXPR_IF_CPP14 constexpr +#else +#define NVTX3_CONSTEXPR_IF_CPP14 +#endif + +// Macro wrappers for C++ attributes +#if !defined(__has_cpp_attribute) +#define __has_cpp_attribute(x) 0 +#endif +#if __has_cpp_attribute(maybe_unused) +#define NVTX3_MAYBE_UNUSED [[maybe_unused]] +#else +#define NVTX3_MAYBE_UNUSED +#endif +#if __has_cpp_attribute(nodiscard) +#define NVTX3_NO_DISCARD [[nodiscard]] +#else +#define NVTX3_NO_DISCARD +#endif + + /* Use a macro for static asserts, which defaults to static_assert, but that + * testing tools can replace with a logging function. For example: + * #define NVTX3_STATIC_ASSERT(c, m) \ + * do { if (!(c)) printf("static_assert would fail: %s\n", m); } while (0) + */ +#if !defined(NVTX3_STATIC_ASSERT) +#define NVTX3_STATIC_ASSERT(condition, message) static_assert(condition, message) +#define NVTX3_STATIC_ASSERT_DEFINED_HERE +#endif + +/* Implementation sections, enclosed in guard macros for each minor version */ + +#ifndef NVTX3_CPP_DEFINITIONS_V1_0 +#define NVTX3_CPP_DEFINITIONS_V1_0 + +#include "nvToolsExt.h" + +#include +#include +#include +#include +#include + +namespace nvtx3 { + +NVTX3_INLINE_IF_REQUESTED namespace NVTX3_VERSION_NAMESPACE +{ + +namespace detail { + +template +struct always_false : std::false_type {}; + +template +struct has_name : std::false_type {}; +template +struct has_name : std::true_type {}; + +template +struct has_id : std::false_type {}; +template +struct has_id : std::true_type {}; + +template +struct has_message : std::false_type {}; +template +struct has_message : std::true_type {}; + +template +struct is_c_string : std::false_type {}; +template +struct is_c_string::value || + std::is_convertible::value +>::type> : std::true_type {}; + +template +using is_uint32 = std::is_same::type, uint32_t>; + +template +static inline void silence_unused(Args const&...) noexcept {} + +} // namespace detail + +/** + * @brief `domain`s allow for grouping NVTX events into a single scope to + * differentiate them from events in other `domain`s. + * + * By default, all NVTX constructs are placed in the "global" NVTX domain. + * + * A custom `domain` may be used in order to differentiate a library's or + * application's NVTX events from other events. + * + * `domain`s are expected to be long-lived and unique to a library or + * application. As such, it is assumed a domain's name is known at compile + * time. Therefore, all NVTX constructs that can be associated with a domain + * require the domain to be specified via a *type* `D` passed as an + * explicit template parameter. + * + * The type `domain::global` may be used to indicate that the global NVTX + * domain should be used. + * + * None of the C++ NVTX constructs require the user to manually construct a + * `domain` object. Instead, if a custom domain is desired, the user is + * expected to define a type `D` that contains a member + * `D::name` which resolves to either a `char const*` or `wchar_t + * const*`. The value of `D::name` is used to name and uniquely + * identify the custom domain. + * + * Upon the first use of an NVTX construct associated with the type + * `D`, the "construct on first use" pattern is used to construct a + * function local static `domain` object. All future NVTX constructs + * associated with `D` will use a reference to the previously + * constructed `domain` object. See `domain::get`. + * + * Example: + * \code{.cpp} + * // The type `my_domain` defines a `name` member used to name and identify + * // the `domain` object identified by `my_domain`. + * struct my_domain{ static constexpr char const* name{"my_domain"}; }; + * + * // The NVTX range `r` will be grouped with all other NVTX constructs + * // associated with `my_domain`. + * nvtx3::scoped_range_in r{}; + * + * // An alias can be created for a `scoped_range_in` in the custom domain + * using my_scoped_range = nvtx3::scoped_range_in; + * my_scoped_range my_range{}; + * + * // `domain::global` indicates that the global NVTX domain is used + * nvtx3::scoped_range_in r2{}; + * + * // For convenience, `nvtx3::scoped_range` is an alias for a range in the + * // global domain + * nvtx3::scoped_range r3{}; + * \endcode + */ +class domain { + public: + domain(domain const&) = delete; + domain& operator=(domain const&) = delete; + domain(domain&&) = delete; + domain& operator=(domain&&) = delete; + + /** + * @brief Tag type for the "global" NVTX domain. + * + * This type may be passed as a template argument to any function/class + * expecting a type to identify a domain to indicate that the global domain + * should be used. + * + * All NVTX events in the global domain across all libraries and + * applications will be grouped together. + * + */ + struct global { + }; + +#if NVTX3_USE_CHECKED_OVERLOADS_FOR_GET + /** + * @brief Returns reference to an instance of a function local static + * `domain` object. + * + * Uses the "construct on first use" idiom to safely ensure the `domain` + * object is initialized exactly once upon first invocation of + * `domain::get()`. All following invocations will return a + * reference to the previously constructed `domain` object. See + * https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use + * + * None of the constructs in this header require the user to directly invoke + * `domain::get`. It is automatically invoked when constructing objects like + * a `scoped_range_in` or `category`. Advanced users may wish to use + * `domain::get` for the convenience of the "construct on first use" idiom + * when using domains with their own use of the NVTX C API. + * + * This function is thread-safe as of C++11. If two or more threads call + * `domain::get` concurrently, exactly one of them is guaranteed + * to construct the `domain` object and the other(s) will receive a + * reference to the object after it is fully constructed. + * + * The domain's name is specified via the type `D` pass as an + * explicit template parameter. `D` is required to contain a + * member `D::name` that resolves to either a `char const*` or + * `wchar_t const*`. The value of `D::name` is used to name and + * uniquely identify the `domain`. + * + * Example: + * \code{.cpp} + * // The type `my_domain` defines a `name` member used to name and identify + * // the `domain` object identified by `my_domain`. + * struct my_domain{ static constexpr char const* name{"my domain"}; }; + * + * auto& D1 = domain::get(); // First invocation constructs a + * // `domain` with the name "my domain" + * + * auto& D2 = domain::get(); // Quickly returns reference to + * // previously constructed `domain`. + * \endcode + * + * @tparam D Type that contains a `D::name` member used to + * name the `domain` object. + * @return Reference to the `domain` corresponding to the type `D`. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static domain const& get() noexcept + { + static domain const d(D::name); + return d; + } + + /** + * @brief Overload of `domain::get` to provide a clear compile error when + * `D` has a `name` member that is not directly convertible to either + * `char const*` or `wchar_t const*`. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static domain const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::always_false::value, + "Type used to identify an NVTX domain must contain a static constexpr member " + "called 'name' of type const char* or const wchar_t* -- 'name' member is not " + "convertible to either of those types"); + static domain const unused; + return unused; // Function must compile for static_assert to be triggered + } + + /** + * @brief Overload of `domain::get` to provide a clear compile error when + * `D` does not have a `name` member. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static domain const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::always_false::value, + "Type used to identify an NVTX domain must contain a static constexpr member " + "called 'name' of type const char* or const wchar_t* -- 'name' member is missing"); + static domain const unused; + return unused; // Function must compile for static_assert to be triggered + } +#else + template + NVTX3_NO_DISCARD static domain const& get() noexcept + { + static domain const d(D::name); + return d; + } +#endif + + /** + * @brief Conversion operator to `nvtxDomainHandle_t`. + * + * Allows transparently passing a domain object into an API expecting a + * native `nvtxDomainHandle_t` object. + */ + operator nvtxDomainHandle_t() const noexcept { return _domain; } + + private: + /** + * @brief Construct a new domain with the specified `name`. + * + * This constructor is private as it is intended that `domain` objects only + * be created through the `domain::get` function. + * + * @param name A unique name identifying the domain + */ + explicit domain(char const* name) noexcept : _domain{nvtxDomainCreateA(name)} {} + + /** + * @brief Construct a new domain with the specified `name`. + * + * This constructor is private as it is intended that `domain` objects only + * be created through the `domain::get` function. + * + * @param name A unique name identifying the domain + */ + explicit domain(wchar_t const* name) noexcept : _domain{nvtxDomainCreateW(name)} {} + + /** + * @brief Construct a new domain with the specified `name`. + * + * This constructor is private as it is intended that `domain` objects only + * be created through the `domain::get` function. + * + * @param name A unique name identifying the domain + */ + explicit domain(std::string const& name) noexcept : domain{name.c_str()} {} + + /** + * @brief Construct a new domain with the specified `name`. + * + * This constructor is private as it is intended that `domain` objects only + * be created through the `domain::get` function. + * + * @param name A unique name identifying the domain + */ + explicit domain(std::wstring const& name) noexcept : domain{name.c_str()} {} + + /** + * @brief Default constructor creates a `domain` representing the + * "global" NVTX domain. + * + * All events not associated with a custom `domain` are grouped in the + * "global" NVTX domain. + * + */ + constexpr domain() noexcept {} + + /** + * @brief Intentionally avoid calling nvtxDomainDestroy on the `domain` object. + * + * No currently-available tools attempt to free domain resources when the + * nvtxDomainDestroy function is called, due to the thread-safety and + * efficiency challenges of freeing thread-local storage for other threads. + * Since libraries may be disallowed from introducing static destructors, + * and destroying the domain is likely to have no effect, the destructor + * for `domain` intentionally chooses to not destroy the domain. + * + * In a situation where domain destruction is necessary, either manually + * call nvtxDomainDestroy on the domain's handle, or make a class that + * derives from `domain` and calls nvtxDomainDestroy in its destructor. + */ + ~domain() = default; + + private: + nvtxDomainHandle_t const _domain{}; ///< The `domain`s NVTX handle +}; + +/** + * @brief Returns reference to the `domain` object that represents the global + * NVTX domain. + * + * This specialization for `domain::global` returns a default constructed, + * `domain` object for use when the "global" domain is desired. + * + * All NVTX events in the global domain across all libraries and applications + * will be grouped together. + * + * @return Reference to the `domain` corresponding to the global NVTX domain. + * + */ +template <> +NVTX3_NO_DISCARD inline domain const& domain::get() noexcept +{ + static domain const d{}; + return d; +} + +/** + * @brief Indicates the values of the red, green, and blue color channels for + * an RGB color to use as an event attribute (assumes no transparency). + * + */ +struct rgb { + /// Type used for component values + using component_type = uint8_t; + + /** + * @brief Construct a rgb with red, green, and blue channels + * specified by `red_`, `green_`, and `blue_`, respectively. + * + * Valid values are in the range `[0,255]`. + * + * @param red_ Value of the red channel + * @param green_ Value of the green channel + * @param blue_ Value of the blue channel + */ + constexpr rgb( + component_type red_, + component_type green_, + component_type blue_) noexcept + : red{red_}, green{green_}, blue{blue_} + { + } + + component_type red{}; ///< Red channel value + component_type green{}; ///< Green channel value + component_type blue{}; ///< Blue channel value +}; + +/** + * @brief Indicates the value of the alpha, red, green, and blue color + * channels for an ARGB color to use as an event attribute. + * + */ +struct argb final : rgb { + /** + * @brief Construct an argb with alpha, red, green, and blue channels + * specified by `alpha_`, `red_`, `green_`, and `blue_`, respectively. + * + * Valid values are in the range `[0,255]`. + * + * @param alpha_ Value of the alpha channel (opacity) + * @param red_ Value of the red channel + * @param green_ Value of the green channel + * @param blue_ Value of the blue channel + * + */ + constexpr argb( + component_type alpha_, + component_type red_, + component_type green_, + component_type blue_) noexcept + : rgb{red_, green_, blue_}, alpha{alpha_} + { + } + + component_type alpha{}; ///< Alpha channel value +}; + +/** + * @brief Represents a custom color that can be associated with an NVTX event + * via its `event_attributes`. + * + * Specifying colors for NVTX events is a convenient way to visually + * differentiate among different events in a visualization tool such as Nsight + * Systems. + * + */ +class color { + public: + /// Type used for the color's value + using value_type = uint32_t; + + /** + * @brief Constructs a `color` using the value provided by `hex_code`. + * + * `hex_code` is expected to be a 4 byte argb hex code. + * + * The most significant byte indicates the value of the alpha channel + * (opacity) (0-255) + * + * The next byte indicates the value of the red channel (0-255) + * + * The next byte indicates the value of the green channel (0-255) + * + * The least significant byte indicates the value of the blue channel + * (0-255) + * + * @param hex_code The hex code used to construct the `color` + */ + constexpr explicit color(value_type hex_code) noexcept : _value{hex_code} {} + + /** + * @brief Construct a `color` using the alpha, red, green, blue components + * in `argb`. + * + * @param argb_ The alpha, red, green, blue components of the desired `color` + */ + constexpr color(argb argb_) noexcept + : color{from_bytes_msb_to_lsb(argb_.alpha, argb_.red, argb_.green, argb_.blue)} + { + } + + /** + * @brief Construct a `color` using the red, green, blue components in + * `rgb`. + * + * Uses maximum value for the alpha channel (opacity) of the `color`. + * + * @param rgb_ The red, green, blue components of the desired `color` + */ + constexpr color(rgb rgb_) noexcept + : color{from_bytes_msb_to_lsb(0xFF, rgb_.red, rgb_.green, rgb_.blue)} + { + } + + /** + * @brief Returns the `color`s argb hex code + * + */ + constexpr value_type get_value() const noexcept { return _value; } + + /** + * @brief Return the NVTX color type of the color. + * + */ + constexpr nvtxColorType_t get_type() const noexcept { return _type; } + + color() = delete; + ~color() = default; + color(color const&) = default; + color& operator=(color const&) = default; + color(color&&) = default; + color& operator=(color&&) = default; + + private: + /** + * @brief Constructs an unsigned, 4B integer from the component bytes in + * most to least significant byte order. + * + */ + constexpr static value_type from_bytes_msb_to_lsb( + uint8_t byte3, + uint8_t byte2, + uint8_t byte1, + uint8_t byte0) noexcept + { + return uint32_t{byte3} << 24 | uint32_t{byte2} << 16 | uint32_t{byte1} << 8 | uint32_t{byte0}; + } + + value_type _value{}; ///< color's argb color code + nvtxColorType_t _type{NVTX_COLOR_ARGB}; ///< NVTX color type code +}; + +/** + * @brief Object for intra-domain grouping of NVTX events. + * + * A `category` is simply an integer id that allows for fine-grain grouping of + * NVTX events. For example, one might use separate categories for IO, memory + * allocation, compute, etc. + * + * Example: + * \code{.cpp} + * nvtx3::category cat1{1}; + * + * // Range `r1` belongs to the category identified by the value `1`. + * nvtx3::scoped_range r1{cat1}; + * + * // Range `r2` belongs to the same category as `r1` + * nvtx3::scoped_range r2{nvtx3::category{1}}; + * \endcode + * + * To associate a name string with a category id, see `named_category`. + * + */ +class category { + public: + /// Type used for `category`s integer id. + using id_type = uint32_t; + + /** + * @brief Construct a `category` with the specified `id`. + * + * The `category` will be unnamed and identified only by its `id` value. + * + * All `category`s in a domain sharing the same `id` are equivalent. + * + * @param[in] id The `category`'s identifying value + */ + constexpr explicit category(id_type id) noexcept : id_{id} {} + + /** + * @brief Returns the id of the category. + * + */ + constexpr id_type get_id() const noexcept { return id_; } + + category() = delete; + ~category() = default; + category(category const&) = default; + category& operator=(category const&) = default; + category(category&&) = default; + category& operator=(category&&) = default; + + private: + id_type id_{}; ///< category's unique identifier +}; + +/** + * @brief A `category` with an associated name string. + * + * Associates a `name` string with a category `id` to help differentiate among + * categories. + * + * For any given category id `Id`, a `named_category(Id, "name")` should only + * be constructed once and reused throughout an application. This can be done + * by either explicitly creating static `named_category` objects, or using the + * `named_category::get` construct on first use helper (recommended). + * + * Creating two or more `named_category` objects with the same value for `id` + * in the same domain results in undefined behavior. + * + * Similarly, behavior is undefined when a `named_category` and `category` + * share the same value of `id`. + * + * Example: + * \code{.cpp} + * // Explicitly constructed, static `named_category` in global domain: + * static nvtx3::named_category static_category{42, "my category"}; + * + * // Range `r` associated with category id `42` + * nvtx3::scoped_range r{static_category}; + * + * // OR use construct on first use: + * + * // Define a type with `name` and `id` members + * struct my_category { + * static constexpr char const* name{"my category"}; // category name + * static constexpr uint32_t id{42}; // category id + * }; + * + * // Use construct on first use to name the category id `42` + * // with name "my category" + * auto& cat = named_category_in::get(); + * + * // Range `r` associated with category id `42` + * nvtx3::scoped_range r{cat}; + * \endcode + * + * `named_category_in`'s association of a name to a category id is local to + * the domain specified by the type `D`. An id may have a different name in + * another domain. + * + * @tparam D Type containing `name` member used to identify the `domain` to + * which the `named_category_in` belongs. Else, `domain::global` to indicate + * that the global NVTX domain should be used. + */ +template +class named_category_in final : public category { + public: +#if NVTX3_USE_CHECKED_OVERLOADS_FOR_GET + /** + * @brief Returns a global instance of a `named_category_in` as a + * function-local static. + * + * Creates a `named_category_in` with name and id specified by the contents + * of a type `C`. `C::name` determines the name and `C::id` determines the + * category id. + * + * This function is useful for constructing a named `category` exactly once + * and reusing the same instance throughout an application. + * + * Example: + * \code{.cpp} + * // Define a type with `name` and `id` members + * struct my_category { + * static constexpr char const* name{"my category"}; // category name + * static constexpr uint32_t id{42}; // category id + * }; + * + * // Use construct on first use to name the category id `42` + * // with name "my category" + * auto& cat = named_category_in::get(); + * + * // Range `r` associated with category id `42` + * nvtx3::scoped_range r{cat}; + * \endcode + * + * Uses the "construct on first use" idiom to safely ensure the `category` + * object is initialized exactly once. See + * https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use + * + * @tparam C Type containing a member `C::name` that resolves to either a + * `char const*` or `wchar_t const*` and `C::id`. + */ + template ::value && + detail::is_uint32::value + , int>::type = 0> + static named_category_in const& get() noexcept + { + static named_category_in const cat(C::id, C::name); + return cat; + } + + /** + * @brief Overload of `named_category_in::get` to provide a clear compile error + * when `C` has the required `name` and `id` members, but they are not the + * required types. `name` must be directly convertible to `char const*` or + * `wchar_t const*`, and `id` must be `uint32_t`. + */ + template ::value || + !detail::is_uint32::value + , int>::type = 0> + NVTX3_NO_DISCARD static named_category_in const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::is_c_string::value, + "Type used to name an NVTX category must contain a static constexpr member " + "called 'name' of type const char* or const wchar_t* -- 'name' member is not " + "convertible to either of those types"); + NVTX3_STATIC_ASSERT(detail::is_uint32::value, + "Type used to name an NVTX category must contain a static constexpr member " + "called 'id' of type uint32_t -- 'id' member is the wrong type"); + static named_category_in const unused; + return unused; // Function must compile for static_assert to be triggered + } + + /** + * @brief Overload of `named_category_in::get` to provide a clear compile error + * when `C` does not have the required `name` and `id` members. + */ + template ::value || + !detail::has_id::value + , int>::type = 0> + NVTX3_NO_DISCARD static named_category_in const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::has_name::value, + "Type used to name an NVTX category must contain a static constexpr member " + "called 'name' of type const char* or const wchar_t* -- 'name' member is missing"); + NVTX3_STATIC_ASSERT(detail::has_id::value, + "Type used to name an NVTX category must contain a static constexpr member " + "called 'id' of type uint32_t -- 'id' member is missing"); + static named_category_in const unused; + return unused; // Function must compile for static_assert to be triggered + } +#else + template + NVTX3_NO_DISCARD static named_category_in const& get() noexcept + { + static named_category_in const cat(C::id, C::name); + return cat; + } +#endif + + private: + // Default constructor is only used internally for static_assert(false) cases. + named_category_in() noexcept : category{0} {} + + public: + /** + * @brief Construct a `named_category_in` with the specified `id` and `name`. + * + * The name `name` will be registered with `id`. + * + * Every unique value of `id` should only be named once. + * + * @param[in] id The category id to name + * @param[in] name The name to associated with `id` + */ + named_category_in(id_type id, char const* name) noexcept : category{id} + { +#ifndef NVTX_DISABLE + nvtxDomainNameCategoryA(domain::get(), get_id(), name); +#else + (void)id; + (void)name; +#endif + } + + /** + * @brief Construct a `named_category_in` with the specified `id` and `name`. + * + * The name `name` will be registered with `id`. + * + * Every unique value of `id` should only be named once. + * + * @param[in] id The category id to name + * @param[in] name The name to associated with `id` + */ + named_category_in(id_type id, wchar_t const* name) noexcept : category{id} + { +#ifndef NVTX_DISABLE + nvtxDomainNameCategoryW(domain::get(), get_id(), name); +#else + (void)id; + (void)name; +#endif + } +}; + +/** + * @brief Alias for a `named_category_in` in the global NVTX domain. + * + */ +using named_category = named_category_in; + +/** + * @brief A message registered with NVTX. + * + * Normally, associating a `message` with an NVTX event requires copying the + * contents of the message string. This may cause non-trivial overhead in + * highly performance sensitive regions of code. + * + * message registration is an optimization to lower the overhead of + * associating a message with an NVTX event. Registering a message yields a + * handle that is inexpensive to copy that may be used in place of a message + * string. + * + * A particular message should only be registered once and the handle + * reused throughout the rest of the application. This can be done by either + * explicitly creating static `registered_string_in` objects, or using the + * `registered_string_in::get` construct on first use helper (recommended). + * + * Example: + * \code{.cpp} + * // Explicitly constructed, static `registered_string` in my_domain: + * static registered_string_in static_message{"message"}; + * + * // "message" is associated with the range `r` + * nvtx3::scoped_range r{static_message}; + * + * // Or use construct on first use: + * + * // Define a type with a `message` member that defines the contents of the + * // registered string + * struct my_message{ static constexpr char const* message{ "my message" }; }; + * + * // Uses construct on first use to register the contents of + * // `my_message::message` + * auto& msg = registered_string_in::get(); + * + * // "my message" is associated with the range `r` + * nvtx3::scoped_range r{msg}; + * \endcode + * + * `registered_string_in`s are local to a particular domain specified via + * the type `D`. + * + * @tparam D Type containing `name` member used to identify the `domain` to + * which the `registered_string_in` belongs. Else, `domain::global` to indicate + * that the global NVTX domain should be used. + */ +template +class registered_string_in { + public: +#if NVTX3_USE_CHECKED_OVERLOADS_FOR_GET + /** + * @brief Returns a global instance of a `registered_string_in` as a function + * local static. + * + * Provides a convenient way to register a message with NVTX without having + * to explicitly register the message. + * + * Upon first invocation, constructs a `registered_string_in` whose contents + * are specified by `message::message`. + * + * All future invocations will return a reference to the object constructed + * in the first invocation. + * + * Example: + * \code{.cpp} + * // Define a type with a `message` member that defines the contents of the + * // registered string + * struct my_message{ static constexpr char const* message{ "my message" }; + * }; + * + * // Uses construct on first use to register the contents of + * // `my_message::message` + * auto& msg = registered_string_in::get(); + * + * // "my message" is associated with the range `r` + * nvtx3::scoped_range r{msg}; + * \endcode + * + * @tparam M Type required to contain a member `M::message` that + * resolves to either a `char const*` or `wchar_t const*` used as the + * registered string's contents. + * @return Reference to a `registered_string_in` associated with the type `M`. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static registered_string_in const& get() noexcept + { + static registered_string_in const regstr(M::message); + return regstr; + } + + /** + * @brief Overload of `registered_string_in::get` to provide a clear compile error + * when `M` has a `message` member that is not directly convertible to either + * `char const*` or `wchar_t const*`. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static registered_string_in const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::always_false::value, + "Type used to register an NVTX string must contain a static constexpr member " + "called 'message' of type const char* or const wchar_t* -- 'message' member is " + "not convertible to either of those types"); + static registered_string_in const unused; + return unused; // Function must compile for static_assert to be triggered + } + + /** + * @brief Overload of `registered_string_in::get` to provide a clear compile error when + * `M` does not have a `message` member. + */ + template ::value + , int>::type = 0> + NVTX3_NO_DISCARD static registered_string_in const& get() noexcept + { + NVTX3_STATIC_ASSERT(detail::always_false::value, + "Type used to register an NVTX string must contain a static constexpr member " + "called 'message' of type const char* or const wchar_t* -- 'message' member " + "is missing"); + static registered_string_in const unused; + return unused; // Function must compile for static_assert to be triggered + } +#else + template + NVTX3_NO_DISCARD static registered_string_in const& get() noexcept + { + static registered_string_in const regstr(M::message); + return regstr; + } +#endif + + /** + * @brief Constructs a `registered_string_in` from the specified `msg` string. + * + * Registers `msg` with NVTX and associates a handle with the registered + * message. + * + * A particular message should should only be registered once and the handle + * reused throughout the rest of the application. + * + * @param msg The contents of the message + */ + explicit registered_string_in(char const* msg) noexcept + : handle_{nvtxDomainRegisterStringA(domain::get(), msg)} + { + } + + /** + * @brief Constructs a `registered_string_in` from the specified `msg` string. + * + * Registers `msg` with NVTX and associates a handle with the registered + * message. + * + * A particular message should should only be registered once and the handle + * reused throughout the rest of the application. + * + * @param msg The contents of the message + */ + explicit registered_string_in(std::string const& msg) noexcept + : registered_string_in{msg.c_str()} {} + + /** + * @brief Constructs a `registered_string_in` from the specified `msg` string. + * + * Registers `msg` with NVTX and associates a handle with the registered + * message. + * + * A particular message should should only be registered once and the handle + * reused throughout the rest of the application. + * + * @param msg The contents of the message + */ + explicit registered_string_in(wchar_t const* msg) noexcept + : handle_{nvtxDomainRegisterStringW(domain::get(), msg)} + { + } + + /** + * @brief Constructs a `registered_string_in` from the specified `msg` string. + * + * Registers `msg` with NVTX and associates a handle with the registered + * message. + * + * A particular message should only be registered once and the handle + * reused throughout the rest of the application. + * + * @param msg The contents of the message + */ + explicit registered_string_in(std::wstring const& msg) noexcept + : registered_string_in{msg.c_str()} {} + + /** + * @brief Returns the registered string's handle + * + */ + nvtxStringHandle_t get_handle() const noexcept { return handle_; } + +private: + // Default constructor is only used internally for static_assert(false) cases. + registered_string_in() noexcept {} +public: + ~registered_string_in() = default; + registered_string_in(registered_string_in const&) = default; + registered_string_in& operator=(registered_string_in const&) = default; + registered_string_in(registered_string_in&&) = default; + registered_string_in& operator=(registered_string_in&&) = default; + + private: + nvtxStringHandle_t handle_{}; ///< The handle returned from + ///< registering the message with NVTX +}; + +/** + * @brief Alias for a `registered_string_in` in the global NVTX domain. + * + */ +using registered_string = registered_string_in; + +/** + * @brief Allows associating a message string with an NVTX event via + * its `EventAttribute`s. + * + * Associating a `message` with an NVTX event through its `event_attributes` + * allows for naming events to easily differentiate them from other events. + * + * Every time an NVTX event is created with an associated `message`, the + * contents of the message string must be copied. This may cause non-trivial + * overhead in highly performance sensitive sections of code. Use of a + * `nvtx3::registered_string` is recommended in these situations. + * + * Example: + * \code{.cpp} + * // Creates an `event_attributes` with message "message 0" + * nvtx3::event_attributes attr0{nvtx3::message{"message 0"}}; + * + * // `range0` contains message "message 0" + * nvtx3::scoped_range range0{attr0}; + * + * // `std::string` and string literals are implicitly assumed to be + * // the contents of an `nvtx3::message` + * // Creates an `event_attributes` with message "message 1" + * nvtx3::event_attributes attr1{"message 1"}; + * + * // `range1` contains message "message 1" + * nvtx3::scoped_range range1{attr1}; + * + * // `range2` contains message "message 2" + * nvtx3::scoped_range range2{nvtx3::message{"message 2"}}; + * + * // `std::string` and string literals are implicitly assumed to be + * // the contents of an `nvtx3::message` + * // `range3` contains message "message 3" + * nvtx3::scoped_range range3{"message 3"}; + * \endcode + */ +class message { + public: + using value_type = nvtxMessageValue_t; + + /** + * @brief Construct a `message` whose contents are specified by `msg`. + * + * @param msg The contents of the message + */ + NVTX3_CONSTEXPR_IF_CPP14 message(char const* msg) noexcept : type_{NVTX_MESSAGE_TYPE_ASCII} + { + value_.ascii = msg; + } + + /** + * @brief Construct a `message` whose contents are specified by `msg`. + * + * @param msg The contents of the message + */ + message(std::string const& msg) noexcept : message{msg.c_str()} {} + + /** + * @brief Disallow construction for `std::string` r-value + * + * `message` is a non-owning type and therefore cannot take ownership of an + * r-value. Therefore, constructing from an r-value is disallowed to prevent + * a dangling pointer. + * + */ + message(std::string&&) = delete; + + /** + * @brief Construct a `message` whose contents are specified by `msg`. + * + * @param msg The contents of the message + */ + NVTX3_CONSTEXPR_IF_CPP14 message(wchar_t const* msg) noexcept : type_{NVTX_MESSAGE_TYPE_UNICODE} + { + value_.unicode = msg; + } + + /** + * @brief Construct a `message` whose contents are specified by `msg`. + * + * @param msg The contents of the message + */ + message(std::wstring const& msg) noexcept : message{msg.c_str()} {} + + /** + * @brief Disallow construction for `std::wstring` r-value + * + * `message` is a non-owning type and therefore cannot take ownership of an + * r-value. Therefore, constructing from an r-value is disallowed to prevent + * a dangling pointer. + * + */ + message(std::wstring&&) = delete; + + /** + * @brief Construct a `message` from a `registered_string_in`. + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the `registered_string_in` belongs. Else, `domain::global` to + * indicate that the global NVTX domain should be used. + * @param msg The message that has already been registered with NVTX. + */ + template + NVTX3_CONSTEXPR_IF_CPP14 message(registered_string_in const& msg) noexcept + : type_{NVTX_MESSAGE_TYPE_REGISTERED} + { + value_.registered = msg.get_handle(); + } + + /** + * @brief Construct a `message` from NVTX C API type and value. + * + * @param type nvtxMessageType_t enum value indicating type of the payload + * @param value nvtxMessageValue_t union containing message + */ + constexpr message( + nvtxMessageType_t const& type, + nvtxMessageValue_t const& value) noexcept + : type_{type}, value_(value) + { + } + + /** + * @brief Construct a `message` from NVTX C API registered string handle. + * + * @param handle nvtxStringHandle_t value of registered string handle + */ + NVTX3_CONSTEXPR_IF_CPP14 message(nvtxStringHandle_t handle) noexcept + : type_{NVTX_MESSAGE_TYPE_REGISTERED} + { + value_.registered = handle; + } + + /** + * @brief Return the union holding the value of the message. + * + */ + constexpr value_type get_value() const noexcept { return value_; } + + /** + * @brief Return the type information about the value the union holds. + * + */ + constexpr nvtxMessageType_t get_type() const noexcept { return type_; } + + private: + nvtxMessageType_t type_{}; ///< message type + nvtxMessageValue_t value_{}; ///< message contents +}; + +/** + * @brief A numerical value that can be associated with an NVTX event via + * its `event_attributes`. + * + * Example: + * \code{.cpp} + * // Constructs a payload from the int32_t value 42 + * nvtx3:: event_attributes attr{nvtx3::payload{42}}; + * + * // `range0` will have an int32_t payload of 42 + * nvtx3::scoped_range range0{attr}; + * + * // range1 has double payload of 3.14 + * nvtx3::scoped_range range1{nvtx3::payload{3.14}}; + * \endcode + */ +class payload { + public: + using value_type = typename nvtxEventAttributes_v2::payload_t; + + /** + * @brief Construct a `payload` from a signed, 8 byte integer. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(int64_t value) noexcept + : type_{NVTX_PAYLOAD_TYPE_INT64}, value_{} + { + value_.llValue = value; + } + + /** + * @brief Construct a `payload` from a signed, 4 byte integer. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(int32_t value) noexcept + : type_{NVTX_PAYLOAD_TYPE_INT32}, value_{} + { + value_.iValue = value; + } + + /** + * @brief Construct a `payload` from an unsigned, 8 byte integer. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(uint64_t value) noexcept + : type_{NVTX_PAYLOAD_TYPE_UNSIGNED_INT64}, value_{} + { + value_.ullValue = value; + } + + /** + * @brief Construct a `payload` from an unsigned, 4 byte integer. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(uint32_t value) noexcept + : type_{NVTX_PAYLOAD_TYPE_UNSIGNED_INT32}, value_{} + { + value_.uiValue = value; + } + + /** + * @brief Construct a `payload` from a single-precision floating point + * value. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(float value) noexcept + : type_{NVTX_PAYLOAD_TYPE_FLOAT}, value_{} + { + value_.fValue = value; + } + + /** + * @brief Construct a `payload` from a double-precision floating point + * value. + * + * @param value Value to use as contents of the payload + */ + NVTX3_CONSTEXPR_IF_CPP14 explicit payload(double value) noexcept + : type_{NVTX_PAYLOAD_TYPE_DOUBLE}, value_{} + { + value_.dValue = value; + } + + /** + * @brief Construct a `payload` from NVTX C API type and value. + * + * @param type nvtxPayloadType_t enum value indicating type of the payload + * @param value nvtxEventAttributes_t::payload_t union containing payload + */ + constexpr payload( + nvtxPayloadType_t const& type, + value_type const& value) noexcept + : type_{type}, value_(value) + { + } + + /** + * @brief Return the union holding the value of the payload + * + */ + constexpr value_type get_value() const noexcept { return value_; } + + /** + * @brief Return the information about the type the union holds. + * + */ + constexpr nvtxPayloadType_t get_type() const noexcept { return type_; } + + private: + nvtxPayloadType_t type_; ///< Type of the payload value + value_type value_; ///< Union holding the payload value +}; + +/** + * @brief Describes the attributes of a NVTX event. + * + * NVTX events can be customized via four "attributes": + * + * - color: color used to visualize the event in tools such as Nsight + * Systems. See `color`. + * - message: Custom message string. See `message`. + * - payload: User-defined numerical value. See `payload`. + * - category: Intra-domain grouping. See `category`. + * + * These component attributes are specified via an `event_attributes` object. + * See `nvtx3::color`, `nvtx3::message`, `nvtx3::payload`, and + * `nvtx3::category` for how these individual attributes are constructed. + * + * While it is possible to specify all four attributes, it is common to want + * to only specify a subset of attributes and use default values for the + * others. For convenience, `event_attributes` can be constructed from any + * number of attribute components in any order. + * + * Example: + * \code{.cpp} + * // Set message, same as using nvtx3::message{"message"} + * event_attributes attr{"message"}; + * + * // Set message and color + * event_attributes attr{"message", nvtx3::rgb{127, 255, 0}}; + * + * // Set message, color, payload, category + * event_attributes attr{"message", + * nvtx3::rgb{127, 255, 0}, + * nvtx3::payload{42}, + * nvtx3::category{1}}; + * + * // Same as above -- can use any order of arguments + * event_attributes attr{nvtx3::payload{42}, + * nvtx3::category{1}, + * "message", + * nvtx3::rgb{127, 255, 0}}; + * + * // Multiple arguments of the same type are allowed, but only the first is + * // used -- in this example, payload is set to 42: + * event_attributes attr{ nvtx3::payload{42}, nvtx3::payload{7} }; + * + * // Range `r` will be customized according the attributes in `attr` + * nvtx3::scoped_range r{attr}; + * + * // For convenience, `event_attributes` constructor arguments may be passed + * // to the `scoped_range_in` constructor -- they are forwarded to the + * // `event_attributes` constructor + * nvtx3::scoped_range r{nvtx3::payload{42}, nvtx3::category{1}, "message"}; + * + * // Using the nvtx3 namespace in a local scope makes the syntax more succinct: + * using namespace nvtx3; + * scoped_range r{payload{42}, category{1}, "message"}; + * \endcode + * + */ +class event_attributes { + public: + using value_type = nvtxEventAttributes_t; + + /** + * @brief Default constructor creates an `event_attributes` with no + * category, color, payload, nor message. + */ + constexpr event_attributes() noexcept + : attributes_{ + NVTX_VERSION, // version + sizeof(nvtxEventAttributes_t), // size + 0, // category + NVTX_COLOR_UNKNOWN, // color type + 0, // color value + NVTX_PAYLOAD_UNKNOWN, // payload type + 0, // reserved 4B + {0}, // payload value (union) + NVTX_MESSAGE_UNKNOWN, // message type + {nullptr} // message value (union) + } + { + } + + /** + * @brief Variadic constructor where the first argument is a `category`. + * + * Sets the value of the `EventAttribute`s category based on `c` and + * forwards the remaining variadic parameter pack to the next constructor. + * + */ + template + NVTX3_CONSTEXPR_IF_CPP14 explicit event_attributes(category const& c, Args const&... args) noexcept + : event_attributes(args...) + { + attributes_.category = c.get_id(); + } + + /** + * @brief Variadic constructor where the first argument is a `color`. + * + * Sets the value of the `EventAttribute`s color based on `c` and forwards + * the remaining variadic parameter pack to the next constructor. + * + */ + template + NVTX3_CONSTEXPR_IF_CPP14 explicit event_attributes(color const& c, Args const&... args) noexcept + : event_attributes(args...) + { + attributes_.color = c.get_value(); + attributes_.colorType = c.get_type(); + } + + /** + * @brief Variadic constructor where the first argument is a `payload`. + * + * Sets the value of the `EventAttribute`s payload based on `p` and forwards + * the remaining variadic parameter pack to the next constructor. + * + */ + template + NVTX3_CONSTEXPR_IF_CPP14 explicit event_attributes(payload const& p, Args const&... args) noexcept + : event_attributes(args...) + { + attributes_.payload = p.get_value(); + attributes_.payloadType = p.get_type(); + } + + /** + * @brief Variadic constructor where the first argument is a `message`. + * + * Sets the value of the `EventAttribute`s message based on `m` and forwards + * the remaining variadic parameter pack to the next constructor. + * + */ + template + NVTX3_CONSTEXPR_IF_CPP14 explicit event_attributes(message const& m, Args const&... args) noexcept + : event_attributes(args...) + { + attributes_.message = m.get_value(); + attributes_.messageType = m.get_type(); + } + + ~event_attributes() = default; + event_attributes(event_attributes const&) = default; + event_attributes& operator=(event_attributes const&) = default; + event_attributes(event_attributes&&) = default; + event_attributes& operator=(event_attributes&&) = default; + + /** + * @brief Get raw pointer to underlying NVTX attributes object. + * + */ + constexpr value_type const* get() const noexcept { return &attributes_; } + + private: + value_type attributes_{}; ///< The NVTX attributes structure +}; + +/** + * @brief A RAII object for creating a NVTX range local to a thread within a + * domain. + * + * When constructed, begins a nested NVTX range on the calling thread in the + * specified domain. Upon destruction, ends the NVTX range. + * + * Behavior is undefined if a `scoped_range_in` object is + * created/destroyed on different threads. + * + * `scoped_range_in` is neither movable nor copyable. + * + * `scoped_range_in`s may be nested within other ranges. + * + * The domain of the range is specified by the template type parameter `D`. + * By default, the `domain::global` is used, which scopes the range to the + * global NVTX domain. The convenience alias `scoped_range` is provided for + * ranges scoped to the global domain. + * + * A custom domain can be defined by creating a type, `D`, with a static + * member `D::name` whose value is used to name the domain associated with + * `D`. `D::name` must resolve to either `char const*` or `wchar_t const*` + * + * Example: + * \code{.cpp} + * // Define a type `my_domain` with a member `name` used to name the domain + * // associated with the type `my_domain`. + * struct my_domain{ + * static constexpr char const* name{"my domain"}; + * }; + * \endcode + * + * Usage: + * \code{.cpp} + * nvtx3::scoped_range_in r1{"range 1"}; // Range in my domain + * + * // Three equivalent ways to make a range in the global domain: + * nvtx3::scoped_range_in r2{"range 2"}; + * nvtx3::scoped_range_in<> r3{"range 3"}; + * nvtx3::scoped_range r4{"range 4"}; + * + * // Create an alias to succinctly make ranges in my domain: + * using my_scoped_range = nvtx3::scoped_range_in; + * + * my_scoped_range r3{"range 3"}; + * \endcode + */ +template +class NVTX3_MAYBE_UNUSED scoped_range_in { + public: + /** + * @brief Construct a `scoped_range_in` with the specified + * `event_attributes` + * + * Example: + * \code{cpp} + * nvtx3::event_attributes attr{"msg", nvtx3::rgb{127,255,0}}; + * nvtx3::scoped_range range{attr}; // Creates a range with message contents + * // "msg" and green color + * \endcode + * + * @param[in] attr `event_attributes` that describes the desired attributes + * of the range. + */ + explicit scoped_range_in(event_attributes const& attr) noexcept + { +#ifndef NVTX_DISABLE + nvtxDomainRangePushEx(domain::get(), attr.get()); +#else + (void)attr; +#endif + } + + /** + * @brief Constructs a `scoped_range_in` from the constructor arguments + * of an `event_attributes`. + * + * Forwards the arguments `args...` to construct an + * `event_attributes` object. The `event_attributes` object is then + * associated with the `scoped_range_in`. + * + * For more detail, see `event_attributes` documentation. + * + * Example: + * \code{cpp} + * // Creates a range with message "message" and green color + * nvtx3::scoped_range r{"message", nvtx3::rgb{127,255,0}}; + * \endcode + * + * @param[in] args Arguments to used to construct an `event_attributes` associated with this + * range. + * + */ + template + explicit scoped_range_in(Args const&... args) noexcept + : scoped_range_in{event_attributes{args...}} + { + } + + /** + * @brief Default constructor creates a `scoped_range_in` with no + * message, color, payload, nor category. + * + */ + scoped_range_in() noexcept : scoped_range_in{event_attributes{}} {} + + /** + * @brief Delete `operator new` to disallow heap allocated objects. + * + * `scoped_range_in` must follow RAII semantics to guarantee proper push/pop semantics. + * + */ + void* operator new(std::size_t) = delete; + + scoped_range_in(scoped_range_in const&) = delete; + scoped_range_in& operator=(scoped_range_in const&) = delete; + scoped_range_in(scoped_range_in&&) = delete; + scoped_range_in& operator=(scoped_range_in&&) = delete; + + /** + * @brief Destroy the scoped_range_in, ending the NVTX range event. + */ + ~scoped_range_in() noexcept + { +#ifndef NVTX_DISABLE + nvtxDomainRangePop(domain::get()); +#endif + } +}; + +/** + * @brief Alias for a `scoped_range_in` in the global NVTX domain. + * + */ +using scoped_range = scoped_range_in; + +namespace detail { + +/// @cond internal +template +class NVTX3_MAYBE_UNUSED optional_scoped_range_in +{ +public: + optional_scoped_range_in() = default; + + void begin(event_attributes const& attr) noexcept + { +#ifndef NVTX_DISABLE + // This class is not meant to be part of the public NVTX C++ API and should + // only be used in the `NVTX3_FUNC_RANGE_IF` and `NVTX3_FUNC_RANGE_IF_IN` + // macros. However, to prevent developers from misusing this class, make + // sure to not start multiple ranges. + if (initialized) { return; } + + nvtxDomainRangePushEx(domain::get(), attr.get()); + initialized = true; +#else + (void)attr; +#endif + } + + ~optional_scoped_range_in() noexcept + { +#ifndef NVTX_DISABLE + if (initialized) { nvtxDomainRangePop(domain::get()); } +#endif + } + + void* operator new(std::size_t) = delete; + optional_scoped_range_in(optional_scoped_range_in const&) = delete; + optional_scoped_range_in& operator=(optional_scoped_range_in const&) = delete; + optional_scoped_range_in(optional_scoped_range_in&&) = delete; + optional_scoped_range_in& operator=(optional_scoped_range_in&&) = delete; + +private: +#ifndef NVTX_DISABLE + bool initialized = false; +#endif +}; +/// @endcond + +} // namespace detail + +/** + * @brief Handle used for correlating explicit range start and end events. + * + * A handle is "null" if it does not correspond to any range. + * + */ +struct range_handle { + /// Type used for the handle's value + using value_type = nvtxRangeId_t; + + + /** + * @brief Construct a `range_handle` from the given id. + * + */ + constexpr explicit range_handle(value_type id) noexcept : _range_id{id} {} + + /** + * @brief Constructs a null range handle. + * + * A null range_handle corresponds to no range. Calling `end_range` on a + * null handle is undefined behavior when a tool is active. + * + */ + constexpr range_handle() noexcept = default; + + /** + * @brief Checks whether this handle is null + * + * Provides contextual conversion to `bool`. + * + * \code{cpp} + * range_handle handle{}; + * if (handle) {...} + * \endcode + * + */ + constexpr explicit operator bool() const noexcept { return get_value() != null_range_id; } + + /** + * @brief Implicit conversion from `nullptr` constructs a null handle. + * + * Satisfies the "NullablePointer" requirement to make `range_handle` comparable with `nullptr`. + * + */ + constexpr range_handle(std::nullptr_t) noexcept {} + + /** + * @brief Returns the `range_handle`'s value + * + * @return value_type The handle's value + */ + constexpr value_type get_value() const noexcept { return _range_id; } + + private: + /// Sentinel value for a null handle that corresponds to no range + static constexpr value_type null_range_id = nvtxRangeId_t{0}; + + value_type _range_id{null_range_id}; ///< The underlying NVTX range id +}; + +/** + * @brief Compares two range_handles for equality + * + * @param lhs The first range_handle to compare + * @param rhs The second range_handle to compare + */ +inline constexpr bool operator==(range_handle lhs, range_handle rhs) noexcept +{ + return lhs.get_value() == rhs.get_value(); +} + +/** + * @brief Compares two range_handles for inequality + * + * @param lhs The first range_handle to compare + * @param rhs The second range_handle to compare + */ +inline constexpr bool operator!=(range_handle lhs, range_handle rhs) noexcept { return !(lhs == rhs); } + +/** + * @brief Manually begin an NVTX range. + * + * Explicitly begins an NVTX range and returns a unique handle. To end the + * range, pass the handle to `end_range_in()`. + * + * `nvtx3::start_range(...)` is equivalent to `nvtx3::start_range_in<>(...)` and + * `nvtx3::start_range_in(...)`. + * + * `start_range_in/end_range_in` are the most explicit and lowest level APIs + * provided for creating ranges. Use of `nvtx3::unique_range_in` should be + * preferred unless one is unable to tie the range to the lifetime of an object. + * + * Example: + * \code{.cpp} + * nvtx3::event_attributes attr{"msg", nvtx3::rgb{127,255,0}}; + * // Manually begin a range + * nvtx3::range_handle h = nvtx3::start_range_in(attr); + * ... + * nvtx3::end_range_in(h); // End the range + * \endcode + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the range belongs. Else, `domain::global` to indicate that the + * global NVTX domain should be used. + * @param[in] attr `event_attributes` that describes the desired attributes + * of the range. + * @return Unique handle to be passed to `end_range_in` to end the range. + */ +template +NVTX3_NO_DISCARD inline range_handle start_range_in(event_attributes const& attr) noexcept +{ +#ifndef NVTX_DISABLE + return range_handle{nvtxDomainRangeStartEx(domain::get(), attr.get())}; +#else + (void)attr; + return {}; +#endif +} + +/** + * @brief Manually begin an NVTX range. + * + * Explicitly begins an NVTX range and returns a unique handle. To end the + * range, pass the handle to `end_range_in()`. + * + * `nvtx3::start_range(...)` is equivalent to `nvtx3::start_range_in<>(...)` and + * `nvtx3::start_range_in(...)`. + * + * `start_range_in/end_range_in` are the most explicit and lowest level APIs + * provided for creating ranges. Use of `nvtx3::unique_range_in` should be + * preferred unless one is unable to tie the range to the lifetime of an object. + * + * This overload uses `args...` to construct an `event_attributes` to + * associate with the range. For more detail, see `event_attributes`. + * + * Example: + * \code{cpp} + * // Manually begin a range + * nvtx3::range_handle h = nvtx3::start_range_in("msg", nvtx3::rgb{127,255,0}); + * ... + * nvtx3::end_range_in(h); // Ends the range + * \endcode + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the range belongs. Else, `domain::global` to indicate that the + * global NVTX domain should be used. + * @param[in] args Variadic parameter pack of the arguments for an `event_attributes`. + * @return Unique handle to be passed to `end_range` to end the range. + */ +template +NVTX3_NO_DISCARD inline range_handle start_range_in(Args const&... args) noexcept +{ +#ifndef NVTX_DISABLE + return start_range_in(event_attributes{args...}); +#else + detail::silence_unused(args...); + return {}; +#endif +} + +/** + * @brief Manually begin an NVTX range in the global domain. + * + * Explicitly begins an NVTX range and returns a unique handle. To end the + * range, pass the handle to `end_range()`. + * + * `nvtx3::start_range(...)` is equivalent to `nvtx3::start_range_in<>(...)` and + * `nvtx3::start_range_in(...)`. + * + * `start_range/end_range` are the most explicit and lowest level APIs + * provided for creating ranges. Use of `nvtx3::unique_range` should be + * preferred unless one is unable to tie the range to the lifetime of an object. + * + * Example: + * \code{.cpp} + * nvtx3::event_attributes attr{"msg", nvtx3::rgb{127,255,0}}; + * // Manually begin a range + * nvtx3::range_handle h = nvtx3::start_range(attr); + * ... + * nvtx3::end_range(h); // End the range + * \endcode + * + * @param[in] attr `event_attributes` that describes the desired attributes + * of the range. + * @return Unique handle to be passed to `end_range_in` to end the range. + */ +NVTX3_NO_DISCARD inline range_handle start_range(event_attributes const& attr) noexcept +{ +#ifndef NVTX_DISABLE + return start_range_in(attr); +#else + (void)attr; + return {}; +#endif +} + +/** + * @brief Manually begin an NVTX range in the global domain. + * + * Explicitly begins an NVTX range and returns a unique handle. To end the + * range, pass the handle to `end_range_in()`. + * + * `nvtx3::start_range(...)` is equivalent to `nvtx3::start_range_in<>(...)` and + * `nvtx3::start_range_in(...)`. + * + * `start_range_in/end_range_in` are the most explicit and lowest level APIs + * provided for creating ranges. Use of `nvtx3::unique_range_in` should be + * preferred unless one is unable to tie the range to the lifetime of an object. + * + * This overload uses `args...` to construct an `event_attributes` to + * associate with the range. For more detail, see `event_attributes`. + * + * Example: + * \code{cpp} + * // Manually begin a range + * nvtx3::range_handle h = nvtx3::start_range("msg", nvtx3::rgb{127,255,0}); + * ... + * nvtx3::end_range(h); // Ends the range + * \endcode + * + * @param[in] args Variadic parameter pack of the arguments for an `event_attributes`. + * @return Unique handle to be passed to `end_range` to end the range. + */ +template +NVTX3_NO_DISCARD inline range_handle start_range(Args const&... args) noexcept +{ +#ifndef NVTX_DISABLE + return start_range_in(args...); +#else + detail::silence_unused(args...); + return {}; +#endif +} + +/** + * @brief Manually end the range associated with the handle `r` in domain `D`. + * + * Explicitly ends the NVTX range indicated by the handle `r` returned from a + * prior call to `start_range_in`. The range may end on a different thread + * from where it began. + * + * @tparam D Type containing `name` member used to identify the `domain` to + * which the range belongs. Else, `domain::global` to indicate that the global + * NVTX domain should be used. + * @param r Handle to a range started by a prior call to `start_range_in`. + * + * @warning The domain type specified as template parameter to this function + * must be the same that was specified on the associated `start_range_in` call. + */ +template +inline void end_range_in(range_handle r) noexcept +{ +#ifndef NVTX_DISABLE + nvtxDomainRangeEnd(domain::get(), r.get_value()); +#else + (void)r; +#endif +} + +/** + * @brief Manually end the range associated with the handle `r` in the global + * domain. + * + * Explicitly ends the NVTX range indicated by the handle `r` returned from a + * prior call to `start_range`. The range may end on a different thread from + * where it began. + * + * @param r Handle to a range started by a prior call to `start_range`. + * + * @warning The domain type specified as template parameter to this function + * must be the same that was specified on the associated `start_range` call. + */ +inline void end_range(range_handle r) noexcept +{ +#ifndef NVTX_DISABLE + end_range_in(r); +#else + (void)r; +#endif +} + +/** + * @brief A RAII object for creating a NVTX range within a domain that can + * be created and destroyed on different threads. + * + * When constructed, begins a NVTX range in the specified domain. Upon + * destruction, ends the NVTX range. + * + * Similar to `nvtx3::scoped_range_in`, with a few key differences: + * - `unique_range` objects can be destroyed in an order whereas `scoped_range` objects must be + * destroyed in exact reverse creation order + * - `unique_range` can start and end on different threads + * - `unique_range` is movable + * - `unique_range` objects can be constructed as heap objects + * + * There is extra overhead associated with `unique_range` constructs and therefore use of + * `nvtx3::scoped_range_in` should be preferred. + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the `unique_range_in` belongs. Else, `domain::global` to + * indicate that the global NVTX domain should be used. + */ +template +class NVTX3_MAYBE_UNUSED unique_range_in { + public: + /** + * @brief Construct a new unique_range_in object with the specified event attributes + * + * Example: + * \code{cpp} + * nvtx3::event_attributes attr{"msg", nvtx3::rgb{127,255,0}}; + * nvtx3::unique_range_in range{attr}; // Creates a range with message contents + * // "msg" and green color + * \endcode + * + * @param[in] attr `event_attributes` that describes the desired attributes + * of the range. + */ + explicit unique_range_in(event_attributes const& attr) noexcept + : handle_{start_range_in(attr)} + { + } + + /** + * @brief Constructs a `unique_range_in` from the constructor arguments + * of an `event_attributes`. + * + * Forwards the arguments `args...` to construct an + * `event_attributes` object. The `event_attributes` object is then + * associated with the `unique_range_in`. + * + * For more detail, see `event_attributes` documentation. + * + * Example: + * \code{.cpp} + * // Creates a range with message "message" and green color + * nvtx3::unique_range_in<> r{"message", nvtx3::rgb{127,255,0}}; + * \endcode + * + * @param[in] args Variadic parameter pack of arguments to construct an `event_attributes` + * associated with this range. + */ + template + explicit unique_range_in(Args const&... args) noexcept + : unique_range_in{event_attributes{args...}} + { + } + + /** + * @brief Default constructor creates a `unique_range_in` with no + * message, color, payload, nor category. + * + */ + constexpr unique_range_in() noexcept : unique_range_in{event_attributes{}} {} + + /** + * @brief Destroy the `unique_range_in` ending the range. + * + */ + ~unique_range_in() noexcept = default; + + /** + * @brief Move constructor allows taking ownership of the NVTX range from + * another `unique_range_in`. + * + * @param other The range to take ownership of + */ + unique_range_in(unique_range_in&& other) noexcept = default; + + /** + * @brief Move assignment operator allows taking ownership of an NVTX range + * from another `unique_range_in`. + * + * @param other The range to take ownership of + */ + unique_range_in& operator=(unique_range_in&& other) noexcept = default; + + /// Copy construction is not allowed to prevent multiple objects from owning + /// the same range handle + unique_range_in(unique_range_in const&) = delete; + + /// Copy assignment is not allowed to prevent multiple objects from owning the + /// same range handle + unique_range_in& operator=(unique_range_in const&) = delete; + + private: + + struct end_range_handle { + using pointer = range_handle; /// Override the pointer type of the unique_ptr + void operator()(range_handle h) const noexcept { end_range_in(h); } + }; + + /// Range handle used to correlate the start/end of the range + std::unique_ptr handle_; +}; + +/** + * @brief Alias for a `unique_range_in` in the global NVTX domain. + * + */ +using unique_range = unique_range_in; + +/** + * @brief Annotates an instantaneous point in time with a "marker", using the + * attributes specified by `attr`. + * + * Unlike a "range" which has a beginning and an end, a marker is a single event + * in an application, such as detecting a problem: + * + * \code{.cpp} + * bool success = do_operation(...); + * if (!success) { + * nvtx3::event_attributes attr{"operation failed!", nvtx3::rgb{255,0,0}}; + * nvtx3::mark_in(attr); + * } + * \endcode + * + * Note that nvtx3::mark_in is a function, not a class like scoped_range_in. + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the `unique_range_in` belongs. Else, `domain::global` to + * indicate that the global NVTX domain should be used. + * @param[in] attr `event_attributes` that describes the desired attributes + * of the mark. + */ +template +inline void mark_in(event_attributes const& attr) noexcept +{ +#ifndef NVTX_DISABLE + nvtxDomainMarkEx(domain::get(), attr.get()); +#else + (void)(attr); +#endif +} + +/** + * @brief Annotates an instantaneous point in time with a "marker", using the + * arguments to construct an `event_attributes`. + * + * Unlike a "range" which has a beginning and an end, a marker is a single event + * in an application, such as detecting a problem: + * + * \code{.cpp} + * bool success = do_operation(...); + * if (!success) { + * nvtx3::mark_in("operation failed!", nvtx3::rgb{255,0,0}); + * } + * \endcode + * + * Note that nvtx3::mark_in is a function, not a class like scoped_range_in. + * + * Forwards the arguments `args...` to construct an `event_attributes` object. + * The attributes are then associated with the marker. For more detail, see + * the `event_attributes` documentation. + * + * @tparam D Type containing `name` member used to identify the `domain` + * to which the `unique_range_in` belongs. Else `domain::global` to + * indicate that the global NVTX domain should be used. + * @param[in] args Variadic parameter pack of arguments to construct an `event_attributes` + * associated with this range. + * + */ +template +inline void mark_in(Args const&... args) noexcept +{ +#ifndef NVTX_DISABLE + mark_in(event_attributes{args...}); +#else + detail::silence_unused(args...); +#endif +} + +/** + * @brief Annotates an instantaneous point in time with a "marker", using the + * attributes specified by `attr`, in the global domain. + * + * Unlike a "range" which has a beginning and an end, a marker is a single event + * in an application, such as detecting a problem: + * + * \code{.cpp} + * bool success = do_operation(...); + * if (!success) { + * nvtx3::event_attributes attr{"operation failed!", nvtx3::rgb{255,0,0}}; + * nvtx3::mark(attr); + * } + * \endcode + * + * Note that nvtx3::mark is a function, not a class like scoped_range. + * + * @param[in] attr `event_attributes` that describes the desired attributes + * of the mark. + */ +inline void mark(event_attributes const& attr) noexcept +{ +#ifndef NVTX_DISABLE + mark_in(attr); +#else + (void)attr; +#endif +} + +/** + * @brief Annotates an instantaneous point in time with a "marker", using the + * arguments to construct an `event_attributes`, in the global domain. + * + * Unlike a "range" which has a beginning and an end, a marker is a single event + * in an application, such as detecting a problem: + * + * \code{.cpp} + * bool success = do_operation(...); + * if (!success) { + * nvtx3::mark("operation failed!", nvtx3::rgb{255,0,0}); + * } + * \endcode + * + * Note that nvtx3::mark is a function, not a class like scoped_range. + * + * Forwards the arguments `args...` to construct an `event_attributes` object. + * The attributes are then associated with the marker. For more detail, see + * the `event_attributes` documentation. + * + * @param[in] args Variadic parameter pack of arguments to construct an + * `event_attributes` associated with this range. + * + */ +template +inline void mark(Args const&... args) noexcept +{ +#ifndef NVTX_DISABLE + mark_in(args...); +#else + detail::silence_unused(args...); +#endif +} + +} // namespace NVTX3_VERSION_NAMESPACE + +} // namespace nvtx3 + +#ifndef NVTX_DISABLE +/** + * @brief Convenience macro for generating a range in the specified `domain` + * from the lifetime of a function + * + * This macro is useful for generating an NVTX range in `domain` from + * the entry point of a function to its exit. It is intended to be the first + * line of the function. + * + * Constructs a static `registered_string_in` using the name of the immediately + * enclosing function returned by `__func__` and constructs a + * `nvtx3::scoped_range` using the registered function name as the range's + * message. + * + * Example: + * \code{.cpp} + * struct my_domain{static constexpr char const* name{"my_domain"};}; + * + * void foo(...) { + * NVTX3_FUNC_RANGE_IN(my_domain); // Range begins on entry to foo() + * // do stuff + * ... + * } // Range ends on return from foo() + * \endcode + * + * @param[in] D Type containing `name` member used to identify the + * `domain` to which the `registered_string_in` belongs. Else, + * `domain::global` to indicate that the global NVTX domain should be used. + */ +#define NVTX3_V1_FUNC_RANGE_IN(D) \ + static ::nvtx3::v1::registered_string_in const nvtx3_func_name__{__func__}; \ + static ::nvtx3::v1::event_attributes const nvtx3_func_attr__{nvtx3_func_name__}; \ + ::nvtx3::v1::scoped_range_in const nvtx3_range__{nvtx3_func_attr__} + +/** + * @brief Convenience macro for generating a range in the specified `domain` + * from the lifetime of a function if the given boolean expression evaluates + * to true. + * + * Similar to `NVTX3_V1_FUNC_RANGE_IN(D)`, the only difference being that + * `NVTX3_V1_FUNC_RANGE_IF_IN(D, C)` only generates a range if the given boolean + * expression evaluates to true. + * + * @param[in] D Type containing `name` member used to identify the + * `domain` to which the `registered_string_in` belongs. Else, + * `domain::global` to indicate that the global NVTX domain should be used. + * + * @param[in] C Boolean expression used to determine if a range should be + * generated. + */ +#define NVTX3_V1_FUNC_RANGE_IF_IN(D, C) \ + ::nvtx3::v1::detail::optional_scoped_range_in optional_nvtx3_range__; \ + if (C) { \ + static ::nvtx3::v1::registered_string_in const nvtx3_func_name__{__func__}; \ + static ::nvtx3::v1::event_attributes const nvtx3_func_attr__{nvtx3_func_name__}; \ + optional_nvtx3_range__.begin(nvtx3_func_attr__); \ + } (void)0 +#else /* NVTX_DISABLE */ +#define NVTX3_V1_FUNC_RANGE_IN(D) (void)0 +#define NVTX3_V1_FUNC_RANGE_IF_IN(D, C) (void)(C) +#endif /* NVTX_DISABLE */ + +/** + * @brief Convenience macro for generating a range in the global domain from the + * lifetime of a function. + * + * This macro is useful for generating an NVTX range in the global domain from + * the entry point of a function to its exit. It is intended to be the first + * line of the function. + * + * Constructs a static `registered_string_in` using the name of the immediately + * enclosing function returned by `__func__` and constructs a + * `nvtx3::scoped_range` using the registered function name as the range's + * message. + * + * Example: + * \code{.cpp} + * void foo(...) { + * NVTX3_FUNC_RANGE(); // Range begins on entry to foo() + * // do stuff + * ... + * } // Range ends on return from foo() + * \endcode + */ +#define NVTX3_V1_FUNC_RANGE() NVTX3_V1_FUNC_RANGE_IN(::nvtx3::v1::domain::global) + +/** + * @brief Convenience macro for generating a range in the global domain from the + * lifetime of a function if the given boolean expression evaluates to true. + * + * Similar to `NVTX3_V1_FUNC_RANGE()`, the only difference being that + * `NVTX3_V1_FUNC_RANGE_IF(C)` only generates a range if the given boolean + * expression evaluates to true. + * + * @param[in] C Boolean expression used to determine if a range should be + * generated. + */ +#define NVTX3_V1_FUNC_RANGE_IF(C) NVTX3_V1_FUNC_RANGE_IF_IN(::nvtx3::v1::domain::global, C) + +/* When inlining this version, versioned macros must have unversioned aliases. + * For each NVTX3_Vx_ #define, make an NVTX3_ alias of it here.*/ +#if defined(NVTX3_INLINE_THIS_VERSION) +/* clang format off */ +#define NVTX3_FUNC_RANGE NVTX3_V1_FUNC_RANGE +#define NVTX3_FUNC_RANGE_IF NVTX3_V1_FUNC_RANGE_IF +#define NVTX3_FUNC_RANGE_IN NVTX3_V1_FUNC_RANGE_IN +#define NVTX3_FUNC_RANGE_IF_IN NVTX3_V1_FUNC_RANGE_IF_IN +/* clang format on */ +#endif + +#endif // NVTX3_CPP_DEFINITIONS_V1_0 + +/* Add functionality for new minor versions here, by copying the above section enclosed + * in #ifndef NVTX3_CPP_DEFINITIONS_Vx_y, and incrementing the minor version. This code + * is an example of how additions for version 1.2 would look, indented for clarity. Note + * that the versioned symbols and macros are always provided, and the unversioned symbols + * are only provided if NVTX3_INLINE_THIS_VERSION was defined at the top of this header. + * + * \code{.cpp} + * #ifndef NVTX3_CPP_DEFINITIONS_V1_2 + * #define NVTX3_CPP_DEFINITIONS_V1_2 + * namespace nvtx3 { + * NVTX3_INLINE_IF_REQUESTED namespace NVTX3_VERSION_NAMESPACE { + * class new_class {}; + * inline void new_function() {} + * } + * } + * + * // Macros must have the major version in their names: + * #define NVTX3_V1_NEW_MACRO_A() ... + * #define NVTX3_V1_NEW_MACRO_B() ... + * + * // If inlining, make aliases for the macros with the version number omitted + * #if defined(NVTX3_INLINE_THIS_VERSION) + * #define NVTX3_NEW_MACRO_A NVTX3_V1_NEW_MACRO_A + * #define NVTX3_NEW_MACRO_B NVTX3_V1_NEW_MACRO_B + * #endif + * #endif // NVTX3_CPP_DEFINITIONS_V1_2 + * \endcode + */ + +/* Undefine all temporarily-defined unversioned macros, which would conflict with + * subsequent includes of different versions of this header. */ +#undef NVTX3_CPP_VERSION_MAJOR +#undef NVTX3_CPP_VERSION_MINOR +#undef NVTX3_CONCAT +#undef NVTX3_NAMESPACE_FOR +#undef NVTX3_VERSION_NAMESPACE +#undef NVTX3_INLINE_IF_REQUESTED +#undef NVTX3_CONSTEXPR_IF_CPP14 +#undef NVTX3_MAYBE_UNUSED +#undef NVTX3_NO_DISCARD + +#if defined(NVTX3_INLINE_THIS_VERSION) +#undef NVTX3_INLINE_THIS_VERSION +#endif + +#if defined(NVTX3_USE_CHECKED_OVERLOADS_FOR_GET_DEFINED_HERE) +#undef NVTX3_USE_CHECKED_OVERLOADS_FOR_GET_DEFINED_HERE +#undef NVTX3_USE_CHECKED_OVERLOADS_FOR_GET +#endif + +#if defined(NVTX3_STATIC_ASSERT_DEFINED_HERE) +#undef NVTX3_STATIC_ASSERT_DEFINED_HERE +#undef NVTX3_STATIC_ASSERT +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtHelperMacros.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtHelperMacros.h new file mode 100644 index 0000000000000000000000000000000000000000..600d8779108a77a264df2ec4922f5fd4b500523d --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtHelperMacros.h @@ -0,0 +1,64 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifndef NVTX_EXT_HELPER_MACROS_H +#define NVTX_EXT_HELPER_MACROS_H + +#if !defined(NVTX_NULLPTR) +#if defined(__cplusplus) && __cplusplus >= 201103L +#define NVTX_NULLPTR nullptr +#else +#define NVTX_NULLPTR NULL +#endif +#endif + +/* Combine tokens */ +#define _NVTX_EXT_CONCAT(a, b) a##b +#define NVTX_EXT_CONCAT(a, b) _NVTX_EXT_CONCAT(a, b) + +/* Resolves to the number of arguments passed. */ +#define NVTX_EXT_NUM_ARGS(...) \ + NVTX_EXT_SELECTA16(__VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, throwaway) +#define NVTX_EXT_SELECTA16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, ...) a16 + +/* Cast argument(s) to void to prevent unused variable warnings. */ +#define _NVTX_EXT_VOIDIFY0() +#define _NVTX_EXT_VOIDIFY1(a1) (void)a1; +#define _NVTX_EXT_VOIDIFY2(a1, a2) (void)a1; (void)a2; +#define _NVTX_EXT_VOIDIFY3(a1, a2, a3) (void)a1; (void)a2; (void)a3; +#define _NVTX_EXT_VOIDIFY4(a1, a2, a3, a4) (void)a1; (void)a2; (void)a3; (void)a4; +#define _NVTX_EXT_VOIDIFY5(a1, a2, a3, a4, a5) (void)a1; (void)a2; (void)a3; (void)a4; (void)a5; +#define _NVTX_EXT_VOIDIFY6(a1, a2, a3, a4, a5, a6) (void)a1; (void)a2; (void)a3; (void)a4; (void)a5; (void)a6; + +/* Mark function arguments as unused. */ +#define NVTX_EXT_HELPER_UNUSED_ARGS(...) \ + NVTX_EXT_CONCAT(_NVTX_EXT_VOIDIFY, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) + +#endif /* NVTX_EXT_HELPER_MACROS_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImpl.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImpl.h new file mode 100644 index 0000000000000000000000000000000000000000..e31abf7650e7d95668f94d1a85d510f961a0a30c --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImpl.h @@ -0,0 +1,123 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifndef NVTX_EXT_IMPL_H +#define NVTX_EXT_IMPL_H + +#include +#include +#include +#include + +/* ---- Include required platform headers ---- */ + +#if defined(_WIN32) + +#include + +#else +#include + +#if defined(__ANDROID__) +#include +#endif + +#if defined(__linux__) || defined(__CYGWIN__) +#include +#endif + +#include +#include +#include +#include +#include +#include + +#endif + +/* ---- Define macros used in this file ---- */ + +#ifdef NVTX_DEBUG_PRINT +#ifdef __ANDROID__ +#include +#define NVTX_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "NVTOOLSEXT", __VA_ARGS__); +#define NVTX_INFO(...) __android_log_print(ANDROID_LOG_INFO, "NVTOOLSEXT", __VA_ARGS__); +#else +#include +#define NVTX_ERR(...) fprintf(stderr, "NVTX_ERROR: " __VA_ARGS__) +#define NVTX_INFO(...) fprintf(stderr, "NVTX_INFO: " __VA_ARGS__) +#endif +#else /* !defined(NVTX_DEBUG_PRINT) */ +#define NVTX_ERR(...) +#define NVTX_INFO(...) +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef __GNUC__ +#pragma GCC visibility push(hidden) +#endif + +#define NVTX_EXTENSION_FRESH 0 /* Uninitialized extension or function slot */ +#define NVTX_EXTENSION_DISABLED 1 /* Disabled extension or function slot */ +#define NVTX_EXTENSION_STARTING 2 /* Extension is being initialized. */ +#define NVTX_EXTENSION_LOADED 3 /* Extension is initialized successfully. */ +#define NVTX_EXTENSION_INIT_FN_FAILED 4 /* Extension init function returned failure. */ + +/* Function slots are local to each extension */ +typedef struct nvtxExtGlobals1_t +{ + NvtxExtInitializeInjectionFunc_t injectionFnPtr; +} nvtxExtGlobals1_t; + +NVTX_LINKONCE_DEFINE_GLOBAL nvtxExtGlobals1_t NVTX_VERSIONED_IDENTIFIER(nvtxExtGlobals1) = +{ + NVTX_NULLPTR +}; + +#define NVTX_EXT_INIT_GUARD +#include "nvtxExtInit.h" +#undef NVTX_EXT_INIT_GUARD + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* NVTX_EXT_IMPL_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplCounters_v1.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplCounters_v1.h new file mode 100644 index 0000000000000000000000000000000000000000..3e6952a868465777effeb1e9a898bdd8257adc2d --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplCounters_v1.h @@ -0,0 +1,166 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_COUNTERS_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExtCounters.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#define NVTX_EXT_IMPL_GUARD +#include "nvtxExtImpl.h" +#undef NVTX_EXT_IMPL_GUARD + +#ifndef NVTX_EXT_IMPL_COUNTERS_V1 +#define NVTX_EXT_IMPL_COUNTERS_V1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef NVTX_DISABLE + +#include "nvtxExtHelperMacros.h" + +#define NVTX_EXT_COUNTERS_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + NVTX_EXT_HELPER_UNUSED_ARGS arg_names \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) \ +} + +#else /* NVTX_DISABLE */ + +/* + * Function slots for the counters extension. First entry is the module state, + * initialized to `0` (`NVTX_EXTENSION_FRESH`). + */ +#define NVTX_EXT_COUNTERS_SLOT_COUNT 63 + +NVTX_LINKONCE_DEFINE_GLOBAL intptr_t +NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersSlots)[NVTX_EXT_COUNTERS_SLOT_COUNT + 1] + = {0}; + +/* Avoid warnings about missing prototype. */ +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersInitOnce)(void); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersInitOnce)(void) +{ + intptr_t* fnSlots = NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersSlots) + 1; + nvtxExtModuleSegment_t segment = { + 0, /* unused (only one segment) */ + NVTX_EXT_COUNTERS_SLOT_COUNT, + NVTX_NULLPTR /* function slots */ + }; + + nvtxExtModuleInfo_t module_info = { + NVTX_VERSION, sizeof(nvtxExtModuleInfo_t), + NVTX_EXT_COUNTERS_MODULEID, NVTX_EXT_COUNTERS_COMPATID, + 1, NVTX_NULLPTR, /* number of segments, segments */ + NVTX_NULLPTR, /* no export function needed */ + NVTX_NULLPTR /* no extension private info */ + }; + + segment.functionSlots = fnSlots; + module_info.segments = &segment; + + NVTX_INFO( "%s\n", __FUNCTION__ ); + + NVTX_VERSIONED_IDENTIFIER(nvtxExtInitOnce)(&module_info, + NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersSlots)); +} + +#define NVTX_EXT_COUNTERS_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +typedef ret_type (*fn_name##_impl_fntype)signature; \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + intptr_t* pSlot = &NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersSlots)[NVTX3EXT_CBID_##fn_name + 1]; \ + intptr_t slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED) { \ + if (slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } else { \ + NVTX_EXT_COUNTERS_VERSIONED_ID(nvtxExtCountersInitOnce)(); \ + /* Re-read function slot after extension initialization. */ \ + slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED && slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } \ + } \ + } \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) /* No tool attached. */ \ +} + +#endif /* NVTX_DISABLE */ + +/* Non-void functions. */ +#define NVTX_EXT_FN_RETURN return +#define NVTX_EXT_FN_RETURN_INVALID(rtype) return NVTX_STATIC_CAST(rtype, 0); + +NVTX_EXT_COUNTERS_IMPL_FN_V1(uint64_t, nvtxCounterRegister, + (nvtxDomainHandle_t domain, const nvtxCounterAttr_t* attr), + (domain, attr)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: Non-void functions. */ + +/* void functions. */ +#define NVTX_EXT_FN_RETURN +#define NVTX_EXT_FN_RETURN_INVALID(rtype) + +NVTX_EXT_COUNTERS_IMPL_FN_V1(void, nvtxCounterSampleInt64, + (nvtxDomainHandle_t domain, uint64_t counterId, int64_t value), + (domain, counterId, value)) + +NVTX_EXT_COUNTERS_IMPL_FN_V1(void, nvtxCounterSampleFloat64, + (nvtxDomainHandle_t domain, uint64_t counterId, double value), + (domain, counterId, value)) + +NVTX_EXT_COUNTERS_IMPL_FN_V1(void, nvtxCounterSample, + (nvtxDomainHandle_t domain, uint64_t counterId, const void* values, size_t size), + (domain, counterId, values, size)) + +NVTX_EXT_COUNTERS_IMPL_FN_V1(void, nvtxCounterSampleNoValue, + (nvtxDomainHandle_t domain, uint64_t counterId, uint8_t reason), + (domain, counterId, reason)) + +NVTX_EXT_COUNTERS_IMPL_FN_V1(void, nvtxCounterBatchSubmit, + (nvtxDomainHandle_t domain, const nvtxCounterBatch_t* counterData), + (domain, counterData)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: void functions. */ + +/* Keep NVTX_EXT_COUNTERS_IMPL_FN_V1 defined for a future version of this extension. */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* NVTX_EXT_IMPL_COUNTERS_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMemCudaRt_v1.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMemCudaRt_v1.h new file mode 100644 index 0000000000000000000000000000000000000000..92e309ad0863e208fad16e67561545d252ef0154 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMemCudaRt_v1.h @@ -0,0 +1,72 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_MEM_CUDART_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExtMemCudaRt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifndef NVTX_EXT_IMPL_MEM_CUDART_V1 +#define NVTX_EXT_IMPL_MEM_CUDART_V1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* NVTX_EXT_MEM_IMPL_FN_V1 defined in nvtxExtImplMem_v1.h */ + +/* Non-void functions. */ +#define NVTX_EXT_FN_RETURN return +#define NVTX_EXT_FN_RETURN_INVALID(rtype) return NVTX_NULLPTR; + +NVTX_EXT_MEM_IMPL_FN_V1(nvtxMemPermissionsHandle_t, nvtxMemCudaGetProcessWidePermissions, (nvtxDomainHandle_t domain), (domain)) + +NVTX_EXT_MEM_IMPL_FN_V1(nvtxMemPermissionsHandle_t, nvtxMemCudaGetDeviceWidePermissions, (nvtxDomainHandle_t domain, int device), (domain, device)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: Non-void functions. */ + +/* void functions. */ +#define NVTX_EXT_FN_RETURN +#define NVTX_EXT_FN_RETURN_INVALID(rtype) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemCudaSetPeerAccess, (nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissions, int devicePeer, uint32_t flags), (domain, permissions, devicePeer, flags)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemCudaMarkInitialized, (nvtxDomainHandle_t domain, cudaStream_t stream, uint8_t isPerThreadStream, nvtxMemMarkInitializedBatch_t const* desc), (domain, stream, isPerThreadStream, desc)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: void functions. */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* NVTX_EXT_IMPL_MEM_CUDART_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMem_v1.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMem_v1.h new file mode 100644 index 0000000000000000000000000000000000000000..e2a7c6edd5c37f9734478f68ef8186e163efdaee --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplMem_v1.h @@ -0,0 +1,168 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_MEM_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExtMem.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#define NVTX_EXT_IMPL_GUARD +#include "nvtxExtImpl.h" +#undef NVTX_EXT_IMPL_GUARD + +#ifndef NVTX_EXT_IMPL_MEM_V1 +#define NVTX_EXT_IMPL_MEM_V1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef NVTX_DISABLE + +#include "nvtxExtHelperMacros.h" + +#define NVTX_EXT_MEM_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + NVTX_EXT_HELPER_UNUSED_ARGS arg_names \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) \ +} + +#else /* NVTX_DISABLE */ + +/* + * Function slots for the memory extension. First entry is the module + * state, initialized to `0` (`NVTX_EXTENSION_FRESH`). + */ +#define NVTX_EXT_MEM_SLOT_COUNT 63 + +NVTX_LINKONCE_DEFINE_GLOBAL intptr_t +NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemSlots)[NVTX_EXT_MEM_SLOT_COUNT + 1] + = {0}; + +/* Avoid warnings about missing prototype. */ +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemInitOnce)(void); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemInitOnce)(void) +{ + intptr_t* fnSlots = NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemSlots) + 1; + nvtxExtModuleSegment_t segment = { + 1, /* only one segment, hard-code ID */ + NVTX_EXT_MEM_SLOT_COUNT, + NVTX_NULLPTR /* function slots */ + }; + + nvtxExtModuleInfo_t module_info = { + NVTX_VERSION, sizeof(nvtxExtModuleInfo_t), + NVTX_EXT_MODULEID_MEM, NVTX_EXT_COMPATID_MEM, + 1, NVTX_NULLPTR, /* number of segments, segments */ + NVTX_NULLPTR, /* no export function needed */ + NVTX_NULLPTR /* no extension private info */ + }; + + segment.functionSlots = fnSlots; + module_info.segments = &segment; + + NVTX_INFO( "%s\n", __FUNCTION__ ); + + NVTX_VERSIONED_IDENTIFIER(nvtxExtInitOnce)(&module_info, + NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemSlots)); +} + +#define NVTX_EXT_MEM_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +typedef ret_type (*fn_name##_impl_fntype)signature; \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + intptr_t* pSlot = &NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemSlots)[NVTX3EXT_CBID_##fn_name + 1]; \ + intptr_t slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED) { \ + if (slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } else { \ + NVTX_EXT_MEM_VERSIONED_ID(nvtxExtMemInitOnce)(); \ + /* Re-read function slot after extension initialization. */ \ + slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED && slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } \ + } \ + } \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) /* No tool attached. */ \ +} + +#endif /* NVTX_DISABLE */ + +/* Non-void functions. */ +#define NVTX_EXT_FN_RETURN return +#define NVTX_EXT_FN_RETURN_INVALID(rtype) return NVTX_NULLPTR; + +NVTX_EXT_MEM_IMPL_FN_V1(nvtxMemHeapHandle_t, nvtxMemHeapRegister, (nvtxDomainHandle_t domain, nvtxMemHeapDesc_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(nvtxMemPermissionsHandle_t, nvtxMemPermissionsCreate, (nvtxDomainHandle_t domain, int32_t creationflags), (domain, creationflags)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: Non-void functions. */ + +/* void functions. */ +#define NVTX_EXT_FN_RETURN +#define NVTX_EXT_FN_RETURN_INVALID(rtype) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemHeapUnregister, (nvtxDomainHandle_t domain, nvtxMemHeapHandle_t heap), (domain, heap)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemHeapReset, (nvtxDomainHandle_t domain, nvtxMemHeapHandle_t heap), (domain, heap)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemRegionsRegister, (nvtxDomainHandle_t domain, nvtxMemRegionsRegisterBatch_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemRegionsResize, (nvtxDomainHandle_t domain, nvtxMemRegionsResizeBatch_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemRegionsUnregister, (nvtxDomainHandle_t domain, nvtxMemRegionsUnregisterBatch_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemRegionsName, (nvtxDomainHandle_t domain, nvtxMemRegionsNameBatch_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemPermissionsAssign, (nvtxDomainHandle_t domain, nvtxMemPermissionsAssignBatch_t const* desc), (domain, desc)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemPermissionsDestroy, (nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissions), (domain, permissions)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemPermissionsReset, (nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissions), (domain, permissions)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemPermissionsBind, (nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissions, uint32_t bindScope, uint32_t bindFlags), (domain, permissions, bindScope, bindFlags)) + +NVTX_EXT_MEM_IMPL_FN_V1(void, nvtxMemPermissionsUnbind, (nvtxDomainHandle_t domain, uint32_t bindScope), (domain, bindScope)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: void functions. */ + +/* Keep NVTX_EXT_MEM_IMPL_FN_V1 defined for a future version of this extension. */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* NVTX_EXT_IMPL_MEM_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplPayload_v1.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplPayload_v1.h new file mode 100644 index 0000000000000000000000000000000000000000..39d99011005cbabf319726d277e54ac352b6f3da --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtImplPayload_v1.h @@ -0,0 +1,265 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_PAYLOAD_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExtPayload.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#define NVTX_EXT_IMPL_GUARD +#include "nvtxExtImpl.h" +#undef NVTX_EXT_IMPL_GUARD + +#ifndef NVTX_EXT_IMPL_PAYLOAD_V1 +#define NVTX_EXT_IMPL_PAYLOAD_V1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef NVTX_DISABLE + +#include "nvtxExtHelperMacros.h" + +#define NVTX_EXT_PAYLOAD_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + NVTX_EXT_HELPER_UNUSED_ARGS arg_names \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) \ +} + +#define NVTX_EXT_PAYLOAD_IMPL_FN_NOARGS_V1(ret_type, fn_name) \ +NVTX_DECLSPEC ret_type NVTX_API fn_name (void) { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) \ +} + +#else /* NVTX_DISABLE */ + +#include "nvtxExtPayloadTypeInfo.h" + +/* + * Function slots for the payload extension. First entry is the module state, + * initialized to `0` (`NVTX_EXTENSION_FRESH`). + */ +#define NVTX_EXT_PAYLOAD_SLOT_COUNT 63 + +NVTX_LINKONCE_DEFINE_GLOBAL intptr_t +NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots)[NVTX_EXT_PAYLOAD_SLOT_COUNT + 1] + = {0}; + +/* `NVTX_LINKONCE_FWDDECL_FUNCTION` is used to avoid warnings about missing prototypes. */ + +/* This helper returns always `1` as `uint8_t`. */ +NVTX_LINKONCE_FWDDECL_FUNCTION uint8_t NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxReturnOne)(void); +NVTX_LINKONCE_DEFINE_FUNCTION uint8_t NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxReturnOne)(void) +{ + return NVTX_STATIC_CAST(uint8_t, 1); +} + +/* + * If a tool is attached, but does not handle `nvtxDomainIsEnabled`, the latter + * will always return `1` (enabled). + */ +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxInitIsDomainEnabledFn)(void); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxInitIsDomainEnabledFn)(void) +{ + intptr_t* pSlot = &NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots)[NVTX3EXT_CBID_nvtxDomainIsEnabled + 1]; + + /* The initialization disables all slots that have not been set by the tool. */ + if (*pSlot == NVTX_EXTENSION_DISABLED) + { + intptr_t* moduleState = NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots); + int isInitFnSet = + NVTX_VERSIONED_IDENTIFIER(nvtxExtGlobals1).injectionFnPtr != NVTX_NULLPTR; + + /* Make `nvtxDomainIsEnabled` return `1`, if the tool does not provide an extension + initialization function or if the tool does not handle `nvtxDomainIsEnabled`. */ + if (*moduleState == NVTX_EXTENSION_DISABLED || + (isInitFnSet && *moduleState != NVTX_EXTENSION_INIT_FN_FAILED)) + { + *pSlot = NVTX_REINTERPRET_CAST(intptr_t, NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxReturnOne)); + } + } +} + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadInitOnce)(void); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadInitOnce)(void) +{ + intptr_t* fnSlots = NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots) + 1; + nvtxExtModuleSegment_t segment = { + 0, /* unused (only one segment) */ + NVTX_EXT_PAYLOAD_SLOT_COUNT, + NVTX_NULLPTR /* function slots */ + }; + + nvtxExtModuleInfo_t module_info = { + NVTX_VERSION, sizeof(nvtxExtModuleInfo_t), + NVTX_EXT_PAYLOAD_MODULEID, NVTX_EXT_PAYLOAD_COMPATID, + 1, NVTX_NULLPTR, /* number of segments, segments */ + NVTX_NULLPTR, /* no export function needed */ + /* bake type sizes and alignment information into program binary */ + &(NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadTypeInfo)) + }; + + segment.functionSlots = fnSlots; + module_info.segments = &segment; + + NVTX_INFO( "%s\n", __FUNCTION__ ); + + NVTX_VERSIONED_IDENTIFIER(nvtxExtInitOnce)(&module_info, + NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots)); + + NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxInitIsDomainEnabledFn)(); +} + +#define NVTX_EXT_PAYLOAD_IMPL_FN_V1(ret_type, fn_name, signature, arg_names) \ +typedef ret_type (*fn_name##_impl_fntype)signature; \ +NVTX_DECLSPEC ret_type NVTX_API fn_name signature { \ + NVTX_SET_NAME_MANGLING_OPTIONS \ + intptr_t* pSlot = &NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadSlots)[NVTX3EXT_CBID_##fn_name + 1]; \ + intptr_t slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED) { \ + if (slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } else { \ + NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadInitOnce)(); \ + /* Re-read function slot after extension initialization. */ \ + slot = *pSlot; \ + if (slot != NVTX_EXTENSION_DISABLED && slot != NVTX_EXTENSION_FRESH) { \ + NVTX_EXT_FN_RETURN (*NVTX_REINTERPRET_CAST(fn_name##_impl_fntype, slot)) arg_names; \ + } \ + } \ + } \ + NVTX_EXT_FN_RETURN_INVALID(ret_type) /* No tool attached. */ \ +} + +#define NVTX_EXT_PAYLOAD_IMPL_FN_NOARGS_V1(ret_type, fn_name) \ + NVTX_EXT_PAYLOAD_IMPL_FN_V1(ret_type, fn_name, (void), ()) + +#endif /* NVTX_DISABLE */ + +/* Push/pop functions return `NVTX_NO_PUSH_POP_TRACKING` if no tool is attached. */ +#define NVTX_EXT_FN_RETURN return +#define NVTX_EXT_FN_RETURN_INVALID(rtype) return NVTX_NO_PUSH_POP_TRACKING; + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(int, nvtxRangePushPayload, + (nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count), + (domain, payloadData, count)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(int, nvtxRangePopPayload, + (nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count), + (domain, payloadData, count)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID + +/* Non-void functions. */ +#define NVTX_EXT_FN_RETURN return +#define NVTX_EXT_FN_RETURN_INVALID(rtype) return NVTX_STATIC_CAST(rtype, 0); + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(uint64_t, nvtxPayloadSchemaRegister, + (nvtxDomainHandle_t domain, const nvtxPayloadSchemaAttr_t* attr), + (domain, attr)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(uint64_t, nvtxPayloadEnumRegister, + (nvtxDomainHandle_t domain, const nvtxPayloadEnumAttr_t* attr), + (domain, attr)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(nvtxRangeId_t, nvtxRangeStartPayload, + (nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count), + (domain, payloadData, count)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(uint8_t, nvtxDomainIsEnabled, (nvtxDomainHandle_t domain), (domain)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(uint64_t, nvtxScopeRegister, (nvtxDomainHandle_t domain, + const nvtxScopeAttr_t* attr), (domain, attr)) + +NVTX_EXT_PAYLOAD_IMPL_FN_NOARGS_V1(int64_t, nvtxTimestampGet) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(uint64_t, nvtxTimeDomainRegister, + (nvtxDomainHandle_t domain, const nvtxTimeDomainAttr_t* attr), + (domain, attr)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: Non-void functions. */ + +/* void functions. */ +#define NVTX_EXT_FN_RETURN +#define NVTX_EXT_FN_RETURN_INVALID(rtype) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxMarkPayload, (nvtxDomainHandle_t domain, + const nvtxPayloadData_t* payloadData, size_t count), (domain, payloadData, count)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxRangeEndPayload, (nvtxDomainHandle_t domain, + nvtxRangeId_t id, const nvtxPayloadData_t* payloadData, size_t count), + (domain, id, payloadData, count)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxTimerSource, + (nvtxDomainHandle_t domain, uint64_t timeDomainId, uint64_t flags, int64_t (*timestampProviderFn)(void)), + (domain, timeDomainId, flags, timestampProviderFn)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxTimerSourceWithData, + (nvtxDomainHandle_t domain, uint64_t timeDomainId, uint64_t flags, int64_t (*timestampProviderFn)(void* data), void* data), + (domain, timeDomainId, flags, timestampProviderFn, data)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxTimeSyncPoint, + (nvtxDomainHandle_t domain, uint64_t timeDomainId1, uint64_t timeDomainId2, + int64_t timestamp1, int64_t timestamp2), + (domain, timeDomainId1, timeDomainId2, timestamp1, timestamp2)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxTimeSyncPointTable, + (nvtxDomainHandle_t domain, uint64_t timeDomainIdSrc, uint64_t timeDomainIdDst, + const nvtxSyncPoint_t* syncPoints, size_t count), + (domain, timeDomainIdSrc, timeDomainIdDst, syncPoints, count)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxTimestampConversionFactor, + (nvtxDomainHandle_t domain, uint64_t timeDomainIdSrc, uint64_t timeDomainIdDst, + double slope, int64_t timestampSrc, int64_t timestampDst), + (domain, timeDomainIdSrc, timeDomainIdDst, slope, timestampSrc, timestampDst)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxEventSubmit, + (nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t numPayloads), + (domain, payloadData, numPayloads)) + +NVTX_EXT_PAYLOAD_IMPL_FN_V1(void, nvtxEventBatchSubmit, (nvtxDomainHandle_t domain, + const nvtxEventBatch_t* eventBatch), (domain, eventBatch)) + +#undef NVTX_EXT_FN_RETURN +#undef NVTX_EXT_FN_RETURN_INVALID +/* END: void functions. */ + +/* Keep NVTX_EXT_PAYLOAD_IMPL_FN_V1 defined for a future version of this extension. */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* NVTX_EXT_IMPL_PAYLOAD_V1 */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtInit.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtInit.h new file mode 100644 index 0000000000000000000000000000000000000000..bbcf4b734893c4385b679fa80c6c20a5b3b358f9 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtInit.h @@ -0,0 +1,437 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_INIT_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* ---- Platform-independent helper definitions and functions ---- */ + +/* Prefer macros over inline functions to reduce symbol resolution at link time */ + +#if defined(_WIN32) +#define NVTX_ATOMIC_WRITE_PTR(address, value) \ + InterlockedExchangePointer(NVTX_REINTERPRET_CAST(volatile PVOID*, (address)), \ + NVTX_REINTERPRET_CAST(PVOID, (value))) +#define NVTX_ATOMIC_CAS_PTR(old, address, exchange, comparand) \ + (old) = NVTX_REINTERPRET_CAST(intptr_t, InterlockedCompareExchangePointer( \ + NVTX_REINTERPRET_CAST(volatile PVOID*, (address)), \ + NVTX_REINTERPRET_CAST(PVOID, (exchange)), \ + NVTX_REINTERPRET_CAST(PVOID, (comparand)))) +#elif defined(__GNUC__) +/* Ensure full memory barrier for atomics, to match Windows functions */ +#define NVTX_ATOMIC_WRITE_PTR(address, value) \ + __sync_synchronize(); *address = value; __sync_synchronize() +#define NVTX_ATOMIC_CAS_PTR(old, address, exchange, comparand) \ + old = __sync_val_compare_and_swap(address, comparand, exchange) +#else +#error The library does not support your configuration! +#endif + +#ifndef NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY +/* Define this to 1 for platforms that where pre-injected libraries can be discovered. */ +#if defined(_WIN32) +/* Windows has no process-wide table of dynamic library symbols, so this can't be supported. */ +#define NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY 0 +#else +/* POSIX platforms allow calling dlsym on a null module to use the process-wide table. + * Note: Still disabled in load sequence version 2. Needs to support following the + * RTLD_NEXT chain, and needs more testing before support can be enabled by default. */ +#define NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY 0 +#endif +#endif + +#ifndef NVTX_SUPPORT_ENV_VARS +/* Define this to 1 for platforms that support environment variables. */ +/* TODO: Detect UWP, a.k.a. Windows Store app, and set this to 0. */ +/* Try: #if defined(WINAPI_FAMILY_PARTITION) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#define NVTX_SUPPORT_ENV_VARS 1 +#endif + +#ifndef NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY +/* Define this to 1 for platforms that support dynamic/shared libraries */ +#define NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY 1 +#endif + +#ifndef NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE +#if defined(__ANDROID__) +#define NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE 1 +#else +#define NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE 0 +#endif +#endif + +#ifndef NVTX_SUPPORT_STATIC_INJECTION_LIBRARY +/* On platforms that support weak symbols (i.e. non-Windows), injection libraries may +* be statically linked into an application. This is useful for platforms where dynamic +* injection is not available. Weak symbols not marked extern are definitions, not just +* declarations. They are guaranteed to be initialized to zero if no normal definitions +* are found by the linker to override them. This means the NVTX load sequence can safely +* detect the presence of a static injection -- if InitializeInjectionNvtxExtension_fnptr is zero, +* there is no static injection. */ +#if defined(__GNUC__) && !defined(_WIN32) && !defined(__CYGWIN__) +#define NVTX_SUPPORT_STATIC_INJECTION_LIBRARY 1 +#else +#define NVTX_SUPPORT_STATIC_INJECTION_LIBRARY 0 +#endif +#endif + +#if NVTX_SUPPORT_STATIC_INJECTION_LIBRARY && !defined(NVTX_STATIC_INJECTION_IMPL) +/* To make an NVTX injection library support static injection, it must do these things: +* - Define InitializeInjectionNvtxExtension_fnptr as a normal symbol (not weak), pointing to +* the implementation of InitializeInjectionNvtxExtension (which does not need to be a +* dynamic export if only supporting static injection). +* - Define NVTX_STATIC_INJECTION_IMPL so the weak definition below is skipped. +* - Compile the static injection files with -fPIC if they are to be linked with other +* files compiled this way. If you forget this, GCC will simply tell you to add it. +* When building the application, there a few ways to link in a static injection: +* - Compile the injection's source files normally, and include the .o files as inputs +* to the linker. +* - If the injection is provided as an archive (.a file), it will not resolve any +* unresolved symbols, so the linker will skip it by default. This can be fixed +* by wrapping the static injection's name on the linker command line with options +* to treat it differently. For example: +* gcc example.o libfoo.a -Wl,--whole-archive libinj-static.a -Wl,--no-whole-archive libbar.a +* Note that libinj-static.a is bracketed by options to turn on "whole archive" and +* then back off again afterwards, so libfoo.a and libbar.a are linked normally. +* - In CMake, a static injection can be added with options like this: +* target_link_libraries(app PRIVATE -Wl,--whole-archive inj-static -Wl,--no-whole-archive) +*/ +__attribute__((weak)) NvtxExtInitializeInjectionFunc_t InitializeInjectionNvtxExtension_fnptr; +#endif + +/* This function tries to find or load an NVTX injection library and get the +* address of its InitializeInjectionExtension function. If such a function pointer +* is found, it is called, and passed the address of this NVTX instance's +* nvtxGetExportTable function, so the injection can attach to this instance. +* If the initialization fails for any reason, any dynamic library loaded will +* be freed, and all NVTX implementation functions will be set to no-ops. If +* initialization succeeds, NVTX functions not attached to the tool will be set +* to no-ops. This is implemented as one function instead of several small +* functions to minimize the number of weak symbols the linker must resolve. +* Order of search is: +* - Pre-injected library exporting InitializeInjectionNvtxExtension +* - Loadable library exporting InitializeInjectionNvtxExtension +* - Path specified by env var NVTX_INJECTION??_PATH (?? is 32 or 64) +* - On Android, libNvtxInjection??.so within the package (?? is 32 or 64) +* - Statically-linked injection library defining InitializeInjectionNvtxExtension_fnptr +*/ +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_VERSIONED_IDENTIFIER(nvtxExtLoadInjectionLibrary)( + NvtxExtInitializeInjectionFunc_t* out_init_fnptr); +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_VERSIONED_IDENTIFIER(nvtxExtLoadInjectionLibrary)( + NvtxExtInitializeInjectionFunc_t* out_init_fnptr) +{ + static const char initFuncName[] = "InitializeInjectionNvtxExtension"; +#if NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY + static const char initFuncPreinjectName[] = "InitializeInjectionNvtxExtensionPreinject"; +#endif + NvtxExtInitializeInjectionFunc_t init_fnptr = NVTX_NULLPTR; + NVTX_DLLHANDLE injectionLibraryHandle = NVTX_DLLDEFAULT; + + if (out_init_fnptr) + { + *out_init_fnptr = NVTX_NULLPTR; + } + +#if NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY + /* Try discovering dynamic injection library to load */ + { +#if NVTX_SUPPORT_ENV_VARS + /* If env var NVTX_INJECTION64_PATH is set, it should contain the path + to a 64-bit dynamic NVTX injection library (and similar for 32-bit). */ + const NVTX_PATHCHAR* const nvtxEnvVarName = (sizeof(void*) == 4) + ? NVTX_STR("NVTX_INJECTION32_PATH") + : NVTX_STR("NVTX_INJECTION64_PATH"); +#endif /* NVTX_SUPPORT_ENV_VARS */ + NVTX_PATHCHAR injectionLibraryPathBuf[NVTX_BUFSIZE]; + const NVTX_PATHCHAR* injectionLibraryPath = NVTX_NULLPTR; + + /* Refer to this variable explicitly in case all references to it are #if'ed out. */ + (void)injectionLibraryPathBuf; + +#if NVTX_SUPPORT_ENV_VARS + /* Disable the warning for getenv & _wgetenv -- this usage is safe because + these functions are not called again before using the returned value. */ +#if defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4996 ) +#endif + injectionLibraryPath = NVTX_GETENV(nvtxEnvVarName); +#if defined(_MSC_VER) +#pragma warning( pop ) +#endif +#endif + +#if NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE + if (!injectionLibraryPath) + { + const char *bits = (sizeof(void*) == 4) ? "32" : "64"; + char cmdlineBuf[32]; + char pkgName[PATH_MAX]; + int count; + int pid; + FILE *fp; + size_t bytesRead; + size_t pos; + + pid = NVTX_STATIC_CAST(int, getpid()); + count = snprintf(cmdlineBuf, sizeof(cmdlineBuf), "/proc/%d/cmdline", pid); + if (count <= 0 || count >= NVTX_STATIC_CAST(int, sizeof(cmdlineBuf))) + { + NVTX_ERR("Path buffer too small for: /proc/%d/cmdline\n", pid); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + fp = fopen(cmdlineBuf, "r"); + if (!fp) + { + NVTX_ERR("File couldn't be opened: %s\n", cmdlineBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + bytesRead = fread(pkgName, 1, sizeof(pkgName) - 1, fp); + fclose(fp); + if (bytesRead == 0) + { + NVTX_ERR("Package name couldn't be read from file: %s\n", cmdlineBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + pkgName[bytesRead] = 0; + + /* String can contain colon as a process separator. In this case the + package name is before the colon. */ + pos = 0; + while (pos < bytesRead && pkgName[pos] != ':' && pkgName[pos] != '\0') + { + ++pos; + } + pkgName[pos] = 0; + + count = snprintf(injectionLibraryPathBuf, NVTX_BUFSIZE, "/data/data/%s/files/libNvtxInjection%s.so", pkgName, bits); + if (count <= 0 || count >= NVTX_BUFSIZE) + { + NVTX_ERR("Path buffer too small for: /data/data/%s/files/libNvtxInjection%s.so\n", pkgName, bits); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + /* On Android, verify path is accessible due to aggressive file access restrictions. */ + /* For dlopen, if the filename contains a leading slash, then it is interpreted as a */ + /* relative or absolute pathname; otherwise it will follow the rules in ld.so. */ + if (injectionLibraryPathBuf[0] == '/') + { +#if (__ANDROID_API__ < 21) + int access_err = access(injectionLibraryPathBuf, F_OK | R_OK); +#else + int access_err = faccessat(AT_FDCWD, injectionLibraryPathBuf, F_OK | R_OK, 0); +#endif + if (access_err != 0) + { + NVTX_ERR("Injection library path wasn't accessible [code=%s] [path=%s]\n", strerror(errno), injectionLibraryPathBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + } + injectionLibraryPath = injectionLibraryPathBuf; + } +#endif /* NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE */ + + /* At this point, `injectionLibraryPath` is specified if a dynamic + injection library was specified by a tool. */ + if (injectionLibraryPath) + { + /* Load the injection library */ + injectionLibraryHandle = NVTX_DLLOPEN(injectionLibraryPath); + if (!injectionLibraryHandle) + { + NVTX_ERR("Failed to load injection library\n"); + return NVTX_ERR_INIT_LOAD_LIBRARY; + } + else + { + /* Attempt to get the injection library's entry-point. */ + init_fnptr = NVTX_REINTERPRET_CAST(NvtxExtInitializeInjectionFunc_t, NVTX_DLLFUNC(injectionLibraryHandle, initFuncName)); + if (!init_fnptr) + { + NVTX_DLLCLOSE(injectionLibraryHandle); + NVTX_ERR("Failed to get address of function %s from injection library\n", initFuncName); + return NVTX_ERR_INIT_MISSING_LIBRARY_ENTRY_POINT; + } + } + } + } +#endif /* NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY */ + +#if NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY + if (!init_fnptr) + { + /* Use POSIX global symbol chain to query for init function from any module */ + init_fnptr = NVTX_REINTERPRET_CAST(NvtxExtInitializeInjectionFunc_t, NVTX_DLLFUNC(NVTX_DLLDEFAULT, initFuncPreinjectName)); + } +#endif + +#if NVTX_SUPPORT_STATIC_INJECTION_LIBRARY + if (!init_fnptr) + { + /* Check weakly-defined function pointer. A statically-linked injection can define this + * as a normal symbol and set it to the address of the NVTX init function -- this will + * provide a non-null value here. If there is no other definition of this symbol, it + * will be null here. */ + if (InitializeInjectionNvtxExtension_fnptr) + { + init_fnptr = InitializeInjectionNvtxExtension_fnptr; + } + } +#endif + + if (out_init_fnptr) + { + *out_init_fnptr = init_fnptr; + } + + /* At this point, if `init_fnptr` is not set, no tool has specified an NVTX injection library. + Non-success result is returned, so that all NVTX API functions will be set to no-ops. */ + if (!init_fnptr) + { + return NVTX_ERR_NO_INJECTION_LIBRARY_AVAILABLE; + } + + return NVTX_SUCCESS; +} + +/* Avoid warnings about missing prototypes. */ +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxExtInitOnce) ( + nvtxExtModuleInfo_t* moduleInfo, intptr_t* moduleState); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxExtInitOnce) ( + nvtxExtModuleInfo_t* moduleInfo, intptr_t* moduleState) +{ + intptr_t old; + + NVTX_INFO( "%s\n", __FUNCTION__ ); + + if (*moduleState == NVTX_EXTENSION_LOADED || + *moduleState == NVTX_EXTENSION_DISABLED || + *moduleState == NVTX_EXTENSION_INIT_FN_FAILED) + { + NVTX_INFO("Module loaded\n"); + return; + } + + NVTX_ATOMIC_CAS_PTR( + old, + moduleState, + NVTX_EXTENSION_STARTING, + NVTX_EXTENSION_FRESH); + if (old == NVTX_EXTENSION_FRESH) + { + intptr_t stateReturnValue = NVTX_EXTENSION_LOADED; + NvtxExtInitializeInjectionFunc_t init_fnptr = + NVTX_VERSIONED_IDENTIFIER(nvtxExtGlobals1).injectionFnPtr; + int entryPointStatus = 0; + int forceAllToNoops = 0; + size_t s; + + /* Load and initialize injection library, which will assign the function pointers. */ + if (init_fnptr == NVTX_NULLPTR) + { + int result = 0; + + /* Try to load vanilla NVTX first. */ + nvtxInitialize(NVTX_NULLPTR); + + result = NVTX_VERSIONED_IDENTIFIER(nvtxExtLoadInjectionLibrary)(&init_fnptr); + /* At this point `init_fnptr` will be either 0 or a real function. */ + + if (result == NVTX_SUCCESS) + { + NVTX_VERSIONED_IDENTIFIER(nvtxExtGlobals1).injectionFnPtr = init_fnptr; + } + else + { + if (result == NVTX_ERR_INIT_MISSING_LIBRARY_ENTRY_POINT) + { + stateReturnValue = NVTX_EXTENSION_DISABLED; + } + NVTX_ERR("Failed to load injection library.\n"); + } + } + + if (init_fnptr != NVTX_NULLPTR) + { + /* Invoke injection library's initialization function. If it returns + 0 (failure) and a dynamic injection was loaded, unload it. */ + entryPointStatus = init_fnptr(moduleInfo); + if (entryPointStatus == 0) + { + stateReturnValue = NVTX_EXTENSION_INIT_FN_FAILED; + NVTX_ERR("Failed to initialize injection library -- initialization function returned 0\n"); + } + } + + /* Clean up any functions that are still uninitialized so that they are + skipped. Set all to null if injection init function failed as well. */ + forceAllToNoops = (init_fnptr == NVTX_NULLPTR) || (entryPointStatus == 0); + for (s = 0; s < moduleInfo->segmentsCount; ++s) + { + nvtxExtModuleSegment_t* segment = moduleInfo->segments + s; + size_t i; + for (i = 0; i < segment->slotCount; ++i) + { + if (forceAllToNoops || (segment->functionSlots[i] == NVTX_EXTENSION_FRESH)) + { + segment->functionSlots[i] = NVTX_EXTENSION_DISABLED; + } + } + } + + NVTX_MEMBAR(); + + /* Signal that initialization has finished and the function pointers are set. */ + NVTX_ATOMIC_WRITE_PTR(moduleState, stateReturnValue); + } + else /* Spin-wait until initialization has finished. */ + { + NVTX_MEMBAR(); + while (*moduleState != NVTX_EXTENSION_LOADED && + *moduleState != NVTX_EXTENSION_DISABLED && + *moduleState != NVTX_EXTENSION_INIT_FN_FAILED) + { + NVTX_YIELD(); + NVTX_MEMBAR(); + } + } +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadHelperInternal.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadHelperInternal.h new file mode 100644 index 0000000000000000000000000000000000000000..0ae383d221eed54772a5e31c4d4d0bc106b8fff0 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadHelperInternal.h @@ -0,0 +1,294 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifndef NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H +#define NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H + +/* General helper macros */ +#include "nvtxExtHelperMacros.h" + +/* Get variable name with line number (almost unique per file). */ +#define _NVTX_PAYLOAD_DATA_VAR NVTX_EXT_CONCAT(nvtxDFDB,__LINE__) + +/* Create real arguments from just pasting tokens next to each other. */ +#define _NVTX_PAYLOAD_PASS_THROUGH(...) __VA_ARGS__ + +/* Avoid prefixing `NVTX_PAYLOAD_ENTRY_` for nested payloads. */ +#define NVTX_PAYLOAD_ENTRY_THROWAWAY +#define _NVTX_PAYLOAD_NESTED(id) THROWAWAY id + +/* + * Create the NVTX binary payloads schema attributes. + * + * @param struct_id The name of the struct. + * @param schema_name The name of the schema. + * @param schema_flags Additional schema flags + * @param mask_add Fields to be added to the mask. + * @param num_entries The number schema entries. + */ +#define NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, mask_add, num_entries) \ + nvtxPayloadSchemaAttr_t struct_id##Attr = { \ + /*.fieldMask = */NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE | mask_add \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES | \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES | \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE, \ + /*.name = */schema_name, \ + /*.type = */NVTX_PAYLOAD_SCHEMA_TYPE_STATIC, \ + /*.flags = */schema_flags, \ + /*.entries = */struct_id##Schema, /*.numEntries = */num_entries, \ + /*.payloadStaticSize = */sizeof(struct_id), \ + /*.packAlign = */0, /*.schemaId = */schema_id}; + + +/*****************************************************************/ +/*** Helper for `NVTX_DEFINE_SCHEMA_FOR_STRUCT[_AND_REGISTER]` ***/ + +/* First part of schema entry for different number of arguments. */ +#define _NVTX_PAYLOAD_SCHEMA_EF2(member, etype) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, NVTX_NULLPTR, NVTX_NULLPTR, 0, +#define _NVTX_PAYLOAD_SCHEMA_EF3(member, etype, name) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, NVTX_NULLPTR, 0, +#define _NVTX_PAYLOAD_SCHEMA_EF4(member, etype, name, desc) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, 0, +#define _NVTX_PAYLOAD_SCHEMA_EF5(member, etype, name, desc, arraylen) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen, +#define _NVTX_PAYLOAD_SCHEMA_EF6(member, etype, name, desc, arraylen, flags) \ + NVTX_PAYLOAD_ENTRY_FLAG_##flags, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen, + +#define _NVTX_PAYLOAD_SCHEMA_ENTRY_FRONT(...) \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_SCHEMA_EF, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) + +/* Second part of schema entry (append struct member). + (At least two arguments are passed (`member` and `etype`). */ +#define _NVTX_PAYLOAD_SCHEMA_ENTRY_END(member, ...) member + +/* Resolve to schema entry. `entry` is `(ctype, name, ...)`. */ +#define _NVTX_PAYLOAD_SCHEMA_ENTRY(struct_id, entry) \ + {_NVTX_PAYLOAD_SCHEMA_ENTRY_FRONT entry \ + offsetof(struct_id, _NVTX_PAYLOAD_SCHEMA_ENTRY_END entry)}, + +/* Handle up to 16 schema entries. */ +#define _NVTX_PAYLOAD_SME1(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) +#define _NVTX_PAYLOAD_SME2(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME1(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME3(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME2(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME4(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME3(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME5(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME4(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME6(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME5(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME7(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME6(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME8(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME7(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME9(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME8(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME10(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME9(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME11(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME10(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME12(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME11(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME13(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME12(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME14(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME13(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME15(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME14(s,__VA_ARGS__) +#define _NVTX_PAYLOAD_SME16(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME15(s,__VA_ARGS__) + +#define _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, ...) \ + nvtxPayloadSchemaEntry_t struct_id##Schema[] = { \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_SME, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(struct_id, __VA_ARGS__) \ + {0, 0} \ + }; + +/* + * Handle optional parameters for `NVTX_DEFINE_SCHEMA_FOR_STRUCT[_AND_REGISTER]`. + */ +#define _NVTX_DEFINE_S4S_6(struct_id, schema_name, prefix, schema_flags, schema_id, entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID |,\ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_S4S_5(struct_id, schema_name, prefix, schema_flags, entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, 0, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS |, \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_S4S_4(struct_id, schema_name, prefix, entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME |, \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_S4S_3(struct_id, schema_name, entries) \ + _NVTX_DEFINE_S4S_4(struct_id, schema_name, /*prefix*/, entries) +#define _NVTX_DEFINE_S4S_2(struct_id, entries) \ + _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, NVTX_NULLPTR, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, ,\ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) + +#define _NVTX_DEFINE_SCHEMA_FOR_STRUCT(struct_id, ...) \ + NVTX_EXT_CONCAT(_NVTX_DEFINE_S4S_, \ + NVTX_EXT_NUM_ARGS(struct_id, __VA_ARGS__))(struct_id, __VA_ARGS__) + +/*** END: Helper for `NVTX_PAYLOAD_STATIC_SCHEMA_{DEFINE,SETUP}` ***/ + + +/******************************************************************/ +/*** Helper for `NVTX_DEFINE_STRUCT_WITH_SCHEMA[_AND_REGISTER]` ***/ + +/* Extract struct member for fixed-size arrays. */ +#define _NVTX_PAYLOAD_STRUCT_ARR_MEM1(name) name +#define _NVTX_PAYLOAD_STRUCT_ARR_MEM2(name, count) name[count] + +/* Extract type and member name and handle special case of fixed-size array. */ +#define _NVTX_PAYLOAD_STRUCT_E2(type, member) type member; +#define _NVTX_PAYLOAD_STRUCT_E3(type, member, etype) type member; +#define _NVTX_PAYLOAD_STRUCT_E4(type, member, etype, name) type member; +#define _NVTX_PAYLOAD_STRUCT_E5(type, member, etype, name, desc) type member; +#define _NVTX_PAYLOAD_STRUCT_E6(type, member, etype, name, desc, arraylen) \ + type NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT_ARR_MEM, NVTX_EXT_NUM_ARGS member) member; +#define _NVTX_PAYLOAD_STRUCT_E7(type, member, etype, name, desc, arraylen, flags) \ + _NVTX_PAYLOAD_STRUCT_E6(type, member, etype, name, desc, arraylen) + +/* Handle different number of arguments per struct entry. */ +#define _NVTX_PAYLOAD_STRUCT_ENTRY_(...) \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT_E, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) + +/* Handle up to 16 struct members. */ +#define _NVTX_PAYLOAD_STRUCT_ENTRY(entry) _NVTX_PAYLOAD_STRUCT_ENTRY_ entry +#define _NVTX_PAYLOAD_STRUCT1(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) +#define _NVTX_PAYLOAD_STRUCT2(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT1(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT3(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT2(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT4(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT3(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT5(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT4(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT6(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT5(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT7(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT6(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT8(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT7(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT9(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT8(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT10(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT9(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT11(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT10(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT12(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT11(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT13(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT12(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT14(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT13(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT15(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT14(__VA_ARGS__) +#define _NVTX_PAYLOAD_STRUCT16(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT15(__VA_ARGS__) + +/* Generate the typedef. */ +#define _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, ...) \ + typedef struct { \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) \ + } struct_id; + +/* Generate first part of the schema entry. */ +#define _NVTX_PAYLOAD_INIT_SCHEMA_N3(type, memberId, etype) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, NVTX_NULLPTR, NVTX_NULLPTR, 0, +#define _NVTX_PAYLOAD_INIT_SCHEMA_N4(type, memberId, etype, name) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, NVTX_NULLPTR, 0, +#define _NVTX_PAYLOAD_INIT_SCHEMA_N5(type, memberId, etype, name, desc) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, 0, +#define _NVTX_PAYLOAD_INIT_SCHEMA_N6(type, memberId, etype, name, desc, arraylen) \ + 0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen, +#define _NVTX_PAYLOAD_INIT_SCHEMA_N7(type, memberId, etype, name, desc, arraylen, flags) \ + NVTX_PAYLOAD_ENTRY_FLAG_##flags, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen, + +#define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_FRONT(...) \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SCHEMA_N, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) + +#define _NVTX_PAYLOAD_ARRAY_MEMBER1(name) name +#define _NVTX_PAYLOAD_ARRAY_MEMBER2(name, count) name + +/* Resolve to last part of schema entry (append struct member). */ +#define _NVTX_PAYLOAD_INIT_SCHEMA_NX3(type, memberId, ...) memberId +#define _NVTX_PAYLOAD_INIT_SCHEMA_NX4(type, memberId, ...) memberId +#define _NVTX_PAYLOAD_INIT_SCHEMA_NX5(type, memberId, ...) memberId +#define _NVTX_PAYLOAD_INIT_SCHEMA_NX6(type, memberId, ...) \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_ARRAY_MEMBER, NVTX_EXT_NUM_ARGS memberId) memberId +#define _NVTX_PAYLOAD_INIT_SCHEMA_NX7(type, memberId, ...) \ + _NVTX_PAYLOAD_INIT_SCHEMA_NX6(type, memberId, __VA_ARGS__) + +#define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_END(...) \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SCHEMA_NX, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) + +/* Resolve to schema entry. `entry` is `(ctype, name, ...)`. */ +#define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(struct_id, entry) \ + {_NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_FRONT entry \ + offsetof(struct_id, _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_END entry)}, + +/* Handle up to 16 schema entries. */ +#define _NVTX_PAYLOAD_INIT_SME1(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) +#define _NVTX_PAYLOAD_INIT_SME2(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME1(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME3(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME2(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME4(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME3(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME5(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME4(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME6(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME5(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME7(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME6(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME8(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME7(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME9(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME8(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME10(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME9(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME11(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME10(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME12(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME11(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME13(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME12(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME14(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME13(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME15(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME14(s, __VA_ARGS__) +#define _NVTX_PAYLOAD_INIT_SME16(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME15(s, __VA_ARGS__) + +#define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, ...) \ + nvtxPayloadSchemaEntry_t struct_id##Schema[] = { \ + NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SME, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(struct_id, __VA_ARGS__) \ + {0, 0} \ + }; + +/* + * Handle optional parameters for `NVTX_DEFINE_STRUCT_WITH_SCHEMA[_AND_REGISTER]`. + */ +#define _NVTX_DEFINE_SWS_6(struct_id, schema_name, prefix, schema_flags, schema_id, entries) \ + _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS | \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID |, \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_SWS_5(struct_id, schema_name, prefix, schema_flags, entries) \ + _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, 0, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS |, \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_SWS_4(struct_id, schema_name, prefix, entries) \ + _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, \ + NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME |, \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) +#define _NVTX_DEFINE_SWS_3(struct_id, schema_name, entries) \ + _NVTX_DEFINE_SWS_4(struct_id, schema_name, /* no prefix */, entries) +#define _NVTX_DEFINE_SWS_2(struct_id, entries) \ + _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \ + NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, NVTX_NULLPTR, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, , \ + NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries)) + +#define _NVTX_DEFINE_STRUCT_WITH_SCHEMA(struct_id, ...) \ + NVTX_EXT_CONCAT(_NVTX_DEFINE_SWS_, \ + NVTX_EXT_NUM_ARGS(struct_id, __VA_ARGS__))(struct_id, __VA_ARGS__) + +/*** END: Helper for `NVTX_PAYLOAD_STATIC_SCHEMA_{INIT,CREATE}` */ + +#endif /* NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadTypeInfo.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadTypeInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..6333f3a02f3453484b118ba90eb06bc3289ae30c --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtPayloadTypeInfo.h @@ -0,0 +1,189 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_IMPL_PAYLOAD_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExtPayload.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +typedef void* nvtx_payload_pointer_type; + +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) +#ifndef __APPLE__ +#include +#endif +#include +#endif + +/* `char8_t` is available as of C++20 or C23 */ +#if ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || (defined(__cplusplus) && __cplusplus >= 201811L)) && !defined(__APPLE__) +#define NVTX_HAVE_CHAR8 1 +#else +#define NVTX_HAVE_CHAR8 0 +#endif + +/* `char16_t` and `char32_t` are available as of C++11 or C11 */ +#if ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || (defined(__cplusplus) && __cplusplus >= 200704L)) && !defined(__APPLE__) +#define NVTX_HAVE_CHAR16_CHAR32 1 +#else +#define NVTX_HAVE_CHAR16_CHAR32 0 +#endif + +/* `alignof` is available as of C11 or C++11. */ +#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || (defined(__cplusplus) && __cplusplus >= 201103L) + +#define nvtx_alignof(type) alignof(type) +#define nvtx_alignof2(type,tname) alignof(type) + +#else /* (__STDC_VERSION__ >= 201112L) || (__cplusplus >= 201103L) */ + +/* Create helper structs to determine type alignment. */ +#define MKTYPEDEF(type) typedef struct {char c; type d;} _nvtx_##type +#define MKTYPEDEF2(type,tname) typedef struct {char c; type d;} _nvtx_##tname + +MKTYPEDEF(char); +MKTYPEDEF2(unsigned char, uchar); +MKTYPEDEF(short); +MKTYPEDEF2(unsigned short, ushort); +MKTYPEDEF(int); +MKTYPEDEF2(unsigned int, uint); +MKTYPEDEF(long); +MKTYPEDEF2(unsigned long, ulong); +MKTYPEDEF2(long long, longlong); +MKTYPEDEF2(unsigned long long, ulonglong); + +MKTYPEDEF(int8_t); +MKTYPEDEF(uint8_t); +MKTYPEDEF(int16_t); +MKTYPEDEF(uint16_t); +MKTYPEDEF(int32_t); +MKTYPEDEF(uint32_t); +MKTYPEDEF(int64_t); +MKTYPEDEF(uint64_t); + +MKTYPEDEF(float); +MKTYPEDEF(double); +MKTYPEDEF2(long double, longdouble); + +MKTYPEDEF(size_t); +MKTYPEDEF(nvtx_payload_pointer_type); + +MKTYPEDEF(wchar_t); + +#if NVTX_HAVE_CHAR8 + MKTYPEDEF(char8_t); +#endif + +#if NVTX_HAVE_CHAR16_CHAR32 + MKTYPEDEF(char16_t); + MKTYPEDEF(char32_t); +#endif + +/* C requires to include stddef.h to use `offsetof` */ +#ifndef __cplusplus +#include +#endif + +#define nvtx_alignof(tname) offsetof(_nvtx_##tname, d) +#define nvtx_alignof2(type, tname) offsetof(_nvtx_##tname, d) + +#endif /* __STDC_VERSION__ >= 201112L */ + +#undef MKTYPEDEF +#undef MKTYPEDEF2 + +/* + * Helper array to get the alignment for each predefined C/C++ language type. + * The order of entries must match the values in`enum nvtxPayloadSchemaEntryType`. + * + * In C++, `const` variables use internal linkage by default, but we need it to + * be public (extern) since weak declarations must be public. + */ +NVTX_LINKONCE_DEFINE_GLOBAL +#ifdef __cplusplus +extern +#endif +const nvtxPayloadEntryTypeInfo_t +NVTX_EXT_PAYLOAD_VERSIONED_ID(nvtxExtPayloadTypeInfo)[NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE] = +{ + /* The first entry contains this array's length and the size of each entry in this array. */ + {NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE, sizeof(nvtxPayloadEntryTypeInfo_t)}, + + /*** C integer types ***/ + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR */ {sizeof(char), nvtx_alignof(char)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UCHAR */ {sizeof(unsigned char), nvtx_alignof2(unsigned char, uchar)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_SHORT */ {sizeof(short), nvtx_alignof(short)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_USHORT */ {sizeof(unsigned short), nvtx_alignof2(unsigned short, ushort)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_INT */ {sizeof(int), nvtx_alignof(int)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UINT */ {sizeof(unsigned int), nvtx_alignof2(unsigned int, uint)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_LONG */ {sizeof(long), nvtx_alignof(long)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_ULONG */ {sizeof(unsigned long), nvtx_alignof2(unsigned long, ulong)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG */ {sizeof(long long), nvtx_alignof2(long long, longlong)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG */ {sizeof(unsigned long long), nvtx_alignof2(unsigned long long,ulonglong)}, + + /*** Integer types with explicit size ***/ + /* NVTX_PAYLOAD_ENTRY_TYPE_INT8 */ {sizeof(int8_t), nvtx_alignof(int8_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UINT8 */ {sizeof(uint8_t), nvtx_alignof(uint8_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_INT16 */ {sizeof(int16_t), nvtx_alignof(int16_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UINT16 */ {sizeof(uint16_t), nvtx_alignof(uint16_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_INT32 */ {sizeof(int32_t), nvtx_alignof(int32_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UINT32 */ {sizeof(uint32_t), nvtx_alignof(uint32_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_INT64 */ {sizeof(int64_t), nvtx_alignof(int64_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_UINT64 */ {sizeof(uint64_t), nvtx_alignof(uint64_t)}, + + /*** C floating point types ***/ + /* NVTX_PAYLOAD_ENTRY_TYPE_FLOAT */ {sizeof(float), nvtx_alignof(float)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE */ {sizeof(double), nvtx_alignof(double)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE */ {sizeof(long double), nvtx_alignof2(long double, longdouble)}, + + /* NVTX_PAYLOAD_ENTRY_TYPE_SIZE */ {sizeof(size_t), nvtx_alignof(size_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS */ {sizeof(nvtx_payload_pointer_type), nvtx_alignof(nvtx_payload_pointer_type)}, + + /*** Special character types ***/ + /* NVTX_PAYLOAD_ENTRY_TYPE_WCHAR */ {sizeof(wchar_t), nvtx_alignof(wchar_t)}, + +#if NVTX_HAVE_CHAR8 + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 */ {sizeof(char8_t), nvtx_alignof(char8_t)}, +#else + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 */ {0, 0}, +#endif + +#if NVTX_HAVE_CHAR16_CHAR32 + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 */ {sizeof(char16_t), nvtx_alignof(char16_t)}, + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 */ {sizeof(char32_t), nvtx_alignof(char32_t)} +#else + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 */ {0, 0}, + /* NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 */ {0, 0} +#endif +}; + +#undef nvtx_alignof +#undef nvtx_alignof2 +#undef NVTX_HAVE_CHAR8 +#undef NVTX_HAVE_CHAR16_CHAR32 diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtTypes.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtTypes.h new file mode 100644 index 0000000000000000000000000000000000000000..f67fecc5e759595e99dbb05760a5d323842af3df --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxExtTypes.h @@ -0,0 +1,66 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_EXT_TYPES_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt[EXTENSION].h. +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +/* This header defines types which are used by the internal implementation +* of NVTX and callback subscribers. API clients do not use these types, +* so they are defined here instead of in nvToolsExt.h to clarify they are +* not part of the NVTX client API. */ + +#ifndef NVTXEXTTYPES_H +#define NVTXEXTTYPES_H + +typedef intptr_t (NVTX_API * NvtxExtGetExportFunction_t)(uint32_t exportFunctionId); + +typedef struct nvtxExtModuleSegment_t +{ + size_t segmentId; + size_t slotCount; + intptr_t* functionSlots; +} nvtxExtModuleSegment_t; + +typedef struct nvtxExtModuleInfo_t +{ + uint16_t nvtxVer; + uint16_t structSize; + uint16_t moduleId; + uint16_t compatId; + size_t segmentsCount; + nvtxExtModuleSegment_t* segments; + NvtxExtGetExportFunction_t getExportFunction; + const void* extInfo; +} nvtxExtModuleInfo_t; + +typedef int (NVTX_API * NvtxExtInitializeInjectionFunc_t)(nvtxExtModuleInfo_t* moduleInfo); + +#endif /* NVTXEXTTYPES_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImpl.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImpl.h new file mode 100644 index 0000000000000000000000000000000000000000..33788e4cc425c87b949663b264aca143c89cc1b5 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImpl.h @@ -0,0 +1,464 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#include +#include +#include +#include + +/* ---- Include required platform headers ---- */ + +#if defined(_WIN32) + +#include + +#else +#include + +#if defined(__ANDROID__) +#include +#endif + +#if defined(__linux__) || defined(__CYGWIN__) +#include +#endif + +#include +#include +#include +#include +#include +#include + +#endif + +/* ---- Define macros used in this file ---- */ + +#define NVTX_INIT_STATE_FRESH 0 +#define NVTX_INIT_STATE_STARTED 1 +#define NVTX_INIT_STATE_COMPLETE 2 + +#ifdef NVTX_DEBUG_PRINT +#ifdef __ANDROID__ +#include +#define NVTX_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "NVTOOLSEXT", __VA_ARGS__); +#define NVTX_INFO(...) __android_log_print(ANDROID_LOG_INFO, "NVTOOLSEXT", __VA_ARGS__); +#else +#include +#define NVTX_ERR(...) fprintf(stderr, "NVTX_ERROR: " __VA_ARGS__) +#define NVTX_INFO(...) fprintf(stderr, "NVTX_INFO: " __VA_ARGS__) +#endif +#else /* !defined(NVTX_DEBUG_PRINT) */ +#define NVTX_ERR(...) +#define NVTX_INFO(...) +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef __GNUC__ +#pragma GCC visibility push(hidden) +#endif + +/* ---- Forward declare all functions referenced in globals ---- */ + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(void); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable)( + NvtxCallbackModule callback_module, + NvtxFunctionTable* out_table, + unsigned int* out_size); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion)( + uint32_t version); +NVTX_LINKONCE_FWDDECL_FUNCTION const void* NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxGetExportTable)( + uint32_t exportTableId); + +#include "nvtxInitDecls.h" + +/* ---- Define all globals ---- */ + +typedef struct nvtxGlobals_t +{ + volatile unsigned int initState; + NvtxExportTableCallbacks etblCallbacks; + NvtxExportTableVersionInfo etblVersionInfo; + + /* Implementation function pointers */ + nvtxMarkEx_impl_fntype nvtxMarkEx_impl_fnptr; + nvtxMarkA_impl_fntype nvtxMarkA_impl_fnptr; + nvtxMarkW_impl_fntype nvtxMarkW_impl_fnptr; + nvtxRangeStartEx_impl_fntype nvtxRangeStartEx_impl_fnptr; + nvtxRangeStartA_impl_fntype nvtxRangeStartA_impl_fnptr; + nvtxRangeStartW_impl_fntype nvtxRangeStartW_impl_fnptr; + nvtxRangeEnd_impl_fntype nvtxRangeEnd_impl_fnptr; + nvtxRangePushEx_impl_fntype nvtxRangePushEx_impl_fnptr; + nvtxRangePushA_impl_fntype nvtxRangePushA_impl_fnptr; + nvtxRangePushW_impl_fntype nvtxRangePushW_impl_fnptr; + nvtxRangePop_impl_fntype nvtxRangePop_impl_fnptr; + nvtxNameCategoryA_impl_fntype nvtxNameCategoryA_impl_fnptr; + nvtxNameCategoryW_impl_fntype nvtxNameCategoryW_impl_fnptr; + nvtxNameOsThreadA_impl_fntype nvtxNameOsThreadA_impl_fnptr; + nvtxNameOsThreadW_impl_fntype nvtxNameOsThreadW_impl_fnptr; + + nvtxNameCuDeviceA_fakeimpl_fntype nvtxNameCuDeviceA_impl_fnptr; + nvtxNameCuDeviceW_fakeimpl_fntype nvtxNameCuDeviceW_impl_fnptr; + nvtxNameCuContextA_fakeimpl_fntype nvtxNameCuContextA_impl_fnptr; + nvtxNameCuContextW_fakeimpl_fntype nvtxNameCuContextW_impl_fnptr; + nvtxNameCuStreamA_fakeimpl_fntype nvtxNameCuStreamA_impl_fnptr; + nvtxNameCuStreamW_fakeimpl_fntype nvtxNameCuStreamW_impl_fnptr; + nvtxNameCuEventA_fakeimpl_fntype nvtxNameCuEventA_impl_fnptr; + nvtxNameCuEventW_fakeimpl_fntype nvtxNameCuEventW_impl_fnptr; + + nvtxNameClDeviceA_fakeimpl_fntype nvtxNameClDeviceA_impl_fnptr; + nvtxNameClDeviceW_fakeimpl_fntype nvtxNameClDeviceW_impl_fnptr; + nvtxNameClContextA_fakeimpl_fntype nvtxNameClContextA_impl_fnptr; + nvtxNameClContextW_fakeimpl_fntype nvtxNameClContextW_impl_fnptr; + nvtxNameClCommandQueueA_fakeimpl_fntype nvtxNameClCommandQueueA_impl_fnptr; + nvtxNameClCommandQueueW_fakeimpl_fntype nvtxNameClCommandQueueW_impl_fnptr; + nvtxNameClMemObjectA_fakeimpl_fntype nvtxNameClMemObjectA_impl_fnptr; + nvtxNameClMemObjectW_fakeimpl_fntype nvtxNameClMemObjectW_impl_fnptr; + nvtxNameClSamplerA_fakeimpl_fntype nvtxNameClSamplerA_impl_fnptr; + nvtxNameClSamplerW_fakeimpl_fntype nvtxNameClSamplerW_impl_fnptr; + nvtxNameClProgramA_fakeimpl_fntype nvtxNameClProgramA_impl_fnptr; + nvtxNameClProgramW_fakeimpl_fntype nvtxNameClProgramW_impl_fnptr; + nvtxNameClEventA_fakeimpl_fntype nvtxNameClEventA_impl_fnptr; + nvtxNameClEventW_fakeimpl_fntype nvtxNameClEventW_impl_fnptr; + + nvtxNameCudaDeviceA_fakeimpl_fntype nvtxNameCudaDeviceA_impl_fnptr; + nvtxNameCudaDeviceW_fakeimpl_fntype nvtxNameCudaDeviceW_impl_fnptr; + nvtxNameCudaStreamA_fakeimpl_fntype nvtxNameCudaStreamA_impl_fnptr; + nvtxNameCudaStreamW_fakeimpl_fntype nvtxNameCudaStreamW_impl_fnptr; + nvtxNameCudaEventA_fakeimpl_fntype nvtxNameCudaEventA_impl_fnptr; + nvtxNameCudaEventW_fakeimpl_fntype nvtxNameCudaEventW_impl_fnptr; + + nvtxDomainMarkEx_impl_fntype nvtxDomainMarkEx_impl_fnptr; + nvtxDomainRangeStartEx_impl_fntype nvtxDomainRangeStartEx_impl_fnptr; + nvtxDomainRangeEnd_impl_fntype nvtxDomainRangeEnd_impl_fnptr; + nvtxDomainRangePushEx_impl_fntype nvtxDomainRangePushEx_impl_fnptr; + nvtxDomainRangePop_impl_fntype nvtxDomainRangePop_impl_fnptr; + nvtxDomainResourceCreate_impl_fntype nvtxDomainResourceCreate_impl_fnptr; + nvtxDomainResourceDestroy_impl_fntype nvtxDomainResourceDestroy_impl_fnptr; + nvtxDomainNameCategoryA_impl_fntype nvtxDomainNameCategoryA_impl_fnptr; + nvtxDomainNameCategoryW_impl_fntype nvtxDomainNameCategoryW_impl_fnptr; + nvtxDomainRegisterStringA_impl_fntype nvtxDomainRegisterStringA_impl_fnptr; + nvtxDomainRegisterStringW_impl_fntype nvtxDomainRegisterStringW_impl_fnptr; + nvtxDomainCreateA_impl_fntype nvtxDomainCreateA_impl_fnptr; + nvtxDomainCreateW_impl_fntype nvtxDomainCreateW_impl_fnptr; + nvtxDomainDestroy_impl_fntype nvtxDomainDestroy_impl_fnptr; + nvtxInitialize_impl_fntype nvtxInitialize_impl_fnptr; + + nvtxDomainSyncUserCreate_fakeimpl_fntype nvtxDomainSyncUserCreate_impl_fnptr; + nvtxDomainSyncUserDestroy_fakeimpl_fntype nvtxDomainSyncUserDestroy_impl_fnptr; + nvtxDomainSyncUserAcquireStart_fakeimpl_fntype nvtxDomainSyncUserAcquireStart_impl_fnptr; + nvtxDomainSyncUserAcquireFailed_fakeimpl_fntype nvtxDomainSyncUserAcquireFailed_impl_fnptr; + nvtxDomainSyncUserAcquireSuccess_fakeimpl_fntype nvtxDomainSyncUserAcquireSuccess_impl_fnptr; + nvtxDomainSyncUserReleasing_fakeimpl_fntype nvtxDomainSyncUserReleasing_impl_fnptr; + + /* Tables of function pointers -- Extra null added to the end to ensure + * a crash instead of silent corruption if a tool reads off the end. */ + NvtxFunctionPointer* functionTable_CORE [NVTX_CBID_CORE_SIZE + 1]; + NvtxFunctionPointer* functionTable_CUDA [NVTX_CBID_CUDA_SIZE + 1]; + NvtxFunctionPointer* functionTable_OPENCL[NVTX_CBID_OPENCL_SIZE + 1]; + NvtxFunctionPointer* functionTable_CUDART[NVTX_CBID_CUDART_SIZE + 1]; + NvtxFunctionPointer* functionTable_CORE2 [NVTX_CBID_CORE2_SIZE + 1]; + NvtxFunctionPointer* functionTable_SYNC [NVTX_CBID_SYNC_SIZE + 1]; +} nvtxGlobals_t; + +#define NVTX_GLOBAL_TABLE_ENTRY(name) ( NVTX_REINTERPRET_CAST(NvtxFunctionPointer*, &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).name ## _impl_fnptr ) ) + +NVTX_LINKONCE_DEFINE_GLOBAL nvtxGlobals_t NVTX_VERSIONED_IDENTIFIER(nvtxGlobals) = +{ + NVTX_INIT_STATE_FRESH, + + { + sizeof(NvtxExportTableCallbacks), + NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable) + }, + { + sizeof(NvtxExportTableVersionInfo), + NVTX_VERSION, + 0, + NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion) + }, + + /* Implementation function pointers */ + NVTX_VERSIONED_IDENTIFIER(nvtxMarkEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxMarkA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxMarkW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangeEnd_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangePushEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangePushA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangePushW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxRangePop_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadW_impl_init), + + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventW_impl_init), + + NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventW_impl_init), + + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventW_impl_init), + + NVTX_VERSIONED_IDENTIFIER(nvtxDomainMarkEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeStartEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeEnd_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePushEx_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePop_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceCreate_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceDestroy_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateA_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateW_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainDestroy_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxInitialize_impl_init), + + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserCreate_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserDestroy_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireStart_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireFailed_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireSuccess_impl_init), + NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserReleasing_impl_init), + + /* Tables of function pointers */ + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeEnd), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePop), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCategoryA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCategoryW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameOsThreadA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameOsThreadW), + NVTX_NULLPTR + }, + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuDeviceA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuDeviceW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuContextA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuContextW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuStreamA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuStreamW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuEventA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuEventW), + NVTX_NULLPTR + }, + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClDeviceA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClDeviceW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClContextA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClContextW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClCommandQueueA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClCommandQueueW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClMemObjectA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClMemObjectW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClSamplerA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClSamplerW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClProgramA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClProgramW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClEventA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClEventW), + NVTX_NULLPTR + }, + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaDeviceA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaDeviceW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaStreamA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaStreamW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaEventA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaEventW), + NVTX_NULLPTR + }, + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainMarkEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangeStartEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangeEnd), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangePushEx), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangePop), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainResourceCreate), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainResourceDestroy), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainNameCategoryA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainNameCategoryW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRegisterStringA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRegisterStringW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainCreateA), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainCreateW), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainDestroy), + NVTX_GLOBAL_TABLE_ENTRY(nvtxInitialize), + NVTX_NULLPTR + }, + { + NVTX_NULLPTR, + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserCreate), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserDestroy), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireStart), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireFailed), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireSuccess), + NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserReleasing), + NVTX_NULLPTR + } +}; + +#undef NVTX_GLOBAL_TABLE_ENTRY + +/* ---- Define static inline implementations of core API functions ---- */ + +#include "nvtxImplCore.h" + +/* ---- Define implementations of export table functions ---- */ + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable)( + NvtxCallbackModule callback_module, + NvtxFunctionTable* out_table, + unsigned int* out_size) +{ + unsigned int bytes = 0; + NvtxFunctionTable table = NVTX_NULLPTR; + + switch (callback_module) + { + case NVTX_CB_MODULE_CORE: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE)); + break; + case NVTX_CB_MODULE_CUDA: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDA; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDA)); + break; + case NVTX_CB_MODULE_OPENCL: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_OPENCL; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_OPENCL)); + break; + case NVTX_CB_MODULE_CUDART: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDART; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDART)); + break; + case NVTX_CB_MODULE_CORE2: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE2; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE2)); + break; + case NVTX_CB_MODULE_SYNC: + table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_SYNC; + bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_SYNC)); + break; + case NVTX_CB_MODULE_INVALID: + case NVTX_CB_MODULE_SIZE: + case NVTX_CB_MODULE_FORCE_INT: + default: return 0; + } + + if (out_size) + *out_size = (bytes / NVTX_STATIC_CAST(unsigned int, sizeof(NvtxFunctionPointer*))) - 1; + + if (out_table) + *out_table = table; + + return 1; +} + +NVTX_LINKONCE_DEFINE_FUNCTION const void* NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxGetExportTable)(uint32_t exportTableId) +{ + switch (exportTableId) + { + case NVTX_ETID_CALLBACKS: return &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).etblCallbacks; + case NVTX_ETID_VERSIONINFO: return &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).etblVersionInfo; + default: return NVTX_NULLPTR; + } +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion)(uint32_t version) +{ + /* Reserved for custom implementations to resolve problems with tools */ + (void)version; +} + +/* ---- Define implementations of init versions of all API functions ---- */ + +#include "nvtxInitDefs.h" + +/* ---- Define implementations of initialization functions ---- */ + +#include "nvtxInit.h" + +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCore.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCore.h new file mode 100644 index 0000000000000000000000000000000000000000..1f51719270e4ee4644ad6287f1ca12b1efbd29b0 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCore.h @@ -0,0 +1,432 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +NVTX_DECLSPEC void NVTX_API nvtxMarkEx(const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxMarkEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkEx_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(eventAttrib); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxMarkA(const char* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxMarkA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(message); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxMarkW(const wchar_t* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxMarkW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(message); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartEx(const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxRangeStartEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartEx_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(eventAttrib); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(nvtxRangeId_t, 0); +} + +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartA(const char* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxRangeStartA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartA_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(nvtxRangeId_t, 0); +} + +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartW(const wchar_t* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxRangeStartW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartW_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(nvtxRangeId_t, 0); +} + +NVTX_DECLSPEC void NVTX_API nvtxRangeEnd(nvtxRangeId_t id) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)id; +#else /* NVTX_DISABLE */ + nvtxRangeEnd_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeEnd_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(id); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC int NVTX_API nvtxRangePushEx(const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxRangePushEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushEx_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(eventAttrib); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC int NVTX_API nvtxRangePushA(const char* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxRangePushA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushA_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC int NVTX_API nvtxRangePushW(const wchar_t* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxRangePushW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushW_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC int NVTX_API nvtxRangePop(void) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifndef NVTX_DISABLE + nvtxRangePop_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePop_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCategoryA(uint32_t category, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)category; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCategoryA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(category, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCategoryW(uint32_t category, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)category; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCategoryW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(category, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameOsThreadA(uint32_t threadId, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)threadId; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameOsThreadA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(threadId, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameOsThreadW(uint32_t threadId, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)threadId; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameOsThreadW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(threadId, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainMarkEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxDomainMarkEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainMarkEx_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(domain, eventAttrib); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxDomainRangeStartEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxDomainRangeStartEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeStartEx_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain, eventAttrib); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(nvtxRangeId_t, 0); +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainRangeEnd(nvtxDomainHandle_t domain, nvtxRangeId_t id) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)id; +#else /* NVTX_DISABLE */ + nvtxDomainRangeEnd_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeEnd_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(domain, id); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC int NVTX_API nvtxDomainRangePushEx(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)eventAttrib; +#else /* NVTX_DISABLE */ + nvtxDomainRangePushEx_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePushEx_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain, eventAttrib); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC int NVTX_API nvtxDomainRangePop(nvtxDomainHandle_t domain) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; +#else /* NVTX_DISABLE */ + nvtxDomainRangePop_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePop_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain); + else +#endif /* NVTX_DISABLE */ + return NVTX_STATIC_CAST(int, NVTX_NO_PUSH_POP_TRACKING); +} + +NVTX_DECLSPEC nvtxResourceHandle_t NVTX_API nvtxDomainResourceCreate(nvtxDomainHandle_t domain, nvtxResourceAttributes_t* attribs) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)attribs; +#else /* NVTX_DISABLE */ + nvtxDomainResourceCreate_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceCreate_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain, attribs); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainResourceDestroy(nvtxResourceHandle_t resource) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)resource; +#else /* NVTX_DISABLE */ + nvtxDomainResourceDestroy_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceDestroy_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(resource); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainNameCategoryA(nvtxDomainHandle_t domain, uint32_t category, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)category; + (void)name; +#else /* NVTX_DISABLE */ + nvtxDomainNameCategoryA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(domain, category, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainNameCategoryW(nvtxDomainHandle_t domain, uint32_t category, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)category; + (void)name; +#else /* NVTX_DISABLE */ + nvtxDomainNameCategoryW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(domain, category, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC nvtxStringHandle_t NVTX_API nvtxDomainRegisterStringA(nvtxDomainHandle_t domain, const char* string) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)string; +#else /* NVTX_DISABLE */ + nvtxDomainRegisterStringA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringA_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain, string); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC nvtxStringHandle_t NVTX_API nvtxDomainRegisterStringW(nvtxDomainHandle_t domain, const wchar_t* string) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)string; +#else /* NVTX_DISABLE */ + nvtxDomainRegisterStringW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringW_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(domain, string); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC nvtxDomainHandle_t NVTX_API nvtxDomainCreateA(const char* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxDomainCreateA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateA_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC nvtxDomainHandle_t NVTX_API nvtxDomainCreateW(const wchar_t* message) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)message; +#else /* NVTX_DISABLE */ + nvtxDomainCreateW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateW_impl_fnptr; + if (local != NVTX_NULLPTR) + return (*local)(message); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainDestroy(nvtxDomainHandle_t domain) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; +#else /* NVTX_DISABLE */ + nvtxDomainDestroy_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainDestroy_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(domain); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxInitialize(const void* reserved) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)reserved; +#else /* NVTX_DISABLE */ + nvtxInitialize_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxInitialize_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(reserved); +#endif /* NVTX_DISABLE */ +} diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCudaRt_v3.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCudaRt_v3.h new file mode 100644 index 0000000000000000000000000000000000000000..5c5d54ef657ce29cd695a7cb3b09d7a128ec4eb7 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCudaRt_v3.h @@ -0,0 +1,128 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD_CUDART +#error Never include this file directly -- it is automatically included by nvToolsExtCudaRt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef void (NVTX_API * nvtxNameCudaDeviceA_impl_fntype)(int device, const char* name); +typedef void (NVTX_API * nvtxNameCudaDeviceW_impl_fntype)(int device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCudaStreamA_impl_fntype)(cudaStream_t stream, const char* name); +typedef void (NVTX_API * nvtxNameCudaStreamW_impl_fntype)(cudaStream_t stream, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCudaEventA_impl_fntype)(cudaEvent_t event, const char* name); +typedef void (NVTX_API * nvtxNameCudaEventW_impl_fntype)(cudaEvent_t event, const wchar_t* name); + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaDeviceA(int device, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaDeviceA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaDeviceW(int device, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaDeviceW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaStreamA(cudaStream_t stream, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)stream; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaStreamA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCudaStreamA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(stream, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaStreamW(cudaStream_t stream, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)stream; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaStreamW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCudaStreamW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(stream, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaEventA(cudaEvent_t event, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)event; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaEventA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCudaEventA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(event, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCudaEventW(cudaEvent_t event, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)event; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCudaEventW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCudaEventW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(event, name); +#endif /* NVTX_DISABLE */ +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCuda_v3.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCuda_v3.h new file mode 100644 index 0000000000000000000000000000000000000000..695b7c8ecbae2a3b1ba5413751a5f5b0ac4d9628 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplCuda_v3.h @@ -0,0 +1,156 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD_CUDA +#error Never include this file directly -- it is automatically included by nvToolsExtCuda.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef void (NVTX_API * nvtxNameCuDeviceA_impl_fntype)(CUdevice device, const char* name); +typedef void (NVTX_API * nvtxNameCuDeviceW_impl_fntype)(CUdevice device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuContextA_impl_fntype)(CUcontext context, const char* name); +typedef void (NVTX_API * nvtxNameCuContextW_impl_fntype)(CUcontext context, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuStreamA_impl_fntype)(CUstream stream, const char* name); +typedef void (NVTX_API * nvtxNameCuStreamW_impl_fntype)(CUstream stream, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuEventA_impl_fntype)(CUevent event, const char* name); +typedef void (NVTX_API * nvtxNameCuEventW_impl_fntype)(CUevent event, const wchar_t* name); + +NVTX_DECLSPEC void NVTX_API nvtxNameCuDeviceA(CUdevice device, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuDeviceA_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceA_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuDeviceW(CUdevice device, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuDeviceW_impl_fntype local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceW_impl_fnptr; + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuContextA(CUcontext context, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)context; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuContextA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuContextA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(context, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuContextW(CUcontext context, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)context; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuContextW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuContextW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(context, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuStreamA(CUstream stream, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)stream; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuStreamA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuStreamA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(stream, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuStreamW(CUstream stream, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)stream; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuStreamW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuStreamW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(stream, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuEventA(CUevent event, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)event; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuEventA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuEventA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(event, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameCuEventW(CUevent event, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)event; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameCuEventW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameCuEventW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(event, name); +#endif /* NVTX_DISABLE */ +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplOpenCL_v3.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplOpenCL_v3.h new file mode 100644 index 0000000000000000000000000000000000000000..6bf43a3b64b0a8667c465f9c7a5a68f53329b60f --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplOpenCL_v3.h @@ -0,0 +1,239 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD_OPENCL +#error Never include this file directly -- it is automatically included by nvToolsExtCuda.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef void (NVTX_API * nvtxNameClDeviceA_impl_fntype)(cl_device_id device, const char* name); +typedef void (NVTX_API * nvtxNameClDeviceW_impl_fntype)(cl_device_id device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClContextA_impl_fntype)(cl_context context, const char* name); +typedef void (NVTX_API * nvtxNameClContextW_impl_fntype)(cl_context context, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClCommandQueueA_impl_fntype)(cl_command_queue command_queue, const char* name); +typedef void (NVTX_API * nvtxNameClCommandQueueW_impl_fntype)(cl_command_queue command_queue, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClMemObjectA_impl_fntype)(cl_mem memobj, const char* name); +typedef void (NVTX_API * nvtxNameClMemObjectW_impl_fntype)(cl_mem memobj, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClSamplerA_impl_fntype)(cl_sampler sampler, const char* name); +typedef void (NVTX_API * nvtxNameClSamplerW_impl_fntype)(cl_sampler sampler, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClProgramA_impl_fntype)(cl_program program, const char* name); +typedef void (NVTX_API * nvtxNameClProgramW_impl_fntype)(cl_program program, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClEventA_impl_fntype)(cl_event evnt, const char* name); +typedef void (NVTX_API * nvtxNameClEventW_impl_fntype)(cl_event evnt, const wchar_t* name); + +NVTX_DECLSPEC void NVTX_API nvtxNameClDeviceA(cl_device_id device, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClDeviceA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClDeviceA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClDeviceW(cl_device_id device, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)device; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClDeviceW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClDeviceW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(device, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClContextA(cl_context context, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)context; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClContextA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClContextA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(context, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClContextW(cl_context context, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)context; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClContextW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClContextW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(context, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClCommandQueueA(cl_command_queue command_queue, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)command_queue; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClCommandQueueA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClCommandQueueA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(command_queue, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClCommandQueueW(cl_command_queue command_queue, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)command_queue; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClCommandQueueW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClCommandQueueW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(command_queue, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClMemObjectA(cl_mem memobj, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)memobj; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClMemObjectA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClMemObjectA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(memobj, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClMemObjectW(cl_mem memobj, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)memobj; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClMemObjectW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClMemObjectW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(memobj, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClSamplerA(cl_sampler sampler, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)sampler; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClSamplerA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClSamplerA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(sampler, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClSamplerW(cl_sampler sampler, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)sampler; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClSamplerW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClSamplerW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(sampler, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClProgramA(cl_program program, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)program; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClProgramA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClProgramA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(program, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClProgramW(cl_program program, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)program; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClProgramW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClProgramW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(program, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClEventA(cl_event evnt, const char* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)evnt; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClEventA_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClEventA_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventA_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(evnt, name); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxNameClEventW(cl_event evnt, const wchar_t* name) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)evnt; + (void)name; +#else /* NVTX_DISABLE */ + nvtxNameClEventW_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxNameClEventW_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventW_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(evnt, name); +#endif /* NVTX_DISABLE */ +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplSync_v3.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplSync_v3.h new file mode 100644 index 0000000000000000000000000000000000000000..69461082e61d49fd4f48dbf8fa30af96c9b65110 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxImplSync_v3.h @@ -0,0 +1,124 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD_SYNC +#error Never include this file directly -- it is automatically included by nvToolsExtCuda.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef nvtxSyncUser_t (NVTX_API * nvtxDomainSyncUserCreate_impl_fntype)(nvtxDomainHandle_t domain, const nvtxSyncUserAttributes_t* attribs); +typedef void (NVTX_API * nvtxDomainSyncUserDestroy_impl_fntype)(nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireStart_impl_fntype)(nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireFailed_impl_fntype)(nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireSuccess_impl_fntype)(nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserReleasing_impl_fntype)(nvtxSyncUser_t handle); + +NVTX_DECLSPEC nvtxSyncUser_t NVTX_API nvtxDomainSyncUserCreate(nvtxDomainHandle_t domain, const nvtxSyncUserAttributes_t* attribs) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)domain; + (void)attribs; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserCreate_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserCreate_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserCreate_impl_fnptr); + if (local != NVTX_NULLPTR) + return (*local)(domain, attribs); + else +#endif /* NVTX_DISABLE */ + return NVTX_NULLPTR; +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserDestroy(nvtxSyncUser_t handle) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)handle; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserDestroy_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserDestroy_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserDestroy_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(handle); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireStart(nvtxSyncUser_t handle) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)handle; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserAcquireStart_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserAcquireStart_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireStart_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(handle); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireFailed(nvtxSyncUser_t handle) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)handle; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserAcquireFailed_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserAcquireFailed_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireFailed_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(handle); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserAcquireSuccess(nvtxSyncUser_t handle) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)handle; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserAcquireSuccess_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserAcquireSuccess_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireSuccess_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(handle); +#endif /* NVTX_DISABLE */ +} + +NVTX_DECLSPEC void NVTX_API nvtxDomainSyncUserReleasing(nvtxSyncUser_t handle) +{ + NVTX_SET_NAME_MANGLING_OPTIONS +#ifdef NVTX_DISABLE + (void)handle; +#else /* NVTX_DISABLE */ + nvtxDomainSyncUserReleasing_impl_fntype local = NVTX_REINTERPRET_CAST(nvtxDomainSyncUserReleasing_impl_fntype, NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserReleasing_impl_fnptr); + if (local != NVTX_NULLPTR) + (*local)(handle); +#endif /* NVTX_DISABLE */ +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInit.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInit.h new file mode 100644 index 0000000000000000000000000000000000000000..2f584e1726bb056c6e386c42ac35b8db7e9b5ae7 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInit.h @@ -0,0 +1,468 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +/* ---- Platform-independent helper definitions and functions ---- */ + +/* Prefer macros over inline functions to reduce symbol resolution at link time */ + +#if defined(_WIN32) +#define NVTX_PATHCHAR wchar_t +#define NVTX_STR(x) L##x +#define NVTX_GETENV _wgetenv +#define NVTX_BUFSIZE 16384 +#define NVTX_DLLHANDLE HMODULE +#define NVTX_DLLOPEN(x) LoadLibraryW(x) +#define NVTX_DLLFUNC(h, x) NVTX_REINTERPRET_CAST(void(*)(void), GetProcAddress((h), (x))) +#define NVTX_DLLCLOSE FreeLibrary +#define NVTX_DLLDEFAULT NVTX_NULLPTR +#define NVTX_YIELD() SwitchToThread() +#define NVTX_MEMBAR() MemoryBarrier() +#define NVTX_ATOMIC_WRITE_32(address, value) \ + InterlockedExchange(NVTX_REINTERPRET_CAST(volatile LONG*, (address)), (value)) +#define NVTX_ATOMIC_CAS_32(old, address, exchange, comparand) \ + (old) = InterlockedCompareExchange(NVTX_REINTERPRET_CAST(volatile LONG*, (address)), (exchange), (comparand)) +#elif defined(__GNUC__) +#define NVTX_PATHCHAR char +#define NVTX_STR(x) x +#define NVTX_GETENV getenv +#define NVTX_BUFSIZE 16384 +#define NVTX_DLLHANDLE void* +#define NVTX_DLLOPEN(x) dlopen(x, RTLD_LAZY) +#define NVTX_DLLFUNC(h, x) dlsym((h), (x)) +#define NVTX_DLLCLOSE dlclose +#if !defined(__APPLE__) +#define NVTX_DLLDEFAULT NVTX_NULLPTR +#else +#define NVTX_DLLDEFAULT RTLD_DEFAULT +#endif +#define NVTX_YIELD() sched_yield() +#define NVTX_MEMBAR() __sync_synchronize() +/* Ensure full memory barrier for atomics, to match Windows functions */ +#define NVTX_ATOMIC_WRITE_32(address, value) \ + __sync_synchronize(); *(address) = (value); __sync_synchronize() +#define NVTX_ATOMIC_CAS_32(old, address, exchange, comparand) \ + (old) = __sync_val_compare_and_swap((address), (comparand), (exchange)) +#else +#error The library does not support your configuration! +#endif + +/* NVTX_LOAD_SEQUENCE_VERSION macro +* +* NVTX3 can update the search sequence used for finding a suitable injection library. +* If multiple copies of the NVTX3 headers are included in the same translation unit, +* the one included first sets the loader sequence. If there is any problem where a +* tool is expected to load, but is not loading, the app can test this macro to verify +* which version of the search is being used. Check if NVTX_LOAD_SEQUENCE_VERSION is +* defined; if it is not, the version is 1. Otherwise, the version is indicated by +* the value of NVTX_LOAD_SEQUENCE_VERSION. +* +* Version history: +* 1: NVTX3 initial implementation. The search continues until a usable function +* pointer is found. If none is found, init aborts and rolls back anything it +* did during the search (e.g. any loaded libraries are unloaded). If a non-zero +* function pointer is found, it is called. If that function returns non-zero +* ("true" in C), that indicates a tool successfully initialized. If it returns +* zero ("false"), the tool init was unsuccessful, so init aborts and rolls back +* anything it did. No further attempt is made to search for a different init +* function if the first one found returns false. The search order is: +* - Check for env var NVTX_INJECTION64_PATH (or "32" in 32-bit process) +* - Treat env var value as path to dynamic library, try loading it +* - If it loads, try get the exported symbol "InitializeInjectionNvtx2" +* - If this returns a non-null pointer, the search finishes here +* - (Android only) Look for libNvtxInjection64.so (or "32" in 32-bit process) +* - Must be in the /data/data//files" directory +* - Treat env var value as path to dynamic library, try loading it +* - If it loads, try get the exported symbol "InitializeInjectionNvtx2" +* - If this returns a non-null pointer, the search finishes here +* Note: There were two other options partially implemented, but disabled. +* - For supporting a pre-injected library on POSIX platforms, e.g. with +* LD_PRELOAD, try using dlsym with a null module handle to get the init +* function. This was unconditionally disabled after finding cases where +* a tool loaded multiple injections that supported NVTX, and couldn't +* control which one was getting picked by the NVTX loader. +* - (Linux only, not including Cygwin) Check for static injection using a +* weak symbol. This was implemented incorrectly, so it wasn't usable. +* +* 2: Fix the support for static injection libraries. This is meant for cases +* where dlopen is not supported or allowed, and the executable format has +* support for weak symbols. Tools may provide a static library with a +* C-linkage symbol named "InitializeInjectionNvtx2_fnptr", whose type is +* NvtxInitializeInjectionNvtxFunc_t, i.e. a function pointer to NVTX init +* function. If such a symbol is provided by a static library, the NVTX +* loader's weak symbol will bind to it and call it for initialization. +* Otherwise, the weak symbol will be defined by NVTX and default to null, +* indicating no static injection library is present. Static injection is +* last in the load sequence, because it gives all the run-time methods of +* injection to override a program's compiled-in tool without rebuilding the +* program. The search order is: +* - Check for env var NVTX_INJECTION64_PATH (or "32" in 32-bit process) +* - Treat env var value as path to dynamic library, try loading it +* - If it loads, try get the exported symbol "InitializeInjectionNvtx2" +* - If this returns a non-null pointer, the search finishes here +* - (Android only) Look for libNvtxInjection64.so (or "32" in 32-bit process) +* - Must be in the /data/data//files" directory +* - Treat env var value as path to dynamic library, try loading it +* - If it loads, try get the exported symbol "InitializeInjectionNvtx2" +* - If this returns a non-null pointer, the search finishes here +* - (Currently disabled, experimental support for non-Windows) Use dlsym +* with a null module handle to query the process-wide dynamic symbol +* table for a function named "InitializeInjectionNvtx2Preinject". The +* symbol is different to prevent injections from being loaded this way +* unless they choose to do so. +* - If this returns a non-null pointer, the search finishes here +* - (GCC-like compilers with ELF binary targets only) Check for static +* injection using a weak symbol "InitializeInjectionNvtx2_fnptr". +* If the default support choices in this header are not working as expected, +* clients may now override load sequence support decisions by defining these +* macros before including the NVTX header files: +* - NVTX_SUPPORT_ENV_VARS +* - NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY +* - NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE +* - NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY +* - NVTX_SUPPORT_STATIC_INJECTION_LIBRARY +*/ +#define NVTX_LOAD_SEQUENCE_VERSION 2 + +#ifndef NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY +/* Define this to 1 for platforms that where pre-injected libraries can be discovered. */ +#if defined(_WIN32) +/* Windows has no process-wide table of dynamic library symbols, so this can't be supported. */ +#define NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY 0 +#else +/* POSIX platforms allow calling dlsym on a null module to use the process-wide table. +* Note: Still disabled in load sequence version 2. Needs to support following the +* RTLD_NEXT chain, and needs more testing before support can be enabled by default.*/ +#define NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY 0 +#endif +#endif + +#ifndef NVTX_SUPPORT_ENV_VARS +/* Define this to 1 for platforms that support environment variables */ +/* TODO: Detect UWP, a.k.a. Windows Store app, and set this to 0. */ +/* Try: #if defined(WINAPI_FAMILY_PARTITION) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ +#define NVTX_SUPPORT_ENV_VARS 1 +#endif + +#ifndef NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY +/* Define this to 1 for platforms that support dynamic/shared libraries */ +#define NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY 1 +#endif + +#ifndef NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE +#if defined(__ANDROID__) +#define NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE 1 +#else +#define NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE 0 +#endif +#endif + +#ifndef NVTX_SUPPORT_STATIC_INJECTION_LIBRARY +/* On platforms that support weak symbols (i.e. non-Windows), injection libraries may +* be statically linked into an application. This is useful for platforms where dynamic +* injection is not available. Weak symbols not marked extern are definitions, not just +* declarations. They are guaranteed to be initialized to zero if no normal definitions +* are found by the linker to override them. This means the NVTX load sequence can safely +* detect the presence of a static injection -- if InitializeInjectionNvtx2_fnptr is zero, +* there is no static injection. */ +#if defined(__GNUC__) && !defined(_WIN32) && !defined(__CYGWIN__) +#define NVTX_SUPPORT_STATIC_INJECTION_LIBRARY 1 +#else +#define NVTX_SUPPORT_STATIC_INJECTION_LIBRARY 0 +#endif +#endif + +#if NVTX_SUPPORT_STATIC_INJECTION_LIBRARY && !defined(NVTX_STATIC_INJECTION_IMPL) +/* To make an NVTX injection library support static injection, it must do these things: +* - Define InitializeInjectionNvtx2_fnptr as a normal symbol (not weak), pointing to +* the implementation of InitializeInjectionNvtx2 (which does not need to be a +* dynamic export if only supporting static injection). +* - Define NVTX_STATIC_INJECTION_IMPL so the weak definition below is skipped. +* - Compile the static injection files with -fPIC if they are to be linked with other +* files compiled this way. If you forget this, GCC will simply tell you to add it. +* When building the application, there a few ways to link in a static injection: +* - Compile the injection's source files normally, and include the .o files as inputs +* to the linker. +* - If the injection is provided as an archive (.a file), it will not resolve any +* unresolved symbols, so the linker will skip it by default. This can be fixed +* by wrapping the static injection's name on the linker command line with options +* to treat it differently. For example: +* gcc example.o libfoo.a -Wl,--whole-archive libinj-static.a -Wl,--no-whole-archive libbar.a +* Note that libinj-static.a is bracketed by options to turn on "whole archive" and +* then back off again afterwards, so libfoo.a and libbar.a are linked normally. +* - In CMake, a static injection can be added with options like this: +* target_link_libraries(app PRIVATE -Wl,--whole-archive inj-static -Wl,--no-whole-archive) +*/ +__attribute__((weak)) NvtxInitializeInjectionNvtxFunc_t InitializeInjectionNvtx2_fnptr; +#endif + +/* This function tries to find or load an NVTX injection library and get the +* address of its InitializeInjection2 function. If such a function pointer +* is found, it is called, and passed the address of this NVTX instance's +* nvtxGetExportTable function, so the injection can attach to this instance. +* If the initialization fails for any reason, any dynamic library loaded will +* be freed, and all NVTX implementation functions will be set to no-ops. If +* initialization succeeds, NVTX functions not attached to the tool will be set +* to no-ops. This is implemented as one function instead of several small +* functions to minimize the number of weak symbols the linker must resolve. +* Order of search is: +* - Pre-injected library exporting InitializeInjectionNvtx2 +* - Loadable library exporting InitializeInjectionNvtx2 +* - Path specified by env var NVTX_INJECTION??_PATH (?? is 32 or 64) +* - On Android, libNvtxInjection??.so within the package (?? is 32 or 64) +* - Statically-linked injection library defining InitializeInjectionNvtx2_fnptr +*/ +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_VERSIONED_IDENTIFIER(nvtxInitializeInjectionLibrary)(void); +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_VERSIONED_IDENTIFIER(nvtxInitializeInjectionLibrary)(void) +{ + static const char initFuncName[] = "InitializeInjectionNvtx2"; +#if NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY + static const char initFuncPreinjectName[] = "InitializeInjectionNvtx2Preinject"; +#endif + NvtxInitializeInjectionNvtxFunc_t init_fnptr = NVTX_NULLPTR; + NVTX_DLLHANDLE injectionLibraryHandle = NVTX_DLLDEFAULT; + int entryPointStatus = 0; + +#if NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY + /* Try discovering dynamic injection library to load */ + { +#if NVTX_SUPPORT_ENV_VARS + /* If env var NVTX_INJECTION64_PATH is set, it should contain the path + * to a 64-bit dynamic NVTX injection library (and similar for 32-bit). */ + const NVTX_PATHCHAR* const nvtxEnvVarName = (sizeof(void*) == 4) + ? NVTX_STR("NVTX_INJECTION32_PATH") + : NVTX_STR("NVTX_INJECTION64_PATH"); +#endif /* NVTX_SUPPORT_ENV_VARS */ + NVTX_PATHCHAR injectionLibraryPathBuf[NVTX_BUFSIZE]; + const NVTX_PATHCHAR* injectionLibraryPath = NVTX_NULLPTR; + + /* Refer to this variable explicitly in case all references to it are #if'ed out */ + (void)injectionLibraryPathBuf; + +#if NVTX_SUPPORT_ENV_VARS + /* Disable the warning for getenv & _wgetenv -- this usage is safe because + * these functions are not called again before using the returned value. */ +#if defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4996 ) +#endif + injectionLibraryPath = NVTX_GETENV(nvtxEnvVarName); +#if defined(_MSC_VER) +#pragma warning( pop ) +#endif +#endif + +#if NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE + if (!injectionLibraryPath) + { + const char *bits = (sizeof(void*) == 4) ? "32" : "64"; + char cmdlineBuf[32]; + char pkgName[PATH_MAX]; + int count; + int pid; + FILE *fp; + size_t bytesRead; + size_t pos; + + pid = NVTX_STATIC_CAST(int, getpid()); + count = snprintf(cmdlineBuf, sizeof(cmdlineBuf), "/proc/%d/cmdline", pid); + if (count <= 0 || count >= NVTX_STATIC_CAST(int, sizeof(cmdlineBuf))) + { + NVTX_ERR("Path buffer too small for: /proc/%d/cmdline\n", pid); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + fp = fopen(cmdlineBuf, "r"); + if (!fp) + { + NVTX_ERR("File couldn't be opened: %s\n", cmdlineBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + bytesRead = fread(pkgName, 1, sizeof(pkgName) - 1, fp); + fclose(fp); + if (bytesRead == 0) + { + NVTX_ERR("Package name couldn't be read from file: %s\n", cmdlineBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + pkgName[bytesRead] = 0; + + /* String can contain colon as a process separator. In this case the package name is before the colon. */ + pos = 0; + while (pos < bytesRead && pkgName[pos] != ':' && pkgName[pos] != '\0') + { + ++pos; + } + pkgName[pos] = 0; + + count = snprintf(injectionLibraryPathBuf, NVTX_BUFSIZE, "/data/data/%s/files/libNvtxInjection%s.so", pkgName, bits); + if (count <= 0 || count >= NVTX_BUFSIZE) + { + NVTX_ERR("Path buffer too small for: /data/data/%s/files/libNvtxInjection%s.so\n", pkgName, bits); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + + /* On Android, verify path is accessible due to aggressive file access restrictions. */ + /* For dlopen, if the filename contains a leading slash, then it is interpreted as a */ + /* relative or absolute pathname; otherwise it will follow the rules in ld.so. */ + if (injectionLibraryPathBuf[0] == '/') + { +#if (__ANDROID_API__ < 21) + int access_err = access(injectionLibraryPathBuf, F_OK | R_OK); +#else + int access_err = faccessat(AT_FDCWD, injectionLibraryPathBuf, F_OK | R_OK, 0); +#endif + if (access_err != 0) + { + NVTX_ERR("Injection library path wasn't accessible [code=%s] [path=%s]\n", strerror(errno), injectionLibraryPathBuf); + return NVTX_ERR_INIT_ACCESS_LIBRARY; + } + } + injectionLibraryPath = injectionLibraryPathBuf; + } +#endif /* NVTX_SUPPORT_ANDROID_INJECTION_LIBRARY_IN_PACKAGE */ + + /* At this point, injectionLibraryPath is specified if a dynamic + * injection library was specified by a tool. */ + if (injectionLibraryPath) + { + /* Load the injection library */ + injectionLibraryHandle = NVTX_DLLOPEN(injectionLibraryPath); + if (!injectionLibraryHandle) + { + NVTX_ERR("Failed to load injection library\n"); + return NVTX_ERR_INIT_LOAD_LIBRARY; + } + else + { + /* Attempt to get the injection library's entry-point */ + init_fnptr = NVTX_REINTERPRET_CAST(NvtxInitializeInjectionNvtxFunc_t, NVTX_DLLFUNC(injectionLibraryHandle, initFuncName)); + if (!init_fnptr) + { + NVTX_DLLCLOSE(injectionLibraryHandle); + NVTX_ERR("Failed to get address of function InitializeInjectionNvtx2 from injection library\n"); + return NVTX_ERR_INIT_MISSING_LIBRARY_ENTRY_POINT; + } + } + } + } +#endif /* NVTX_SUPPORT_DYNAMIC_INJECTION_LIBRARY */ + +#if NVTX_SUPPORT_ALREADY_INJECTED_LIBRARY + if (!init_fnptr) + { + /* Use POSIX global symbol chain to query for init function from any module */ + init_fnptr = NVTX_REINTERPRET_CAST(NvtxInitializeInjectionNvtxFunc_t, NVTX_DLLFUNC(NVTX_DLLDEFAULT, initFuncPreinjectName)); + } +#endif + +#if NVTX_SUPPORT_STATIC_INJECTION_LIBRARY + if (!init_fnptr) + { + /* Check weakly-defined function pointer. A statically-linked injection can define this + * as a normal symbol and set it to the address of the NVTX init function -- this will + * provide a non-null value here. If there is no other definition of this symbol, it + * will be null here. */ + if (InitializeInjectionNvtx2_fnptr) + { + init_fnptr = InitializeInjectionNvtx2_fnptr; + } + } +#endif + + /* At this point, if init_fnptr is not set, then no tool has specified + * an NVTX injection library -- return non-success result so all NVTX + * API functions will be set to no-ops. */ + if (!init_fnptr) + { + return NVTX_ERR_NO_INJECTION_LIBRARY_AVAILABLE; + } + + /* Invoke injection library's initialization function. If it returns + * 0 (failure) and a dynamic injection was loaded, unload it. */ + entryPointStatus = init_fnptr(NVTX_VERSIONED_IDENTIFIER(nvtxGetExportTable)); + if (entryPointStatus == 0) + { + NVTX_ERR("Failed to initialize injection library -- initialization function returned 0\n"); + if (injectionLibraryHandle) + { + NVTX_DLLCLOSE(injectionLibraryHandle); + } + return NVTX_ERR_INIT_FAILED_LIBRARY_ENTRY_POINT; + } + + return NVTX_SUCCESS; +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(void) +{ + unsigned int old; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).initState == NVTX_INIT_STATE_COMPLETE) + { + return; + } + + NVTX_ATOMIC_CAS_32( + old, + &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).initState, + NVTX_INIT_STATE_STARTED, + NVTX_INIT_STATE_FRESH); + if (old == NVTX_INIT_STATE_FRESH) + { + int result; + int forceAllToNoops; + + /* Load & initialize injection library -- it will assign the function pointers */ + result = NVTX_VERSIONED_IDENTIFIER(nvtxInitializeInjectionLibrary)(); + + /* Set all pointers not assigned by the injection to null */ + forceAllToNoops = result != NVTX_SUCCESS; /* Set all to null if injection init failed */ + NVTX_VERSIONED_IDENTIFIER(nvtxSetInitFunctionsToNoops)(forceAllToNoops); + + /* Signal that initialization has finished, so now the assigned function pointers will be used */ + NVTX_ATOMIC_WRITE_32( + &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).initState, + NVTX_INIT_STATE_COMPLETE); + } + else /* Spin-wait until initialization has finished */ + { + NVTX_MEMBAR(); + while (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).initState != NVTX_INIT_STATE_COMPLETE) + { + NVTX_YIELD(); + NVTX_MEMBAR(); + } + } +} diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDecls.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDecls.h new file mode 100644 index 0000000000000000000000000000000000000000..b540374ae33b5a5330b9fba2ed84f1ad545f0248 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDecls.h @@ -0,0 +1,103 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkEx_impl_init)(const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkA_impl_init)(const char* message); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkW_impl_init)(const wchar_t* message); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartEx_impl_init)(const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartA_impl_init)(const char* message); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartW_impl_init)(const wchar_t* message); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeEnd_impl_init)(nvtxRangeId_t id); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushEx_impl_init)(const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushA_impl_init)(const char* message); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushW_impl_init)(const wchar_t* message); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePop_impl_init)(void); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryA_impl_init)(uint32_t category, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryW_impl_init)(uint32_t category, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadA_impl_init)(uint32_t threadId, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadW_impl_init)(uint32_t threadId, const wchar_t* name); + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceA_impl_init)(nvtx_CUdevice device, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceW_impl_init)(nvtx_CUdevice device, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextA_impl_init)(nvtx_CUcontext context, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextW_impl_init)(nvtx_CUcontext context, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamA_impl_init)(nvtx_CUstream stream, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamW_impl_init)(nvtx_CUstream stream, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventA_impl_init)(nvtx_CUevent event, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventW_impl_init)(nvtx_CUevent event, const wchar_t* name); + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceA_impl_init)(nvtx_cl_device_id device, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceW_impl_init)(nvtx_cl_device_id device, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextA_impl_init)(nvtx_cl_context context, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextW_impl_init)(nvtx_cl_context context, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueA_impl_init)(nvtx_cl_command_queue command_queue, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueW_impl_init)(nvtx_cl_command_queue command_queue, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectA_impl_init)(nvtx_cl_mem memobj, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectW_impl_init)(nvtx_cl_mem memobj, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerA_impl_init)(nvtx_cl_sampler sampler, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerW_impl_init)(nvtx_cl_sampler sampler, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramA_impl_init)(nvtx_cl_program program, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramW_impl_init)(nvtx_cl_program program, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventA_impl_init)(nvtx_cl_event evnt, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventW_impl_init)(nvtx_cl_event evnt, const wchar_t* name); + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceA_impl_init)(int device, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceW_impl_init)(int device, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamA_impl_init)(nvtx_cudaStream_t stream, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamW_impl_init)(nvtx_cudaStream_t stream, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventA_impl_init)(nvtx_cudaEvent_t event, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventW_impl_init)(nvtx_cudaEvent_t event, const wchar_t* name); + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainMarkEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeStartEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeEnd_impl_init)(nvtxDomainHandle_t domain, nvtxRangeId_t id); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePushEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePop_impl_init)(nvtxDomainHandle_t domain); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxResourceHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceCreate_impl_init)(nvtxDomainHandle_t domain, nvtxResourceAttributes_t* attribs); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceDestroy_impl_init)(nvtxResourceHandle_t resource); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryA_impl_init)(nvtxDomainHandle_t domain, uint32_t category, const char* name); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryW_impl_init)(nvtxDomainHandle_t domain, uint32_t category, const wchar_t* name); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxStringHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringA_impl_init)(nvtxDomainHandle_t domain, const char* string); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxStringHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringW_impl_init)(nvtxDomainHandle_t domain, const wchar_t* string); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxDomainHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateA_impl_init)(const char* message); +NVTX_LINKONCE_FWDDECL_FUNCTION nvtxDomainHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateW_impl_init)(const wchar_t* message); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainDestroy_impl_init)(nvtxDomainHandle_t domain); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxInitialize_impl_init)(const void* reserved); + +NVTX_LINKONCE_FWDDECL_FUNCTION nvtx_nvtxSyncUser_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserCreate_impl_init)(nvtxDomainHandle_t domain, const nvtx_nvtxSyncUserAttributes_t* attribs); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserDestroy_impl_init)(nvtx_nvtxSyncUser_t handle); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireStart_impl_init)(nvtx_nvtxSyncUser_t handle); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireFailed_impl_init)(nvtx_nvtxSyncUser_t handle); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireSuccess_impl_init)(nvtx_nvtxSyncUser_t handle); +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserReleasing_impl_init)(nvtx_nvtxSyncUser_t handle); diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDefs.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDefs.h new file mode 100644 index 0000000000000000000000000000000000000000..a0af9a130e1205fe51f2003deb0d79775ff04a43 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxInitDefs.h @@ -0,0 +1,595 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#ifndef NVTX_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined). +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkEx_impl_init)(const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxMarkEx(eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkA_impl_init)(const char* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxMarkA(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxMarkW_impl_init)(const wchar_t* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxMarkW(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartEx_impl_init)(const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangeStartEx(eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartA_impl_init)(const char* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangeStartA(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartW_impl_init)(const wchar_t* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangeStartW(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangeEnd_impl_init)(nvtxRangeId_t id){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxRangeEnd(id); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushEx_impl_init)(const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangePushEx(eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushA_impl_init)(const char* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangePushA(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePushW_impl_init)(const wchar_t* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangePushW(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxRangePop_impl_init)(void){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxRangePop(); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryA_impl_init)(uint32_t category, const char* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxNameCategoryA(category, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryW_impl_init)(uint32_t category, const wchar_t* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxNameCategoryW(category, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadA_impl_init)(uint32_t threadId, const char* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxNameOsThreadA(threadId, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadW_impl_init)(uint32_t threadId, const wchar_t* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxNameOsThreadW(threadId, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainMarkEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainMarkEx(domain, eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxRangeId_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeStartEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainRangeStartEx(domain, eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeEnd_impl_init)(nvtxDomainHandle_t domain, nvtxRangeId_t id){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainRangeEnd(domain, id); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePushEx_impl_init)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainRangePushEx(domain, eventAttrib); +} + +NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePop_impl_init)(nvtxDomainHandle_t domain){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainRangePop(domain); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxResourceHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceCreate_impl_init)(nvtxDomainHandle_t domain, nvtxResourceAttributes_t* attribs){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainResourceCreate(domain, attribs); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceDestroy_impl_init)(nvtxResourceHandle_t resource){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainResourceDestroy(resource); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryA_impl_init)(nvtxDomainHandle_t domain, uint32_t category, const char* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainNameCategoryA(domain, category, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryW_impl_init)(nvtxDomainHandle_t domain, uint32_t category, const wchar_t* name){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainNameCategoryW(domain, category, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxStringHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringA_impl_init)(nvtxDomainHandle_t domain, const char* string){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainRegisterStringA(domain, string); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxStringHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringW_impl_init)(nvtxDomainHandle_t domain, const wchar_t* string){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainRegisterStringW(domain, string); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxDomainHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateA_impl_init)(const char* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainCreateA(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtxDomainHandle_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateW_impl_init)(const wchar_t* message){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + return nvtxDomainCreateW(message); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainDestroy_impl_init)(nvtxDomainHandle_t domain){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxDomainDestroy(domain); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxInitialize_impl_init)(const void* reserved){ + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + nvtxInitialize(reserved); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceA_impl_init)(nvtx_CUdevice device, const char* name){ + nvtxNameCuDeviceA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceA_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceW_impl_init)(nvtx_CUdevice device, const wchar_t* name){ + nvtxNameCuDeviceW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceW_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextA_impl_init)(nvtx_CUcontext context, const char* name){ + nvtxNameCuContextA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextA_impl_fnptr; + if (local) + local(context, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextW_impl_init)(nvtx_CUcontext context, const wchar_t* name){ + nvtxNameCuContextW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextW_impl_fnptr; + if (local) + local(context, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamA_impl_init)(nvtx_CUstream stream, const char* name){ + nvtxNameCuStreamA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamA_impl_fnptr; + if (local) + local(stream, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamW_impl_init)(nvtx_CUstream stream, const wchar_t* name){ + nvtxNameCuStreamW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamW_impl_fnptr; + if (local) + local(stream, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventA_impl_init)(nvtx_CUevent event, const char* name){ + nvtxNameCuEventA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventA_impl_fnptr; + if (local) + local(event, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventW_impl_init)(nvtx_CUevent event, const wchar_t* name){ + nvtxNameCuEventW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventW_impl_fnptr; + if (local) + local(event, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceA_impl_init)(int device, const char* name){ + nvtxNameCudaDeviceA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceA_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceW_impl_init)(int device, const wchar_t* name){ + nvtxNameCudaDeviceW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceW_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamA_impl_init)(nvtx_cudaStream_t stream, const char* name){ + nvtxNameCudaStreamA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamA_impl_fnptr; + if (local) + local(stream, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamW_impl_init)(nvtx_cudaStream_t stream, const wchar_t* name){ + nvtxNameCudaStreamW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamW_impl_fnptr; + if (local) + local(stream, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventA_impl_init)(nvtx_cudaEvent_t event, const char* name){ + nvtxNameCudaEventA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventA_impl_fnptr; + if (local) + local(event, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventW_impl_init)(nvtx_cudaEvent_t event, const wchar_t* name){ + nvtxNameCudaEventW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventW_impl_fnptr; + if (local) + local(event, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceA_impl_init)(nvtx_cl_device_id device, const char* name){ + nvtxNameClDeviceA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceA_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceW_impl_init)(nvtx_cl_device_id device, const wchar_t* name){ + nvtxNameClDeviceW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceW_impl_fnptr; + if (local) + local(device, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextA_impl_init)(nvtx_cl_context context, const char* name){ + nvtxNameClContextA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextA_impl_fnptr; + if (local) + local(context, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextW_impl_init)(nvtx_cl_context context, const wchar_t* name){ + nvtxNameClContextW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextW_impl_fnptr; + if (local) + local(context, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueA_impl_init)(nvtx_cl_command_queue command_queue, const char* name){ + nvtxNameClCommandQueueA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueA_impl_fnptr; + if (local) + local(command_queue, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueW_impl_init)(nvtx_cl_command_queue command_queue, const wchar_t* name){ + nvtxNameClCommandQueueW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueW_impl_fnptr; + if (local) + local(command_queue, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectA_impl_init)(nvtx_cl_mem memobj, const char* name){ + nvtxNameClMemObjectA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectA_impl_fnptr; + if (local) + local(memobj, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectW_impl_init)(nvtx_cl_mem memobj, const wchar_t* name){ + nvtxNameClMemObjectW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectW_impl_fnptr; + if (local) + local(memobj, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerA_impl_init)(nvtx_cl_sampler sampler, const char* name){ + nvtxNameClSamplerA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerA_impl_fnptr; + if (local) + local(sampler, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerW_impl_init)(nvtx_cl_sampler sampler, const wchar_t* name){ + nvtxNameClSamplerW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerW_impl_fnptr; + if (local) + local(sampler, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramA_impl_init)(nvtx_cl_program program, const char* name){ + nvtxNameClProgramA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramA_impl_fnptr; + if (local) + local(program, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramW_impl_init)(nvtx_cl_program program, const wchar_t* name){ + nvtxNameClProgramW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramW_impl_fnptr; + if (local) + local(program, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventA_impl_init)(nvtx_cl_event evnt, const char* name){ + nvtxNameClEventA_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventA_impl_fnptr; + if (local) + local(evnt, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventW_impl_init)(nvtx_cl_event evnt, const wchar_t* name){ + nvtxNameClEventW_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventW_impl_fnptr; + if (local) + local(evnt, name); +} + +NVTX_LINKONCE_DEFINE_FUNCTION nvtx_nvtxSyncUser_t NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserCreate_impl_init)(nvtxDomainHandle_t domain, const nvtx_nvtxSyncUserAttributes_t* attribs){ + nvtxDomainSyncUserCreate_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserCreate_impl_fnptr; + if (local) { + return local(domain, attribs); + } + return NVTX_NULLPTR; +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserDestroy_impl_init)(nvtx_nvtxSyncUser_t handle){ + nvtxDomainSyncUserDestroy_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserDestroy_impl_fnptr; + if (local) + local(handle); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireStart_impl_init)(nvtx_nvtxSyncUser_t handle){ + nvtxDomainSyncUserAcquireStart_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireStart_impl_fnptr; + if (local) + local(handle); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireFailed_impl_init)(nvtx_nvtxSyncUser_t handle){ + nvtxDomainSyncUserAcquireFailed_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireFailed_impl_fnptr; + if (local) + local(handle); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireSuccess_impl_init)(nvtx_nvtxSyncUser_t handle){ + nvtxDomainSyncUserAcquireSuccess_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireSuccess_impl_fnptr; + if (local) + local(handle); +} + +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserReleasing_impl_init)(nvtx_nvtxSyncUser_t handle){ + nvtxDomainSyncUserReleasing_fakeimpl_fntype local; + NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(); + local = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserReleasing_impl_fnptr; + if (local) + local(handle); +} + +NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxSetInitFunctionsToNoops)(int forceAllToNoops); +NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxSetInitFunctionsToNoops)(int forceAllToNoops) +{ + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxMarkEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxMarkA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxMarkW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxMarkW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeStartW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeEnd_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangeEnd_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangeEnd_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangePushEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangePushA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangePushW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePushW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePop_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxRangePop_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxRangePop_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCategoryW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameOsThreadW_impl_fnptr = NVTX_NULLPTR; + + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuDeviceW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuContextW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuStreamW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCuEventW_impl_fnptr = NVTX_NULLPTR; + + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClDeviceW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClContextW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClCommandQueueW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClMemObjectW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClSamplerW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClProgramW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameClEventW_impl_fnptr = NVTX_NULLPTR; + + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaDeviceW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaStreamW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxNameCudaEventW_impl_fnptr = NVTX_NULLPTR; + + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainMarkEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainMarkEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainMarkEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeStartEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeStartEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeStartEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeEnd_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeEnd_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangeEnd_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePushEx_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePushEx_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePushEx_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePop_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePop_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRangePop_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceCreate_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceCreate_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceCreate_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceDestroy_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceDestroy_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainResourceDestroy_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainNameCategoryW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainRegisterStringW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateA_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateA_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateA_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateW_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateW_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainCreateW_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainDestroy_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainDestroy_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainDestroy_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxInitialize_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxInitialize_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxInitialize_impl_fnptr = NVTX_NULLPTR; + + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserCreate_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserCreate_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserCreate_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserDestroy_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserDestroy_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserDestroy_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireStart_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireStart_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireStart_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireFailed_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireFailed_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireFailed_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireSuccess_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireSuccess_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserAcquireSuccess_impl_fnptr = NVTX_NULLPTR; + if (NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserReleasing_impl_fnptr == NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserReleasing_impl_init) || forceAllToNoops) + NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).nvtxDomainSyncUserReleasing_impl_fnptr = NVTX_NULLPTR; +} diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxLinkOnce.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxLinkOnce.h new file mode 100644 index 0000000000000000000000000000000000000000..e1656006b88f5d371f3eba3b68e03aa9abfcf073 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxLinkOnce.h @@ -0,0 +1,88 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +#ifndef __NVTX_LINKONCE_H__ +#define __NVTX_LINKONCE_H__ + +/* This header defines macros to permit making definitions of global variables + * and functions in C/C++ header files which may be included multiple times in + * a translation unit or linkage unit. It allows authoring header-only libraries + * which can be used by multiple other header-only libraries (either as the same + * copy or multiple copies), and does not require any build changes, such as + * adding another .c file, linking a static library, or deploying a dynamic + * library. Globals defined with these macros have the property that they have + * the same address, pointing to a single instance, for the entire linkage unit. + * It is expected but not guaranteed that each linkage unit will have a separate + * instance. + * + * In some situations it is desirable to declare a variable without initializing + * it, refer to it in code or other variables' initializers, and then initialize + * it later. Similarly, functions can be prototyped, have their address taken, + * and then have their body defined later. In such cases, use the FWDDECL macros + * when forward-declaring LINKONCE global variables without initializers and + * function prototypes, and then use the DEFINE macros when later defining them. + * Although in many cases the FWDDECL macro is equivalent to the DEFINE macro, + * following this pattern makes code maximally portable. + */ + +#if defined(_MSC_VER) /* MSVC */ + #if defined(__cplusplus) + #define NVTX_LINKONCE_DEFINE_GLOBAL extern "C" __declspec(selectany) + #define NVTX_LINKONCE_DEFINE_FUNCTION extern "C" inline + #else + #define NVTX_LINKONCE_DEFINE_GLOBAL __declspec(selectany) + #define NVTX_LINKONCE_DEFINE_FUNCTION __inline + #endif + #define NVTX_LINKONCE_FWDDECL_GLOBAL NVTX_LINKONCE_DEFINE_GLOBAL extern +#elif defined(_WIN32) || defined(__CYGWIN__) /* MinGW */ + #if defined(__cplusplus) + #define NVTX_LINKONCE_DEFINE_GLOBAL __declspec(selectany) + #define NVTX_LINKONCE_DEFINE_FUNCTION extern "C" inline + #else + #define NVTX_LINKONCE_DEFINE_GLOBAL __declspec(selectany) + #define NVTX_LINKONCE_DEFINE_FUNCTION + #endif + #define NVTX_LINKONCE_FWDDECL_GLOBAL extern +#else /* All others: Assume GCC, clang, or compatible */ + #define NVTX_LINKONCE_WEAK __attribute__((weak)) + #define NVTX_LINKONCE_HIDDEN __attribute__((visibility("hidden"))) + #if defined(__cplusplus) + #define NVTX_LINKONCE_DEFINE_GLOBAL NVTX_LINKONCE_HIDDEN NVTX_LINKONCE_WEAK + #define NVTX_LINKONCE_DEFINE_FUNCTION extern "C" NVTX_LINKONCE_HIDDEN inline + #else + #define NVTX_LINKONCE_DEFINE_GLOBAL NVTX_LINKONCE_HIDDEN NVTX_LINKONCE_WEAK + #define NVTX_LINKONCE_DEFINE_FUNCTION NVTX_LINKONCE_HIDDEN NVTX_LINKONCE_WEAK + #endif + #define NVTX_LINKONCE_FWDDECL_GLOBAL NVTX_LINKONCE_DEFINE_GLOBAL extern +#endif + +#define NVTX_LINKONCE_FWDDECL_FUNCTION NVTX_LINKONCE_DEFINE_FUNCTION + +#endif /* __NVTX_LINKONCE_H__ */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxTypes.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxTypes.h new file mode 100644 index 0000000000000000000000000000000000000000..0edb9f44f5d4cad544e793fdd0b6e10161b82b93 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/include/nvtx3/nvtxDetail/nvtxTypes.h @@ -0,0 +1,318 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Licensed under the Apache License v2.0 with LLVM Exceptions. + * See https://nvidia.github.io/NVTX/LICENSE.txt for license information. + */ + +/* This header defines types which are used by the internal implementation +* of NVTX and callback subscribers. API clients do not use these types, +* so they are defined here instead of in nvToolsExt.h to clarify they are +* not part of the NVTX client API. */ + +#ifndef NVTX_IMPL_GUARD +#error Never include this file directly -- it is automatically included by nvToolsExt.h. +#endif + +#if defined(NVTX_AS_SYSTEM_HEADER) +#if defined(__clang__) +#pragma clang system_header +#elif defined(__GNUC__) || defined(__NVCOMPILER) +#pragma GCC system_header +#elif defined(_MSC_VER) +#pragma system_header +#endif +#endif + +/* ------ Dependency-free types binary-compatible with real types ------- */ + +/* In order to avoid having the NVTX core API headers depend on non-NVTX +* headers like cuda.h, NVTX defines binary-compatible types to use for +* safely making the initialization versions of all NVTX functions without +* needing to have definitions for the real types. */ + +typedef int nvtx_CUdevice; +typedef void* nvtx_CUcontext; +typedef void* nvtx_CUstream; +typedef void* nvtx_CUevent; + +typedef void* nvtx_cudaStream_t; +typedef void* nvtx_cudaEvent_t; + +typedef void* nvtx_cl_platform_id; +typedef void* nvtx_cl_device_id; +typedef void* nvtx_cl_context; +typedef void* nvtx_cl_command_queue; +typedef void* nvtx_cl_mem; +typedef void* nvtx_cl_program; +typedef void* nvtx_cl_kernel; +typedef void* nvtx_cl_event; +typedef void* nvtx_cl_sampler; + +typedef void* nvtx_nvtxSyncUser_t; +typedef void nvtx_nvtxSyncUserAttributes_t; + +/* --------- Types for function pointers (with fake API types) ---------- */ + +typedef void (NVTX_API * nvtxMarkEx_impl_fntype)(const nvtxEventAttributes_t* eventAttrib); +typedef void (NVTX_API * nvtxMarkA_impl_fntype)(const char* message); +typedef void (NVTX_API * nvtxMarkW_impl_fntype)(const wchar_t* message); +typedef nvtxRangeId_t (NVTX_API * nvtxRangeStartEx_impl_fntype)(const nvtxEventAttributes_t* eventAttrib); +typedef nvtxRangeId_t (NVTX_API * nvtxRangeStartA_impl_fntype)(const char* message); +typedef nvtxRangeId_t (NVTX_API * nvtxRangeStartW_impl_fntype)(const wchar_t* message); +typedef void (NVTX_API * nvtxRangeEnd_impl_fntype)(nvtxRangeId_t id); +typedef int (NVTX_API * nvtxRangePushEx_impl_fntype)(const nvtxEventAttributes_t* eventAttrib); +typedef int (NVTX_API * nvtxRangePushA_impl_fntype)(const char* message); +typedef int (NVTX_API * nvtxRangePushW_impl_fntype)(const wchar_t* message); +typedef int (NVTX_API * nvtxRangePop_impl_fntype)(void); +typedef void (NVTX_API * nvtxNameCategoryA_impl_fntype)(uint32_t category, const char* name); +typedef void (NVTX_API * nvtxNameCategoryW_impl_fntype)(uint32_t category, const wchar_t* name); +typedef void (NVTX_API * nvtxNameOsThreadA_impl_fntype)(uint32_t threadId, const char* name); +typedef void (NVTX_API * nvtxNameOsThreadW_impl_fntype)(uint32_t threadId, const wchar_t* name); + +/* Real impl types are defined in nvtxImplCuda_v3.h, where CUDA headers are included */ +typedef void (NVTX_API * nvtxNameCuDeviceA_fakeimpl_fntype)(nvtx_CUdevice device, const char* name); +typedef void (NVTX_API * nvtxNameCuDeviceW_fakeimpl_fntype)(nvtx_CUdevice device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuContextA_fakeimpl_fntype)(nvtx_CUcontext context, const char* name); +typedef void (NVTX_API * nvtxNameCuContextW_fakeimpl_fntype)(nvtx_CUcontext context, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuStreamA_fakeimpl_fntype)(nvtx_CUstream stream, const char* name); +typedef void (NVTX_API * nvtxNameCuStreamW_fakeimpl_fntype)(nvtx_CUstream stream, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCuEventA_fakeimpl_fntype)(nvtx_CUevent event, const char* name); +typedef void (NVTX_API * nvtxNameCuEventW_fakeimpl_fntype)(nvtx_CUevent event, const wchar_t* name); + +/* Real impl types are defined in nvtxImplOpenCL_v3.h, where OPENCL headers are included */ +typedef void (NVTX_API * nvtxNameClDeviceA_fakeimpl_fntype)(nvtx_cl_device_id device, const char* name); +typedef void (NVTX_API * nvtxNameClDeviceW_fakeimpl_fntype)(nvtx_cl_device_id device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClContextA_fakeimpl_fntype)(nvtx_cl_context context, const char* name); +typedef void (NVTX_API * nvtxNameClContextW_fakeimpl_fntype)(nvtx_cl_context context, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClCommandQueueA_fakeimpl_fntype)(nvtx_cl_command_queue command_queue, const char* name); +typedef void (NVTX_API * nvtxNameClCommandQueueW_fakeimpl_fntype)(nvtx_cl_command_queue command_queue, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClMemObjectA_fakeimpl_fntype)(nvtx_cl_mem memobj, const char* name); +typedef void (NVTX_API * nvtxNameClMemObjectW_fakeimpl_fntype)(nvtx_cl_mem memobj, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClSamplerA_fakeimpl_fntype)(nvtx_cl_sampler sampler, const char* name); +typedef void (NVTX_API * nvtxNameClSamplerW_fakeimpl_fntype)(nvtx_cl_sampler sampler, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClProgramA_fakeimpl_fntype)(nvtx_cl_program program, const char* name); +typedef void (NVTX_API * nvtxNameClProgramW_fakeimpl_fntype)(nvtx_cl_program program, const wchar_t* name); +typedef void (NVTX_API * nvtxNameClEventA_fakeimpl_fntype)(nvtx_cl_event evnt, const char* name); +typedef void (NVTX_API * nvtxNameClEventW_fakeimpl_fntype)(nvtx_cl_event evnt, const wchar_t* name); + +/* Real impl types are defined in nvtxImplCudaRt_v3.h, where CUDART headers are included */ +typedef void (NVTX_API * nvtxNameCudaDeviceA_fakeimpl_fntype)(int device, const char* name); +typedef void (NVTX_API * nvtxNameCudaDeviceW_fakeimpl_fntype)(int device, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCudaStreamA_fakeimpl_fntype)(nvtx_cudaStream_t stream, const char* name); +typedef void (NVTX_API * nvtxNameCudaStreamW_fakeimpl_fntype)(nvtx_cudaStream_t stream, const wchar_t* name); +typedef void (NVTX_API * nvtxNameCudaEventA_fakeimpl_fntype)(nvtx_cudaEvent_t event, const char* name); +typedef void (NVTX_API * nvtxNameCudaEventW_fakeimpl_fntype)(nvtx_cudaEvent_t event, const wchar_t* name); + +typedef void (NVTX_API * nvtxDomainMarkEx_impl_fntype)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +typedef nvtxRangeId_t (NVTX_API * nvtxDomainRangeStartEx_impl_fntype)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +typedef void (NVTX_API * nvtxDomainRangeEnd_impl_fntype)(nvtxDomainHandle_t domain, nvtxRangeId_t id); +typedef int (NVTX_API * nvtxDomainRangePushEx_impl_fntype)(nvtxDomainHandle_t domain, const nvtxEventAttributes_t* eventAttrib); +typedef int (NVTX_API * nvtxDomainRangePop_impl_fntype)(nvtxDomainHandle_t domain); +typedef nvtxResourceHandle_t (NVTX_API * nvtxDomainResourceCreate_impl_fntype)(nvtxDomainHandle_t domain, nvtxResourceAttributes_t* attribs); +typedef void (NVTX_API * nvtxDomainResourceDestroy_impl_fntype)(nvtxResourceHandle_t resource); +typedef void (NVTX_API * nvtxDomainNameCategoryA_impl_fntype)(nvtxDomainHandle_t domain, uint32_t category, const char* name); +typedef void (NVTX_API * nvtxDomainNameCategoryW_impl_fntype)(nvtxDomainHandle_t domain, uint32_t category, const wchar_t* name); +typedef nvtxStringHandle_t (NVTX_API * nvtxDomainRegisterStringA_impl_fntype)(nvtxDomainHandle_t domain, const char* string); +typedef nvtxStringHandle_t (NVTX_API * nvtxDomainRegisterStringW_impl_fntype)(nvtxDomainHandle_t domain, const wchar_t* string); +typedef nvtxDomainHandle_t (NVTX_API * nvtxDomainCreateA_impl_fntype)(const char* message); +typedef nvtxDomainHandle_t (NVTX_API * nvtxDomainCreateW_impl_fntype)(const wchar_t* message); +typedef void (NVTX_API * nvtxDomainDestroy_impl_fntype)(nvtxDomainHandle_t domain); +typedef void (NVTX_API * nvtxInitialize_impl_fntype)(const void* reserved); + +typedef nvtx_nvtxSyncUser_t (NVTX_API * nvtxDomainSyncUserCreate_fakeimpl_fntype)(nvtxDomainHandle_t domain, const nvtx_nvtxSyncUserAttributes_t* attribs); +typedef void (NVTX_API * nvtxDomainSyncUserDestroy_fakeimpl_fntype)(nvtx_nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireStart_fakeimpl_fntype)(nvtx_nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireFailed_fakeimpl_fntype)(nvtx_nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserAcquireSuccess_fakeimpl_fntype)(nvtx_nvtxSyncUser_t handle); +typedef void (NVTX_API * nvtxDomainSyncUserReleasing_fakeimpl_fntype)(nvtx_nvtxSyncUser_t handle); + +/* ---------------- Types for callback subscription --------------------- */ + +typedef const void *(NVTX_API * NvtxGetExportTableFunc_t)(uint32_t exportTableId); +typedef int (NVTX_API * NvtxInitializeInjectionNvtxFunc_t)(NvtxGetExportTableFunc_t exportTable); + +typedef enum NvtxCallbackModule +{ + NVTX_CB_MODULE_INVALID = 0, + NVTX_CB_MODULE_CORE = 1, + NVTX_CB_MODULE_CUDA = 2, + NVTX_CB_MODULE_OPENCL = 3, + NVTX_CB_MODULE_CUDART = 4, + NVTX_CB_MODULE_CORE2 = 5, + NVTX_CB_MODULE_SYNC = 6, + /* --- New constants must only be added directly above this line --- */ + NVTX_CB_MODULE_SIZE, + NVTX_CB_MODULE_FORCE_INT = 0x7fffffff +} NvtxCallbackModule; + +typedef enum NvtxCallbackIdCore +{ + NVTX_CBID_CORE_INVALID = 0, + NVTX_CBID_CORE_MarkEx = 1, + NVTX_CBID_CORE_MarkA = 2, + NVTX_CBID_CORE_MarkW = 3, + NVTX_CBID_CORE_RangeStartEx = 4, + NVTX_CBID_CORE_RangeStartA = 5, + NVTX_CBID_CORE_RangeStartW = 6, + NVTX_CBID_CORE_RangeEnd = 7, + NVTX_CBID_CORE_RangePushEx = 8, + NVTX_CBID_CORE_RangePushA = 9, + NVTX_CBID_CORE_RangePushW = 10, + NVTX_CBID_CORE_RangePop = 11, + NVTX_CBID_CORE_NameCategoryA = 12, + NVTX_CBID_CORE_NameCategoryW = 13, + NVTX_CBID_CORE_NameOsThreadA = 14, + NVTX_CBID_CORE_NameOsThreadW = 15, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_CORE_SIZE, + NVTX_CBID_CORE_FORCE_INT = 0x7fffffff +} NvtxCallbackIdCore; + +typedef enum NvtxCallbackIdCore2 +{ + NVTX_CBID_CORE2_INVALID = 0, + NVTX_CBID_CORE2_DomainMarkEx = 1, + NVTX_CBID_CORE2_DomainRangeStartEx = 2, + NVTX_CBID_CORE2_DomainRangeEnd = 3, + NVTX_CBID_CORE2_DomainRangePushEx = 4, + NVTX_CBID_CORE2_DomainRangePop = 5, + NVTX_CBID_CORE2_DomainResourceCreate = 6, + NVTX_CBID_CORE2_DomainResourceDestroy = 7, + NVTX_CBID_CORE2_DomainNameCategoryA = 8, + NVTX_CBID_CORE2_DomainNameCategoryW = 9, + NVTX_CBID_CORE2_DomainRegisterStringA = 10, + NVTX_CBID_CORE2_DomainRegisterStringW = 11, + NVTX_CBID_CORE2_DomainCreateA = 12, + NVTX_CBID_CORE2_DomainCreateW = 13, + NVTX_CBID_CORE2_DomainDestroy = 14, + NVTX_CBID_CORE2_Initialize = 15, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_CORE2_SIZE, + NVTX_CBID_CORE2_FORCE_INT = 0x7fffffff +} NvtxCallbackIdCore2; + +typedef enum NvtxCallbackIdCuda +{ + NVTX_CBID_CUDA_INVALID = 0, + NVTX_CBID_CUDA_NameCuDeviceA = 1, + NVTX_CBID_CUDA_NameCuDeviceW = 2, + NVTX_CBID_CUDA_NameCuContextA = 3, + NVTX_CBID_CUDA_NameCuContextW = 4, + NVTX_CBID_CUDA_NameCuStreamA = 5, + NVTX_CBID_CUDA_NameCuStreamW = 6, + NVTX_CBID_CUDA_NameCuEventA = 7, + NVTX_CBID_CUDA_NameCuEventW = 8, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_CUDA_SIZE, + NVTX_CBID_CUDA_FORCE_INT = 0x7fffffff +} NvtxCallbackIdCuda; + +typedef enum NvtxCallbackIdCudaRt +{ + NVTX_CBID_CUDART_INVALID = 0, + NVTX_CBID_CUDART_NameCudaDeviceA = 1, + NVTX_CBID_CUDART_NameCudaDeviceW = 2, + NVTX_CBID_CUDART_NameCudaStreamA = 3, + NVTX_CBID_CUDART_NameCudaStreamW = 4, + NVTX_CBID_CUDART_NameCudaEventA = 5, + NVTX_CBID_CUDART_NameCudaEventW = 6, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_CUDART_SIZE, + NVTX_CBID_CUDART_FORCE_INT = 0x7fffffff +} NvtxCallbackIdCudaRt; + +typedef enum NvtxCallbackIdOpenCL +{ + NVTX_CBID_OPENCL_INVALID = 0, + NVTX_CBID_OPENCL_NameClDeviceA = 1, + NVTX_CBID_OPENCL_NameClDeviceW = 2, + NVTX_CBID_OPENCL_NameClContextA = 3, + NVTX_CBID_OPENCL_NameClContextW = 4, + NVTX_CBID_OPENCL_NameClCommandQueueA = 5, + NVTX_CBID_OPENCL_NameClCommandQueueW = 6, + NVTX_CBID_OPENCL_NameClMemObjectA = 7, + NVTX_CBID_OPENCL_NameClMemObjectW = 8, + NVTX_CBID_OPENCL_NameClSamplerA = 9, + NVTX_CBID_OPENCL_NameClSamplerW = 10, + NVTX_CBID_OPENCL_NameClProgramA = 11, + NVTX_CBID_OPENCL_NameClProgramW = 12, + NVTX_CBID_OPENCL_NameClEventA = 13, + NVTX_CBID_OPENCL_NameClEventW = 14, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_OPENCL_SIZE, + NVTX_CBID_OPENCL_FORCE_INT = 0x7fffffff +} NvtxCallbackIdOpenCL; + +typedef enum NvtxCallbackIdSync +{ + NVTX_CBID_SYNC_INVALID = 0, + NVTX_CBID_SYNC_DomainSyncUserCreate = 1, + NVTX_CBID_SYNC_DomainSyncUserDestroy = 2, + NVTX_CBID_SYNC_DomainSyncUserAcquireStart = 3, + NVTX_CBID_SYNC_DomainSyncUserAcquireFailed = 4, + NVTX_CBID_SYNC_DomainSyncUserAcquireSuccess = 5, + NVTX_CBID_SYNC_DomainSyncUserReleasing = 6, + /* --- New constants must only be added directly above this line --- */ + NVTX_CBID_SYNC_SIZE, + NVTX_CBID_SYNC_FORCE_INT = 0x7fffffff +} NvtxCallbackIdSync; + +/* IDs for NVTX Export Tables */ +typedef enum NvtxExportTableID +{ + NVTX_ETID_INVALID = 0, + NVTX_ETID_CALLBACKS = 1, + NVTX_ETID_RESERVED0 = 2, + NVTX_ETID_VERSIONINFO = 3, + /* --- New constants must only be added directly above this line --- */ + NVTX_ETID_SIZE, + NVTX_ETID_FORCE_INT = 0x7fffffff +} NvtxExportTableID; + +typedef void (* NvtxFunctionPointer)(void); /* generic uncallable function pointer, must be cast to appropriate function type */ +typedef NvtxFunctionPointer** NvtxFunctionTable; /* double pointer because array(1) of pointers(2) to function pointers */ + +typedef struct NvtxExportTableCallbacks +{ + size_t struct_size; + + /* returns an array of pointer to function pointers*/ + int (NVTX_API *GetModuleFunctionTable)( + NvtxCallbackModule callback_module, + NvtxFunctionTable* out_table, + unsigned int* out_size); +} NvtxExportTableCallbacks; + +typedef struct NvtxExportTableVersionInfo +{ + /* sizeof(NvtxExportTableVersionInfo) */ + size_t struct_size; + + /* The API version comes from the NVTX library linked to the app. The + * injection library is can use this info to make some assumptions */ + uint32_t version; + + /* Reserved for alignment, do not use */ + uint32_t reserved0; + + /* This must be set by tools when attaching to provide applications + * the ability to, in emergency situations, detect problematic tools + * versions and modify the NVTX source to prevent attaching anything + * that causes trouble in the app. Currently, this value is ignored. */ + void (NVTX_API *SetInjectionNvtxVersion)( + uint32_t version); +} NvtxExportTableVersionInfo; diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libcufile_rdma.so.1 b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libcufile_rdma.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..394b133b1211c5392baade4b38dfe921abe0e0a7 Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libcufile_rdma.so.1 differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libnvtx3interop.so.1 b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libnvtx3interop.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..a229c952f603af60e93da852105762ff38e7ad9d Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cu13/lib/libnvtx3interop.so.1 differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32787bc967b7a41bcbac5987254bb1c763f6212a Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/__init__.py b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07e49ebd835b4cb70220c66fafdfe256d0f473cf Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/cufile.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/cufile.h new file mode 100644 index 0000000000000000000000000000000000000000..ffc3e05b7b786e36fdd700623f53319641c0e908 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/include/cufile.h @@ -0,0 +1,740 @@ +/* + * Copyright 1993-2023 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/** + * @file cufile.h + * @brief cuFile C APIs + * + * This file contains all the C APIs to perform GPUDirect Storage supported IO operations + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/// @cond DOXYGEN_SKIP_MACRO +#ifndef __CUFILE_H_ +#define __CUFILE_H_ + +#include +#include + +#include +#include +#include + +#define CUFILEOP_BASE_ERR 5000 + +//Note :Data path errors are captured via standard error codes +#define CUFILEOP_STATUS_ENTRIES \ + CUFILE_OP(0, CU_FILE_SUCCESS, cufile success) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 1, CU_FILE_DRIVER_NOT_INITIALIZED, nvidia-fs driver is not loaded. Set allow_compat_mode to true in cufile.json file to enable compatible mode) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 2, CU_FILE_DRIVER_INVALID_PROPS, invalid property) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 3, CU_FILE_DRIVER_UNSUPPORTED_LIMIT, property range error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 4, CU_FILE_DRIVER_VERSION_MISMATCH, nvidia-fs driver version mismatch) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 5, CU_FILE_DRIVER_VERSION_READ_ERROR, nvidia-fs driver version read error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 6, CU_FILE_DRIVER_CLOSING, driver shutdown in progress) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 7, CU_FILE_PLATFORM_NOT_SUPPORTED, GPUDirect Storage not supported on current platform) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 8, CU_FILE_IO_NOT_SUPPORTED, GPUDirect Storage not supported on current file) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 9, CU_FILE_DEVICE_NOT_SUPPORTED, GPUDirect Storage not supported on current GPU) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 10, CU_FILE_NVFS_DRIVER_ERROR, nvidia-fs driver ioctl error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 11, CU_FILE_CUDA_DRIVER_ERROR, CUDA Driver API error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 12, CU_FILE_CUDA_POINTER_INVALID, invalid device pointer) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 13, CU_FILE_CUDA_MEMORY_TYPE_INVALID, invalid pointer memory type) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 14, CU_FILE_CUDA_POINTER_RANGE_ERROR, pointer range exceeds allocated address range) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 15, CU_FILE_CUDA_CONTEXT_MISMATCH, cuda context mismatch) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 16, CU_FILE_INVALID_MAPPING_SIZE, access beyond maximum pinned size) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 17, CU_FILE_INVALID_MAPPING_RANGE, access beyond mapped size) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 18, CU_FILE_INVALID_FILE_TYPE, unsupported file type) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 19, CU_FILE_INVALID_FILE_OPEN_FLAG, unsupported file open flags) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 20, CU_FILE_DIO_NOT_SET, fd direct IO not set) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 22, CU_FILE_INVALID_VALUE, invalid arguments) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 23, CU_FILE_MEMORY_ALREADY_REGISTERED, device pointer already registered) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 24, CU_FILE_MEMORY_NOT_REGISTERED, device pointer lookup failure) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 25, CU_FILE_PERMISSION_DENIED, driver or file access error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 26, CU_FILE_DRIVER_ALREADY_OPEN, driver is already open) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 27, CU_FILE_HANDLE_NOT_REGISTERED, file descriptor is not registered) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 28, CU_FILE_HANDLE_ALREADY_REGISTERED, file descriptor is already registered) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 29, CU_FILE_DEVICE_NOT_FOUND, GPU device not found) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 30, CU_FILE_INTERNAL_ERROR, internal error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 31, CU_FILE_GETNEWFD_FAILED, failed to obtain new file descriptor) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 33, CU_FILE_NVFS_SETUP_ERROR, NVFS driver initialization error) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 34, CU_FILE_IO_DISABLED, GPUDirect Storage disabled by config on current file)\ + CUFILE_OP(CUFILEOP_BASE_ERR + 35, CU_FILE_BATCH_SUBMIT_FAILED, failed to submit batch operation)\ + CUFILE_OP(CUFILEOP_BASE_ERR + 36, CU_FILE_GPU_MEMORY_PINNING_FAILED, failed to allocate pinned GPU Memory) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 37, CU_FILE_BATCH_FULL, queue full for batch operation) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 38, CU_FILE_ASYNC_NOT_SUPPORTED, cuFile stream operation not supported) \ + CUFILE_OP(CUFILEOP_BASE_ERR + 39, CU_FILE_IO_MAX_ERROR, GPUDirect Storage Max Error) + + +/** + * @brief cufileop status enum + * + * @note on success the error code is set to @ref CU_FILE_SUCCESS. + * @note The error code can be inspected using @ref IS_CUFILE_ERR and @ref CUFILE_ERRSTR. + * @note The error code if set to @ref CU_FILE_CUDA_DRIVER_ERROR, then cuda error can be inspected using @ref IS_CUDA_ERR and @ref CU_FILE_CUDA_ERR. + * @note Data path errors are captured via standard error codes + */ +typedef enum CUfileOpError { + /// @cond DOXYGEN_SKIP_MACRO + #define CUFILE_OP(code, name, string) name = code, + CUFILEOP_STATUS_ENTRIES + #undef CUFILE_OP + ///@endcond +} CUfileOpError; + +/// @endcond + +/** + * @brief cufileop status string + */ +static inline const char *cufileop_status_error(CUfileOpError status) +{ + switch (status) { + /// @cond DOXYGEN_SKIP_MACRO + #define CUFILE_OP(code, name, string) \ + case name: return #string; + CUFILEOP_STATUS_ENTRIES + #undef CUFILE_OP + ///@endcond + default:return "unknown cufile error"; + } +} + +/** + * @brief cufileop status string + */ +typedef struct CUfileError { + + CUfileOpError err; // cufile error + + CUresult cu_err; // cuda driver error + +}CUfileError_t; + +/** + * @brief error macros to inspect error status of type @ref CUfileOpError + */ + +#define IS_CUFILE_ERR(err) \ + (abs((err)) > CUFILEOP_BASE_ERR) + +#define CUFILE_ERRSTR(err) \ + cufileop_status_error((CUfileOpError)abs((err))) + +#define IS_CUDA_ERR(status) \ + ((status).err == CU_FILE_CUDA_DRIVER_ERROR) + +#define CU_FILE_CUDA_ERR(status) ((status).cu_err) + +/* driver properties */ +typedef enum CUfileDriverStatusFlags { + CU_FILE_LUSTRE_SUPPORTED = 0, /*!< Support for DDN LUSTRE */ + + CU_FILE_WEKAFS_SUPPORTED = 1, /*!< Support for WEKAFS */ + + CU_FILE_NFS_SUPPORTED = 2, /*!< Support for NFS */ + + CU_FILE_GPFS_SUPPORTED = 3, /*! < Support for GPFS */ + + CU_FILE_NVME_SUPPORTED = 4, /*!< Support for NVMe */ + + CU_FILE_NVMEOF_SUPPORTED = 5, /*!< Support for NVMeOF */ + + CU_FILE_SCSI_SUPPORTED = 6, /*!< Support for SCSI */ + + CU_FILE_SCALEFLUX_CSD_SUPPORTED = 7, /*!< Support for Scaleflux CSD*/ + + CU_FILE_NVMESH_SUPPORTED = 8, /*!< Support for NVMesh Block Dev*/ + CU_FILE_BEEGFS_SUPPORTED = 9, /*!< Support for BeeGFS */ + //10 is reserved for YRCloudFile + CU_FILE_NVME_P2P_SUPPORTED = 11, /*!< Support for NVMe using PCI P2PDMA */ + +}CUfileDriverStatusFlags_t; + +typedef enum CUfileDriverControlFlags { + CU_FILE_USE_POLL_MODE = 0 , /*!< use POLL mode. properties.use_poll_mode*/ + + CU_FILE_ALLOW_COMPAT_MODE = 1/*!< allow COMPATIBILITY mode. properties.allow_compat_mode*/ + +}CUfileDriverControlFlags_t; + +typedef enum CUfileFeatureFlags { + CU_FILE_DYN_ROUTING_SUPPORTED = 0, /*!< Support for Dynamic routing to handle devices across the PCIe bridges */ + + CU_FILE_BATCH_IO_SUPPORTED = 1, /*!< Unsupported */ + + CU_FILE_STREAMS_SUPPORTED = 2, /*!< Unsupported */ + + CU_FILE_PARALLEL_IO_SUPPORTED = 3 /*!< Unsupported */ +}CUfileFeatureFlags_t; + +typedef struct CUfileDrvProps { + struct { + unsigned int major_version; + + unsigned int minor_version; + + size_t poll_thresh_size; + + size_t max_direct_io_size; + + unsigned int dstatusflags; + + unsigned int dcontrolflags; + + } nvfs; + + unsigned int fflags; + + unsigned int max_device_cache_size; + + unsigned int per_buffer_cache_size; + + unsigned int max_device_pinned_mem_size; + + unsigned int max_batch_io_size; + unsigned int max_batch_io_timeout_msecs; +}CUfileDrvProps_t; + +typedef struct sockaddr sockaddr_t; + +typedef struct cufileRDMAInfo +{ + int version; + int desc_len; + const char *desc_str; +}cufileRDMAInfo_t; + +#define CU_FILE_RDMA_REGISTER 1 +#define CU_FILE_RDMA_RELAXED_ORDERING (1<<1) + + + +typedef struct CUfileFSOps { + /* NULL means discover using fstat */ + const char* (*fs_type) (void *handle); + + /* list of host addresses to use, NULL means no restriction */ + int (*getRDMADeviceList)(void *handle, sockaddr_t **hostaddrs); + + /* -1 no pref */ + int (*getRDMADevicePriority)(void *handle, char*, size_t, + loff_t, sockaddr_t* hostaddr); + + /* NULL means try VFS */ + ssize_t (*read) (void *handle, char*, size_t, loff_t, cufileRDMAInfo_t*); + ssize_t (*write) (void *handle, const char *, size_t, loff_t , cufileRDMAInfo_t*); +}CUfileFSOps_t; + +/* File Handle */ +enum CUfileFileHandleType { + CU_FILE_HANDLE_TYPE_OPAQUE_FD = 1, /*!< Linux based fd */ + + CU_FILE_HANDLE_TYPE_OPAQUE_WIN32 = 2, /*!< Windows based handle (unsupported) */ + + CU_FILE_HANDLE_TYPE_USERSPACE_FS = 3, /* Userspace based FS */ +}; + +typedef struct CUfileDescr_t { + enum CUfileFileHandleType type; /* type of file being registered */ + union { + int fd; /* Linux */ + void *handle; /* Windows */ + } handle; + const CUfileFSOps_t *fs_ops; /* file system operation table */ +}CUfileDescr_t; + +/** + * @brief File handle type + * + */ +typedef void* CUfileHandle_t; + + +#pragma GCC visibility push(default) + +/** + * @brief cuFileHandleRegister is required, and performs extra checking that is memoized to provide increased performance on later cuFile operations. + * + * @param fh @ref CUfileHandle_t opaque file handle for IO operations + * @param descr @ref CUfileDescr_t file descriptor (OS agnostic) + * + * @return CU_FILE_SUCCESS on successful completion. fh will be updated for use in @ref cuFileRead, @ref cuFileWrite, @ref cuFileHandleDeregister + * @return CU_FILE_DRIVER_NOT_INITIALIZED on failure to load driver + * @return CU_FILE_IO_NOT_SUPPORTED - if filesystem is not supported + * @return CU_FILE_INVALID_VALUE if null or bad api arguments + * @return CU_FILE_INVALID_FILE_OPEN_FLAG if file is opened with unsupported modes like no O_DIRECT + * @return CU_FILE_INVALID_FILE_TYPE if filepath is not valid or is not a regular file + * @return CU_FILE_HANDLE_ALREADY_REGISTERED if file handle/descriptor is already registered + * + * Description + * cuFileHandleRegister registers the open file descriptor for use with cuFile IO operations. + * + * This API will ensure that the file’s descriptor is checked for GPUDirect Storage support and returns a valid file handle on CU_FILE_SUCCESS. + * + * @note the file needs to be opened in O_DIRECT mode to support GPUDirect Storage. + * + * @see cuFileRead + * @see cuFileWrite + * @see cuFileHandleDeregister + * + */ +CUfileError_t cuFileHandleRegister(CUfileHandle_t *fh, CUfileDescr_t *descr); + +/** + * @brief releases a registered filehandle from cuFile + * + * @param fh @ref CUfileHandle_t file handle + * + * @return void + * + * @see cuFileHandleRegister + */ +void cuFileHandleDeregister(CUfileHandle_t fh); + +/** + * @brief register an existing cudaMalloced memory with cuFile to pin for GPUDirect Storage access or + * register host allocated memory with cuFile. + * + * @param bufPtr_base buffer pointer allocated + * @param length size of memory region from the above specified bufPtr + * @param flags CU_FILE_RDMA_REGISTER + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_NVFS_DRIVER_ERROR + * @return CU_FILE_INVALID_VALUE + * @return CU_FILE_CUDA_ERROR for unsuported memory type + * @return CU_FILE_MEMORY_ALREADY_REGISTERED on error + * @return CU_FILE_GPU_MEMORY_PINNING_FAILED if not enough pinned memory is available + * @note This memory will be use to perform GPU direct DMA from the supported storage. + * @warning This API is intended for usecases where the memory is used as streaming buffer that is reused across multiple cuFile IO operations before calling @ref cuFileBufDeregister + * + * @see cuFileBufDeregister + * @see cuFileRead + * @see cuFileWrite + */ +CUfileError_t cuFileBufRegister(const void *bufPtr_base, size_t length, int flags); + +/** + * @brief deregister an already registered device or host memory from cuFile + * + * @param bufPtr_base buffer pointer to deregister + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_INVALID_VALUE on invalid memory pointer or unregistered memory pointer + * + * @see cuFileBufRegister + * @see cuFileRead + * @see cuFileWrite + */ + +CUfileError_t cuFileBufDeregister(const void *bufPtr_base); + +/** + * @brief read data from a registered file handle to a specified device or host memory + * + * @param fh @ref CUfileHandle_t opaque file handle + * @param bufPtr_base base address of buffer in device or host memory + * @param size size bytes to read + * @param file_offset file-offset from begining of the file + * @param bufPtr_offset offset relative to the bufPtr_base pointer to read into. + * + * @return size of bytes successfully read + * @return -1 on error, in which case errno is set to indicate filesystem errors. + * @return all other errors will return a negative integer value of @ref CUfileOpError enum value. + * + * @note If the bufPtr is not registered with @ref cuFileBufRegister, the data will be buffered through preallocated pinned buffers if needed. + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * + * @see cuFileBufRegister + * @see cuFileHandleRegister + * @see cuFileWrite + */ + +ssize_t cuFileRead(CUfileHandle_t fh, void *bufPtr_base, size_t size, off_t file_offset, off_t bufPtr_offset); + +/** + * @brief write data from a specified device or host memory to a registered file handle + * + * @param fh @ref CUfileHandle_t opaque file handle + * @param bufPtr_base base address of buffer in device or host memory + * @param size size bytes to write + * @param file_offset file-offset from begining of the file + * @param bufPtr_offset offset relative to the bufPtr_base pointer to write from. + * + * @return size of bytes successfully written + * @return -1 on error, in which case errno is set to indicate filesystem errors. + * @return all other errors will return a negative integer value of @ref CUfileOpError enum value. + * + * @note If the bufPtr is not registered with @ref cuFileBufRegister, the data will be buffered through preallocated pinned buffers if needed. + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * + * @see cuFileBufRegister + * @see cuFileHandleRegister + * @see cuFileRead + */ + +ssize_t cuFileWrite(CUfileHandle_t fh, const void *bufPtr_base, size_t size, off_t file_offset, off_t bufPtr_offset); + +// CUFile Driver APIs + +/** + * @brief + * Initialize the cuFile library and open the nvidia-fs driver + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED + * @return CU_FILE_DRIVER_VERSION_MISMATCH on driver version mismatch error + * + * @see cuFileDriverClose + */ +CUfileError_t cuFileDriverOpen(void); + +CUfileError_t cuFileDriverClose(void); +#define cuFileDriverClose cuFileDriverClose_v2 +/** + * @brief + * reset the cuFile library and release the nvidia-fs driver + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_CLOSING if there are any active IO operations using @ref cuFileRead or @ref cuFileWrite + * + * @see cuFileDriverOpen + */ +CUfileError_t cuFileDriverClose(void); + +/** + * @brief + * returns use count of cufile drivers at that moment by the process. + */ +long cuFileUseCount(void); + +/** + * @brief + * Gets the Driver session properties + * + * @return CU_FILE_SUCCESS on success + * + * @see cuFileDriverSetPollMode + * @see cuFileDriverSetMaxDirectIOSize + * @see cuFileDriverSetMaxCacheSize + * @see cuFileDriverSetMaxPinnedMemSize + */ +CUfileError_t cuFileDriverGetProperties(CUfileDrvProps_t *props); + +/** + * @brief + * Sets whether the Read/Write APIs use polling to do IO operations + * + * @param poll boolean to indicate whether to use poll mode or not + * @param poll_threshold_size max IO size to use for POLLING mode in KB + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_DRIVER_VERSION_MISMATCH, CU_FILE_DRIVER_UNSUPPORTED_LIMIT on error + * + * @warning This is an advanced command and should be tuned based on available system memory + * + * @see cuFileDriverGetProperties + */ +CUfileError_t cuFileDriverSetPollMode(bool poll, size_t poll_threshold_size); + +/** + * @brief + * Control parameter to set max IO size(KB) used by the library to talk to nvidia-fs driver + * + * @param max_direct_io_size maximum allowed direct io size in KB + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_DRIVER_VERSION_MISMATCH, CU_FILE_DRIVER_UNSUPPORTED_LIMIT on error + * + * @warning This is an advanced command and should be tuned based on available system memory + * + * @see cuFileDriverGetProperties + * + */ +CUfileError_t cuFileDriverSetMaxDirectIOSize(size_t max_direct_io_size); + +/** + * @brief + * Control parameter to set maximum GPU memory reserved per device by the library for internal buffering + * + * @param max_cache_size The maximum GPU buffer space per device used for internal use in KB + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_DRIVER_VERSION_MISMATCH, CU_FILE_DRIVER_UNSUPPORTED_LIMIT on error + * + * @warning This is an advanced command and should be tuned based on supported GPU memory + * + * @see cuFileDriverGetProperties + */ +CUfileError_t cuFileDriverSetMaxCacheSize(size_t max_cache_size); + +/** + * @brief + * Sets maximum buffer space that is pinned in KB for use by @ref cuFileBufRegister + * + * @param max_pinned_size maximum buffer space that is pinned in KB + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_DRIVER_VERSION_MISMATCH, CU_FILE_DRIVER_UNSUPPORTED_LIMIT on error + * + * @warning This is an advanced command and should be tuned based on supported GPU memory + * + * @see cuFileDriverGetProperties + * + */ +CUfileError_t cuFileDriverSetMaxPinnedMemSize(size_t max_pinned_size); + +//Experimental Batch API's + + +typedef enum CUfileOpcode { + CUFILE_READ = 0, + CUFILE_WRITE +}CUfileOpcode_t; + +typedef enum CUFILEStatus_enum { + CUFILE_WAITING = 0x000001, /* required value prior to submission */ + CUFILE_PENDING = 0x000002, /* once enqueued */ + CUFILE_INVALID = 0x000004, /* request was ill-formed or could not be enqueued */ + CUFILE_CANCELED = 0x000008, /* request successfully canceled */ + CUFILE_COMPLETE = 0x0000010, /* request successfully completed */ + CUFILE_TIMEOUT = 0x0000020, /* request timed out */ + CUFILE_FAILED = 0x0000040 /* unable to complete */ +}CUfileStatus_t; +typedef enum cufileBatchMode { + CUFILE_BATCH = 1, +} CUfileBatchMode_t; +typedef struct CUfileIOParams { + CUfileBatchMode_t mode; // Must be the very first field. + union { + struct { + void *devPtr_base; //This can be a device memory or a host memory pointer. + off_t file_offset; + off_t devPtr_offset; + size_t size; + }batch; + }u; + CUfileHandle_t fh; + CUfileOpcode_t opcode; + void *cookie; +}CUfileIOParams_t; +typedef struct CUfileIOEvents { + void *cookie; + CUfileStatus_t status; /* status of the operation */ + size_t ret; /* -ve error or amount of I/O done. */ +}CUfileIOEvents_t; + +typedef void* CUfileBatchHandle_t; + +CUfileError_t cuFileBatchIOSetUp(CUfileBatchHandle_t *batch_idp, unsigned nr); +CUfileError_t cuFileBatchIOSubmit(CUfileBatchHandle_t batch_idp, unsigned nr, CUfileIOParams_t *iocbp, unsigned int flags); +CUfileError_t cuFileBatchIOGetStatus(CUfileBatchHandle_t batch_idp, unsigned min_nr, unsigned* nr, + CUfileIOEvents_t *iocbp, struct timespec* timeout); +CUfileError_t cuFileBatchIOCancel(CUfileBatchHandle_t batch_idp); +void cuFileBatchIODestroy(CUfileBatchHandle_t batch_idp); + +//Async API's with cuda streams + +// cuFile stream API registration flags +// buffer pointer offset is set at submission time +#define CU_FILE_STREAM_FIXED_BUF_OFFSET 1 +// file offset is set at submission time +#define CU_FILE_STREAM_FIXED_FILE_OFFSET 2 +// file size is set at submission time +#define CU_FILE_STREAM_FIXED_FILE_SIZE 4 +// size, offset and buffer offset are 4k aligned +#define CU_FILE_STREAM_PAGE_ALIGNED_INPUTS 8 + +/** + *@brief + + * @param fh The cuFile handle for the file. + * @param bufPtr_base base address of buffer in device or host memory + * @param size_p pointer to size bytes to read + * @note *size_p if the size is not known at the time of submission, then must provide the max possible size for I/O request. + * @param file_offset_p pointer to file-offset from begining of the file + * @param bufPtr_offset_p pointer to offset relative to the bufPtr_base pointer to read into. + * @param bytes_read_p pointer to the number of bytes that were successfully read. + * @param CUstream stream cuda stream for the operation. + * + * @return size of bytes successfully read in *bytes_read_p + * @return -1 on error, in which case errno is set to indicate filesystem errors. + * @return all other errors will return a negative integer value of @ref CUfileOpError enum value. + * + * @note If the bufPtr_base is not registered with @ref cuFileBufRegister, the data will be buffered through preallocated pinned buffers. + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * @note If the stream is registered with cuFileStreamRegister, the IO setup and teardown overhead will be reduced. + * @note on cuda stream errors, the user must call cuFileStreamDeregister to release any outstanding cuFile resources for the stream. + * + * + * @see cuFileBufRegister + * @see cuFileHandleRegister + * @see cuFileRead + * @see cuFileStreamRegister + * @see cuFileStreamDeregister + */ + +CUfileError_t cuFileReadAsync(CUfileHandle_t fh, void *bufPtr_base, + size_t *size_p, off_t *file_offset_p, off_t *bufPtr_offset_p, ssize_t *bytes_read_p, CUstream stream); + +/** + *@brief + +* @param fh The cuFile handle for the file. + * @param bufPtr_base base address of buffer in device or host memory + * @param size_p pointer to size bytes to write. + * @note *size_p if the size is not known at the time of submission, then must provide the max possible size for I/O request. + * @param file_offset_p pointer to file-offset from begining of the file + * @param bufPtr_offset_p pointer to offset relative to the bufPtr_base pointer to write from. + * @param bytes_written_p pointer to the number of bytes that were successfully written. + * @param CUstream cuda stream for the operation. + * + * @return size of bytes successfully written in *bytes_written_p + * @return -1 on error, in which case errno is set to indicate filesystem errors. + * @return all other errors will return a negative integer value of @ref CUfileOpError enum value. + * + * @note If the bufPtr_base is not registered with @ref cuFileBufRegister, the data will be buffered through preallocated pinned buffers. + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * @note If the stream is registered with cuFileStreamRegister prior to this call, the IO setup and teardown overhead will be reduced. + * @note on cuda stream errors, the user must call cuFileStreamDeregister to release any outstanding cuFile resources for the stream. + * + * @see cuFileBufRegister + * @see cuFileHandleRegister + * @see cuFileWrite + * @see cuFileStreamRegister + * @see cuFileStreamDeregister + */ + +CUfileError_t cuFileWriteAsync(CUfileHandle_t fh, void *bufPtr_base, + size_t *size_p, off_t *file_offset_p, off_t *bufPtr_offset_p, ssize_t *bytes_written_p, CUstream stream); + +/** + *@brief + + * @param CUstream cuda stream for the operation. + * @param flags for the stream to improve the stream execution of IO based on input parameters. + * @note supported FLAGS are + * @note CU_FILE_STREAM_FIXED_BUF_OFFSET - buffer pointer offset is set at submission time + * @note CU_FILE_STREAM_FIXED_FILE_OFFSET - file offset is set at submission time + * @note CU_FILE_STREAM_FIXED_FILE_SIZE - file size is set at submission time + * @note CU_FILE_STREAM_PAGE_ALIGNED_INPUTS - size, offset and buffer offset are 4k aligned + * + * @note allocates resources needed to support cuFile operations asynchronously for the cuda stream + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_INVALID_VALUE if the stream is invalid + * + * @see cuFileReadAsync + * @see cuFileWriteAsync + * @see cuFileStreamDeregister + */ + +CUfileError_t cuFileStreamRegister(CUstream stream, unsigned flags); + +/** + *@brief + + * @param CUstream cuda stream for the operation. + * + * @note deallocates resources used by previous cuFile asynchronous operations for the cuda stream + * @note highly recommend to call after cuda stream errors to release any outstanding cuFile resources for this stream + * @note must be called before cuStreamDestroy call for the specified stream. + * @note This is useful for applications that need to perform IO to unaligned file offsets and/or size. This is also recommended + * for cases where the BAR1 memory size is smaller than the size of the allocated memory. + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_DRIVER_NOT_INITIALIZED if the driver is not initialized + * @return CU_FILE_INVALID_VALUE if the stream is invalid + * + * @see cuFileReadAsync + * @see cuFileWriteAsync + * @see cuFileStreamRegister + */ + +CUfileError_t cuFileStreamDeregister(CUstream stream); + +/** + *@brief + + * @returns cufile library version. + * + * @The version is returned as (1000 major + 10 minor). + * @For example, CUFILE 1.7.0 would be represented by 1070. + * @note This is useful for applications that need to inquire the library. + * + * @return CU_FILE_SUCCESS on success + * @return CU_FILE_INVALID_VALUE if the input parameter is null. + * @return CU_FILE_DRIVER_VERSION_READ_ERROR if the version is not available. + * + */ + +CUfileError_t cuFileGetVersion(int *version); + +#pragma GCC visibility pop + +/// @cond DOXYGEN_SKIP_MACRO +#endif // CUFILE_H +/// @endcond +#ifdef __cplusplus +} +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/__init__.py b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75a1dbb867bb4fe9353ea5f92e7c8f05763d71f3 Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/libcufile_rdma.so.1 b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/libcufile_rdma.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..ae4c65d661c568cf9eee2890c91ff2d8856254ab Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/cufile/lib/libcufile_rdma.so.1 differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f3730819c2d8819e4f2bd5acce04e7a291bd0db Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/__init__.py b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b18839ef2cc44107b500d7bc26b2b32852ae3d1 Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand.h new file mode 100644 index 0000000000000000000000000000000000000000..9fee5b2826d9fda5ed6b4a7f5a14bd71e2c70b23 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand.h @@ -0,0 +1,1080 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +#if !defined(CURAND_H_) +#define CURAND_H_ + +/** + * \defgroup HOST Host API + * + * @{ + */ +#ifndef __CUDACC_RTC__ +#include +#endif + +#ifndef CURANDAPI +#ifdef _WIN32 +#define CURANDAPI __stdcall +#else +#define CURANDAPI +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +#define CURAND_VER_MAJOR 10 +#define CURAND_VER_MINOR 3 +#define CURAND_VER_PATCH 9 +#define CURAND_VER_BUILD 90 +#define CURAND_VERSION (CURAND_VER_MAJOR * 1000 + \ + CURAND_VER_MINOR * 100 + \ + CURAND_VER_PATCH) +/* CURAND Host API datatypes */ + +/** + * @{ + */ + +/** + * CURAND function call status types + */ +enum curandStatus { + CURAND_STATUS_SUCCESS = 0, ///< No errors + CURAND_STATUS_VERSION_MISMATCH = 100, ///< Header file and linked library version do not match + CURAND_STATUS_NOT_INITIALIZED = 101, ///< Generator not initialized + CURAND_STATUS_ALLOCATION_FAILED = 102, ///< Memory allocation failed + CURAND_STATUS_TYPE_ERROR = 103, ///< Generator is wrong type + CURAND_STATUS_OUT_OF_RANGE = 104, ///< Argument out of range + CURAND_STATUS_LENGTH_NOT_MULTIPLE = 105, ///< Length requested is not a multple of dimension + CURAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106, ///< GPU does not have double precision required by MRG32k3a + CURAND_STATUS_LAUNCH_FAILURE = 201, ///< Kernel launch failure + CURAND_STATUS_PREEXISTING_FAILURE = 202, ///< Preexisting failure on library entry + CURAND_STATUS_INITIALIZATION_FAILED = 203, ///< Initialization of CUDA failed + CURAND_STATUS_ARCH_MISMATCH = 204, ///< Architecture mismatch, GPU does not support requested feature + CURAND_STATUS_INTERNAL_ERROR = 999 ///< Internal library error +}; + +/* + * CURAND function call status types +*/ +/** \cond UNHIDE_TYPEDEFS */ +typedef enum curandStatus curandStatus_t; +/** \endcond */ + +/** + * CURAND generator types + */ +enum curandRngType { + CURAND_RNG_TEST = 0, + CURAND_RNG_PSEUDO_DEFAULT = 100, ///< Default pseudorandom generator + CURAND_RNG_PSEUDO_XORWOW = 101, ///< XORWOW pseudorandom generator + CURAND_RNG_PSEUDO_MRG32K3A = 121, ///< MRG32k3a pseudorandom generator + CURAND_RNG_PSEUDO_MTGP32 = 141, ///< Mersenne Twister MTGP32 pseudorandom generator + CURAND_RNG_PSEUDO_MT19937 = 142, ///< Mersenne Twister MT19937 pseudorandom generator + CURAND_RNG_PSEUDO_PHILOX4_32_10 = 161, ///< PHILOX-4x32-10 pseudorandom generator + CURAND_RNG_QUASI_DEFAULT = 200, ///< Default quasirandom generator + CURAND_RNG_QUASI_SOBOL32 = 201, ///< Sobol32 quasirandom generator + CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202, ///< Scrambled Sobol32 quasirandom generator + CURAND_RNG_QUASI_SOBOL64 = 203, ///< Sobol64 quasirandom generator + CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 204 ///< Scrambled Sobol64 quasirandom generator +}; + +/* + * CURAND generator types + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef enum curandRngType curandRngType_t; +/** \endcond */ + +/** + * CURAND ordering of results in memory + */ +enum curandOrdering { + CURAND_ORDERING_PSEUDO_BEST = 100, ///< Best ordering for pseudorandom results + CURAND_ORDERING_PSEUDO_DEFAULT = 101, ///< Specific default thread sequence for pseudorandom results, same as CURAND_ORDERING_PSEUDO_BEST + CURAND_ORDERING_PSEUDO_SEEDED = 102, ///< Specific seeding pattern for fast lower quality pseudorandom results + CURAND_ORDERING_PSEUDO_LEGACY = 103, ///< Specific legacy sequence for pseudorandom results, guaranteed to remain the same for all cuRAND release + CURAND_ORDERING_PSEUDO_DYNAMIC = 104, ///< Specific ordering adjusted to the device it is being executed on, provides the best performance + CURAND_ORDERING_QUASI_DEFAULT = 201 ///< Specific n-dimensional ordering for quasirandom results +}; + +/* + * CURAND ordering of results in memory + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef enum curandOrdering curandOrdering_t; +/** \endcond */ + +/** + * CURAND choice of direction vector set + */ +enum curandDirectionVectorSet { + CURAND_DIRECTION_VECTORS_32_JOEKUO6 = 101, ///< Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions + CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102, ///< Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled + CURAND_DIRECTION_VECTORS_64_JOEKUO6 = 103, ///< Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions + CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104 ///< Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled +}; + +/* + * CURAND choice of direction vector set + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef enum curandDirectionVectorSet curandDirectionVectorSet_t; +/** \endcond */ + +/** + * CURAND array of 32-bit direction vectors + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef unsigned int curandDirectionVectors32_t[32]; +/** \endcond */ + + /** + * CURAND array of 64-bit direction vectors + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef unsigned long long curandDirectionVectors64_t[64]; +/** \endcond **/ + +/** + * CURAND generator (opaque) + */ +struct curandGenerator_st; + +/** + * CURAND generator + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandGenerator_st *curandGenerator_t; +/** \endcond */ + +/** + * CURAND distribution + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef double curandDistribution_st; +typedef curandDistribution_st *curandDistribution_t; +typedef struct curandDistributionShift_st *curandDistributionShift_t; +/** \endcond */ +/** + * CURAND distribution M2 + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandDistributionM2Shift_st *curandDistributionM2Shift_t; +typedef struct curandHistogramM2_st *curandHistogramM2_t; +typedef unsigned int curandHistogramM2K_st; +typedef curandHistogramM2K_st *curandHistogramM2K_t; +typedef curandDistribution_st curandHistogramM2V_st; +typedef curandHistogramM2V_st *curandHistogramM2V_t; + +typedef struct curandDiscreteDistribution_st *curandDiscreteDistribution_t; +/** \endcond */ + +/* + * CURAND METHOD + */ +/** \cond UNHIDE_ENUMS */ +enum curandMethod { + CURAND_CHOOSE_BEST = 0, // choose best depends on args + CURAND_ITR = 1, + CURAND_KNUTH = 2, + CURAND_HITR = 3, + CURAND_M1 = 4, + CURAND_M2 = 5, + CURAND_BINARY_SEARCH = 6, + CURAND_DISCRETE_GAUSS = 7, + CURAND_REJECTION = 8, + CURAND_DEVICE_API = 9, + CURAND_FAST_REJECTION = 10, + CURAND_3RD = 11, + CURAND_DEFINITION = 12, + CURAND_POISSON = 13 +}; + +typedef enum curandMethod curandMethod_t; +/** \endcond */ + + +#ifndef __CUDACC_RTC__ + +/** + * @} + */ + +/** + * \brief Create new random number generator. + * + * Creates a new random number generator of type \p rng_type + * and returns it in \p *generator. + * + * Legal values for \p rng_type are: + * - CURAND_RNG_PSEUDO_DEFAULT + * - CURAND_RNG_PSEUDO_XORWOW + * - CURAND_RNG_PSEUDO_MRG32K3A + * - CURAND_RNG_PSEUDO_MTGP32 + * - CURAND_RNG_PSEUDO_MT19937 + * - CURAND_RNG_PSEUDO_PHILOX4_32_10 + * - CURAND_RNG_QUASI_DEFAULT + * - CURAND_RNG_QUASI_SOBOL32 + * - CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 + * - CURAND_RNG_QUASI_SOBOL64 + * - CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 + * + * When \p rng_type is CURAND_RNG_PSEUDO_DEFAULT, the type chosen + * is CURAND_RNG_PSEUDO_XORWOW. \n + * When \p rng_type is CURAND_RNG_QUASI_DEFAULT, + * the type chosen is CURAND_RNG_QUASI_SOBOL32. + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_XORWOW are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MRG32K3A are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MTGP32 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MT19937 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * * The default values for \p rng_type = CURAND_RNG_PSEUDO_PHILOX4_32_10 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SOBOL32 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SOBOL64 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SCRAMBBLED_SOBOL32 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * \param generator - Pointer to generator + * \param rng_type - Type of generator to create + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED, if memory could not be allocated \n + * - CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU \n + * - CURAND_STATUS_VERSION_MISMATCH if the header file version does not match the + * dynamically linked library version \n + * - CURAND_STATUS_TYPE_ERROR if the value for \p rng_type is invalid \n + * - CURAND_STATUS_SUCCESS if generator was created successfully \n + * + */ +curandStatus_t CURANDAPI +curandCreateGenerator(curandGenerator_t *generator, curandRngType_t rng_type); + +/** + * \brief Create new host CPU random number generator. + * + * Creates a new host CPU random number generator of type \p rng_type + * and returns it in \p *generator. + * + * Legal values for \p rng_type are: + * - CURAND_RNG_PSEUDO_DEFAULT + * - CURAND_RNG_PSEUDO_XORWOW + * - CURAND_RNG_PSEUDO_MRG32K3A + * - CURAND_RNG_PSEUDO_MTGP32 + * - CURAND_RNG_PSEUDO_MT19937 + * - CURAND_RNG_PSEUDO_PHILOX4_32_10 + * - CURAND_RNG_QUASI_DEFAULT + * - CURAND_RNG_QUASI_SOBOL32 + * - CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 + * - CURAND_RNG_QUASI_SOBOL64 + * - CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 + * + * When \p rng_type is CURAND_RNG_PSEUDO_DEFAULT, the type chosen + * is CURAND_RNG_PSEUDO_XORWOW. \n + * When \p rng_type is CURAND_RNG_QUASI_DEFAULT, + * the type chosen is CURAND_RNG_QUASI_SOBOL32. + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_XORWOW are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MRG32K3A are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MTGP32 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_PSEUDO_MT19937 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * * The default values for \p rng_type = CURAND_RNG_PSEUDO_PHILOX4_32_10 are: + * - \p seed = 0 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_PSEUDO_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SOBOL32 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SOBOL64 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * The default values for \p rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 are: + * - \p dimensions = 1 + * - \p offset = 0 + * - \p ordering = CURAND_ORDERING_QUASI_DEFAULT + * + * \param generator - Pointer to generator + * \param rng_type - Type of generator to create + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU \n + * - CURAND_STATUS_VERSION_MISMATCH if the header file version does not match the + * dynamically linked library version \n + * - CURAND_STATUS_TYPE_ERROR if the value for \p rng_type is invalid \n + * - CURAND_STATUS_SUCCESS if generator was created successfully \n + */ +curandStatus_t CURANDAPI +curandCreateGeneratorHost(curandGenerator_t *generator, curandRngType_t rng_type); + +/** + * \brief Destroy an existing generator. + * + * Destroy an existing generator and free all memory associated with its state. + * + * \param generator - Generator to destroy + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_SUCCESS if generator was destroyed successfully \n + */ +curandStatus_t CURANDAPI +curandDestroyGenerator(curandGenerator_t generator); + +/** + * \brief Return the version number of the library. + * + * Return in \p *version the version number of the dynamically linked CURAND + * library. The format is the same as CUDART_VERSION from the CUDA Runtime. + * The only supported configuration is CURAND version equal to CUDA Runtime + * version. + * + * \param version - CURAND library version + * + * \return + * - CURAND_STATUS_SUCCESS if the version number was successfully returned \n + */ +curandStatus_t CURANDAPI +curandGetVersion(int *version); + +/** +* \brief Return the value of the curand property. +* +* Return in \p *value the number for the property described by \p type of the +* dynamically linked CURAND library. +* +* \param type - CUDA library property +* \param value - integer value for the requested property +* +* \return +* - CURAND_STATUS_SUCCESS if the property value was successfully returned \n +* - CURAND_STATUS_OUT_OF_RANGE if the property type is not recognized \n +*/ +curandStatus_t CURANDAPI +curandGetProperty(libraryPropertyType type, int *value); + + +/** + * \brief Set the current stream for CURAND kernel launches. + * + * Set the current stream for CURAND kernel launches. All library functions + * will use this stream until set again. + * + * \param generator - Generator to modify + * \param stream - Stream to use or ::NULL for null stream + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_SUCCESS if stream was set successfully \n + */ +curandStatus_t CURANDAPI +curandSetStream(curandGenerator_t generator, cudaStream_t stream); + +/** + * \brief Set the seed value of the pseudo-random number generator. + * + * Set the seed value of the pseudorandom number generator. + * All values of seed are valid. Different seeds will produce different sequences. + * Different seeds will often not be statistically correlated with each other, + * but some pairs of seed values may generate sequences which are statistically correlated. + * + * \param generator - Generator to modify + * \param seed - Seed value + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_TYPE_ERROR if the generator is not a pseudorandom number generator \n + * - CURAND_STATUS_SUCCESS if generator seed was set successfully \n + */ +curandStatus_t CURANDAPI +curandSetPseudoRandomGeneratorSeed(curandGenerator_t generator, unsigned long long seed); + +/** + * \brief Set the absolute offset of the pseudo or quasirandom number generator. + * + * Set the absolute offset of the pseudo or quasirandom number generator. + * + * All values of offset are valid. The offset position is absolute, not + * relative to the current position in the sequence. + * + * \param generator - Generator to modify + * \param offset - Absolute offset position + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_SUCCESS if generator offset was set successfully \n + */ +curandStatus_t CURANDAPI +curandSetGeneratorOffset(curandGenerator_t generator, unsigned long long offset); + +/** + * \brief Set the ordering of results of the pseudo or quasirandom number generator. + * + * Set the ordering of results of the pseudo or quasirandom number generator. + * + * Legal values of \p order for pseudorandom generators are: + * - CURAND_ORDERING_PSEUDO_DEFAULT + * - CURAND_ORDERING_PSEUDO_BEST + * - CURAND_ORDERING_PSEUDO_SEEDED + * - CURAND_ORDERING_PSEUDO_LEGACY + * + * Legal values of \p order for quasirandom generators are: + * - CURAND_ORDERING_QUASI_DEFAULT + * + * \param generator - Generator to modify + * \param order - Ordering of results + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_OUT_OF_RANGE if the ordering is not valid \n + * - CURAND_STATUS_SUCCESS if generator ordering was set successfully \n + */ +curandStatus_t CURANDAPI +curandSetGeneratorOrdering(curandGenerator_t generator, curandOrdering_t order); + +/** + * \brief Set the number of dimensions. + * + * Set the number of dimensions to be generated by the quasirandom number + * generator. + * + * Legal values for \p num_dimensions are 1 to 20000. + * + * \param generator - Generator to modify + * \param num_dimensions - Number of dimensions + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_OUT_OF_RANGE if num_dimensions is not valid \n + * - CURAND_STATUS_TYPE_ERROR if the generator is not a quasirandom number generator \n + * - CURAND_STATUS_SUCCESS if generator ordering was set successfully \n + */ +curandStatus_t CURANDAPI +curandSetQuasiRandomGeneratorDimensions(curandGenerator_t generator, unsigned int num_dimensions); + +/** + * \brief Generate 32-bit pseudo or quasirandom numbers. + * + * Use \p generator to generate \p num 32-bit results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 32-bit values with every bit random. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param num - Number of random 32-bit values to generate + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_TYPE_ERROR if the generator is a 64 bit quasirandom generator. + * (use ::curandGenerateLongLong() with 64 bit quasirandom generators) + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerate(curandGenerator_t generator, unsigned int *outputPtr, size_t num); + +/** + * \brief Generate 64-bit quasirandom numbers. + * + * Use \p generator to generate \p num 64-bit results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 64-bit values with every bit random. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param num - Number of random 64-bit values to generate + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_TYPE_ERROR if the generator is not a 64 bit quasirandom generator\n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateLongLong(curandGenerator_t generator, unsigned long long *outputPtr, size_t num); + +/** + * \brief Generate uniformly distributed floats. + * + * Use \p generator to generate \p num float results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 32-bit floating point values between \p 0.0f and \p 1.0f, + * excluding \p 0.0f and including \p 1.0f. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param num - Number of floats to generate + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateUniform(curandGenerator_t generator, float *outputPtr, size_t num); + +/** + * \brief Generate uniformly distributed doubles. + * + * Use \p generator to generate \p num double results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 64-bit double precision floating point values between + * \p 0.0 and \p 1.0, excluding \p 0.0 and including \p 1.0. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param num - Number of doubles to generate + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension \n + * - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateUniformDouble(curandGenerator_t generator, double *outputPtr, size_t num); + +/** + * \brief Generate normally distributed doubles. + * + * Use \p generator to generate \p n float results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 32-bit floating point values with mean \p mean and standard + * deviation \p stddev. + * + * Normally distributed results are generated from pseudorandom generators + * with a Box-Muller transform, and so require \p n to be even. + * Quasirandom generators use an inverse cumulative distribution + * function to preserve dimensionality. + * + * There may be slight numerical differences between results generated + * on the GPU with generators created with ::curandCreateGenerator() + * and results calculated on the CPU with generators created with + * ::curandCreateGeneratorHost(). These differences arise because of + * differences in results for transcendental functions. In addition, + * future versions of CURAND may use newer versions of the CUDA math + * library, so different versions of CURAND may give slightly different + * numerical values. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param n - Number of floats to generate + * \param mean - Mean of normal distribution + * \param stddev - Standard deviation of normal distribution + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension, or is not a multiple + * of two for pseudorandom generators \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateNormal(curandGenerator_t generator, float *outputPtr, + size_t n, float mean, float stddev); + +/** + * \brief Generate normally distributed doubles. + * + * Use \p generator to generate \p n double results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 64-bit floating point values with mean \p mean and standard + * deviation \p stddev. + * + * Normally distributed results are generated from pseudorandom generators + * with a Box-Muller transform, and so require \p n to be even. + * Quasirandom generators use an inverse cumulative distribution + * function to preserve dimensionality. + * + * There may be slight numerical differences between results generated + * on the GPU with generators created with ::curandCreateGenerator() + * and results calculated on the CPU with generators created with + * ::curandCreateGeneratorHost(). These differences arise because of + * differences in results for transcendental functions. In addition, + * future versions of CURAND may use newer versions of the CUDA math + * library, so different versions of CURAND may give slightly different + * numerical values. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param n - Number of doubles to generate + * \param mean - Mean of normal distribution + * \param stddev - Standard deviation of normal distribution + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension, or is not a multiple + * of two for pseudorandom generators \n + * - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateNormalDouble(curandGenerator_t generator, double *outputPtr, + size_t n, double mean, double stddev); + +/** + * \brief Generate log-normally distributed floats. + * + * Use \p generator to generate \p n float results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 32-bit floating point values with log-normal distribution based on + * an associated normal distribution with mean \p mean and standard deviation \p stddev. + * + * Normally distributed results are generated from pseudorandom generators + * with a Box-Muller transform, and so require \p n to be even. + * Quasirandom generators use an inverse cumulative distribution + * function to preserve dimensionality. + * The normally distributed results are transformed into log-normal distribution. + * + * There may be slight numerical differences between results generated + * on the GPU with generators created with ::curandCreateGenerator() + * and results calculated on the CPU with generators created with + * ::curandCreateGeneratorHost(). These differences arise because of + * differences in results for transcendental functions. In addition, + * future versions of CURAND may use newer versions of the CUDA math + * library, so different versions of CURAND may give slightly different + * numerical values. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param n - Number of floats to generate + * \param mean - Mean of associated normal distribution + * \param stddev - Standard deviation of associated normal distribution + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension, or is not a multiple + * of two for pseudorandom generators \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateLogNormal(curandGenerator_t generator, float *outputPtr, + size_t n, float mean, float stddev); + +/** + * \brief Generate log-normally distributed doubles. + * + * Use \p generator to generate \p n double results into the device memory at + * \p outputPtr. The device memory must have been previously allocated and be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 64-bit floating point values with log-normal distribution based on + * an associated normal distribution with mean \p mean and standard deviation \p stddev. + * + * Normally distributed results are generated from pseudorandom generators + * with a Box-Muller transform, and so require \p n to be even. + * Quasirandom generators use an inverse cumulative distribution + * function to preserve dimensionality. + * The normally distributed results are transformed into log-normal distribution. + * + * There may be slight numerical differences between results generated + * on the GPU with generators created with ::curandCreateGenerator() + * and results calculated on the CPU with generators created with + * ::curandCreateGeneratorHost(). These differences arise because of + * differences in results for transcendental functions. In addition, + * future versions of CURAND may use newer versions of the CUDA math + * library, so different versions of CURAND may give slightly different + * numerical values. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param n - Number of doubles to generate + * \param mean - Mean of normal distribution + * \param stddev - Standard deviation of normal distribution + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension, or is not a multiple + * of two for pseudorandom generators \n + * - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateLogNormalDouble(curandGenerator_t generator, double *outputPtr, + size_t n, double mean, double stddev); + +/** + * \brief Construct the histogram array for a Poisson distribution. + * + * Construct the histogram array for the Poisson distribution with lambda \p lambda. + * For lambda greater than 2000, an approximation with a normal distribution is used. + * + * \param lambda - lambda for the Poisson distribution + * + * + * \param discrete_distribution - pointer to the histogram in device memory + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision \n + * - CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU \n + * - CURAND_STATUS_NOT_INITIALIZED if the distribution pointer was null \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_OUT_OF_RANGE if lambda is non-positive or greater than 400,000 \n + * - CURAND_STATUS_SUCCESS if the histogram was generated successfully \n + */ + +curandStatus_t CURANDAPI +curandCreatePoissonDistribution(double lambda, curandDiscreteDistribution_t *discrete_distribution); + + + +/** + * \brief Destroy the histogram array for a discrete distribution (e.g. Poisson). + * + * Destroy the histogram array for a discrete distribution created by curandCreatePoissonDistribution. + * + * \param discrete_distribution - pointer to device memory where the histogram is stored + * + * \return + * - CURAND_STATUS_NOT_INITIALIZED if the histogram was never created \n + * - CURAND_STATUS_SUCCESS if the histogram was destroyed successfully \n + */ +curandStatus_t CURANDAPI +curandDestroyDistribution(curandDiscreteDistribution_t discrete_distribution); + + +/** + * \brief Generate Poisson-distributed unsigned ints. + * + * Use \p generator to generate \p n unsigned int results into device memory at + * \p outputPtr. The device memory must have been previously allocated and must be + * large enough to hold all the results. Launches are done with the stream + * set using ::curandSetStream(), or the null stream if no stream has been set. + * + * Results are 32-bit unsigned int point values with Poisson distribution, with lambda \p lambda. + * + * \param generator - Generator to use + * \param outputPtr - Pointer to device memory to store CUDA-generated results, or + * Pointer to host memory to store CPU-generated results + * \param n - Number of unsigned ints to generate + * \param lambda - lambda for the Poisson distribution + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is + * not a multiple of the quasirandom dimension\n + * - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU or sm does not support double precision \n + * - CURAND_STATUS_OUT_OF_RANGE if lambda is non-positive or greater than 400,000 \n + * - CURAND_STATUS_SUCCESS if the results were generated successfully \n + */ + +curandStatus_t CURANDAPI +curandGeneratePoisson(curandGenerator_t generator, unsigned int *outputPtr, + size_t n, double lambda); +// just for internal usage +curandStatus_t CURANDAPI +curandGeneratePoissonMethod(curandGenerator_t generator, unsigned int *outputPtr, + size_t n, double lambda, curandMethod_t method); + + +curandStatus_t CURANDAPI +curandGenerateBinomial(curandGenerator_t generator, unsigned int *outputPtr, + size_t num, unsigned int n, double p); +// just for internal usage +curandStatus_t CURANDAPI +curandGenerateBinomialMethod(curandGenerator_t generator, + unsigned int *outputPtr, + size_t num, unsigned int n, double p, + curandMethod_t method); + + +/** + * \brief Setup starting states. + * + * Generate the starting state of the generator. This function is + * automatically called by generation functions such as + * ::curandGenerate() and ::curandGenerateUniform(). + * It can be called manually for performance testing reasons to separate + * timings for starting state generation and random number generation. + * + * \param generator - Generator to update + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated \n + * - CURAND_STATUS_NOT_INITIALIZED if the generator was never created \n + * - CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from + * a previous kernel launch \n + * - CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason \n + * - CURAND_STATUS_SUCCESS if the seeds were generated successfully \n + */ +curandStatus_t CURANDAPI +curandGenerateSeeds(curandGenerator_t generator); + +/** + * \brief Get direction vectors for 32-bit quasirandom number generation. + * + * Get a pointer to an array of direction vectors that can be used + * for quasirandom number generation. The resulting pointer will + * reference an array of direction vectors in host memory. + * + * The array contains vectors for many dimensions. Each dimension + * has 32 vectors. Each individual vector is an unsigned int. + * + * Legal values for \p set are: + * - CURAND_DIRECTION_VECTORS_32_JOEKUO6 (20,000 dimensions) + * - CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 (20,000 dimensions) + * + * \param vectors - Address of pointer in which to return direction vectors + * \param set - Which set of direction vectors to use + * + * \return + * - CURAND_STATUS_OUT_OF_RANGE if the choice of set is invalid \n + * - CURAND_STATUS_SUCCESS if the pointer was set successfully \n + */ +curandStatus_t CURANDAPI +curandGetDirectionVectors32(curandDirectionVectors32_t *vectors[], curandDirectionVectorSet_t set); + +/** + * \brief Get scramble constants for 32-bit scrambled Sobol' . + * + * Get a pointer to an array of scramble constants that can be used + * for quasirandom number generation. The resulting pointer will + * reference an array of unsinged ints in host memory. + * + * The array contains constants for many dimensions. Each dimension + * has a single unsigned int constant. + * + * \param constants - Address of pointer in which to return scramble constants + * + * \return + * - CURAND_STATUS_SUCCESS if the pointer was set successfully \n + */ +curandStatus_t CURANDAPI +curandGetScrambleConstants32(unsigned int * * constants); + +/** + * \brief Get direction vectors for 64-bit quasirandom number generation. + * + * Get a pointer to an array of direction vectors that can be used + * for quasirandom number generation. The resulting pointer will + * reference an array of direction vectors in host memory. + * + * The array contains vectors for many dimensions. Each dimension + * has 64 vectors. Each individual vector is an unsigned long long. + * + * Legal values for \p set are: + * - CURAND_DIRECTION_VECTORS_64_JOEKUO6 (20,000 dimensions) + * - CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 (20,000 dimensions) + * + * \param vectors - Address of pointer in which to return direction vectors + * \param set - Which set of direction vectors to use + * + * \return + * - CURAND_STATUS_OUT_OF_RANGE if the choice of set is invalid \n + * - CURAND_STATUS_SUCCESS if the pointer was set successfully \n + */ +curandStatus_t CURANDAPI +curandGetDirectionVectors64(curandDirectionVectors64_t *vectors[], curandDirectionVectorSet_t set); + +/** + * \brief Get scramble constants for 64-bit scrambled Sobol' . + * + * Get a pointer to an array of scramble constants that can be used + * for quasirandom number generation. The resulting pointer will + * reference an array of unsinged long longs in host memory. + * + * The array contains constants for many dimensions. Each dimension + * has a single unsigned long long constant. + * + * \param constants - Address of pointer in which to return scramble constants + * + * \return + * - CURAND_STATUS_SUCCESS if the pointer was set successfully \n + */ +curandStatus_t CURANDAPI +curandGetScrambleConstants64(unsigned long long * * constants); + +/** @} */ + +#endif // __CUDACC_RTC__ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + + +#endif /* !defined(CURAND_H_) */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete.h new file mode 100644 index 0000000000000000000000000000000000000000..7e194487a0e2ec02abcb1dd8634c42141a148d84 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete.h @@ -0,0 +1,87 @@ + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +#if !defined(CURANDDISCRETE_H_) +#define CURANDDISCRETE_H_ + +struct curandDistributionShift_st { + curandDistribution_t probability; + curandDistribution_t host_probability; + unsigned int shift; + unsigned int length; + unsigned int host_gen; +}; + +struct curandHistogramM2_st { + curandHistogramM2V_t V; + curandHistogramM2V_t host_V; + curandHistogramM2K_t K; + curandHistogramM2K_t host_K; + unsigned int host_gen; +}; + + +struct curandDistributionM2Shift_st { + curandHistogramM2_t histogram; + curandHistogramM2_t host_histogram; + unsigned int shift; + unsigned int length; + unsigned int host_gen; +}; + +struct curandDiscreteDistribution_st { + curandDiscreteDistribution_t self_host_ptr; + curandDistributionM2Shift_t M2; + curandDistributionM2Shift_t host_M2; + double stddev; + double mean; + curandMethod_t method; + unsigned int host_gen; +}; + +#endif // !defined(CURANDDISCRETE_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete2.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete2.h new file mode 100644 index 0000000000000000000000000000000000000000..ac827749840488f66d71f492c14dbec80b57a3d1 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_discrete2.h @@ -0,0 +1,253 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_DISCRETE_H_) +#define CURAND_DISCRETE_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" + + +template +QUALIFIERS unsigned int _curand_discrete(T x, curandDiscreteDistribution_t discrete_distribution){ + if (discrete_distribution->method == CURAND_M2){ + return _curand_M2_double(x, discrete_distribution->M2); + } + return (unsigned int)((discrete_distribution->stddev * _curand_normal_icdf_double(x)) + discrete_distribution->mean + 0.5); +} + + +template +QUALIFIERS unsigned int curand__discrete(STATE state, curandDiscreteDistribution_t discrete_distribution){ + if (discrete_distribution->method == CURAND_M2){ + return curand_M2_double(state, discrete_distribution->M2); + } + return (unsigned int)((discrete_distribution->stddev * curand_normal_double(state)) + discrete_distribution->mean + 0.5); //Round to nearest +} + +template +QUALIFIERS uint4 curand__discrete4(STATE state, curandDiscreteDistribution_t discrete_distribution){ + if (discrete_distribution->method == CURAND_M2){ + return curand_M2_double4(state, discrete_distribution->M2); + } + double4 _res; + uint4 result; + _res = curand_normal4_double(state); + result.x = (unsigned int)((discrete_distribution->stddev * _res.x) + discrete_distribution->mean + 0.5); //Round to nearest + result.y = (unsigned int)((discrete_distribution->stddev * _res.y) + discrete_distribution->mean + 0.5); //Round to nearest + result.z = (unsigned int)((discrete_distribution->stddev * _res.z) + discrete_distribution->mean + 0.5); //Round to nearest + result.w = (unsigned int)((discrete_distribution->stddev * _res.w) + discrete_distribution->mean + 0.5); //Round to nearest + return result; +} + +/* + * \brief Return a discrete distributed unsigned int from a XORWOW generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the XORWOW generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateXORWOW_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a Philox4_32_10 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStatePhilox4_32_10_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return four discrete distributed unsigned ints from a Philox4_32_10 generator. + * + * Return four single discrete distributed unsigned ints derived from a + * distribution defined by \p discrete_distribution from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS uint4 curand_discrete4(curandStatePhilox4_32_10_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete4(state, discrete_distribution); +} +/* + * \brief Return a discrete distributed unsigned int from a MRG32k3a generator. + * + * Re turn a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the MRG32k3a generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateMRG32k3a_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a MTGP32 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the MTGP32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateMtgp32_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a Sobol32 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateSobol32_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a scrambled Sobol32 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateScrambledSobol32_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a Sobol64 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateSobol64_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +/* + * \brief Return a discrete distributed unsigned int from a scrambled Sobol64 generator. + * + * Return a single discrete distributed unsigned int derived from a + * distribution defined by \p discrete_distribution from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param discrete_distribution - ancillary structure for discrete distribution + * + * \return unsigned int distributed by distribution defined by \p discrete_distribution. + */ +QUALIFIERS unsigned int curand_discrete(curandStateScrambledSobol64_t *state, curandDiscreteDistribution_t discrete_distribution) +{ + return curand__discrete(state, discrete_distribution); +} + +#endif // !defined(CURAND_DISCRETE_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_globals.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_globals.h new file mode 100644 index 0000000000000000000000000000000000000000..278d12b69727c4016fdb2452b8ee567f5c969fa0 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_globals.h @@ -0,0 +1,93 @@ + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ +#ifndef CURAND_GLOBALS_H +#define CURAND_GLOBALS_H + +#define MAX_XOR_N (5) +#define SKIPAHEAD_BLOCKSIZE (4) +#define SKIPAHEAD_MASK ((1< + +#ifdef __CUDACC_RTC__ +#define CURAND_DETAIL_USE_CUDA_STL +#endif + +#if __cplusplus >= 201103L +# ifdef CURAND_DETAIL_USE_CUDA_STL +# define CURAND_STD cuda::std +# include +# else +# define CURAND_STD std +# include +# endif // CURAND_DETAIL_USE_CUDA_STL +#else +// To support C++03 compilation +# define CURAND_STD curand_detail +namespace curand_detail { + template + struct enable_if {}; + + template + struct enable_if { typedef T type; }; + + template + struct is_same { static const bool value = false; }; + + template + struct is_same { static const bool value = true; }; +} // namespace curand_detail +#endif // __cplusplus >= 201103L + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include "curand.h" +#include "curand_discrete.h" +#include "curand_precalc.h" +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" +#include "curand_globals.h" + +/* Test RNG */ +/* This generator uses the formula: + x_n = x_(n-1) + 1 mod 2^32 + x_0 = (unsigned int)seed * 3 + Subsequences are spaced 31337 steps apart. +*/ +struct curandStateTest { + unsigned int v; +}; + +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateTest curandStateTest_t; +/** \endcond */ + +/* XORSHIFT FAMILY RNGs */ +/* These generators are a family proposed by Marsaglia. They keep state + in 32 bit chunks, then use repeated shift and xor operations to scramble + the bits. The following generators are a combination of a simple Weyl + generator with an N variable XORSHIFT generator. +*/ + +/* XORSHIFT RNG */ +/* This generator uses the xorwow formula of +www.jstatsoft.org/v08/i14/paper page 5 +Has period 2^192 - 2^32. +*/ +/** + * CURAND XORWOW state + */ +struct curandStateXORWOW; + +/* + * Implementation details not in reference documentation */ +struct curandStateXORWOW { + unsigned int d, v[5]; + int boxmuller_flag; + int boxmuller_flag_double; + float boxmuller_extra; + double boxmuller_extra_double; +}; + +/* + * CURAND XORWOW state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateXORWOW curandStateXORWOW_t; + +#define EXTRA_FLAG_NORMAL 0x00000001 +#define EXTRA_FLAG_LOG_NORMAL 0x00000002 +/** \endcond */ + +/* Combined Multiple Recursive Generators */ +/* These generators are a family proposed by L'Ecuyer. They keep state + in sets of doubles, then use repeated modular arithmetic multiply operations + to scramble the bits in each set, and combine the result. +*/ + +/* MRG32k3a RNG */ +/* This generator uses the MRG32k3A formula of +http://www.iro.umontreal.ca/~lecuyer/myftp/streams00/c++/streams4.pdf +Has period 2^191. +*/ + +/* moduli for the recursions */ +/** \cond UNHIDE_DEFINES */ +#define MRG32K3A_MOD1 4294967087. +#define MRG32K3A_MOD2 4294944443. + +/* Constants used in generation */ + +#define MRG32K3A_A12 1403580. +#define MRG32K3A_A13N 810728. +#define MRG32K3A_A21 527612. +#define MRG32K3A_A23N 1370589. +#define MRG32K3A_NORM (2.3283065498378288e-10) +// +// #define MRG32K3A_BITS_NORM ((double)((POW32_DOUBLE-1.0)/MOD1)) +// above constant, used verbatim, rounds differently on some host systems. +#define MRG32K3A_BITS_NORM 1.000000048662 + +/** \endcond */ + + + + +/** + * CURAND MRG32K3A state + */ +struct curandStateMRG32k3a; + +/* Implementation details not in reference documentation */ +struct curandStateMRG32k3a { + unsigned int s1[3]; + unsigned int s2[3]; + int boxmuller_flag; + int boxmuller_flag_double; + float boxmuller_extra; + double boxmuller_extra_double; +}; + +/* + * CURAND MRG32K3A state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateMRG32k3a curandStateMRG32k3a_t; +/** \endcond */ + +/* SOBOL QRNG */ +/** + * CURAND Sobol32 state + */ +struct curandStateSobol32; + +/* Implementation details not in reference documentation */ +struct curandStateSobol32 { + unsigned int i, x, c; + unsigned int direction_vectors[32]; +}; + +/* + * CURAND Sobol32 state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateSobol32 curandStateSobol32_t; +/** \endcond */ + +/** + * CURAND Scrambled Sobol32 state + */ +struct curandStateScrambledSobol32; + +/* Implementation details not in reference documentation */ +struct curandStateScrambledSobol32 { + unsigned int i, x, c; + unsigned int direction_vectors[32]; +}; + +/* + * CURAND Scrambled Sobol32 state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateScrambledSobol32 curandStateScrambledSobol32_t; +/** \endcond */ + +/** + * CURAND Sobol64 state + */ +struct curandStateSobol64; + +/* Implementation details not in reference documentation */ +struct curandStateSobol64 { + unsigned long long i, x, c; + unsigned long long direction_vectors[64]; +}; + +/* + * CURAND Sobol64 state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateSobol64 curandStateSobol64_t; +/** \endcond */ + +/** + * CURAND Scrambled Sobol64 state + */ +struct curandStateScrambledSobol64; + +/* Implementation details not in reference documentation */ +struct curandStateScrambledSobol64 { + unsigned long long i, x, c; + unsigned long long direction_vectors[64]; +}; + +/* + * CURAND Scrambled Sobol64 state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateScrambledSobol64 curandStateScrambledSobol64_t; +/** \endcond */ + +/* + * Default RNG + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateXORWOW curandState_t; +typedef struct curandStateXORWOW curandState; +/** \endcond */ + +/****************************************************************************/ +/* Utility functions needed by RNGs */ +/****************************************************************************/ +/** \cond UNHIDE_UTILITIES */ +/* + multiply vector by matrix, store in result + matrix is n x n, measured in 32 bit units + matrix is stored in row major order + vector and result cannot be same pointer +*/ +template +QUALIFIERS void __curand_matvec_inplace(unsigned int *vector, unsigned int *matrix) +{ + unsigned int result[N] = { 0 }; + for(int i = 0; i < N; i++) { + #ifdef __CUDA_ARCH__ + #pragma unroll 16 + #endif + for(int j = 0; j < 32; j++) { + if(vector[i] & (1 << j)) { + for(int k = 0; k < N; k++) { + result[k] ^= matrix[N * (i * 32 + j) + k]; + } + } + } + } + for(int i = 0; i < N; i++) { + vector[i] = result[i]; + } +} + +QUALIFIERS void __curand_matvec(unsigned int *vector, unsigned int *matrix, + unsigned int *result, int n) +{ + for(int i = 0; i < n; i++) { + result[i] = 0; + } + for(int i = 0; i < n; i++) { + for(int j = 0; j < 32; j++) { + if(vector[i] & (1 << j)) { + for(int k = 0; k < n; k++) { + result[k] ^= matrix[n * (i * 32 + j) + k]; + } + } + } + } +} + +/* generate identity matrix */ +QUALIFIERS void __curand_matidentity(unsigned int *matrix, int n) +{ + int r; + for(int i = 0; i < n * 32; i++) { + for(int j = 0; j < n; j++) { + r = i & 31; + if(i / 32 == j) { + matrix[i * n + j] = (1 << r); + } else { + matrix[i * n + j] = 0; + } + } + } +} + +/* multiply matrixA by matrixB, store back in matrixA + matrixA and matrixB must not be same matrix */ +QUALIFIERS void __curand_matmat(unsigned int *matrixA, unsigned int *matrixB, int n) +{ + unsigned int result[MAX_XOR_N]; + for(int i = 0; i < n * 32; i++) { + __curand_matvec(matrixA + i * n, matrixB, result, n); + for(int j = 0; j < n; j++) { + matrixA[i * n + j] = result[j]; + } + } +} + +/* copy vectorA to vector */ +QUALIFIERS void __curand_veccopy(unsigned int *vector, unsigned int *vectorA, int n) +{ + for(int i = 0; i < n; i++) { + vector[i] = vectorA[i]; + } +} + +/* copy matrixA to matrix */ +QUALIFIERS void __curand_matcopy(unsigned int *matrix, unsigned int *matrixA, int n) +{ + for(int i = 0; i < n * n * 32; i++) { + matrix[i] = matrixA[i]; + } +} + +/* compute matrixA to power p, store result in matrix */ +QUALIFIERS void __curand_matpow(unsigned int *matrix, unsigned int *matrixA, + unsigned long long p, int n) +{ + unsigned int matrixR[MAX_XOR_N * MAX_XOR_N * 32]; + unsigned int matrixS[MAX_XOR_N * MAX_XOR_N * 32]; + __curand_matidentity(matrix, n); + __curand_matcopy(matrixR, matrixA, n); + while(p) { + if(p & 1) { + __curand_matmat(matrix, matrixR, n); + } + __curand_matcopy(matrixS, matrixR, n); + __curand_matmat(matrixR, matrixS, n); + p >>= 1; + } +} + +/****************************************************************************/ +/* Utility functions needed by MRG32k3a RNG */ +/* Matrix operations modulo some integer less than 2**32, done in */ +/* double precision floating point, with care not to overflow 53 bits */ +/****************************************************************************/ + +/* return i mod m. */ +/* assumes i and m are integers represented accurately in doubles */ + +QUALIFIERS double curand_MRGmod(double i, double m) +{ + double quo; + double rem; + quo = floor(i/m); + rem = i - (quo*m); + if (rem < 0.0) rem += m; + return rem; +} + +/* Multiplication modulo m. Inputs i and j less than 2**32 */ +/* Ensure intermediate results do not exceed 2**53 */ + +QUALIFIERS double curand_MRGmodMul(double i, double j, double m) +{ + double tempHi; + double tempLo; + + tempHi = floor(i/131072.0); + tempLo = i - (tempHi*131072.0); + tempLo = curand_MRGmod( curand_MRGmod( (tempHi * j), m) * 131072.0 + curand_MRGmod(tempLo * j, m),m); + + if (tempLo < 0.0) tempLo += m; + return tempLo; +} + +/* multiply 3 by 3 matrices of doubles, modulo m */ + +QUALIFIERS void curand_MRGmatMul3x3(unsigned int i1[][3],unsigned int i2[][3],unsigned int o[][3],double m) +{ + int i,j; + double temp[3][3]; + for (i=0; i<3; i++){ + for (j=0; j<3; j++){ + temp[i][j] = ( curand_MRGmodMul(i1[i][0], i2[0][j], m) + + curand_MRGmodMul(i1[i][1], i2[1][j], m) + + curand_MRGmodMul(i1[i][2], i2[2][j], m)); + temp[i][j] = curand_MRGmod( temp[i][j], m ); + } + } + for (i=0; i<3; i++){ + for (j=0; j<3; j++){ + o[i][j] = (unsigned int)temp[i][j]; + } + } +} + +/* multiply 3 by 3 matrix times 3 by 1 vector of doubles, modulo m */ + +QUALIFIERS void curand_MRGmatVecMul3x3( unsigned int i[][3], unsigned int v[], double m) +{ + int k; + double t[3]; + for (k = 0; k < 3; k++) { + t[k] = ( curand_MRGmodMul(i[k][0], v[0], m) + + curand_MRGmodMul(i[k][1], v[1], m) + + curand_MRGmodMul(i[k][2], v[2], m) ); + t[k] = curand_MRGmod( t[k], m ); + } + for (k = 0; k < 3; k++) { + v[k] = (unsigned int)t[k]; + } + +} + +/* raise a 3 by 3 matrix of doubles to a 64 bit integer power pow, modulo m */ +/* input is index zero of an array of 3 by 3 matrices m, */ +/* each m = m[0]**(2**index) */ + +QUALIFIERS void curand_MRGmatPow3x3( unsigned int in[][3][3], unsigned int o[][3], double m, unsigned long long pow ) +{ + int i,j; + for ( i = 0; i < 3; i++ ) { + for ( j = 0; j < 3; j++ ) { + o[i][j] = 0; + if ( i == j ) o[i][j] = 1; + } + } + i = 0; + curand_MRGmatVecMul3x3(o,o[0],m); + while (pow) { + if ( pow & 1ll ) { + curand_MRGmatMul3x3(in[i], o, o, m); + } + i++; + pow >>= 1; + } +} + +/* raise a 3 by 3 matrix of doubles to the power */ +/* 2 to the power (pow modulo 191), modulo m */ + +QUALIFIERS void curnand_MRGmatPow2Pow3x3( double in[][3], double o[][3], double m, unsigned long pow ) +{ + unsigned int temp[3][3]; + int i,j; + pow = pow % 191; + for ( i = 0; i < 3; i++ ) { + for ( j = 0; j < 3; j++ ) { + temp[i][j] = (unsigned int)in[i][j]; + } + } + while (pow) { + curand_MRGmatMul3x3(temp, temp, temp, m); + pow--; + } + for ( i = 0; i < 3; i++ ) { + for ( j = 0; j < 3; j++ ) { + o[i][j] = temp[i][j]; + } + } +} + +/** \endcond */ + +/****************************************************************************/ +/* Kernel implementations of RNGs */ +/****************************************************************************/ + +/* Test RNG */ + +QUALIFIERS void curand_init(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStateTest_t *state) +{ + state->v = (unsigned int)(seed * 3) + (unsigned int)(subsequence * 31337) + \ + (unsigned int)offset; +} + + +QUALIFIERS unsigned int curand(curandStateTest_t *state) +{ + unsigned int r = state->v++; + return r; +} + +QUALIFIERS void skipahead(unsigned long long n, curandStateTest_t *state) +{ + state->v += (unsigned int)n; +} + +/* XORWOW RNG */ + +template +QUALIFIERS void __curand_generate_skipahead_matrix_xor(unsigned int matrix[]) +{ + T state; + // Generate matrix that advances one step + // matrix has n * n * 32 32-bit elements + // solve for matrix by stepping single bit states + for(int i = 0; i < 32 * n; i++) { + state.d = 0; + for(int j = 0; j < n; j++) { + state.v[j] = 0; + } + state.v[i / 32] = (1 << (i & 31)); + curand(&state); + for(int j = 0; j < n; j++) { + matrix[i * n + j] = state.v[j]; + } + } +} + +template +QUALIFIERS void _skipahead_scratch(unsigned long long x, T *state, unsigned int *scratch) +{ + // unsigned int matrix[n * n * 32]; + unsigned int *matrix = scratch; + // unsigned int matrixA[n * n * 32]; + unsigned int *matrixA = scratch + (n * n * 32); + // unsigned int vector[n]; + unsigned int *vector = scratch + (n * n * 32) + (n * n * 32); + // unsigned int result[n]; + unsigned int *result = scratch + (n * n * 32) + (n * n * 32) + n; + unsigned long long p = x; + for(int i = 0; i < n; i++) { + vector[i] = state->v[i]; + } + int matrix_num = 0; + while(p && (matrix_num < PRECALC_NUM_MATRICES - 1)) { + for(unsigned int t = 0; t < (p & PRECALC_BLOCK_MASK); t++) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matvec(vector, precalc_xorwow_offset_matrix[matrix_num], result, n); +, + __curand_matvec(vector, precalc_xorwow_offset_matrix_host[matrix_num], result, n); +) + __curand_veccopy(vector, result, n); + } + p >>= PRECALC_BLOCK_SIZE; + matrix_num++; + } + if(p) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matcopy(matrix, precalc_xorwow_offset_matrix[PRECALC_NUM_MATRICES - 1], n); + __curand_matcopy(matrixA, precalc_xorwow_offset_matrix[PRECALC_NUM_MATRICES - 1], n); +, + __curand_matcopy(matrix, precalc_xorwow_offset_matrix_host[PRECALC_NUM_MATRICES - 1], n); + __curand_matcopy(matrixA, precalc_xorwow_offset_matrix_host[PRECALC_NUM_MATRICES - 1], n); +) + } + while(p) { + for(unsigned int t = 0; t < (p & SKIPAHEAD_MASK); t++) { + __curand_matvec(vector, matrixA, result, n); + __curand_veccopy(vector, result, n); + } + p >>= SKIPAHEAD_BLOCKSIZE; + if(p) { + for(int i = 0; i < SKIPAHEAD_BLOCKSIZE; i++) { + __curand_matmat(matrix, matrixA, n); + __curand_matcopy(matrixA, matrix, n); + } + } + } + for(int i = 0; i < n; i++) { + state->v[i] = vector[i]; + } + state->d += 362437 * (unsigned int)x; +} + +template +QUALIFIERS void _skipahead_sequence_scratch(unsigned long long x, T *state, unsigned int *scratch) +{ + // unsigned int matrix[n * n * 32]; + unsigned int *matrix = scratch; + // unsigned int matrixA[n * n * 32]; + unsigned int *matrixA = scratch + (n * n * 32); + // unsigned int vector[n]; + unsigned int *vector = scratch + (n * n * 32) + (n * n * 32); + // unsigned int result[n]; + unsigned int *result = scratch + (n * n * 32) + (n * n * 32) + n; + unsigned long long p = x; + for(int i = 0; i < n; i++) { + vector[i] = state->v[i]; + } + int matrix_num = 0; + while(p && matrix_num < PRECALC_NUM_MATRICES - 1) { + for(unsigned int t = 0; t < (p & PRECALC_BLOCK_MASK); t++) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matvec(vector, precalc_xorwow_matrix[matrix_num], result, n); +, + __curand_matvec(vector, precalc_xorwow_matrix_host[matrix_num], result, n); +) + __curand_veccopy(vector, result, n); + } + p >>= PRECALC_BLOCK_SIZE; + matrix_num++; + } + if(p) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matcopy(matrix, precalc_xorwow_matrix[PRECALC_NUM_MATRICES - 1], n); + __curand_matcopy(matrixA, precalc_xorwow_matrix[PRECALC_NUM_MATRICES - 1], n); +, + __curand_matcopy(matrix, precalc_xorwow_matrix_host[PRECALC_NUM_MATRICES - 1], n); + __curand_matcopy(matrixA, precalc_xorwow_matrix_host[PRECALC_NUM_MATRICES - 1], n); +) + } + while(p) { + for(unsigned int t = 0; t < (p & SKIPAHEAD_MASK); t++) { + __curand_matvec(vector, matrixA, result, n); + __curand_veccopy(vector, result, n); + } + p >>= SKIPAHEAD_BLOCKSIZE; + if(p) { + for(int i = 0; i < SKIPAHEAD_BLOCKSIZE; i++) { + __curand_matmat(matrix, matrixA, n); + __curand_matcopy(matrixA, matrix, n); + } + } + } + for(int i = 0; i < n; i++) { + state->v[i] = vector[i]; + } + /* No update of state->d needed, guaranteed to be a multiple of 2^32 */ +} + +template +QUALIFIERS void _skipahead_inplace(const unsigned long long x, T *state) +{ + unsigned long long p = x; + int matrix_num = 0; + while(p) { + for(unsigned int t = 0; t < (p & PRECALC_BLOCK_MASK); t++) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matvec_inplace(state->v, precalc_xorwow_offset_matrix[matrix_num]); +, + __curand_matvec_inplace(state->v, precalc_xorwow_offset_matrix_host[matrix_num]); +) + } + p >>= PRECALC_BLOCK_SIZE; + matrix_num++; + } + state->d += 362437 * (unsigned int)x; +} + +template +QUALIFIERS void _skipahead_sequence_inplace(unsigned long long x, T *state) +{ + int matrix_num = 0; + while(x) { + for(unsigned int t = 0; t < (x & PRECALC_BLOCK_MASK); t++) { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + __curand_matvec_inplace(state->v, precalc_xorwow_matrix[matrix_num]); +, + __curand_matvec_inplace(state->v, precalc_xorwow_matrix_host[matrix_num]); +) + } + x >>= PRECALC_BLOCK_SIZE; + matrix_num++; + } + /* No update of state->d needed, guaranteed to be a multiple of 2^32 */ +} + +/** + * \brief Update XORWOW state to skip \p n elements. + * + * Update the XORWOW state in \p state to skip ahead \p n elements. + * + * All values of \p n are valid. Large values require more computation and so + * will take more time to complete. + * + * \param n - Number of elements to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead(unsigned long long n, curandStateXORWOW_t *state) +{ + _skipahead_inplace(n, state); +} + +/** + * \brief Update XORWOW state to skip ahead \p n subsequences. + * + * Update the XORWOW state in \p state to skip ahead \p n subsequences. Each + * subsequence is \xmlonly267\endxmlonly elements long, so this means the function will skip ahead + * \xmlonly267\endxmlonly * n elements. + * + * All values of \p n are valid. Large values require more computation and so + * will take more time to complete. + * + * \param n - Number of subsequences to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead_sequence(unsigned long long n, curandStateXORWOW_t *state) +{ + _skipahead_sequence_inplace(n, state); +} + +QUALIFIERS void _curand_init_scratch(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStateXORWOW_t *state, + unsigned int *scratch) +{ + // Break up seed, apply salt + // Constants are arbitrary nonzero values + unsigned int s0 = ((unsigned int)seed) ^ 0xaad26b49UL; + unsigned int s1 = (unsigned int)(seed >> 32) ^ 0xf7dcefddUL; + // Simple multiplication to mix up bits + // Constants are arbitrary odd values + unsigned int t0 = 1099087573UL * s0; + unsigned int t1 = 2591861531UL * s1; + state->d = 6615241 + t1 + t0; + state->v[0] = 123456789UL + t0; + state->v[1] = 362436069UL ^ t0; + state->v[2] = 521288629UL + t1; + state->v[3] = 88675123UL ^ t1; + state->v[4] = 5783321UL + t0; + _skipahead_sequence_scratch(subsequence, state, scratch); + _skipahead_scratch(offset, state, scratch); + state->boxmuller_flag = 0; + state->boxmuller_flag_double = 0; + state->boxmuller_extra = 0.f; + state->boxmuller_extra_double = 0.; +} + +QUALIFIERS void _curand_init_inplace(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStateXORWOW_t *state) +{ + // Break up seed, apply salt + // Constants are arbitrary nonzero values + unsigned int s0 = ((unsigned int)seed) ^ 0xaad26b49UL; + unsigned int s1 = (unsigned int)(seed >> 32) ^ 0xf7dcefddUL; + // Simple multiplication to mix up bits + // Constants are arbitrary odd values + unsigned int t0 = 1099087573UL * s0; + unsigned int t1 = 2591861531UL * s1; + state->d = 6615241 + t1 + t0; + state->v[0] = 123456789UL + t0; + state->v[1] = 362436069UL ^ t0; + state->v[2] = 521288629UL + t1; + state->v[3] = 88675123UL ^ t1; + state->v[4] = 5783321UL + t0; + _skipahead_sequence_inplace(subsequence, state); + _skipahead_inplace(offset, state); + state->boxmuller_flag = 0; + state->boxmuller_flag_double = 0; + state->boxmuller_extra = 0.f; + state->boxmuller_extra_double = 0.; +} + +/** + * \brief Initialize XORWOW state. + * + * Initialize XORWOW state in \p state with the given \p seed, \p subsequence, + * and \p offset. + * + * All input values of \p seed, \p subsequence, and \p offset are legal. Large + * values for \p subsequence and \p offset require more computation and so will + * take more time to complete. + * + * A value of 0 for \p seed sets the state to the values of the original + * published version of the \p xorwow algorithm. + * + * \param seed - Arbitrary bits to use as a seed + * \param subsequence - Subsequence to start at + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStateXORWOW_t *state) +{ + _curand_init_inplace(seed, subsequence, offset, state); +} + +/** + * \brief Return 32-bits of pseudorandomness from an XORWOW generator. + * + * Return 32-bits of pseudorandomness from the XORWOW generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 32-bits of pseudorandomness as an unsigned int, all bits valid to use. + */ +QUALIFIERS unsigned int curand(curandStateXORWOW_t *state) +{ + unsigned int t; + t = (state->v[0] ^ (state->v[0] >> 2)); + state->v[0] = state->v[1]; + state->v[1] = state->v[2]; + state->v[2] = state->v[3]; + state->v[3] = state->v[4]; + state->v[4] = (state->v[4] ^ (state->v[4] <<4)) ^ (t ^ (t << 1)); + state->d += 362437; + return state->v[4] + state->d; +} + + +/** + * \brief Return 32-bits of pseudorandomness from an Philox4_32_10 generator. + * + * Return 32-bits of pseudorandomness from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 32-bits of pseudorandomness as an unsigned int, all bits valid to use. + */ + +QUALIFIERS unsigned int curand(curandStatePhilox4_32_10_t *state) +{ + // Maintain the invariant: output[STATE] is always "good" and + // is the next value to be returned by curand. + unsigned int ret; + switch(state->STATE++){ + default: + ret = state->output.x; + break; + case 1: + ret = state->output.y; + break; + case 2: + ret = state->output.z; + break; + case 3: + ret = state->output.w; + break; + } + if(state->STATE == 4){ + Philox_State_Incr(state); + state->output = curand_Philox4x32_10(state->ctr,state->key); + state->STATE = 0; + } + return ret; +} + +/** + * \brief Return tuple of 4 32-bit pseudorandoms from a Philox4_32_10 generator. + * + * Return 128 bits of pseudorandomness from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * \param state - Pointer to state to update + * + * \return 128-bits of pseudorandomness as a uint4, all bits valid to use. + */ + +QUALIFIERS uint4 curand4(curandStatePhilox4_32_10_t *state) +{ + uint4 r; + + uint4 tmp = state->output; + Philox_State_Incr(state); + state->output= curand_Philox4x32_10(state->ctr,state->key); + switch(state->STATE){ + case 0: + return tmp; + case 1: + r.x = tmp.y; + r.y = tmp.z; + r.z = tmp.w; + r.w = state->output.x; + break; + case 2: + r.x = tmp.z; + r.y = tmp.w; + r.z = state->output.x; + r.w = state->output.y; + break; + case 3: + r.x = tmp.w; + r.y = state->output.x; + r.z = state->output.y; + r.w = state->output.z; + break; + default: + // NOT possible but needed to avoid compiler warnings + return tmp; + } + return r; +} + +/** + * \brief Update Philox4_32_10 state to skip \p n elements. + * + * Update the Philox4_32_10 state in \p state to skip ahead \p n elements. + * + * All values of \p n are valid. + * + * \param n - Number of elements to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead(unsigned long long n, curandStatePhilox4_32_10_t *state) +{ + state->STATE += (n & 3); + n /= 4; + if( state->STATE > 3 ){ + n += 1; + state->STATE -= 4; + } + Philox_State_Incr(state, n); + state->output = curand_Philox4x32_10(state->ctr,state->key); +} + +/** + * \brief Update Philox4_32_10 state to skip ahead \p n subsequences. + * + * Update the Philox4_32_10 state in \p state to skip ahead \p n subsequences. Each + * subsequence is \xmlonly266\endxmlonly elements long, so this means the function will skip ahead + * \xmlonly266\endxmlonly * n elements. + * + * All values of \p n are valid. + * + * \param n - Number of subsequences to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead_sequence(unsigned long long n, curandStatePhilox4_32_10_t *state) +{ + Philox_State_Incr_hi(state, n); + state->output = curand_Philox4x32_10(state->ctr,state->key); +} + +/** + * \brief Initialize Philox4_32_10 state. + * + * Initialize Philox4_32_10 state in \p state with the given \p seed, p\ subsequence, + * and \p offset. + * + * All input values for \p seed, \p subseqence and \p offset are legal. Each of the + * \xmlonly264\endxmlonly possible + * values of seed selects an independent sequence of length + * \xmlonly2130\endxmlonly. + * The first + * \xmlonly266 * subsequence + offset\endxmlonly. + * values of the sequence are skipped. + * I.e., subsequences are of length + * \xmlonly266\endxmlonly. + * + * \param seed - Arbitrary bits to use as a seed + * \param subsequence - Subsequence to start at + * \param offset - Absolute offset into subsequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStatePhilox4_32_10_t *state) +{ + state->ctr = make_uint4(0, 0, 0, 0); + state->key.x = (unsigned int)seed; + state->key.y = (unsigned int)(seed>>32); + state->STATE = 0; + state->boxmuller_flag = 0; + state->boxmuller_flag_double = 0; + state->boxmuller_extra = 0.f; + state->boxmuller_extra_double = 0.; + skipahead_sequence(subsequence, state); + skipahead(offset, state); +} + + +/* MRG32k3a RNG */ + +/* Base generator for MRG32k3a */ +QUALIFIERS unsigned long long __curand_umad(GCC_UNUSED_PARAMETER unsigned int a, GCC_UNUSED_PARAMETER unsigned int b, GCC_UNUSED_PARAMETER unsigned long long c) +{ + unsigned long long r = 0; +NV_IF_TARGET(NV_PROVIDES_SM_61, + asm("mad.wide.u32 %0, %1, %2, %3;" + : "=l"(r) : "r"(a), "r"(b), "l"(c)); +) + return r; +} +QUALIFIERS unsigned long long __curand_umul(GCC_UNUSED_PARAMETER unsigned int a, GCC_UNUSED_PARAMETER unsigned int b) +{ + unsigned long long r = 0; +NV_IF_TARGET(NV_PROVIDES_SM_61, + asm("mul.wide.u32 %0, %1, %2;" + : "=l"(r) : "r"(a), "r"(b)); +) + return r; +} +QUALIFIERS double curand_MRG32k3a (curandStateMRG32k3a_t *state) +{ +NV_IF_TARGET(NV_PROVIDES_SM_61, + const unsigned int m1 = 4294967087u; + const unsigned int m2 = 4294944443u; + const unsigned int m1c = 209u; + const unsigned int m2c = 22853u; + const unsigned int a12 = 1403580u; + const unsigned int a13n = 810728u; + const unsigned int a21 = 527612u; + const unsigned int a23n = 1370589u; + + unsigned long long p1; + unsigned long long p2; + const unsigned long long p3 = __curand_umul(a13n, m1 - state->s1[0]); + p1 = __curand_umad(a12, state->s1[1], p3); + + // Putting addition inside and changing umul to umad + // slowed this function down on GV100 + p1 = __curand_umul(p1 >> 32, m1c) + (p1 & 0xffffffff); + if (p1 >= m1) p1 -= m1; + + state->s1[0] = state->s1[1]; state->s1[1] = state->s1[2]; state->s1[2] = p1; + const unsigned long long p4 = __curand_umul(a23n, m2 - state->s2[0]); + p2 = __curand_umad(a21, state->s2[2], p4); + + // Putting addition inside and changing umul to umad + // slowed this function down on GV100 + p2 = __curand_umul(p2 >> 32, m2c) + (p2 & 0xffffffff); + p2 = __curand_umul(p2 >> 32, m2c) + (p2 & 0xffffffff); + if (p2 >= m2) p2 -= m2; + + state->s2[0] = state->s2[1]; state->s2[1] = state->s2[2]; state->s2[2] = p2; + + const unsigned int p5 = (unsigned int)p1 - (unsigned int)p2; + if(p1 <= p2) return p5 + m1; + return p5; +) +NV_IF_TARGET(NV_IS_DEVICE, +/* nj's implementation */ + const double m1 = 4294967087.; + const double m2 = 4294944443.; + const double a12 = 1403580.; + const double a13n = 810728.; + const double a21 = 527612.; + const double a23n = 1370589.; + + const double rh1 = 2.3283065498378290e-010; /* (1.0 / m1)__hi */ + const double rl1 = -1.7354913086174288e-026; /* (1.0 / m1)__lo */ + const double rh2 = 2.3283188252407387e-010; /* (1.0 / m2)__hi */ + const double rl2 = 2.4081018096503646e-026; /* (1.0 / m2)__lo */ + + double q; + double p1; + double p2; + p1 = a12 * state->s1[1] - a13n * state->s1[0]; + q = trunc (fma (p1, rh1, p1 * rl1)); + p1 -= q * m1; + if (p1 < 0.0) p1 += m1; + state->s1[0] = state->s1[1]; state->s1[1] = state->s1[2]; state->s1[2] = (unsigned int)p1; + p2 = a21 * state->s2[2] - a23n * state->s2[0]; + q = trunc (fma (p2, rh2, p2 * rl2)); + p2 -= q * m2; + if (p2 < 0.0) p2 += m2; + state->s2[0] = state->s2[1]; state->s2[1] = state->s2[2]; state->s2[2] = (unsigned int)p2; + if (p1 <= p2) return (p1 - p2 + m1); + else return (p1 - p2); +) +/* end nj's implementation */ + double p1; + double p2; + double r; + p1 = (MRG32K3A_A12 * state->s1[1]) - (MRG32K3A_A13N * state->s1[0]); + p1 = curand_MRGmod(p1, MRG32K3A_MOD1); + if (p1 < 0.0) p1 += MRG32K3A_MOD1; + state->s1[0] = state->s1[1]; + state->s1[1] = state->s1[2]; + state->s1[2] = (unsigned int)p1; + p2 = (MRG32K3A_A21 * state->s2[2]) - (MRG32K3A_A23N * state->s2[0]); + p2 = curand_MRGmod(p2, MRG32K3A_MOD2); + if (p2 < 0) p2 += MRG32K3A_MOD2; + state->s2[0] = state->s2[1]; + state->s2[1] = state->s2[2]; + state->s2[2] = (unsigned int)p2; + r = p1 - p2; + if (r <= 0) r += MRG32K3A_MOD1; + return r; +} + + +/** + * \brief Return 32-bits of pseudorandomness from an MRG32k3a generator. + * + * Return 32-bits of pseudorandomness from the MRG32k3a generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 32-bits of pseudorandomness as an unsigned int, all bits valid to use. + */ +QUALIFIERS unsigned int curand(curandStateMRG32k3a_t *state) +{ + double dRet; + dRet = (double)curand_MRG32k3a(state)*(double)MRG32K3A_BITS_NORM; + return (unsigned int)dRet; +} + + + +/** + * \brief Update MRG32k3a state to skip \p n elements. + * + * Update the MRG32k3a state in \p state to skip ahead \p n elements. + * + * All values of \p n are valid. Large values require more computation and so + * will take more time to complete. + * + * \param n - Number of elements to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead(unsigned long long n, curandStateMRG32k3a_t *state) +{ + unsigned int t[3][3]; +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + curand_MRGmatPow3x3( mrg32k3aM1, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3(mrg32k3aM2, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +, + curand_MRGmatPow3x3( mrg32k3aM1Host, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3(mrg32k3aM2Host, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +) +} + +/** + * \brief Update MRG32k3a state to skip ahead \p n subsequences. + * + * Update the MRG32k3a state in \p state to skip ahead \p n subsequences. Each + * subsequence is \xmlonly2127\endxmlonly + * + * \xmlonly276\endxmlonly elements long, so this means the function will skip ahead + * \xmlonly267\endxmlonly * n elements. + * + * Valid values of \p n are 0 to \xmlonly251\endxmlonly. Note \p n will be masked to 51 bits + * + * \param n - Number of subsequences to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead_subsequence(unsigned long long n, curandStateMRG32k3a_t *state) +{ + unsigned int t[3][3]; +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + curand_MRGmatPow3x3( mrg32k3aM1SubSeq, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3( mrg32k3aM2SubSeq, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +, + curand_MRGmatPow3x3( mrg32k3aM1SubSeqHost, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3( mrg32k3aM2SubSeqHost, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +) +} + +/** + * \brief Update MRG32k3a state to skip ahead \p n sequences. + * + * Update the MRG32k3a state in \p state to skip ahead \p n sequences. Each + * sequence is \xmlonly2127\endxmlonly elements long, so this means the function will skip ahead + * \xmlonly2127\endxmlonly * n elements. + * + * All values of \p n are valid. Large values require more computation and so + * will take more time to complete. + * + * \param n - Number of sequences to skip + * \param state - Pointer to state to update + */ +QUALIFIERS void skipahead_sequence(unsigned long long n, curandStateMRG32k3a_t *state) +{ + unsigned int t[3][3]; +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + curand_MRGmatPow3x3( mrg32k3aM1Seq, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3( mrg32k3aM2Seq, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +, + curand_MRGmatPow3x3( mrg32k3aM1SeqHost, t, MRG32K3A_MOD1, n); + curand_MRGmatVecMul3x3( t, state->s1, MRG32K3A_MOD1); + curand_MRGmatPow3x3( mrg32k3aM2SeqHost, t, MRG32K3A_MOD2, n); + curand_MRGmatVecMul3x3( t, state->s2, MRG32K3A_MOD2); +) +} + + +/** + * \brief Initialize MRG32k3a state. + * + * Initialize MRG32k3a state in \p state with the given \p seed, \p subsequence, + * and \p offset. + * + * All input values of \p seed, \p subsequence, and \p offset are legal. + * \p subsequence will be truncated to 51 bits to avoid running into the next sequence + * + * A value of 0 for \p seed sets the state to the values of the original + * published version of the \p MRG32k3a algorithm. + * + * \param seed - Arbitrary bits to use as a seed + * \param subsequence - Subsequence to start at + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(unsigned long long seed, + unsigned long long subsequence, + unsigned long long offset, + curandStateMRG32k3a_t *state) +{ + int i; + for ( i=0; i<3; i++ ) { + state->s1[i] = 12345u; + state->s2[i] = 12345u; + } + if (seed != 0ull) { + unsigned int x1 = ((unsigned int)seed) ^ 0x55555555UL; + unsigned int x2 = (unsigned int)((seed >> 32) ^ 0xAAAAAAAAUL); + state->s1[0] = (unsigned int)curand_MRGmodMul(x1, state->s1[0], MRG32K3A_MOD1); + state->s1[1] = (unsigned int)curand_MRGmodMul(x2, state->s1[1], MRG32K3A_MOD1); + state->s1[2] = (unsigned int)curand_MRGmodMul(x1, state->s1[2], MRG32K3A_MOD1); + state->s2[0] = (unsigned int)curand_MRGmodMul(x2, state->s2[0], MRG32K3A_MOD2); + state->s2[1] = (unsigned int)curand_MRGmodMul(x1, state->s2[1], MRG32K3A_MOD2); + state->s2[2] = (unsigned int)curand_MRGmodMul(x2, state->s2[2], MRG32K3A_MOD2); + } + skipahead_subsequence( subsequence, state ); + skipahead( offset, state ); + state->boxmuller_flag = 0; + state->boxmuller_flag_double = 0; + state->boxmuller_extra = 0.f; + state->boxmuller_extra_double = 0.; +} + +/** + * \brief Update Sobol32 state to skip \p n elements. + * + * Update the Sobol32 state in \p state to skip ahead \p n elements. + * + * All values of \p n are valid. + * + * \param n - Number of elements to skip + * \param state - Pointer to state to update + */ +template +QUALIFIERS +typename CURAND_STD::enable_if::value || CURAND_STD::is_same::value>::type +skipahead(unsigned int n, T state) +{ + unsigned int i_gray; + state->x = state->c; + state->i += n; + /* Convert state->i to gray code */ + i_gray = state->i ^ (state->i >> 1); + for(unsigned int k = 0; k < 32; k++) { + if(i_gray & (1 << k)) { + state->x ^= state->direction_vectors[k]; + } + } + return; +} + +/** + * \brief Update Sobol64 state to skip \p n elements. + * + * Update the Sobol64 state in \p state to skip ahead \p n elements. + * + * All values of \p n are valid. + * + * \param n - Number of elements to skip + * \param state - Pointer to state to update + */ +template +QUALIFIERS +typename CURAND_STD::enable_if::value || CURAND_STD::is_same::value>::type +skipahead(unsigned long long n, T state) +{ + unsigned long long i_gray; + state->x = state->c; + state->i += n; + /* Convert state->i to gray code */ + i_gray = state->i ^ (state->i >> 1); + for(unsigned k = 0; k < 64; k++) { + if(i_gray & (1ULL << k)) { + state->x ^= state->direction_vectors[k]; + } + } + return; +} + +/** + * \brief Initialize Sobol32 state. + * + * Initialize Sobol32 state in \p state with the given \p direction \p vectors and + * \p offset. + * + * The direction vector is a device pointer to an array of 32 unsigned ints. + * All input values of \p offset are legal. + * + * \param direction_vectors - Pointer to array of 32 unsigned ints representing the + * direction vectors for the desired dimension + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(curandDirectionVectors32_t direction_vectors, + unsigned int offset, + curandStateSobol32_t *state) +{ + state->i = 0; + state->c = 0; + for(int i = 0; i < 32; i++) { + state->direction_vectors[i] = direction_vectors[i]; + } + state->x = 0; + skipahead(offset, state); +} +/** + * \brief Initialize Scrambled Sobol32 state. + * + * Initialize Sobol32 state in \p state with the given \p direction \p vectors and + * \p offset. + * + * The direction vector is a device pointer to an array of 32 unsigned ints. + * All input values of \p offset are legal. + * + * \param direction_vectors - Pointer to array of 32 unsigned ints representing the + direction vectors for the desired dimension + * \param scramble_c Scramble constant + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(curandDirectionVectors32_t direction_vectors, + unsigned int scramble_c, + unsigned int offset, + curandStateScrambledSobol32_t *state) +{ + state->i = 0; + state->c = scramble_c; + for(int i = 0; i < 32; i++) { + state->direction_vectors[i] = direction_vectors[i]; + } + state->x = state->c; + skipahead(offset, state); +} + +QUALIFIERS int __curand_find_trailing_zero(unsigned int x) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + int y = __ffs(~x); + if(y) + return y - 1; + return 31; +, + int i = 1; + while(x & 1) { + i++; + x >>= 1; + } + i = i - 1; + return i == 32 ? 31 : i; +) +} + +QUALIFIERS int __curand_find_trailing_zero(unsigned long long x) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + int y = __ffsll(~x); + if(y) + return y - 1; + return 63; +, + int i = 1; + while(x & 1) { + i++; + x >>= 1; + } + i = i - 1; + return i == 64 ? 63 : i; +) +} + +/** + * \brief Initialize Sobol64 state. + * + * Initialize Sobol64 state in \p state with the given \p direction \p vectors and + * \p offset. + * + * The direction vector is a device pointer to an array of 64 unsigned long longs. + * All input values of \p offset are legal. + * + * \param direction_vectors - Pointer to array of 64 unsigned long longs representing the + direction vectors for the desired dimension + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(curandDirectionVectors64_t direction_vectors, + unsigned long long offset, + curandStateSobol64_t *state) +{ + state->i = 0; + state->c = 0; + for(int i = 0; i < 64; i++) { + state->direction_vectors[i] = direction_vectors[i]; + } + state->x = 0; + skipahead(offset, state); +} + +/** + * \brief Initialize Scrambled Sobol64 state. + * + * Initialize Sobol64 state in \p state with the given \p direction \p vectors and + * \p offset. + * + * The direction vector is a device pointer to an array of 64 unsigned long longs. + * All input values of \p offset are legal. + * + * \param direction_vectors - Pointer to array of 64 unsigned long longs representing the + direction vectors for the desired dimension + * \param scramble_c Scramble constant + * \param offset - Absolute offset into sequence + * \param state - Pointer to state to initialize + */ +QUALIFIERS void curand_init(curandDirectionVectors64_t direction_vectors, + unsigned long long scramble_c, + unsigned long long offset, + curandStateScrambledSobol64_t *state) +{ + state->i = 0; + state->c = scramble_c; + for(int i = 0; i < 64; i++) { + state->direction_vectors[i] = direction_vectors[i]; + } + state->x = state->c; + skipahead(offset, state); +} + +/** + * \brief Return 32-bits of quasirandomness from a Sobol32 generator. + * + * Return 32-bits of quasirandomness from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 32-bits of quasirandomness as an unsigned int, all bits valid to use. + */ + +QUALIFIERS unsigned int curand(curandStateSobol32_t * state) +{ + /* Moving from i to i+1 element in gray code is flipping one bit, + the trailing zero bit of i + */ + unsigned int res = state->x; + state->x ^= state->direction_vectors[__curand_find_trailing_zero(state->i)]; + state->i ++; + return res; +} + +/** + * \brief Return 32-bits of quasirandomness from a scrambled Sobol32 generator. + * + * Return 32-bits of quasirandomness from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 32-bits of quasirandomness as an unsigned int, all bits valid to use. + */ + +QUALIFIERS unsigned int curand(curandStateScrambledSobol32_t * state) +{ + /* Moving from i to i+1 element in gray code is flipping one bit, + the trailing zero bit of i + */ + unsigned int res = state->x; + state->x ^= state->direction_vectors[__curand_find_trailing_zero(state->i)]; + state->i ++; + return res; +} + +/** + * \brief Return 64-bits of quasirandomness from a Sobol64 generator. + * + * Return 64-bits of quasirandomness from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 64-bits of quasirandomness as an unsigned long long, all bits valid to use. + */ + +QUALIFIERS unsigned long long curand(curandStateSobol64_t * state) +{ + /* Moving from i to i+1 element in gray code is flipping one bit, + the trailing zero bit of i + */ + unsigned long long res = state->x; + state->x ^= state->direction_vectors[__curand_find_trailing_zero(state->i)]; + state->i ++; + return res; +} + +/** + * \brief Return 64-bits of quasirandomness from a scrambled Sobol64 generator. + * + * Return 64-bits of quasirandomness from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * + * \return 64-bits of quasirandomness as an unsigned long long, all bits valid to use. + */ + +QUALIFIERS unsigned long long curand(curandStateScrambledSobol64_t * state) +{ + /* Moving from i to i+1 element in gray code is flipping one bit, + the trailing zero bit of i + */ + unsigned long long res = state->x; + state->x ^= state->direction_vectors[__curand_find_trailing_zero(state->i)]; + state->i ++; + return res; +} + +#include "curand_uniform.h" +#include "curand_normal.h" +#include "curand_lognormal.h" +#include "curand_poisson.h" +#include "curand_discrete2.h" + +__device__ static inline unsigned int *__get_precalculated_matrix(int n) +{ + if(n == 0) { + return precalc_xorwow_matrix[n]; + } + if(n == 2) { + return precalc_xorwow_offset_matrix[n]; + } + return precalc_xorwow_matrix[n]; +} + +#ifndef __CUDACC_RTC__ +__host__ static inline unsigned int *__get_precalculated_matrix_host(int n) +{ + if(n == 1) { + return precalc_xorwow_matrix_host[n]; + } + if(n == 3) { + return precalc_xorwow_offset_matrix_host[n]; + } + return precalc_xorwow_matrix_host[n]; +} +#endif // #ifndef __CUDACC_RTC__ + +__device__ static inline unsigned int *__get_mrg32k3a_matrix(int n) +{ + if(n == 0) { + return mrg32k3aM1[n][0]; + } + if(n == 2) { + return mrg32k3aM2[n][0]; + } + if(n == 4) { + return mrg32k3aM1SubSeq[n][0]; + } + if(n == 6) { + return mrg32k3aM2SubSeq[n][0]; + } + if(n == 8) { + return mrg32k3aM1Seq[n][0]; + } + if(n == 10) { + return mrg32k3aM2Seq[n][0]; + } + return mrg32k3aM1[n][0]; +} + +#ifndef __CUDACC_RTC__ +__host__ static inline unsigned int *__get_mrg32k3a_matrix_host(int n) +{ + if(n == 1) { + return mrg32k3aM1Host[n][0]; + } + if(n == 3) { + return mrg32k3aM2Host[n][0]; + } + if(n == 5) { + return mrg32k3aM1SubSeqHost[n][0]; + } + if(n == 7) { + return mrg32k3aM2SubSeqHost[n][0]; + } + if(n == 9) { + return mrg32k3aM1SeqHost[n][0]; + } + if(n == 11) { + return mrg32k3aM2SeqHost[n][0]; + } + return mrg32k3aM1Host[n][0]; +} + +__host__ static inline double *__get__cr_lgamma_table_host(void) { + return __cr_lgamma_table; +} +#endif // #ifndef __CUDACC_RTC__ + +/** @} */ + +#endif // !defined(CURAND_KERNEL_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_lognormal.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_lognormal.h new file mode 100644 index 0000000000000000000000000000000000000000..2ebb27599e54cef8325e0d43457f09283d13cb88 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_lognormal.h @@ -0,0 +1,697 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_LOGNORMAL_H_) +#define CURAND_LOGNORMAL_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" + +/** + * \brief Return a log-normally distributed float from an XORWOW generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateXORWOW_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return a log-normally distributed float from an Philox4_32_10 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS float curand_log_normal(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return two normally distributed floats from an XORWOW generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStateXORWOW_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return two normally distributed floats from an Philox4_32_10 generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} +/** + * \brief Return four normally distributed floats from an Philox4_32_10 generator. + * + * Return four log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float4 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float4 curand_log_normal4(curandStatePhilox4_32_10_t *state, float mean, float stddev) +{ + float4 v = curand_box_muller4(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + v.z = expf(mean + (stddev * v.z)); + v.w = expf(mean + (stddev * v.w)); + return v; +} + +/** + * \brief Return a log-normally distributed float from an MRG32k3a generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateMRG32k3a_t *state, float mean, float stddev) +{ + if(state->boxmuller_flag != EXTRA_FLAG_LOG_NORMAL) { + float2 v = curand_box_muller_mrg(state); + state->boxmuller_extra = expf(mean + (stddev * v.y)); + state->boxmuller_flag = EXTRA_FLAG_LOG_NORMAL; + return expf(mean + (stddev * v.x)); + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return two normally distributed floats from an MRG32k3a generator. + * + * Return two log-normally distributed floats derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then transforms them to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float2 curand_log_normal2(curandStateMRG32k3a_t *state, float mean, float stddev) +{ + float2 v = curand_box_muller_mrg(state); + v.x = expf(mean + (stddev * v.x)); + v.y = expf(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return a log-normally distributed float from an MTGP32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateMtgp32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a Sobol32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateSobol32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} +/** + * \brief Return a log-normally distributed float from a scrambled Sobol32 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate a normally distributed result, then transforms the result + * to log-normal. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateScrambledSobol32_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a Sobol64 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, then converts to log-normal + * distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateSobol64_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed float from a scrambled Sobol64 generator. + * + * Return a single log-normally distributed float derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, then converts to log-normal + * distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed float with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS float curand_log_normal(curandStateScrambledSobol64_t *state, float mean, float stddev) +{ + return expf(mean + (stddev * _curand_normal_icdf(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from an XORWOW generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS double curand_log_normal_double(curandStateXORWOW_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + unsigned int x0, x1, y0, y1; + x0 = curand(state); + x1 = curand(state); + y0 = curand(state); + y1 = curand(state); + double2 v = _curand_box_muller_double(x0, x1, y0, y1); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return a log-normally distributed double from an Philox4_32_10 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ + +QUALIFIERS double curand_log_normal_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + uint4 _x; + _x = curand4(state); + double2 v = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + + +/** + * \brief Return two log-normally distributed doubles from an XORWOW generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the XORWOW generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStateXORWOW_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return two log-normally distributed doubles from an Philox4_32_10 generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double4 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller2_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} +// nor part of API +QUALIFIERS double4 curand_log_normal4_double(curandStatePhilox4_32_10_t *state, double mean, double stddev) +{ + double4 v = curand_box_muller4_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + v.z = exp(mean + (stddev * v.z)); + v.w = exp(mean + (stddev * v.w)); + return v; +} + +/** + * \brief Return a log-normally distributed double from an MRG32k3a generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, transforms them to log-normal distribution, + * then returns them one at a time. + * See ::curand_log_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateMRG32k3a_t *state, double mean, double stddev) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_LOG_NORMAL) { + double2 v = curand_box_muller_mrg_double(state); + state->boxmuller_extra_double = exp(mean + (stddev * v.y)); + state->boxmuller_flag_double = EXTRA_FLAG_LOG_NORMAL; + return exp(mean + (stddev * v.x)); + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return two log-normally distributed doubles from an MRG32k3a generator. + * + * Return two log-normally distributed doubles derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MRG32k3a generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, and transforms them to log-normal distribution,. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double2 where each element is from a + * distribution with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double2 curand_log_normal2_double(curandStateMRG32k3a_t *state, double mean, double stddev) +{ + double2 v = curand_box_muller_mrg_double(state); + v.x = exp(mean + (stddev * v.x)); + v.y = exp(mean + (stddev * v.y)); + return v; +} + +/** + * \brief Return a log-normally distributed double from an MTGP32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateMtgp32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a Sobol32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateSobol32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a scrambled Sobol32 generator. + * + * Return a single log-normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results, and transforms them into + * log-normal distribution. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateScrambledSobol32_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a Sobol64 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateSobol64_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +/** + * \brief Return a log-normally distributed double from a scrambled Sobol64 generator. + * + * Return a single normally distributed double derived from a normal + * distribution with mean \p mean and standard deviation \p stddev + * from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * \param mean - Mean of the related normal distribution + * \param stddev - Standard deviation of the related normal distribution + * + * \return Log-normally distributed double with mean \p mean and standard deviation \p stddev + */ +QUALIFIERS double curand_log_normal_double(curandStateScrambledSobol64_t *state, double mean, double stddev) +{ + return exp(mean + (stddev * _curand_normal_icdf_double(curand(state)))); +} + +#endif // !defined(CURAND_LOGNORMAL_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mrg32k3a.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mrg32k3a.h new file mode 100644 index 0000000000000000000000000000000000000000..a052a9c3b3f45dcf1d7d0369d0d62d8c4719e3ee --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mrg32k3a.h @@ -0,0 +1,3721 @@ +/* + * Copyright 2010-2018 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ +#if !defined(CURAND_MRG32K3A_MATRICES_H_) +#define CURAND_MRG32K3A_MATRICES_H_ + +#if defined(__CUDACC_RDC__) && (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +#define CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS inline __device__ +#else +#define CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS static __device__ +#endif + +#if (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +#define CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS inline +#else +#define CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS static +#endif + + /* base matrices */ + + /* these are not actually used in the runtime code. They are */ + /* used in computing the skipahead matrices, and are included */ + /* for reference */ + /* + double M1[3][3] = { 0., 1., 0., + 0., 0., 1., + -810728., 1403580., 0. }; + + double M2[3][3] = { 0., 1., 0., + 0., 0., 1., + -1370589., 0., 527612. }; + + */ + + /* Base matrices to power 2 to the power n, n the first array index, from 0..63 */ +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM1[64][3][3] = { + { + { 0u, 1u, 0u }, + { 0u, 0u, 1u }, + { 4294156359u, 1403580u, 0u } + }, + { + { 0u, 0u, 1u }, + { 4294156359u, 1403580u, 0u }, + { 0u, 4294156359u, 1403580u } + }, + { + { 0u, 4294156359u, 1403580u }, + { 244671815u, 2941890554u, 4294156359u }, + { 149925673u, 489343630u, 2941890554u } + }, + { + { 1527363550u, 2758233149u, 1831234280u }, + { 4072640363u, 939574583u, 2758233149u }, + { 2064391165u, 3228066636u, 939574583u } + }, + { + { 736416029u, 2961816100u, 342112271u }, + { 387300998u, 1062452522u, 2961816100u }, + { 2955879160u, 340793741u, 1062452522u } + }, + { + { 1243502014u, 2218748291u, 1709215645u }, + { 2019641772u, 3847560959u, 2218748291u }, + { 3866010231u, 2305448679u, 3847560959u } + }, + { + { 3241775219u, 3453352062u, 3721871040u }, + { 4062454730u, 3015754u, 3453352062u }, + { 919711945u, 613405362u, 3015754u } + }, + { + { 1955221006u, 1414472808u, 1746037714u }, + { 3653507277u, 1644962013u, 1414472808u }, + { 3501544776u, 2336229602u, 1644962013u } + }, + { + { 1170096663u, 49135452u, 3441537107u }, + { 1857945175u, 1649398389u, 49135452u }, + { 333002869u, 3109147376u, 1649398389u } + }, + { + { 2299034194u, 2297111910u, 862649200u }, + { 1399961132u, 996706937u, 2297111910u }, + { 3439056503u, 1481993076u, 996706937u } + }, + { + { 4146310528u, 458782589u, 1007330283u }, + { 4241015765u, 3979619964u, 458782589u }, + { 553886495u, 2186897562u, 3979619964u } + }, + { + { 3630027893u, 2130448350u, 292773857u }, + { 1392525159u, 1299285967u, 2130448350u }, + { 2589171163u, 1217405758u, 1299285967u } + }, + { + { 892409263u, 1999175811u, 2979225418u }, + { 1996163538u, 2148702503u, 1999175811u }, + { 3922720782u, 103819730u, 2148702503u } + }, + { + { 1586003016u, 2114210471u, 3240775579u }, + { 2777288607u, 1400478398u, 2114210471u }, + { 3018215420u, 535326008u, 1400478398u } + }, + { + { 2188531273u, 1783231160u, 3576659343u }, + { 1908318389u, 379210133u, 1783231160u }, + { 554369329u, 250053591u, 379210133u } + }, + { + { 4022841636u, 3951951872u, 2143424240u }, + { 1046219306u, 1591992468u, 3951951872u }, + { 1510277444u, 381333958u, 1591992468u } + }, + { + { 2256493727u, 3715182130u, 642697923u }, + { 3615342722u, 3975008370u, 3715182130u }, + { 2405650329u, 754337639u, 3975008370u } + }, + { + { 1286664224u, 627406673u, 963516608u }, + { 1541344588u, 460768826u, 627406673u }, + { 1089892553u, 2717717970u, 460768826u } + }, + { + { 2956342842u, 3471097641u, 2353092905u }, + { 2996150472u, 420480221u, 3471097641u }, + { 2221681883u, 372736411u, 420480221u } + }, + { + { 420492906u, 153526651u, 3499730988u }, + { 2662640502u, 3278195133u, 153526651u }, + { 4086436419u, 2510762118u, 3278195133u } + }, + { + { 3310184147u, 2228376089u, 823220763u }, + { 3992771814u, 1693168425u, 2228376089u }, + { 2295790366u, 1401872772u, 1693168425u } + }, + { + { 2529428830u, 1497104068u, 4253248635u }, + { 3746310018u, 630867741u, 1497104068u }, + { 627043435u, 721725795u, 630867741u } + }, + { + { 2571072593u, 3039669025u, 1591031831u }, + { 526054481u, 661344445u, 3039669025u }, + { 4246010312u, 735391270u, 661344445u } + }, + { + { 1847312821u, 4042890210u, 4241772463u }, + { 606605705u, 2644799309u, 4042890210u }, + { 2658402822u, 1342278931u, 2644799309u } + }, + { + { 2409846784u, 1096138313u, 1416249993u }, + { 1501878241u, 138013862u, 1096138313u }, + { 1617749306u, 1975136163u, 138013862u } + }, + { + { 599453422u, 73950522u, 2965395603u }, + { 55354701u, 3855242202u, 73950522u }, + { 3981734504u, 3354399019u, 3855242202u } + }, + { + { 4271076381u, 813410089u, 3461955319u }, + { 1044920137u, 3029005516u, 813410089u }, + { 3501837362u, 3321539504u, 3029005516u } + }, + { + { 3058183515u, 941408572u, 1783998098u }, + { 1546486080u, 4116985007u, 941408572u }, + { 2247500745u, 1460625377u, 4116985007u } + }, + { + { 4216782514u, 3352801941u, 2315095646u }, + { 639029973u, 94451952u, 3352801941u }, + { 1242898773u, 3964593332u, 94451952u } + }, + { + { 2264905138u, 1926285644u, 1108147171u }, + { 2390706911u, 385258225u, 1926285644u }, + { 3569882325u, 3728744670u, 385258225u } + }, + { + { 270679073u, 1065683096u, 2992662885u }, + { 4196917281u, 2886425156u, 1065683096u }, + { 749134119u, 1849148167u, 2886425156u } + }, + { + { 35689930u, 1378151623u, 951629713u }, + { 673810920u, 948843427u, 1378151623u }, + { 3808868984u, 927013635u, 948843427u } + }, + { + { 1891490872u, 1130489594u, 3734864133u }, + { 1457450350u, 3362920032u, 1130489594u }, + { 638998846u, 1401175590u, 3362920032u } + }, + { + { 2254459023u, 2384691454u, 1730098031u }, + { 2844861718u, 1807491073u, 2384691454u }, + { 351423668u, 1570264155u, 1807491073u } + }, + { + { 3047429268u, 4245359555u, 2449575498u }, + { 1797081212u, 1237196477u, 4245359555u }, + { 143400628u, 3663731096u, 1237196477u } + }, + { + { 3313321106u, 4263819658u, 1047529624u }, + { 3719941673u, 3155049403u, 4263819658u }, + { 1981313839u, 4281524426u, 3155049403u } + }, + { + { 2005252417u, 3263186729u, 1535805957u }, + { 2951515865u, 1729281525u, 3263186729u }, + { 1141249417u, 2268963059u, 1729281525u } + }, + { + { 2367065164u, 83908466u, 4294308508u }, + { 1352516724u, 1416676049u, 83908466u }, + { 1040867745u, 1304732377u, 1416676049u } + }, + { + { 3214147257u, 1434230503u, 2944821434u }, + { 2753040912u, 4041536918u, 1434230503u }, + { 1317260239u, 338830578u, 4041536918u } + }, + { + { 300628476u, 2054743463u, 1499597869u }, + { 1762244284u, 1422043015u, 2054743463u }, + { 3581125669u, 1207561803u, 1422043015u } + }, + { + { 4171745404u, 4064983592u, 1934508265u }, + { 3049723261u, 1744636487u, 4064983592u }, + { 947753516u, 3952135907u, 1744636487u } + }, + { + { 1625369148u, 3577024659u, 2778677259u }, + { 1729967818u, 1049600974u, 3577024659u }, + { 2089137344u, 1569794605u, 1049600974u } + }, + { + { 1373068765u, 3958611830u, 569117280u }, + { 410042396u, 3551255470u, 3958611830u }, + { 869476379u, 1680625376u, 3551255470u } + }, + { + { 2108618602u, 2543645250u, 913717833u }, + { 2111984988u, 1012482542u, 2543645250u }, + { 2545745615u, 3141042890u, 1012482542u } + }, + { + { 1157293598u, 584852249u, 2272893205u }, + { 1631801979u, 3013855247u, 584852249u }, + { 3977310441u, 82049263u, 3013855247u } + }, + { + { 3580234334u, 3137526662u, 2403875621u }, + { 3580869206u, 3670086228u, 3137526662u }, + { 656744553u, 1764904195u, 3670086228u } + }, + { + { 2792496861u, 3634185196u, 3887031679u }, + { 3601823850u, 3464838365u, 3634185196u }, + { 3136165138u, 2842987937u, 3464838365u } + }, + { + { 1362557480u, 3230022138u, 4278720212u }, + { 3427386258u, 3848976950u, 3230022138u }, + { 2109817045u, 2441486578u, 3848976950u } + }, + { + { 1198519135u, 2007945401u, 3868481u }, + { 3335076429u, 2082683147u, 2007945401u }, + { 2341088247u, 888193479u, 2082683147u } + }, + { + { 3473925387u, 3193380570u, 565138859u }, + { 307060547u, 782210925u, 3193380570u }, + { 167617770u, 2180014252u, 782210925u } + }, + { + { 3811588895u, 3303532086u, 2766583698u }, + { 908630605u, 2665400165u, 3303532086u }, + { 2499994113u, 3316180851u, 2665400165u } + }, + { + { 4288926968u, 3033075037u, 1505732852u }, + { 1531633406u, 645804125u, 3033075037u }, + { 2942690261u, 2205365640u, 645804125u } + }, + { + { 3976196483u, 3651411522u, 1652430357u }, + { 1690405883u, 1294990760u, 3651411522u }, + { 209339647u, 3088484327u, 1294990760u } + }, + { + { 3171589548u, 2291131070u, 2093793287u }, + { 2997812074u, 4093879780u, 2291131070u }, + { 3255666800u, 858124816u, 4093879780u } + }, + { + { 4113016361u, 2999667479u, 3995043314u }, + { 1333973326u, 4007774239u, 2999667479u }, + { 3322921863u, 4278103786u, 4007774239u } + }, + { + { 925786347u, 2109676036u, 1879981040u }, + { 1701566570u, 1489702270u, 2109676036u }, + { 2719807628u, 158549605u, 1489702270u } + }, + { + { 2255405265u, 3460246357u, 218033453u }, + { 2135115875u, 359516994u, 3460246357u }, + { 3568862459u, 3114762683u, 359516994u } + }, + { + { 773148471u, 4117539411u, 3073622315u }, + { 3807175775u, 186466108u, 4117539411u }, + { 2842197411u, 651334129u, 186466108u } + }, + { + { 615242951u, 1475251263u, 3586439101u }, + { 1693917167u, 3058812486u, 1475251263u }, + { 568701600u, 1164226398u, 3058812486u } + }, + { + { 1632636204u, 15370275u, 2061555515u }, + { 4187505695u, 1741164221u, 15370275u }, + { 2882176274u, 3978412194u, 1741164221u } + }, + { + { 3446066703u, 344820524u, 74213775u }, + { 1008543583u, 2579620192u, 344820524u }, + { 3753911358u, 1538453821u, 2579620192u } + }, + { + { 3600859892u, 1269921024u, 4069458760u }, + { 2050939727u, 2222725697u, 1269921024u }, + { 3208347646u, 690898125u, 2222725697u } + }, + { + { 599407451u, 2806239788u, 1742216102u }, + { 975123999u, 764869161u, 2806239788u }, + { 2729710367u, 1845257036u, 764869161u } + }, + { + { 967330218u, 3464884028u, 3444447102u }, + { 580449578u, 1343714307u, 3464884028u }, + { 1775329096u, 4027221761u, 1343714307u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM1Host[64][3][3] = { + { + { 0u, 1u, 0u }, + { 0u, 0u, 1u }, + { 4294156359u, 1403580u, 0u } + }, + { + { 0u, 0u, 1u }, + { 4294156359u, 1403580u, 0u }, + { 0u, 4294156359u, 1403580u } + }, + { + { 0u, 4294156359u, 1403580u }, + { 244671815u, 2941890554u, 4294156359u }, + { 149925673u, 489343630u, 2941890554u } + }, + { + { 1527363550u, 2758233149u, 1831234280u }, + { 4072640363u, 939574583u, 2758233149u }, + { 2064391165u, 3228066636u, 939574583u } + }, + { + { 736416029u, 2961816100u, 342112271u }, + { 387300998u, 1062452522u, 2961816100u }, + { 2955879160u, 340793741u, 1062452522u } + }, + { + { 1243502014u, 2218748291u, 1709215645u }, + { 2019641772u, 3847560959u, 2218748291u }, + { 3866010231u, 2305448679u, 3847560959u } + }, + { + { 3241775219u, 3453352062u, 3721871040u }, + { 4062454730u, 3015754u, 3453352062u }, + { 919711945u, 613405362u, 3015754u } + }, + { + { 1955221006u, 1414472808u, 1746037714u }, + { 3653507277u, 1644962013u, 1414472808u }, + { 3501544776u, 2336229602u, 1644962013u } + }, + { + { 1170096663u, 49135452u, 3441537107u }, + { 1857945175u, 1649398389u, 49135452u }, + { 333002869u, 3109147376u, 1649398389u } + }, + { + { 2299034194u, 2297111910u, 862649200u }, + { 1399961132u, 996706937u, 2297111910u }, + { 3439056503u, 1481993076u, 996706937u } + }, + { + { 4146310528u, 458782589u, 1007330283u }, + { 4241015765u, 3979619964u, 458782589u }, + { 553886495u, 2186897562u, 3979619964u } + }, + { + { 3630027893u, 2130448350u, 292773857u }, + { 1392525159u, 1299285967u, 2130448350u }, + { 2589171163u, 1217405758u, 1299285967u } + }, + { + { 892409263u, 1999175811u, 2979225418u }, + { 1996163538u, 2148702503u, 1999175811u }, + { 3922720782u, 103819730u, 2148702503u } + }, + { + { 1586003016u, 2114210471u, 3240775579u }, + { 2777288607u, 1400478398u, 2114210471u }, + { 3018215420u, 535326008u, 1400478398u } + }, + { + { 2188531273u, 1783231160u, 3576659343u }, + { 1908318389u, 379210133u, 1783231160u }, + { 554369329u, 250053591u, 379210133u } + }, + { + { 4022841636u, 3951951872u, 2143424240u }, + { 1046219306u, 1591992468u, 3951951872u }, + { 1510277444u, 381333958u, 1591992468u } + }, + { + { 2256493727u, 3715182130u, 642697923u }, + { 3615342722u, 3975008370u, 3715182130u }, + { 2405650329u, 754337639u, 3975008370u } + }, + { + { 1286664224u, 627406673u, 963516608u }, + { 1541344588u, 460768826u, 627406673u }, + { 1089892553u, 2717717970u, 460768826u } + }, + { + { 2956342842u, 3471097641u, 2353092905u }, + { 2996150472u, 420480221u, 3471097641u }, + { 2221681883u, 372736411u, 420480221u } + }, + { + { 420492906u, 153526651u, 3499730988u }, + { 2662640502u, 3278195133u, 153526651u }, + { 4086436419u, 2510762118u, 3278195133u } + }, + { + { 3310184147u, 2228376089u, 823220763u }, + { 3992771814u, 1693168425u, 2228376089u }, + { 2295790366u, 1401872772u, 1693168425u } + }, + { + { 2529428830u, 1497104068u, 4253248635u }, + { 3746310018u, 630867741u, 1497104068u }, + { 627043435u, 721725795u, 630867741u } + }, + { + { 2571072593u, 3039669025u, 1591031831u }, + { 526054481u, 661344445u, 3039669025u }, + { 4246010312u, 735391270u, 661344445u } + }, + { + { 1847312821u, 4042890210u, 4241772463u }, + { 606605705u, 2644799309u, 4042890210u }, + { 2658402822u, 1342278931u, 2644799309u } + }, + { + { 2409846784u, 1096138313u, 1416249993u }, + { 1501878241u, 138013862u, 1096138313u }, + { 1617749306u, 1975136163u, 138013862u } + }, + { + { 599453422u, 73950522u, 2965395603u }, + { 55354701u, 3855242202u, 73950522u }, + { 3981734504u, 3354399019u, 3855242202u } + }, + { + { 4271076381u, 813410089u, 3461955319u }, + { 1044920137u, 3029005516u, 813410089u }, + { 3501837362u, 3321539504u, 3029005516u } + }, + { + { 3058183515u, 941408572u, 1783998098u }, + { 1546486080u, 4116985007u, 941408572u }, + { 2247500745u, 1460625377u, 4116985007u } + }, + { + { 4216782514u, 3352801941u, 2315095646u }, + { 639029973u, 94451952u, 3352801941u }, + { 1242898773u, 3964593332u, 94451952u } + }, + { + { 2264905138u, 1926285644u, 1108147171u }, + { 2390706911u, 385258225u, 1926285644u }, + { 3569882325u, 3728744670u, 385258225u } + }, + { + { 270679073u, 1065683096u, 2992662885u }, + { 4196917281u, 2886425156u, 1065683096u }, + { 749134119u, 1849148167u, 2886425156u } + }, + { + { 35689930u, 1378151623u, 951629713u }, + { 673810920u, 948843427u, 1378151623u }, + { 3808868984u, 927013635u, 948843427u } + }, + { + { 1891490872u, 1130489594u, 3734864133u }, + { 1457450350u, 3362920032u, 1130489594u }, + { 638998846u, 1401175590u, 3362920032u } + }, + { + { 2254459023u, 2384691454u, 1730098031u }, + { 2844861718u, 1807491073u, 2384691454u }, + { 351423668u, 1570264155u, 1807491073u } + }, + { + { 3047429268u, 4245359555u, 2449575498u }, + { 1797081212u, 1237196477u, 4245359555u }, + { 143400628u, 3663731096u, 1237196477u } + }, + { + { 3313321106u, 4263819658u, 1047529624u }, + { 3719941673u, 3155049403u, 4263819658u }, + { 1981313839u, 4281524426u, 3155049403u } + }, + { + { 2005252417u, 3263186729u, 1535805957u }, + { 2951515865u, 1729281525u, 3263186729u }, + { 1141249417u, 2268963059u, 1729281525u } + }, + { + { 2367065164u, 83908466u, 4294308508u }, + { 1352516724u, 1416676049u, 83908466u }, + { 1040867745u, 1304732377u, 1416676049u } + }, + { + { 3214147257u, 1434230503u, 2944821434u }, + { 2753040912u, 4041536918u, 1434230503u }, + { 1317260239u, 338830578u, 4041536918u } + }, + { + { 300628476u, 2054743463u, 1499597869u }, + { 1762244284u, 1422043015u, 2054743463u }, + { 3581125669u, 1207561803u, 1422043015u } + }, + { + { 4171745404u, 4064983592u, 1934508265u }, + { 3049723261u, 1744636487u, 4064983592u }, + { 947753516u, 3952135907u, 1744636487u } + }, + { + { 1625369148u, 3577024659u, 2778677259u }, + { 1729967818u, 1049600974u, 3577024659u }, + { 2089137344u, 1569794605u, 1049600974u } + }, + { + { 1373068765u, 3958611830u, 569117280u }, + { 410042396u, 3551255470u, 3958611830u }, + { 869476379u, 1680625376u, 3551255470u } + }, + { + { 2108618602u, 2543645250u, 913717833u }, + { 2111984988u, 1012482542u, 2543645250u }, + { 2545745615u, 3141042890u, 1012482542u } + }, + { + { 1157293598u, 584852249u, 2272893205u }, + { 1631801979u, 3013855247u, 584852249u }, + { 3977310441u, 82049263u, 3013855247u } + }, + { + { 3580234334u, 3137526662u, 2403875621u }, + { 3580869206u, 3670086228u, 3137526662u }, + { 656744553u, 1764904195u, 3670086228u } + }, + { + { 2792496861u, 3634185196u, 3887031679u }, + { 3601823850u, 3464838365u, 3634185196u }, + { 3136165138u, 2842987937u, 3464838365u } + }, + { + { 1362557480u, 3230022138u, 4278720212u }, + { 3427386258u, 3848976950u, 3230022138u }, + { 2109817045u, 2441486578u, 3848976950u } + }, + { + { 1198519135u, 2007945401u, 3868481u }, + { 3335076429u, 2082683147u, 2007945401u }, + { 2341088247u, 888193479u, 2082683147u } + }, + { + { 3473925387u, 3193380570u, 565138859u }, + { 307060547u, 782210925u, 3193380570u }, + { 167617770u, 2180014252u, 782210925u } + }, + { + { 3811588895u, 3303532086u, 2766583698u }, + { 908630605u, 2665400165u, 3303532086u }, + { 2499994113u, 3316180851u, 2665400165u } + }, + { + { 4288926968u, 3033075037u, 1505732852u }, + { 1531633406u, 645804125u, 3033075037u }, + { 2942690261u, 2205365640u, 645804125u } + }, + { + { 3976196483u, 3651411522u, 1652430357u }, + { 1690405883u, 1294990760u, 3651411522u }, + { 209339647u, 3088484327u, 1294990760u } + }, + { + { 3171589548u, 2291131070u, 2093793287u }, + { 2997812074u, 4093879780u, 2291131070u }, + { 3255666800u, 858124816u, 4093879780u } + }, + { + { 4113016361u, 2999667479u, 3995043314u }, + { 1333973326u, 4007774239u, 2999667479u }, + { 3322921863u, 4278103786u, 4007774239u } + }, + { + { 925786347u, 2109676036u, 1879981040u }, + { 1701566570u, 1489702270u, 2109676036u }, + { 2719807628u, 158549605u, 1489702270u } + }, + { + { 2255405265u, 3460246357u, 218033453u }, + { 2135115875u, 359516994u, 3460246357u }, + { 3568862459u, 3114762683u, 359516994u } + }, + { + { 773148471u, 4117539411u, 3073622315u }, + { 3807175775u, 186466108u, 4117539411u }, + { 2842197411u, 651334129u, 186466108u } + }, + { + { 615242951u, 1475251263u, 3586439101u }, + { 1693917167u, 3058812486u, 1475251263u }, + { 568701600u, 1164226398u, 3058812486u } + }, + { + { 1632636204u, 15370275u, 2061555515u }, + { 4187505695u, 1741164221u, 15370275u }, + { 2882176274u, 3978412194u, 1741164221u } + }, + { + { 3446066703u, 344820524u, 74213775u }, + { 1008543583u, 2579620192u, 344820524u }, + { 3753911358u, 1538453821u, 2579620192u } + }, + { + { 3600859892u, 1269921024u, 4069458760u }, + { 2050939727u, 2222725697u, 1269921024u }, + { 3208347646u, 690898125u, 2222725697u } + }, + { + { 599407451u, 2806239788u, 1742216102u }, + { 975123999u, 764869161u, 2806239788u }, + { 2729710367u, 1845257036u, 764869161u } + }, + { + { 967330218u, 3464884028u, 3444447102u }, + { 580449578u, 1343714307u, 3464884028u }, + { 1775329096u, 4027221761u, 1343714307u } + } + }; +#endif // ifndef __CUDACC_RTC__ + +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM2[64][3][3] = { + { + { 0u, 1u, 0u }, + { 0u, 0u, 1u }, + { 4293573854u, 0u, 527612u } + }, + { + { 0u, 0u, 1u }, + { 4293573854u, 0u, 527612u }, + { 2706407399u, 4293573854u, 3497978192u } + }, + { + { 2706407399u, 4293573854u, 3497978192u }, + { 1431525864u, 2706407399u, 3281754271u }, + { 97673890u, 1431525864u, 1673476130u } + }, + { + { 3405842137u, 2680076935u, 893509979u }, + { 4035147174u, 3405842137u, 3280220074u }, + { 2623373296u, 4035147174u, 361718588u } + }, + { + { 818368950u, 3790774567u, 3542344109u }, + { 1817134745u, 818368950u, 3321940838u }, + { 3493477402u, 1817134745u, 2854655037u } + }, + { + { 498682467u, 2928649385u, 811441367u }, + { 1777037472u, 498682467u, 479207863u }, + { 3058260025u, 1777037472u, 1528225099u } + }, + { + { 3893311647u, 3140922085u, 64039185u }, + { 82107183u, 3893311647u, 2655465224u }, + { 1674879036u, 82107183u, 1089381262u } + }, + { + { 28639152u, 3496041927u, 2231910770u }, + { 3174683233u, 28639152u, 2828785870u }, + { 3681140872u, 3174683233u, 3910194649u } + }, + { + { 1463826069u, 300842059u, 3313769518u }, + { 1799677538u, 1463826069u, 3174861078u }, + { 1882279394u, 1799677538u, 3509975160u } + }, + { + { 2092194020u, 184076987u, 2202401252u }, + { 3103629604u, 2092194020u, 3409560232u }, + { 4257445059u, 3103629604u, 2390202783u } + }, + { + { 812917091u, 2574011276u, 4168802395u }, + { 209817750u, 812917091u, 2974870628u }, + { 3238802184u, 209817750u, 3692836406u } + }, + { + { 477309738u, 3314523413u, 3442242150u }, + { 2755731404u, 477309738u, 2782713347u }, + { 1606221490u, 2755731404u, 1033463096u } + }, + { + { 2155469603u, 3326516116u, 3843369786u }, + { 288604458u, 2155469603u, 571673571u }, + { 1501677614u, 288604458u, 2928213494u } + }, + { + { 2082469029u, 749754403u, 3963963316u }, + { 2764859700u, 2082469029u, 3576428059u }, + { 2840894706u, 2764859700u, 1782279859u } + }, + { + { 3760163766u, 1041986082u, 1799196192u }, + { 1022129134u, 3760163766u, 1332558840u }, + { 276873446u, 1022129134u, 3979423632u } + }, + { + { 1021313167u, 1312544548u, 1716381787u }, + { 3037868518u, 1021313167u, 199085085u }, + { 2582787611u, 3037868518u, 3539882179u } + }, + { + { 2569413030u, 1631336015u, 2594942403u }, + { 1030618503u, 2569413030u, 3467650326u }, + { 1998739584u, 1030618503u, 3174552073u } + }, + { + { 2334639309u, 3114094203u, 601680947u }, + { 2110199318u, 2334639309u, 678342865u }, + { 1649523168u, 2110199318u, 2154948056u } + }, + { + { 563657176u, 191330473u, 1641595774u }, + { 780563537u, 563657176u, 3029522338u }, + { 2037330914u, 780563537u, 2084602709u } + }, + { + { 3414769923u, 1968799026u, 2238126504u }, + { 832866376u, 3414769923u, 3754780168u }, + { 2165145850u, 832866376u, 1594768331u } + }, + { + { 1646861218u, 2317984620u, 2301581548u }, + { 2672536210u, 1646861218u, 359763062u }, + { 2391283983u, 2672536210u, 1885870777u } + }, + { + { 841254072u, 3765813448u, 1635365181u }, + { 2013240130u, 841254072u, 605925849u }, + { 3743932305u, 2013240130u, 400681955u } + }, + { + { 1930213004u, 2072952279u, 3077694794u }, + { 3579956569u, 1930213004u, 2478539210u }, + { 1960229502u, 3579956569u, 1455652656u } + }, + { + { 1097613522u, 1784540933u, 1194440107u }, + { 321747515u, 1097613522u, 1225209584u }, + { 74521379u, 321747515u, 4288531000u } + }, + { + { 143812745u, 3254530816u, 3514348856u }, + { 769295000u, 143812745u, 2468210728u }, + { 1927161272u, 769295000u, 522705580u } + }, + { + { 2692035063u, 2596905012u, 1643240704u }, + { 1103432342u, 2692035063u, 1446182108u }, + { 4161111774u, 1103432342u, 3076435551u } + }, + { + { 2375319030u, 1391532370u, 3742334018u }, + { 1202100604u, 2375319030u, 4098434768u }, + { 2327872488u, 1202100604u, 1471526950u } + }, + { + { 4269164791u, 2795313144u, 2507855960u }, + { 4245372460u, 4269164791u, 4094914553u }, + { 3873219634u, 4245372460u, 1473695507u } + }, + { + { 513890845u, 1208902926u, 2870530442u }, + { 1984873167u, 513890845u, 1257532340u }, + { 1212627640u, 1984873167u, 2354363842u } + }, + { + { 1848364568u, 1552116673u, 3496528455u }, + { 4160778291u, 1848364568u, 141769900u }, + { 3611019106u, 4160778291u, 596424080u } + }, + { + { 364070020u, 3520039729u, 837362349u }, + { 2544671570u, 364070020u, 2188646679u }, + { 163978331u, 2544671570u, 672947816u } + }, + { + { 1192700714u, 3968150021u, 298357363u }, + { 635565666u, 1192700714u, 2589432341u }, + { 2548654227u, 635565666u, 3531570992u } + }, + { + { 2709640529u, 676525399u, 875361870u }, + { 1315499519u, 2709640529u, 3842690720u }, + { 3300994644u, 1315499519u, 2446760804u } + }, + { + { 2742149264u, 1410604392u, 3032350755u }, + { 3774935330u, 2742149264u, 597633965u }, + { 4085935803u, 3774935330u, 3952463556u } + }, + { + { 3878579563u, 845297523u, 1721916511u }, + { 2077922420u, 3878579563u, 3651360351u }, + { 2177255734u, 2077922420u, 3791239282u } + }, + { + { 1570315355u, 4252790045u, 3522351060u }, + { 2324624266u, 1570315355u, 3594939336u }, + { 1725087354u, 2324624266u, 1338343327u } + }, + { + { 2305761589u, 381933244u, 3663579047u }, + { 1355307047u, 2305761589u, 313617972u }, + { 992174375u, 1355307047u, 3881593435u } + }, + { + { 1667857811u, 1564715297u, 2263851601u }, + { 3791771273u, 1667857811u, 4196134923u }, + { 3347975047u, 3791771273u, 615040705u } + }, + { + { 4093947334u, 3454015638u, 2815567716u }, + { 4261953004u, 4093947334u, 3973733876u }, + { 2979573134u, 4261953004u, 3757047667u } + }, + { + { 250120061u, 570149551u, 1513430926u }, + { 3178644752u, 250120061u, 1701869032u }, + { 4172515680u, 3178644752u, 4213855850u } + }, + { + { 4158106802u, 3062358456u, 1815738463u }, + { 1379176112u, 4158106802u, 3926509890u }, + { 2842564878u, 1379176112u, 2852219546u } + }, + { + { 931848746u, 256263523u, 2633569246u }, + { 3284646837u, 931848746u, 2567084715u }, + { 415258465u, 3284646837u, 2017565947u } + }, + { + { 1648005210u, 1032291296u, 3987397422u }, + { 1831496020u, 1648005210u, 2829448427u }, + { 1821082272u, 1831496020u, 2917140265u } + }, + { + { 4161327077u, 489964129u, 3870847744u }, + { 1669447863u, 4161327077u, 4292947198u }, + { 1522417114u, 1669447863u, 2652286672u } + }, + { + { 1270934555u, 3136631324u, 505612043u }, + { 2981474723u, 1270934555u, 2528619024u }, + { 625182639u, 2981474723u, 1008985039u } + }, + { + { 280996820u, 143706137u, 3013099060u }, + { 1797675893u, 280996820u, 3743985508u }, + { 1123794455u, 1797675893u, 2460119169u } + }, + { + { 919218027u, 4154920441u, 1125672685u }, + { 3933041881u, 919218027u, 474242849u }, + { 564891116u, 3933041881u, 2263904321u } + }, + { + { 2920112852u, 1965329198u, 1177141043u }, + { 2135250851u, 2920112852u, 969184056u }, + { 296035385u, 2135250851u, 4267827987u } + }, + { + { 1481142942u, 4120754772u, 1088557292u }, + { 265491023u, 1481142942u, 2860005744u }, + { 301796252u, 265491023u, 1935975979u } + }, + { + { 2111859033u, 2813610100u, 1001476468u }, + { 73849832u, 2111859033u, 3980799998u }, + { 3330206241u, 73849832u, 1933943506u } + }, + { + { 1781286360u, 3661231931u, 3509383709u }, + { 2753158871u, 1781286360u, 3119883109u }, + { 3576525143u, 2753158871u, 551079002u } + }, + { + { 1185024844u, 587779104u, 1004942725u }, + { 3763632860u, 1185024844u, 947424568u }, + { 3811666068u, 3763632860u, 2352253462u } + }, + { + { 1310227170u, 218138208u, 3172947233u }, + { 766129426u, 1310227170u, 1808643264u }, + { 2226659371u, 766129426u, 3853798112u } + }, + { + { 2230902378u, 4243560874u, 2491962392u }, + { 3836629116u, 2230902378u, 3637515403u }, + { 2846140932u, 3836629116u, 3083355464u } + }, + { + { 999448569u, 1464488480u, 3344426626u }, + { 946166795u, 999448569u, 340856814u }, + { 3686999436u, 946166795u, 3231079441u } + }, + { + { 1226155368u, 3477563770u, 550006884u }, + { 2378667355u, 1226155368u, 1493409040u }, + { 260364836u, 2378667355u, 4133888397u } + }, + { + { 1277901832u, 310796286u, 2818511068u }, + { 3088910653u, 1277901832u, 3303406025u }, + { 2507911914u, 3088910653u, 3712928074u } + }, + { + { 481918378u, 339570348u, 1728801469u }, + { 1623163429u, 481918378u, 2209094694u }, + { 3146982514u, 1623163429u, 508445538u } + }, + { + { 3138921230u, 2381863183u, 1992357430u }, + { 1024510915u, 3138921230u, 2122851650u }, + { 1453455184u, 1024510915u, 941946604u } + }, + { + { 2465372719u, 1391015357u, 3328905025u }, + { 1821933605u, 2465372719u, 1343489680u }, + { 3648970313u, 1821933605u, 1816599716u } + }, + { + { 118634664u, 3358712512u, 2492792220u }, + { 348833376u, 118634664u, 2495544591u }, + { 3235582254u, 348833376u, 4043157504u } + }, + { + { 2303067090u, 3371139074u, 1967771133u }, + { 598630070u, 2303067090u, 1819012637u }, + { 2049250561u, 598630070u, 4093044926u } + }, + { + { 3035321857u, 3971176093u, 226779704u }, + { 3361614254u, 3035321857u, 2807125404u }, + { 326640887u, 3361614254u, 3147308542u } + }, + { + { 1774298149u, 4179629947u, 3145006948u }, + { 1688753503u, 1774298149u, 94869516u }, + { 2327946901u, 1688753503u, 2786835219u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM2Host[64][3][3] = { + { + { 0u, 1u, 0u }, + { 0u, 0u, 1u }, + { 4293573854u, 0u, 527612u } + }, + { + { 0u, 0u, 1u }, + { 4293573854u, 0u, 527612u }, + { 2706407399u, 4293573854u, 3497978192u } + }, + { + { 2706407399u, 4293573854u, 3497978192u }, + { 1431525864u, 2706407399u, 3281754271u }, + { 97673890u, 1431525864u, 1673476130u } + }, + { + { 3405842137u, 2680076935u, 893509979u }, + { 4035147174u, 3405842137u, 3280220074u }, + { 2623373296u, 4035147174u, 361718588u } + }, + { + { 818368950u, 3790774567u, 3542344109u }, + { 1817134745u, 818368950u, 3321940838u }, + { 3493477402u, 1817134745u, 2854655037u } + }, + { + { 498682467u, 2928649385u, 811441367u }, + { 1777037472u, 498682467u, 479207863u }, + { 3058260025u, 1777037472u, 1528225099u } + }, + { + { 3893311647u, 3140922085u, 64039185u }, + { 82107183u, 3893311647u, 2655465224u }, + { 1674879036u, 82107183u, 1089381262u } + }, + { + { 28639152u, 3496041927u, 2231910770u }, + { 3174683233u, 28639152u, 2828785870u }, + { 3681140872u, 3174683233u, 3910194649u } + }, + { + { 1463826069u, 300842059u, 3313769518u }, + { 1799677538u, 1463826069u, 3174861078u }, + { 1882279394u, 1799677538u, 3509975160u } + }, + { + { 2092194020u, 184076987u, 2202401252u }, + { 3103629604u, 2092194020u, 3409560232u }, + { 4257445059u, 3103629604u, 2390202783u } + }, + { + { 812917091u, 2574011276u, 4168802395u }, + { 209817750u, 812917091u, 2974870628u }, + { 3238802184u, 209817750u, 3692836406u } + }, + { + { 477309738u, 3314523413u, 3442242150u }, + { 2755731404u, 477309738u, 2782713347u }, + { 1606221490u, 2755731404u, 1033463096u } + }, + { + { 2155469603u, 3326516116u, 3843369786u }, + { 288604458u, 2155469603u, 571673571u }, + { 1501677614u, 288604458u, 2928213494u } + }, + { + { 2082469029u, 749754403u, 3963963316u }, + { 2764859700u, 2082469029u, 3576428059u }, + { 2840894706u, 2764859700u, 1782279859u } + }, + { + { 3760163766u, 1041986082u, 1799196192u }, + { 1022129134u, 3760163766u, 1332558840u }, + { 276873446u, 1022129134u, 3979423632u } + }, + { + { 1021313167u, 1312544548u, 1716381787u }, + { 3037868518u, 1021313167u, 199085085u }, + { 2582787611u, 3037868518u, 3539882179u } + }, + { + { 2569413030u, 1631336015u, 2594942403u }, + { 1030618503u, 2569413030u, 3467650326u }, + { 1998739584u, 1030618503u, 3174552073u } + }, + { + { 2334639309u, 3114094203u, 601680947u }, + { 2110199318u, 2334639309u, 678342865u }, + { 1649523168u, 2110199318u, 2154948056u } + }, + { + { 563657176u, 191330473u, 1641595774u }, + { 780563537u, 563657176u, 3029522338u }, + { 2037330914u, 780563537u, 2084602709u } + }, + { + { 3414769923u, 1968799026u, 2238126504u }, + { 832866376u, 3414769923u, 3754780168u }, + { 2165145850u, 832866376u, 1594768331u } + }, + { + { 1646861218u, 2317984620u, 2301581548u }, + { 2672536210u, 1646861218u, 359763062u }, + { 2391283983u, 2672536210u, 1885870777u } + }, + { + { 841254072u, 3765813448u, 1635365181u }, + { 2013240130u, 841254072u, 605925849u }, + { 3743932305u, 2013240130u, 400681955u } + }, + { + { 1930213004u, 2072952279u, 3077694794u }, + { 3579956569u, 1930213004u, 2478539210u }, + { 1960229502u, 3579956569u, 1455652656u } + }, + { + { 1097613522u, 1784540933u, 1194440107u }, + { 321747515u, 1097613522u, 1225209584u }, + { 74521379u, 321747515u, 4288531000u } + }, + { + { 143812745u, 3254530816u, 3514348856u }, + { 769295000u, 143812745u, 2468210728u }, + { 1927161272u, 769295000u, 522705580u } + }, + { + { 2692035063u, 2596905012u, 1643240704u }, + { 1103432342u, 2692035063u, 1446182108u }, + { 4161111774u, 1103432342u, 3076435551u } + }, + { + { 2375319030u, 1391532370u, 3742334018u }, + { 1202100604u, 2375319030u, 4098434768u }, + { 2327872488u, 1202100604u, 1471526950u } + }, + { + { 4269164791u, 2795313144u, 2507855960u }, + { 4245372460u, 4269164791u, 4094914553u }, + { 3873219634u, 4245372460u, 1473695507u } + }, + { + { 513890845u, 1208902926u, 2870530442u }, + { 1984873167u, 513890845u, 1257532340u }, + { 1212627640u, 1984873167u, 2354363842u } + }, + { + { 1848364568u, 1552116673u, 3496528455u }, + { 4160778291u, 1848364568u, 141769900u }, + { 3611019106u, 4160778291u, 596424080u } + }, + { + { 364070020u, 3520039729u, 837362349u }, + { 2544671570u, 364070020u, 2188646679u }, + { 163978331u, 2544671570u, 672947816u } + }, + { + { 1192700714u, 3968150021u, 298357363u }, + { 635565666u, 1192700714u, 2589432341u }, + { 2548654227u, 635565666u, 3531570992u } + }, + { + { 2709640529u, 676525399u, 875361870u }, + { 1315499519u, 2709640529u, 3842690720u }, + { 3300994644u, 1315499519u, 2446760804u } + }, + { + { 2742149264u, 1410604392u, 3032350755u }, + { 3774935330u, 2742149264u, 597633965u }, + { 4085935803u, 3774935330u, 3952463556u } + }, + { + { 3878579563u, 845297523u, 1721916511u }, + { 2077922420u, 3878579563u, 3651360351u }, + { 2177255734u, 2077922420u, 3791239282u } + }, + { + { 1570315355u, 4252790045u, 3522351060u }, + { 2324624266u, 1570315355u, 3594939336u }, + { 1725087354u, 2324624266u, 1338343327u } + }, + { + { 2305761589u, 381933244u, 3663579047u }, + { 1355307047u, 2305761589u, 313617972u }, + { 992174375u, 1355307047u, 3881593435u } + }, + { + { 1667857811u, 1564715297u, 2263851601u }, + { 3791771273u, 1667857811u, 4196134923u }, + { 3347975047u, 3791771273u, 615040705u } + }, + { + { 4093947334u, 3454015638u, 2815567716u }, + { 4261953004u, 4093947334u, 3973733876u }, + { 2979573134u, 4261953004u, 3757047667u } + }, + { + { 250120061u, 570149551u, 1513430926u }, + { 3178644752u, 250120061u, 1701869032u }, + { 4172515680u, 3178644752u, 4213855850u } + }, + { + { 4158106802u, 3062358456u, 1815738463u }, + { 1379176112u, 4158106802u, 3926509890u }, + { 2842564878u, 1379176112u, 2852219546u } + }, + { + { 931848746u, 256263523u, 2633569246u }, + { 3284646837u, 931848746u, 2567084715u }, + { 415258465u, 3284646837u, 2017565947u } + }, + { + { 1648005210u, 1032291296u, 3987397422u }, + { 1831496020u, 1648005210u, 2829448427u }, + { 1821082272u, 1831496020u, 2917140265u } + }, + { + { 4161327077u, 489964129u, 3870847744u }, + { 1669447863u, 4161327077u, 4292947198u }, + { 1522417114u, 1669447863u, 2652286672u } + }, + { + { 1270934555u, 3136631324u, 505612043u }, + { 2981474723u, 1270934555u, 2528619024u }, + { 625182639u, 2981474723u, 1008985039u } + }, + { + { 280996820u, 143706137u, 3013099060u }, + { 1797675893u, 280996820u, 3743985508u }, + { 1123794455u, 1797675893u, 2460119169u } + }, + { + { 919218027u, 4154920441u, 1125672685u }, + { 3933041881u, 919218027u, 474242849u }, + { 564891116u, 3933041881u, 2263904321u } + }, + { + { 2920112852u, 1965329198u, 1177141043u }, + { 2135250851u, 2920112852u, 969184056u }, + { 296035385u, 2135250851u, 4267827987u } + }, + { + { 1481142942u, 4120754772u, 1088557292u }, + { 265491023u, 1481142942u, 2860005744u }, + { 301796252u, 265491023u, 1935975979u } + }, + { + { 2111859033u, 2813610100u, 1001476468u }, + { 73849832u, 2111859033u, 3980799998u }, + { 3330206241u, 73849832u, 1933943506u } + }, + { + { 1781286360u, 3661231931u, 3509383709u }, + { 2753158871u, 1781286360u, 3119883109u }, + { 3576525143u, 2753158871u, 551079002u } + }, + { + { 1185024844u, 587779104u, 1004942725u }, + { 3763632860u, 1185024844u, 947424568u }, + { 3811666068u, 3763632860u, 2352253462u } + }, + { + { 1310227170u, 218138208u, 3172947233u }, + { 766129426u, 1310227170u, 1808643264u }, + { 2226659371u, 766129426u, 3853798112u } + }, + { + { 2230902378u, 4243560874u, 2491962392u }, + { 3836629116u, 2230902378u, 3637515403u }, + { 2846140932u, 3836629116u, 3083355464u } + }, + { + { 999448569u, 1464488480u, 3344426626u }, + { 946166795u, 999448569u, 340856814u }, + { 3686999436u, 946166795u, 3231079441u } + }, + { + { 1226155368u, 3477563770u, 550006884u }, + { 2378667355u, 1226155368u, 1493409040u }, + { 260364836u, 2378667355u, 4133888397u } + }, + { + { 1277901832u, 310796286u, 2818511068u }, + { 3088910653u, 1277901832u, 3303406025u }, + { 2507911914u, 3088910653u, 3712928074u } + }, + { + { 481918378u, 339570348u, 1728801469u }, + { 1623163429u, 481918378u, 2209094694u }, + { 3146982514u, 1623163429u, 508445538u } + }, + { + { 3138921230u, 2381863183u, 1992357430u }, + { 1024510915u, 3138921230u, 2122851650u }, + { 1453455184u, 1024510915u, 941946604u } + }, + { + { 2465372719u, 1391015357u, 3328905025u }, + { 1821933605u, 2465372719u, 1343489680u }, + { 3648970313u, 1821933605u, 1816599716u } + }, + { + { 118634664u, 3358712512u, 2492792220u }, + { 348833376u, 118634664u, 2495544591u }, + { 3235582254u, 348833376u, 4043157504u } + }, + { + { 2303067090u, 3371139074u, 1967771133u }, + { 598630070u, 2303067090u, 1819012637u }, + { 2049250561u, 598630070u, 4093044926u } + }, + { + { 3035321857u, 3971176093u, 226779704u }, + { 3361614254u, 3035321857u, 2807125404u }, + { 326640887u, 3361614254u, 3147308542u } + }, + { + { 1774298149u, 4179629947u, 3145006948u }, + { 1688753503u, 1774298149u, 94869516u }, + { 2327946901u, 1688753503u, 2786835219u } + } + }; + +#endif // ifndef __CUDACC_RTC__ + +/*Base matrices to power (2 to the power 76) to power 2 to power n + 1u, n the first array index, from 0..63*/ + +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM1SubSeq[56][3][3] = { + { + { 82758667u, 1871391091u, 4127413238u }, + { 3672831523u, 69195019u, 1871391091u }, + { 3672091415u, 3528743235u, 69195019u } + }, + { + { 3361372532u, 2329303404u, 99651939u }, + { 2008671965u, 2931758910u, 2329303404u }, + { 1113529483u, 2374097189u, 2931758910u } + }, + { + { 1831590873u, 1588259595u, 1314332382u }, + { 2385989343u, 2508077280u, 1588259595u }, + { 1787615788u, 661437137u, 2508077280u } + }, + { + { 2326052247u, 4183591379u, 4049009082u }, + { 2604529491u, 1453913233u, 4183591379u }, + { 2311925423u, 1805360390u, 1453913233u } + }, + { + { 3956367490u, 604461629u, 1257432102u }, + { 794711716u, 1155867175u, 604461629u }, + { 1777070788u, 429445904u, 1155867175u } + }, + { + { 1686241617u, 1257046062u, 1427609439u }, + { 490376081u, 387798431u, 1257046062u }, + { 235551485u, 1312672615u, 387798431u } + }, + { + { 2362447880u, 3445363024u, 3160262066u }, + { 2426867845u, 4194339866u, 3445363024u }, + { 1046144413u, 4177893681u, 4194339866u } + }, + { + { 4251175413u, 3559576374u, 3107663662u }, + { 697539134u, 1909472435u, 3559576374u }, + { 280754246u, 375835695u, 1909472435u } + }, + { + { 1099512970u, 712404985u, 1571467521u }, + { 546519870u, 1135109300u, 712404985u }, + { 3325312332u, 2352874613u, 1135109300u } + }, + { + { 1945425936u, 1653045514u, 381988982u }, + { 3733376326u, 414410025u, 1653045514u }, + { 1181583679u, 1185848176u, 414410025u } + }, + { + { 2526336124u, 3019211015u, 4215964965u }, + { 2683163472u, 4188191530u, 3019211015u }, + { 2964651598u, 293801056u, 4188191530u } + }, + { + { 1444052678u, 2253324417u, 39719589u }, + { 1880267534u, 2391992038u, 2253324417u }, + { 987740265u, 3691889508u, 2391992038u } + }, + { + { 166599066u, 2335494420u, 1232261118u }, + { 2227597731u, 2570600780u, 2335494420u }, + { 2700034538u, 3460843234u, 2570600780u } + }, + { + { 2511338360u, 1188954576u, 1251401239u }, + { 2511664974u, 292276982u, 1188954576u }, + { 697844082u, 3093661552u, 292276982u } + }, + { + { 3624650744u, 51993077u, 3540268009u }, + { 3252828938u, 3710319575u, 51993077u }, + { 2858628849u, 3910069381u, 3710319575u } + }, + { + { 655966702u, 754002362u, 1646581402u }, + { 1958331075u, 475572423u, 754002362u }, + { 3248619000u, 3228514800u, 475572423u } + }, + { + { 2760311307u, 4166372813u, 741596417u }, + { 2282679206u, 3090782630u, 4166372813u }, + { 3242468721u, 1628442374u, 3090782630u } + }, + { + { 4265279407u, 3532111852u, 1754687396u }, + { 500404765u, 2603727025u, 3532111852u }, + { 1428367254u, 3149485478u, 2603727025u } + }, + { + { 2873769531u, 2081104178u, 596284397u }, + { 4153800443u, 1261269623u, 2081104178u }, + { 3967600061u, 1830023157u, 1261269623u } + }, + { + { 278611533u, 2229285304u, 3443204327u }, + { 3110641420u, 77498444u, 2229285304u }, + { 3904070810u, 1070507239u, 77498444u } + }, + { + { 544639534u, 568528663u, 2177189807u }, + { 2475829068u, 121482268u, 568528663u }, + { 876978915u, 3116647617u, 121482268u } + }, + { + { 1547862823u, 2404658587u, 4191448009u }, + { 2158188804u, 2976916793u, 2404658587u }, + { 168571747u, 1691884706u, 2976916793u } + }, + { + { 3208213311u, 4212638780u, 3235157352u }, + { 671148556u, 2951207765u, 4212638780u }, + { 2075145516u, 2395485231u, 2951207765u } + }, + { + { 4080517315u, 2133433101u, 4043998180u }, + { 2044221845u, 867670560u, 2133433101u }, + { 834432416u, 3613001199u, 867670560u } + }, + { + { 4102885735u, 1319434267u, 2678775073u }, + { 740092580u, 607380970u, 1319434267u }, + { 2198271844u, 2610193258u, 607380970u } + }, + { + { 1165218048u, 1317690360u, 1189150958u }, + { 399240205u, 2507168618u, 1317690360u }, + { 2988334517u, 2687593413u, 2507168618u } + }, + { + { 1028861702u, 4082006648u, 338232527u }, + { 1888486946u, 1842080991u, 4082006648u }, + { 3903826366u, 3109935091u, 1842080991u } + }, + { + { 614134826u, 2261996505u, 2888080641u }, + { 710199359u, 2773979788u, 2261996505u }, + { 1144301620u, 2554371815u, 2773979788u } + }, + { + { 4056173823u, 1285620078u, 357420018u }, + { 2423072612u, 2309408315u, 1285620078u }, + { 1533175115u, 2760088020u, 2309408315u } + }, + { + { 4264130267u, 815015434u, 3142242173u }, + { 180649975u, 2500813569u, 815015434u }, + { 3378723563u, 829683767u, 2500813569u } + }, + { + { 4174387531u, 1030729435u, 2812778314u }, + { 1752988797u, 4044178729u, 1030729435u }, + { 467969301u, 554748104u, 4044178729u } + }, + { + { 1348429235u, 2928743274u, 3776082629u }, + { 3607529209u, 3069812185u, 2928743274u }, + { 2542432347u, 3208181168u, 3069812185u } + }, + { + { 4064845753u, 668285756u, 3816217625u }, + { 3713143233u, 1380634204u, 668285756u }, + { 3533700508u, 1192551435u, 1380634204u } + }, + { + { 1515684518u, 1706771705u, 728123349u }, + { 3174850469u, 2057456462u, 1706771705u }, + { 3410402985u, 2897339640u, 2057456462u } + }, + { + { 3082272717u, 531091457u, 1390161328u }, + { 3895139973u, 2171402857u, 531091457u }, + { 4030688141u, 3049703400u, 2171402857u } + }, + { + { 1241147206u, 3193892819u, 1244284192u }, + { 65180262u, 4065669017u, 3193892819u }, + { 1484817937u, 3661081858u, 4065669017u } + }, + { + { 1438760812u, 3491341751u, 3414470157u }, + { 2805337292u, 272266053u, 3491341751u }, + { 824109230u, 3202556526u, 272266053u } + }, + { + { 135412706u, 3627115412u, 2345042216u }, + { 1565169824u, 2166856449u, 3627115412u }, + { 1026946745u, 3467845248u, 2166856449u } + }, + { + { 1889419951u, 3256876154u, 1240505488u }, + { 1254783743u, 989966800u, 3256876154u }, + { 1995297400u, 3692472918u, 989966800u } + }, + { + { 3206226875u, 285700890u, 496017472u }, + { 2515316194u, 2129675196u, 285700890u }, + { 1863853990u, 2673457552u, 2129675196u } + }, + { + { 4163770641u, 255160418u, 772100749u }, + { 1987092456u, 3237660221u, 255160418u }, + { 1394381051u, 4216039401u, 3237660221u } + }, + { + { 2133915627u, 2713747584u, 627765421u }, + { 2300605925u, 35690583u, 2713747584u }, + { 2918902946u, 2638220304u, 35690583u } + }, + { + { 2587549655u, 998684270u, 4292130625u }, + { 1791772791u, 2820705344u, 998684270u }, + { 124590158u, 3831143549u, 2820705344u } + }, + { + { 978482299u, 3200877282u, 497605289u }, + { 3717741518u, 3737164414u, 3200877282u }, + { 4046686626u, 861393946u, 3737164414u } + }, + { + { 2665561897u, 300934584u, 3179822945u }, + { 893043137u, 2031413512u, 300934584u }, + { 3806926970u, 2413249929u, 2031413512u } + }, + { + { 1417581911u, 3071835354u, 2575196237u }, + { 4101127251u, 1375339216u, 3071835354u }, + { 847617977u, 3632503316u, 1375339216u } + }, + { + { 2747488994u, 3296604805u, 898095468u }, + { 1742777145u, 219265369u, 3296604805u }, + { 823714885u, 667779292u, 219265369u } + }, + { + { 2640209692u, 3040506537u, 3626115220u }, + { 161827078u, 852668118u, 3040506537u }, + { 3856381322u, 3360242076u, 852668118u } + }, + { + { 3734246393u, 4151553160u, 4177051283u }, + { 266522866u, 1731798531u, 4151553160u }, + { 632196679u, 3864297722u, 1731798531u } + }, + { + { 1694175127u, 1087914338u, 2384195794u }, + { 2764925057u, 505782858u, 1087914338u }, + { 3235634082u, 807915248u, 505782858u } + }, + { + { 2402749950u, 2353776151u, 75909174u }, + { 890570951u, 1752665661u, 2353776151u }, + { 3120241607u, 3862435696u, 1752665661u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM1SubSeqHost[56][3][3] = { + { + { 82758667u, 1871391091u, 4127413238u }, + { 3672831523u, 69195019u, 1871391091u }, + { 3672091415u, 3528743235u, 69195019u } + }, + { + { 3361372532u, 2329303404u, 99651939u }, + { 2008671965u, 2931758910u, 2329303404u }, + { 1113529483u, 2374097189u, 2931758910u } + }, + { + { 1831590873u, 1588259595u, 1314332382u }, + { 2385989343u, 2508077280u, 1588259595u }, + { 1787615788u, 661437137u, 2508077280u } + }, + { + { 2326052247u, 4183591379u, 4049009082u }, + { 2604529491u, 1453913233u, 4183591379u }, + { 2311925423u, 1805360390u, 1453913233u } + }, + { + { 3956367490u, 604461629u, 1257432102u }, + { 794711716u, 1155867175u, 604461629u }, + { 1777070788u, 429445904u, 1155867175u } + }, + { + { 1686241617u, 1257046062u, 1427609439u }, + { 490376081u, 387798431u, 1257046062u }, + { 235551485u, 1312672615u, 387798431u } + }, + { + { 2362447880u, 3445363024u, 3160262066u }, + { 2426867845u, 4194339866u, 3445363024u }, + { 1046144413u, 4177893681u, 4194339866u } + }, + { + { 4251175413u, 3559576374u, 3107663662u }, + { 697539134u, 1909472435u, 3559576374u }, + { 280754246u, 375835695u, 1909472435u } + }, + { + { 1099512970u, 712404985u, 1571467521u }, + { 546519870u, 1135109300u, 712404985u }, + { 3325312332u, 2352874613u, 1135109300u } + }, + { + { 1945425936u, 1653045514u, 381988982u }, + { 3733376326u, 414410025u, 1653045514u }, + { 1181583679u, 1185848176u, 414410025u } + }, + { + { 2526336124u, 3019211015u, 4215964965u }, + { 2683163472u, 4188191530u, 3019211015u }, + { 2964651598u, 293801056u, 4188191530u } + }, + { + { 1444052678u, 2253324417u, 39719589u }, + { 1880267534u, 2391992038u, 2253324417u }, + { 987740265u, 3691889508u, 2391992038u } + }, + { + { 166599066u, 2335494420u, 1232261118u }, + { 2227597731u, 2570600780u, 2335494420u }, + { 2700034538u, 3460843234u, 2570600780u } + }, + { + { 2511338360u, 1188954576u, 1251401239u }, + { 2511664974u, 292276982u, 1188954576u }, + { 697844082u, 3093661552u, 292276982u } + }, + { + { 3624650744u, 51993077u, 3540268009u }, + { 3252828938u, 3710319575u, 51993077u }, + { 2858628849u, 3910069381u, 3710319575u } + }, + { + { 655966702u, 754002362u, 1646581402u }, + { 1958331075u, 475572423u, 754002362u }, + { 3248619000u, 3228514800u, 475572423u } + }, + { + { 2760311307u, 4166372813u, 741596417u }, + { 2282679206u, 3090782630u, 4166372813u }, + { 3242468721u, 1628442374u, 3090782630u } + }, + { + { 4265279407u, 3532111852u, 1754687396u }, + { 500404765u, 2603727025u, 3532111852u }, + { 1428367254u, 3149485478u, 2603727025u } + }, + { + { 2873769531u, 2081104178u, 596284397u }, + { 4153800443u, 1261269623u, 2081104178u }, + { 3967600061u, 1830023157u, 1261269623u } + }, + { + { 278611533u, 2229285304u, 3443204327u }, + { 3110641420u, 77498444u, 2229285304u }, + { 3904070810u, 1070507239u, 77498444u } + }, + { + { 544639534u, 568528663u, 2177189807u }, + { 2475829068u, 121482268u, 568528663u }, + { 876978915u, 3116647617u, 121482268u } + }, + { + { 1547862823u, 2404658587u, 4191448009u }, + { 2158188804u, 2976916793u, 2404658587u }, + { 168571747u, 1691884706u, 2976916793u } + }, + { + { 3208213311u, 4212638780u, 3235157352u }, + { 671148556u, 2951207765u, 4212638780u }, + { 2075145516u, 2395485231u, 2951207765u } + }, + { + { 4080517315u, 2133433101u, 4043998180u }, + { 2044221845u, 867670560u, 2133433101u }, + { 834432416u, 3613001199u, 867670560u } + }, + { + { 4102885735u, 1319434267u, 2678775073u }, + { 740092580u, 607380970u, 1319434267u }, + { 2198271844u, 2610193258u, 607380970u } + }, + { + { 1165218048u, 1317690360u, 1189150958u }, + { 399240205u, 2507168618u, 1317690360u }, + { 2988334517u, 2687593413u, 2507168618u } + }, + { + { 1028861702u, 4082006648u, 338232527u }, + { 1888486946u, 1842080991u, 4082006648u }, + { 3903826366u, 3109935091u, 1842080991u } + }, + { + { 614134826u, 2261996505u, 2888080641u }, + { 710199359u, 2773979788u, 2261996505u }, + { 1144301620u, 2554371815u, 2773979788u } + }, + { + { 4056173823u, 1285620078u, 357420018u }, + { 2423072612u, 2309408315u, 1285620078u }, + { 1533175115u, 2760088020u, 2309408315u } + }, + { + { 4264130267u, 815015434u, 3142242173u }, + { 180649975u, 2500813569u, 815015434u }, + { 3378723563u, 829683767u, 2500813569u } + }, + { + { 4174387531u, 1030729435u, 2812778314u }, + { 1752988797u, 4044178729u, 1030729435u }, + { 467969301u, 554748104u, 4044178729u } + }, + { + { 1348429235u, 2928743274u, 3776082629u }, + { 3607529209u, 3069812185u, 2928743274u }, + { 2542432347u, 3208181168u, 3069812185u } + }, + { + { 4064845753u, 668285756u, 3816217625u }, + { 3713143233u, 1380634204u, 668285756u }, + { 3533700508u, 1192551435u, 1380634204u } + }, + { + { 1515684518u, 1706771705u, 728123349u }, + { 3174850469u, 2057456462u, 1706771705u }, + { 3410402985u, 2897339640u, 2057456462u } + }, + { + { 3082272717u, 531091457u, 1390161328u }, + { 3895139973u, 2171402857u, 531091457u }, + { 4030688141u, 3049703400u, 2171402857u } + }, + { + { 1241147206u, 3193892819u, 1244284192u }, + { 65180262u, 4065669017u, 3193892819u }, + { 1484817937u, 3661081858u, 4065669017u } + }, + { + { 1438760812u, 3491341751u, 3414470157u }, + { 2805337292u, 272266053u, 3491341751u }, + { 824109230u, 3202556526u, 272266053u } + }, + { + { 135412706u, 3627115412u, 2345042216u }, + { 1565169824u, 2166856449u, 3627115412u }, + { 1026946745u, 3467845248u, 2166856449u } + }, + { + { 1889419951u, 3256876154u, 1240505488u }, + { 1254783743u, 989966800u, 3256876154u }, + { 1995297400u, 3692472918u, 989966800u } + }, + { + { 3206226875u, 285700890u, 496017472u }, + { 2515316194u, 2129675196u, 285700890u }, + { 1863853990u, 2673457552u, 2129675196u } + }, + { + { 4163770641u, 255160418u, 772100749u }, + { 1987092456u, 3237660221u, 255160418u }, + { 1394381051u, 4216039401u, 3237660221u } + }, + { + { 2133915627u, 2713747584u, 627765421u }, + { 2300605925u, 35690583u, 2713747584u }, + { 2918902946u, 2638220304u, 35690583u } + }, + { + { 2587549655u, 998684270u, 4292130625u }, + { 1791772791u, 2820705344u, 998684270u }, + { 124590158u, 3831143549u, 2820705344u } + }, + { + { 978482299u, 3200877282u, 497605289u }, + { 3717741518u, 3737164414u, 3200877282u }, + { 4046686626u, 861393946u, 3737164414u } + }, + { + { 2665561897u, 300934584u, 3179822945u }, + { 893043137u, 2031413512u, 300934584u }, + { 3806926970u, 2413249929u, 2031413512u } + }, + { + { 1417581911u, 3071835354u, 2575196237u }, + { 4101127251u, 1375339216u, 3071835354u }, + { 847617977u, 3632503316u, 1375339216u } + }, + { + { 2747488994u, 3296604805u, 898095468u }, + { 1742777145u, 219265369u, 3296604805u }, + { 823714885u, 667779292u, 219265369u } + }, + { + { 2640209692u, 3040506537u, 3626115220u }, + { 161827078u, 852668118u, 3040506537u }, + { 3856381322u, 3360242076u, 852668118u } + }, + { + { 3734246393u, 4151553160u, 4177051283u }, + { 266522866u, 1731798531u, 4151553160u }, + { 632196679u, 3864297722u, 1731798531u } + }, + { + { 1694175127u, 1087914338u, 2384195794u }, + { 2764925057u, 505782858u, 1087914338u }, + { 3235634082u, 807915248u, 505782858u } + }, + { + { 2402749950u, 2353776151u, 75909174u }, + { 890570951u, 1752665661u, 2353776151u }, + { 3120241607u, 3862435696u, 1752665661u } + } + }; +#endif // #ifndef __CUDACC_RTC__ + +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM2SubSeq[56][3][3] = { + { + { 1511326704u, 3759209742u, 1610795712u }, + { 4292754251u, 1511326704u, 3889917532u }, + { 3859662829u, 4292754251u, 3708466080u } + }, + { + { 972103006u, 964807713u, 878035866u }, + { 4248550197u, 972103006u, 1926628839u }, + { 1448629089u, 4248550197u, 3196114006u } + }, + { + { 3497384788u, 3174249442u, 3182508868u }, + { 3864816447u, 3497384788u, 3038399593u }, + { 2546884738u, 3864816447u, 2980208068u } + }, + { + { 1776335558u, 1189944887u, 4095757548u }, + { 3813600746u, 1776335558u, 789475914u }, + { 4119698302u, 3813600746u, 2145357457u } + }, + { + { 4022832294u, 4130146837u, 1942923647u }, + { 1675130777u, 4022832294u, 916677004u }, + { 4089786548u, 1675130777u, 116540512u } + }, + { + { 165639584u, 1205513289u, 2037453462u }, + { 1444587280u, 165639584u, 161923120u }, + { 2617085459u, 1444587280u, 2006913311u } + }, + { + { 3458099202u, 3062421748u, 4052486999u }, + { 1064270720u, 3458099202u, 230768332u }, + { 4056228301u, 1064270720u, 2219267779u } + }, + { + { 296275263u, 3452455838u, 2081462173u }, + { 1789143993u, 296275263u, 3463234943u }, + { 2097389984u, 1789143993u, 3447191459u } + }, + { + { 2828288883u, 3866690251u, 410553827u }, + { 1587005542u, 2828288883u, 1469478670u }, + { 2766486018u, 1587005542u, 2627363449u } + }, + { + { 3288027530u, 412403981u, 2458742268u }, + { 4267121909u, 3288027530u, 138566505u }, + { 420803572u, 4267121909u, 4094554844u } + }, + { + { 3844599430u, 2430152838u, 3283485436u }, + { 2486244684u, 3844599430u, 4252427633u }, + { 3560842909u, 2486244684u, 3960267499u } + }, + { + { 67933059u, 1294996291u, 2657888382u }, + { 513233413u, 67933059u, 1379805031u }, + { 44564058u, 513233413u, 86971645u } + }, + { + { 2732588524u, 1866530072u, 818237694u }, + { 2540507736u, 2732588524u, 3257104212u }, + { 1164400003u, 2540507736u, 1124501551u } + }, + { + { 4199239222u, 3155848463u, 2121388468u }, + { 1135554501u, 4199239222u, 2056492193u }, + { 3251740389u, 1135554501u, 2343537248u } + }, + { + { 550710036u, 500329021u, 1075236085u }, + { 356444753u, 550710036u, 1634965500u }, + { 58733535u, 356444753u, 1261552815u } + }, + { + { 708689546u, 419139045u, 2012018174u }, + { 706488081u, 708689546u, 1113760995u }, + { 585555005u, 706488081u, 76092226u } + }, + { + { 1293182265u, 3168473803u, 366230236u }, + { 3319068849u, 1293182265u, 1085259665u }, + { 1675229290u, 3319068849u, 3912300371u } + }, + { + { 3186089068u, 4188864734u, 1211781402u }, + { 756122322u, 3186089068u, 578262892u }, + { 2518961174u, 756122322u, 1658665581u } + }, + { + { 1347291439u, 2050427676u, 736113023u }, + { 4102191254u, 1347291439u, 878627148u }, + { 1293500383u, 4102191254u, 745646810u } + }, + { + { 4196897331u, 3436564969u, 1900167098u }, + { 3108887846u, 4196897331u, 2697923227u }, + { 1405263476u, 3108887846u, 314631094u } + }, + { + { 958383622u, 3694638688u, 1150087061u }, + { 3770009830u, 958383622u, 793326651u }, + { 533700213u, 3770009830u, 1513734026u } + }, + { + { 4119603367u, 3479396923u, 3534176399u }, + { 3765397477u, 4119603367u, 1458031003u }, + { 3380901602u, 3765397477u, 2684083587u } + }, + { + { 980937351u, 2094378936u, 448446028u }, + { 1421333909u, 980937351u, 3405683645u }, + { 323724368u, 1421333909u, 338680738u } + }, + { + { 2942968846u, 4293637338u, 3549906544u }, + { 527851489u, 2942968846u, 3852871282u }, + { 4209198933u, 527851489u, 1091268872u } + }, + { + { 1975983015u, 2092556693u, 611187071u }, + { 3982652344u, 1975983015u, 3001736262u }, + { 2055073597u, 3982652344u, 1875181995u } + }, + { + { 2970221269u, 880904779u, 2447465272u }, + { 2888742196u, 2970221269u, 3521651749u }, + { 3019977656u, 2888742196u, 2712717326u } + }, + { + { 419134859u, 2976059897u, 747864206u }, + { 4101695717u, 419134859u, 4264593116u }, + { 2657991148u, 4101695717u, 2542621682u } + }, + { + { 4043135299u, 1612983166u, 1149778656u }, + { 1267010518u, 4043135299u, 3496325546u }, + { 3094232897u, 1267010518u, 2949176293u } + }, + { + { 3949395794u, 1774568686u, 2123036003u }, + { 2182983404u, 3949395794u, 2355671350u }, + { 2820933455u, 2182983404u, 513963325u } + }, + { + { 3046911698u, 2576744453u, 2492729814u }, + { 4277866093u, 3046911698u, 3146977604u }, + { 2249371766u, 4277866093u, 3622293976u } + }, + { + { 1391529818u, 423458502u, 2587125255u }, + { 3536237833u, 1391529818u, 985347517u }, + { 157623850u, 3536237833u, 1015566287u } + }, + { + { 48329260u, 2599277669u, 821961664u }, + { 902187690u, 48329260u, 1716556555u }, + { 4019658974u, 902187690u, 950730510u } + }, + { + { 1318489562u, 1530977112u, 3713577419u }, + { 4270158447u, 1318489562u, 1654940598u }, + { 2679964938u, 4270158447u, 1337075195u } + }, + { + { 770600793u, 3249576224u, 3578552768u }, + { 2710443459u, 770600793u, 2990852339u }, + { 3098163705u, 2710443459u, 522138188u } + }, + { + { 2803285489u, 1922250286u, 3164022812u }, + { 477609731u, 2803285489u, 2140252218u }, + { 2252852611u, 477609731u, 3058519788u } + }, + { + { 208329741u, 3633562083u, 3548346666u }, + { 3892091460u, 208329741u, 516833304u }, + { 3440632377u, 3892091460u, 1638833719u } + }, + { + { 1816075033u, 3570111203u, 959489356u }, + { 3482051486u, 1816075033u, 861657108u }, + { 3119495098u, 3482051486u, 2576849579u } + }, + { + { 4240216888u, 2891584407u, 2102314945u }, + { 4064489450u, 4240216888u, 1427441010u }, + { 2441164913u, 4064489450u, 3558527186u } + }, + { + { 2918371295u, 65155283u, 3469357011u }, + { 3579773554u, 2918371295u, 3494391959u }, + { 3266584309u, 3579773554u, 3837485479u } + }, + { + { 2959420453u, 1365016881u, 4082486022u }, + { 236489012u, 2959420453u, 3802558529u }, + { 2687043642u, 236489012u, 2547086826u } + }, + { + { 4185325422u, 2762854843u, 3200044912u }, + { 3664909559u, 4185325422u, 3543921700u }, + { 4240262918u, 3664909559u, 2853212443u } + }, + { + { 2618500928u, 4237264351u, 1470046497u }, + { 1893990098u, 2618500928u, 2982567031u }, + { 3017062825u, 1893990098u, 3195556801u } + }, + { + { 1868464655u, 3407681142u, 1652841784u }, + { 1678569574u, 1868464655u, 4162480901u }, + { 1477016185u, 1678569574u, 4145063890u } + }, + { + { 792188465u, 4251338402u, 2219407026u }, + { 3840340879u, 792188465u, 3493367465u }, + { 2979958414u, 3840340879u, 2338974139u } + }, + { + { 478845700u, 2378167062u, 882114621u }, + { 1674533845u, 478845700u, 3572905305u }, + { 3571222880u, 1674533845u, 1242316901u } + }, + { + { 2636090868u, 1972761498u, 71690719u }, + { 1228103463u, 2636090868u, 1280685025u }, + { 3741735502u, 1228103463u, 994061750u } + }, + { + { 1156725261u, 1100755307u, 221922891u }, + { 2892200461u, 1156725261u, 1505716533u }, + { 2287613563u, 2892200461u, 3689457190u } + }, + { + { 1387244644u, 3135090808u, 1243609165u }, + { 1724967466u, 1387244644u, 3296353235u }, + { 1064364031u, 1724967466u, 2107521044u } + }, + { + { 2822471992u, 2034317853u, 2071407475u }, + { 170903528u, 2822471992u, 1322162887u }, + { 2524982332u, 170903528u, 2656231333u } + }, + { + { 3653936868u, 3893194049u, 2484299328u }, + { 1313746234u, 3653936868u, 1705346273u }, + { 1397638018u, 1313746234u, 4015529545u } + }, + { + { 4129760842u, 1671665759u, 1677834656u }, + { 3200005334u, 4129760842u, 3486207172u }, + { 2850728736u, 3200005334u, 3076201597u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM2SubSeqHost[56][3][3] = { + { + { 1511326704u, 3759209742u, 1610795712u }, + { 4292754251u, 1511326704u, 3889917532u }, + { 3859662829u, 4292754251u, 3708466080u } + }, + { + { 972103006u, 964807713u, 878035866u }, + { 4248550197u, 972103006u, 1926628839u }, + { 1448629089u, 4248550197u, 3196114006u } + }, + { + { 3497384788u, 3174249442u, 3182508868u }, + { 3864816447u, 3497384788u, 3038399593u }, + { 2546884738u, 3864816447u, 2980208068u } + }, + { + { 1776335558u, 1189944887u, 4095757548u }, + { 3813600746u, 1776335558u, 789475914u }, + { 4119698302u, 3813600746u, 2145357457u } + }, + { + { 4022832294u, 4130146837u, 1942923647u }, + { 1675130777u, 4022832294u, 916677004u }, + { 4089786548u, 1675130777u, 116540512u } + }, + { + { 165639584u, 1205513289u, 2037453462u }, + { 1444587280u, 165639584u, 161923120u }, + { 2617085459u, 1444587280u, 2006913311u } + }, + { + { 3458099202u, 3062421748u, 4052486999u }, + { 1064270720u, 3458099202u, 230768332u }, + { 4056228301u, 1064270720u, 2219267779u } + }, + { + { 296275263u, 3452455838u, 2081462173u }, + { 1789143993u, 296275263u, 3463234943u }, + { 2097389984u, 1789143993u, 3447191459u } + }, + { + { 2828288883u, 3866690251u, 410553827u }, + { 1587005542u, 2828288883u, 1469478670u }, + { 2766486018u, 1587005542u, 2627363449u } + }, + { + { 3288027530u, 412403981u, 2458742268u }, + { 4267121909u, 3288027530u, 138566505u }, + { 420803572u, 4267121909u, 4094554844u } + }, + { + { 3844599430u, 2430152838u, 3283485436u }, + { 2486244684u, 3844599430u, 4252427633u }, + { 3560842909u, 2486244684u, 3960267499u } + }, + { + { 67933059u, 1294996291u, 2657888382u }, + { 513233413u, 67933059u, 1379805031u }, + { 44564058u, 513233413u, 86971645u } + }, + { + { 2732588524u, 1866530072u, 818237694u }, + { 2540507736u, 2732588524u, 3257104212u }, + { 1164400003u, 2540507736u, 1124501551u } + }, + { + { 4199239222u, 3155848463u, 2121388468u }, + { 1135554501u, 4199239222u, 2056492193u }, + { 3251740389u, 1135554501u, 2343537248u } + }, + { + { 550710036u, 500329021u, 1075236085u }, + { 356444753u, 550710036u, 1634965500u }, + { 58733535u, 356444753u, 1261552815u } + }, + { + { 708689546u, 419139045u, 2012018174u }, + { 706488081u, 708689546u, 1113760995u }, + { 585555005u, 706488081u, 76092226u } + }, + { + { 1293182265u, 3168473803u, 366230236u }, + { 3319068849u, 1293182265u, 1085259665u }, + { 1675229290u, 3319068849u, 3912300371u } + }, + { + { 3186089068u, 4188864734u, 1211781402u }, + { 756122322u, 3186089068u, 578262892u }, + { 2518961174u, 756122322u, 1658665581u } + }, + { + { 1347291439u, 2050427676u, 736113023u }, + { 4102191254u, 1347291439u, 878627148u }, + { 1293500383u, 4102191254u, 745646810u } + }, + { + { 4196897331u, 3436564969u, 1900167098u }, + { 3108887846u, 4196897331u, 2697923227u }, + { 1405263476u, 3108887846u, 314631094u } + }, + { + { 958383622u, 3694638688u, 1150087061u }, + { 3770009830u, 958383622u, 793326651u }, + { 533700213u, 3770009830u, 1513734026u } + }, + { + { 4119603367u, 3479396923u, 3534176399u }, + { 3765397477u, 4119603367u, 1458031003u }, + { 3380901602u, 3765397477u, 2684083587u } + }, + { + { 980937351u, 2094378936u, 448446028u }, + { 1421333909u, 980937351u, 3405683645u }, + { 323724368u, 1421333909u, 338680738u } + }, + { + { 2942968846u, 4293637338u, 3549906544u }, + { 527851489u, 2942968846u, 3852871282u }, + { 4209198933u, 527851489u, 1091268872u } + }, + { + { 1975983015u, 2092556693u, 611187071u }, + { 3982652344u, 1975983015u, 3001736262u }, + { 2055073597u, 3982652344u, 1875181995u } + }, + { + { 2970221269u, 880904779u, 2447465272u }, + { 2888742196u, 2970221269u, 3521651749u }, + { 3019977656u, 2888742196u, 2712717326u } + }, + { + { 419134859u, 2976059897u, 747864206u }, + { 4101695717u, 419134859u, 4264593116u }, + { 2657991148u, 4101695717u, 2542621682u } + }, + { + { 4043135299u, 1612983166u, 1149778656u }, + { 1267010518u, 4043135299u, 3496325546u }, + { 3094232897u, 1267010518u, 2949176293u } + }, + { + { 3949395794u, 1774568686u, 2123036003u }, + { 2182983404u, 3949395794u, 2355671350u }, + { 2820933455u, 2182983404u, 513963325u } + }, + { + { 3046911698u, 2576744453u, 2492729814u }, + { 4277866093u, 3046911698u, 3146977604u }, + { 2249371766u, 4277866093u, 3622293976u } + }, + { + { 1391529818u, 423458502u, 2587125255u }, + { 3536237833u, 1391529818u, 985347517u }, + { 157623850u, 3536237833u, 1015566287u } + }, + { + { 48329260u, 2599277669u, 821961664u }, + { 902187690u, 48329260u, 1716556555u }, + { 4019658974u, 902187690u, 950730510u } + }, + { + { 1318489562u, 1530977112u, 3713577419u }, + { 4270158447u, 1318489562u, 1654940598u }, + { 2679964938u, 4270158447u, 1337075195u } + }, + { + { 770600793u, 3249576224u, 3578552768u }, + { 2710443459u, 770600793u, 2990852339u }, + { 3098163705u, 2710443459u, 522138188u } + }, + { + { 2803285489u, 1922250286u, 3164022812u }, + { 477609731u, 2803285489u, 2140252218u }, + { 2252852611u, 477609731u, 3058519788u } + }, + { + { 208329741u, 3633562083u, 3548346666u }, + { 3892091460u, 208329741u, 516833304u }, + { 3440632377u, 3892091460u, 1638833719u } + }, + { + { 1816075033u, 3570111203u, 959489356u }, + { 3482051486u, 1816075033u, 861657108u }, + { 3119495098u, 3482051486u, 2576849579u } + }, + { + { 4240216888u, 2891584407u, 2102314945u }, + { 4064489450u, 4240216888u, 1427441010u }, + { 2441164913u, 4064489450u, 3558527186u } + }, + { + { 2918371295u, 65155283u, 3469357011u }, + { 3579773554u, 2918371295u, 3494391959u }, + { 3266584309u, 3579773554u, 3837485479u } + }, + { + { 2959420453u, 1365016881u, 4082486022u }, + { 236489012u, 2959420453u, 3802558529u }, + { 2687043642u, 236489012u, 2547086826u } + }, + { + { 4185325422u, 2762854843u, 3200044912u }, + { 3664909559u, 4185325422u, 3543921700u }, + { 4240262918u, 3664909559u, 2853212443u } + }, + { + { 2618500928u, 4237264351u, 1470046497u }, + { 1893990098u, 2618500928u, 2982567031u }, + { 3017062825u, 1893990098u, 3195556801u } + }, + { + { 1868464655u, 3407681142u, 1652841784u }, + { 1678569574u, 1868464655u, 4162480901u }, + { 1477016185u, 1678569574u, 4145063890u } + }, + { + { 792188465u, 4251338402u, 2219407026u }, + { 3840340879u, 792188465u, 3493367465u }, + { 2979958414u, 3840340879u, 2338974139u } + }, + { + { 478845700u, 2378167062u, 882114621u }, + { 1674533845u, 478845700u, 3572905305u }, + { 3571222880u, 1674533845u, 1242316901u } + }, + { + { 2636090868u, 1972761498u, 71690719u }, + { 1228103463u, 2636090868u, 1280685025u }, + { 3741735502u, 1228103463u, 994061750u } + }, + { + { 1156725261u, 1100755307u, 221922891u }, + { 2892200461u, 1156725261u, 1505716533u }, + { 2287613563u, 2892200461u, 3689457190u } + }, + { + { 1387244644u, 3135090808u, 1243609165u }, + { 1724967466u, 1387244644u, 3296353235u }, + { 1064364031u, 1724967466u, 2107521044u } + }, + { + { 2822471992u, 2034317853u, 2071407475u }, + { 170903528u, 2822471992u, 1322162887u }, + { 2524982332u, 170903528u, 2656231333u } + }, + { + { 3653936868u, 3893194049u, 2484299328u }, + { 1313746234u, 3653936868u, 1705346273u }, + { 1397638018u, 1313746234u, 4015529545u } + }, + { + { 4129760842u, 1671665759u, 1677834656u }, + { 3200005334u, 4129760842u, 3486207172u }, + { 2850728736u, 3200005334u, 3076201597u } + } + }; +#endif // #ifndef __CUDACC_RTC__ + /*Base matrices to power (2 to the power 127) to power 2 to power n+1u, n the first array index, from 0..63*/ + +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM1Seq[64][3][3] = { + { + { 2427906178u, 3580155704u, 949770784u }, + { 226153695u, 1230515664u, 3580155704u }, + { 1988835001u, 986791581u, 1230515664u } + }, + { + { 1774047142u, 3199155377u, 3106427820u }, + { 1901920839u, 4290900039u, 3199155377u }, + { 4178980191u, 280623348u, 4290900039u } + }, + { + { 3567524348u, 1934119675u, 3188270128u }, + { 2997767678u, 826363896u, 1934119675u }, + { 262952343u, 614326610u, 826363896u } + }, + { + { 1625613062u, 4288164505u, 2481284279u }, + { 4273461426u, 1177260757u, 4288164505u }, + { 305959988u, 4017252267u, 1177260757u } + }, + { + { 337929267u, 333342539u, 418300166u }, + { 2944208672u, 379097734u, 333342539u }, + { 2084056909u, 3625475947u, 379097734u } + }, + { + { 1189899255u, 1307754719u, 1214919992u }, + { 3736721708u, 3514751918u, 1307754719u }, + { 732435953u, 2021244538u, 3514751918u } + }, + { + { 4089172695u, 1533534334u, 525643282u }, + { 1497577018u, 1335684482u, 1533534334u }, + { 2079007086u, 3977541427u, 1335684482u } + }, + { + { 3075256652u, 2762754934u, 3846844247u }, + { 3057872364u, 3274545167u, 2762754934u }, + { 4028573983u, 938934351u, 3274545167u } + }, + { + { 2597859300u, 2880151048u, 2523330453u }, + { 1121709186u, 175667448u, 2880151048u }, + { 4182510911u, 1723133625u, 175667448u } + }, + { + { 484148868u, 1404283933u, 2982534313u }, + { 3736767353u, 3179865161u, 1404283933u }, + { 391120388u, 3758716888u, 3179865161u } + }, + { + { 2138867468u, 1128973399u, 2133702321u }, + { 1613561693u, 3622350766u, 1128973399u }, + { 1500151924u, 3759983985u, 3622350766u } + }, + { + { 3027706760u, 3786576552u, 2698781808u }, + { 2810527099u, 90498489u, 3786576552u }, + { 4220122612u, 1855245979u, 90498489u } + }, + { + { 3739389517u, 1110440720u, 917457922u }, + { 2163873618u, 3707591763u, 1110440720u }, + { 2667061910u, 2533383962u, 3707591763u } + }, + { + { 1545226000u, 1812182123u, 3693349190u }, + { 3422065122u, 3291428549u, 1812182123u }, + { 1193168720u, 2072837757u, 3291428549u } + }, + { + { 3230096243u, 2131723358u, 3262178024u }, + { 2882890127u, 4088518247u, 2131723358u }, + { 3991553306u, 1282224087u, 4088518247u } + }, + { + { 301207261u, 1722796810u, 3697719854u }, + { 3350228505u, 3410986694u, 1722796810u }, + { 3684514720u, 2846958957u, 3410986694u } + }, + { + { 1532963114u, 4236235786u, 3871128158u }, + { 3540401964u, 1285250577u, 4236235786u }, + { 1105070646u, 2764245175u, 1285250577u } + }, + { + { 210906218u, 3068599594u, 3034582784u }, + { 340633153u, 4004365908u, 3068599594u }, + { 4238928187u, 2299166464u, 4004365908u } + }, + { + { 2274701639u, 3955606166u, 3081246407u }, + { 3199954992u, 3948054919u, 3955606166u }, + { 2399101442u, 3438340286u, 3948054919u } + }, + { + { 504137100u, 1182303684u, 201533985u }, + { 4188299661u, 3042453580u, 1182303684u }, + { 2578519273u, 2674782930u, 3042453580u } + }, + { + { 1382964588u, 2578452047u, 3140440866u }, + { 261861891u, 1076783073u, 2578452047u }, + { 1634588989u, 164438428u, 1076783073u } + }, + { + { 2529186343u, 526867394u, 3102803247u }, + { 2687252475u, 2908898908u, 526867394u }, + { 1213100579u, 86050422u, 2908898908u } + }, + { + { 2690118316u, 538108523u, 790337895u }, + { 4193870709u, 1053552056u, 538108523u }, + { 1635227281u, 4002399925u, 1053552056u } + }, + { + { 2123712957u, 4205383007u, 1812304090u }, + { 1095349745u, 166243972u, 4205383007u }, + { 428569070u, 2128782357u, 166243972u } + }, + { + { 1330151766u, 3569679412u, 4107175982u }, + { 3808641551u, 3621125056u, 3569679412u }, + { 4262164578u, 1927692878u, 3621125056u } + }, + { + { 3606295184u, 2442739556u, 3894922338u }, + { 1629626641u, 2729678535u, 2442739556u }, + { 3379124758u, 4279360935u, 2729678535u } + }, + { + { 1052092278u, 4249024666u, 919210106u }, + { 3253349463u, 3629539480u, 4249024666u }, + { 852514024u, 4025926501u, 3629539480u } + }, + { + { 12394571u, 1252747620u, 2133571953u }, + { 4227339509u, 3197545170u, 1252747620u }, + { 1884529704u, 1976203831u, 3197545170u } + }, + { + { 2986331025u, 2671019282u, 2847338542u }, + { 3173738401u, 3542657885u, 2671019282u }, + { 745203060u, 1546667401u, 3542657885u } + }, + { + { 2613012997u, 2311336951u, 2911336433u }, + { 1493974713u, 92565032u, 2311336951u }, + { 2786645250u, 257065974u, 92565032u } + }, + { + { 3424925004u, 2776053372u, 2204068573u }, + { 3770626858u, 2509257810u, 2776053372u }, + { 2979919489u, 1146336783u, 2509257810u } + }, + { + { 1474384834u, 827894421u, 515339473u }, + { 1373055755u, 1949809417u, 827894421u }, + { 3088339524u, 1194193824u, 1949809417u } + }, + { + { 1825805135u, 1289872272u, 3700877161u }, + { 3433422861u, 4062509844u, 1289872272u }, + { 3019008744u, 2060641859u, 4062509844u } + }, + { + { 3842597153u, 4253338264u, 3424495942u }, + { 698444416u, 60268595u, 4253338264u }, + { 4096010585u, 47309624u, 60268595u } + }, + { + { 2662288323u, 2043518992u, 1593435980u }, + { 1330201507u, 3618850300u, 2043518992u }, + { 2538793204u, 271787962u, 3618850300u } + }, + { + { 741020448u, 997594656u, 2398808739u }, + { 1160477043u, 1522130854u, 997594656u }, + { 3036916315u, 2847712653u, 1522130854u } + }, + { + { 2654964886u, 1889728930u, 53329096u }, + { 2042322941u, 1621136330u, 1889728930u }, + { 1553642730u, 784545882u, 1621136330u } + }, + { + { 1715219514u, 2831829177u, 929124824u }, + { 997274536u, 404228189u, 2831829177u }, + { 1386575385u, 4107238699u, 404228189u } + }, + { + { 3928131551u, 2912523524u, 1840499723u }, + { 4216003022u, 2970489088u, 2912523524u }, + { 1158689953u, 1425511081u, 2970489088u } + }, + { + { 2807004452u, 2510299562u, 271603006u }, + { 2505735035u, 2370490899u, 2510299562u }, + { 10873814u, 2450376936u, 2370490899u } + }, + { + { 2000734342u, 1113679064u, 2502160539u }, + { 1475266926u, 2787925323u, 1113679064u }, + { 1475797635u, 3044470744u, 2787925323u } + }, + { + { 1457157056u, 1252556678u, 3073232607u }, + { 1926798761u, 3639907189u, 1252556678u }, + { 2067740348u, 2256217204u, 3639907189u } + }, + { + { 3740999688u, 1035400458u, 3162437311u }, + { 4126312242u, 686702830u, 1035400458u }, + { 1699805291u, 667792040u, 686702830u } + }, + { + { 2422495016u, 3203768688u, 1858240466u }, + { 848719394u, 4092709154u, 3203768688u }, + { 659945473u, 1863075174u, 4092709154u } + }, + { + { 246817944u, 871751352u, 2834051003u }, + { 3976202597u, 3721214025u, 871751352u }, + { 783929942u, 745295675u, 3721214025u } + }, + { + { 3811740424u, 3603608092u, 2365398362u }, + { 3826150877u, 2906557036u, 3603608092u }, + { 2300510686u, 966815948u, 2906557036u } + }, + { + { 2816329160u, 18201123u, 3367710570u }, + { 437309679u, 2220769388u, 18201123u }, + { 1346863388u, 705296543u, 2220769388u } + }, + { + { 3310028953u, 1662315499u, 132645114u }, + { 2572908401u, 3105849797u, 1662315499u }, + { 1937586849u, 1735620028u, 3105849797u } + }, + { + { 461386353u, 1359675853u, 3599822966u }, + { 106675209u, 2044154050u, 1359675853u }, + { 1787730088u, 1149892630u, 2044154050u } + }, + { + { 3303902397u, 345146034u, 1417149696u }, + { 2231869247u, 1116882637u, 345146034u }, + { 1846832385u, 79626976u, 1116882637u } + }, + { + { 2765049417u, 3117782790u, 1805260159u }, + { 3796182890u, 1101141726u, 3117782790u }, + { 224270120u, 1004001443u, 1101141726u } + }, + { + { 89118668u, 2494198515u, 1356989069u }, + { 2490435731u, 997151755u, 2494198515u }, + { 1175528637u, 3444341166u, 997151755u } + }, + { + { 2340639019u, 510225634u, 286119182u }, + { 2045217287u, 1194574818u, 510225634u }, + { 2662281592u, 1728500627u, 1194574818u } + }, + { + { 210787847u, 1189120688u, 2848040407u }, + { 1087786165u, 2343328484u, 1189120688u }, + { 3465141330u, 2893041005u, 2343328484u } + }, + { + { 3438170226u, 3236285682u, 962036916u }, + { 2873263091u, 215280489u, 3236285682u }, + { 730413847u, 1474823842u, 215280489u } + }, + { + { 1566461658u, 133010024u, 2886695328u }, + { 2835827516u, 653809404u, 133010024u }, + { 3082882924u, 3710942807u, 653809404u } + }, + { + { 4201558916u, 1263786956u, 326001602u }, + { 762846463u, 621546357u, 1263786956u }, + { 2697142404u, 1156650856u, 621546357u } + }, + { + { 2655768102u, 2339029465u, 2430211448u }, + { 2669906627u, 403962847u, 2339029465u }, + { 1483118807u, 639660658u, 403962847u } + }, + { + { 3508595200u, 4228486662u, 754946994u }, + { 1913148390u, 3500531602u, 4228486662u }, + { 24637u, 3773159052u, 3500531602u } + }, + { + { 4024866227u, 1143874914u, 3205058469u }, + { 2970344133u, 2873927273u, 1143874914u }, + { 2167114735u, 4095476435u, 2873927273u } + }, + { + { 1479401095u, 2958366486u, 3027708794u }, + { 2704486034u, 3574053987u, 2958366486u }, + { 3630964515u, 1276667706u, 3574053987u } + }, + { + { 2035927380u, 1363628533u, 818363998u }, + { 3023327955u, 3968427114u, 1363628533u }, + { 1284825950u, 2871663372u, 3968427114u } + }, + { + { 3827747418u, 3897287251u, 4106993377u }, + { 1527779946u, 3221052941u, 3897287251u }, + { 4178727866u, 4281160673u, 3221052941u } + }, + { + { 1174358892u, 2835476193u, 959978619u }, + { 850076464u, 3774782533u, 2835476193u }, + { 3880910680u, 3237990203u, 3774782533u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM1SeqHost[64][3][3] = { + { + { 2427906178u, 3580155704u, 949770784u }, + { 226153695u, 1230515664u, 3580155704u }, + { 1988835001u, 986791581u, 1230515664u } + }, + { + { 1774047142u, 3199155377u, 3106427820u }, + { 1901920839u, 4290900039u, 3199155377u }, + { 4178980191u, 280623348u, 4290900039u } + }, + { + { 3567524348u, 1934119675u, 3188270128u }, + { 2997767678u, 826363896u, 1934119675u }, + { 262952343u, 614326610u, 826363896u } + }, + { + { 1625613062u, 4288164505u, 2481284279u }, + { 4273461426u, 1177260757u, 4288164505u }, + { 305959988u, 4017252267u, 1177260757u } + }, + { + { 337929267u, 333342539u, 418300166u }, + { 2944208672u, 379097734u, 333342539u }, + { 2084056909u, 3625475947u, 379097734u } + }, + { + { 1189899255u, 1307754719u, 1214919992u }, + { 3736721708u, 3514751918u, 1307754719u }, + { 732435953u, 2021244538u, 3514751918u } + }, + { + { 4089172695u, 1533534334u, 525643282u }, + { 1497577018u, 1335684482u, 1533534334u }, + { 2079007086u, 3977541427u, 1335684482u } + }, + { + { 3075256652u, 2762754934u, 3846844247u }, + { 3057872364u, 3274545167u, 2762754934u }, + { 4028573983u, 938934351u, 3274545167u } + }, + { + { 2597859300u, 2880151048u, 2523330453u }, + { 1121709186u, 175667448u, 2880151048u }, + { 4182510911u, 1723133625u, 175667448u } + }, + { + { 484148868u, 1404283933u, 2982534313u }, + { 3736767353u, 3179865161u, 1404283933u }, + { 391120388u, 3758716888u, 3179865161u } + }, + { + { 2138867468u, 1128973399u, 2133702321u }, + { 1613561693u, 3622350766u, 1128973399u }, + { 1500151924u, 3759983985u, 3622350766u } + }, + { + { 3027706760u, 3786576552u, 2698781808u }, + { 2810527099u, 90498489u, 3786576552u }, + { 4220122612u, 1855245979u, 90498489u } + }, + { + { 3739389517u, 1110440720u, 917457922u }, + { 2163873618u, 3707591763u, 1110440720u }, + { 2667061910u, 2533383962u, 3707591763u } + }, + { + { 1545226000u, 1812182123u, 3693349190u }, + { 3422065122u, 3291428549u, 1812182123u }, + { 1193168720u, 2072837757u, 3291428549u } + }, + { + { 3230096243u, 2131723358u, 3262178024u }, + { 2882890127u, 4088518247u, 2131723358u }, + { 3991553306u, 1282224087u, 4088518247u } + }, + { + { 301207261u, 1722796810u, 3697719854u }, + { 3350228505u, 3410986694u, 1722796810u }, + { 3684514720u, 2846958957u, 3410986694u } + }, + { + { 1532963114u, 4236235786u, 3871128158u }, + { 3540401964u, 1285250577u, 4236235786u }, + { 1105070646u, 2764245175u, 1285250577u } + }, + { + { 210906218u, 3068599594u, 3034582784u }, + { 340633153u, 4004365908u, 3068599594u }, + { 4238928187u, 2299166464u, 4004365908u } + }, + { + { 2274701639u, 3955606166u, 3081246407u }, + { 3199954992u, 3948054919u, 3955606166u }, + { 2399101442u, 3438340286u, 3948054919u } + }, + { + { 504137100u, 1182303684u, 201533985u }, + { 4188299661u, 3042453580u, 1182303684u }, + { 2578519273u, 2674782930u, 3042453580u } + }, + { + { 1382964588u, 2578452047u, 3140440866u }, + { 261861891u, 1076783073u, 2578452047u }, + { 1634588989u, 164438428u, 1076783073u } + }, + { + { 2529186343u, 526867394u, 3102803247u }, + { 2687252475u, 2908898908u, 526867394u }, + { 1213100579u, 86050422u, 2908898908u } + }, + { + { 2690118316u, 538108523u, 790337895u }, + { 4193870709u, 1053552056u, 538108523u }, + { 1635227281u, 4002399925u, 1053552056u } + }, + { + { 2123712957u, 4205383007u, 1812304090u }, + { 1095349745u, 166243972u, 4205383007u }, + { 428569070u, 2128782357u, 166243972u } + }, + { + { 1330151766u, 3569679412u, 4107175982u }, + { 3808641551u, 3621125056u, 3569679412u }, + { 4262164578u, 1927692878u, 3621125056u } + }, + { + { 3606295184u, 2442739556u, 3894922338u }, + { 1629626641u, 2729678535u, 2442739556u }, + { 3379124758u, 4279360935u, 2729678535u } + }, + { + { 1052092278u, 4249024666u, 919210106u }, + { 3253349463u, 3629539480u, 4249024666u }, + { 852514024u, 4025926501u, 3629539480u } + }, + { + { 12394571u, 1252747620u, 2133571953u }, + { 4227339509u, 3197545170u, 1252747620u }, + { 1884529704u, 1976203831u, 3197545170u } + }, + { + { 2986331025u, 2671019282u, 2847338542u }, + { 3173738401u, 3542657885u, 2671019282u }, + { 745203060u, 1546667401u, 3542657885u } + }, + { + { 2613012997u, 2311336951u, 2911336433u }, + { 1493974713u, 92565032u, 2311336951u }, + { 2786645250u, 257065974u, 92565032u } + }, + { + { 3424925004u, 2776053372u, 2204068573u }, + { 3770626858u, 2509257810u, 2776053372u }, + { 2979919489u, 1146336783u, 2509257810u } + }, + { + { 1474384834u, 827894421u, 515339473u }, + { 1373055755u, 1949809417u, 827894421u }, + { 3088339524u, 1194193824u, 1949809417u } + }, + { + { 1825805135u, 1289872272u, 3700877161u }, + { 3433422861u, 4062509844u, 1289872272u }, + { 3019008744u, 2060641859u, 4062509844u } + }, + { + { 3842597153u, 4253338264u, 3424495942u }, + { 698444416u, 60268595u, 4253338264u }, + { 4096010585u, 47309624u, 60268595u } + }, + { + { 2662288323u, 2043518992u, 1593435980u }, + { 1330201507u, 3618850300u, 2043518992u }, + { 2538793204u, 271787962u, 3618850300u } + }, + { + { 741020448u, 997594656u, 2398808739u }, + { 1160477043u, 1522130854u, 997594656u }, + { 3036916315u, 2847712653u, 1522130854u } + }, + { + { 2654964886u, 1889728930u, 53329096u }, + { 2042322941u, 1621136330u, 1889728930u }, + { 1553642730u, 784545882u, 1621136330u } + }, + { + { 1715219514u, 2831829177u, 929124824u }, + { 997274536u, 404228189u, 2831829177u }, + { 1386575385u, 4107238699u, 404228189u } + }, + { + { 3928131551u, 2912523524u, 1840499723u }, + { 4216003022u, 2970489088u, 2912523524u }, + { 1158689953u, 1425511081u, 2970489088u } + }, + { + { 2807004452u, 2510299562u, 271603006u }, + { 2505735035u, 2370490899u, 2510299562u }, + { 10873814u, 2450376936u, 2370490899u } + }, + { + { 2000734342u, 1113679064u, 2502160539u }, + { 1475266926u, 2787925323u, 1113679064u }, + { 1475797635u, 3044470744u, 2787925323u } + }, + { + { 1457157056u, 1252556678u, 3073232607u }, + { 1926798761u, 3639907189u, 1252556678u }, + { 2067740348u, 2256217204u, 3639907189u } + }, + { + { 3740999688u, 1035400458u, 3162437311u }, + { 4126312242u, 686702830u, 1035400458u }, + { 1699805291u, 667792040u, 686702830u } + }, + { + { 2422495016u, 3203768688u, 1858240466u }, + { 848719394u, 4092709154u, 3203768688u }, + { 659945473u, 1863075174u, 4092709154u } + }, + { + { 246817944u, 871751352u, 2834051003u }, + { 3976202597u, 3721214025u, 871751352u }, + { 783929942u, 745295675u, 3721214025u } + }, + { + { 3811740424u, 3603608092u, 2365398362u }, + { 3826150877u, 2906557036u, 3603608092u }, + { 2300510686u, 966815948u, 2906557036u } + }, + { + { 2816329160u, 18201123u, 3367710570u }, + { 437309679u, 2220769388u, 18201123u }, + { 1346863388u, 705296543u, 2220769388u } + }, + { + { 3310028953u, 1662315499u, 132645114u }, + { 2572908401u, 3105849797u, 1662315499u }, + { 1937586849u, 1735620028u, 3105849797u } + }, + { + { 461386353u, 1359675853u, 3599822966u }, + { 106675209u, 2044154050u, 1359675853u }, + { 1787730088u, 1149892630u, 2044154050u } + }, + { + { 3303902397u, 345146034u, 1417149696u }, + { 2231869247u, 1116882637u, 345146034u }, + { 1846832385u, 79626976u, 1116882637u } + }, + { + { 2765049417u, 3117782790u, 1805260159u }, + { 3796182890u, 1101141726u, 3117782790u }, + { 224270120u, 1004001443u, 1101141726u } + }, + { + { 89118668u, 2494198515u, 1356989069u }, + { 2490435731u, 997151755u, 2494198515u }, + { 1175528637u, 3444341166u, 997151755u } + }, + { + { 2340639019u, 510225634u, 286119182u }, + { 2045217287u, 1194574818u, 510225634u }, + { 2662281592u, 1728500627u, 1194574818u } + }, + { + { 210787847u, 1189120688u, 2848040407u }, + { 1087786165u, 2343328484u, 1189120688u }, + { 3465141330u, 2893041005u, 2343328484u } + }, + { + { 3438170226u, 3236285682u, 962036916u }, + { 2873263091u, 215280489u, 3236285682u }, + { 730413847u, 1474823842u, 215280489u } + }, + { + { 1566461658u, 133010024u, 2886695328u }, + { 2835827516u, 653809404u, 133010024u }, + { 3082882924u, 3710942807u, 653809404u } + }, + { + { 4201558916u, 1263786956u, 326001602u }, + { 762846463u, 621546357u, 1263786956u }, + { 2697142404u, 1156650856u, 621546357u } + }, + { + { 2655768102u, 2339029465u, 2430211448u }, + { 2669906627u, 403962847u, 2339029465u }, + { 1483118807u, 639660658u, 403962847u } + }, + { + { 3508595200u, 4228486662u, 754946994u }, + { 1913148390u, 3500531602u, 4228486662u }, + { 24637u, 3773159052u, 3500531602u } + }, + { + { 4024866227u, 1143874914u, 3205058469u }, + { 2970344133u, 2873927273u, 1143874914u }, + { 2167114735u, 4095476435u, 2873927273u } + }, + { + { 1479401095u, 2958366486u, 3027708794u }, + { 2704486034u, 3574053987u, 2958366486u }, + { 3630964515u, 1276667706u, 3574053987u } + }, + { + { 2035927380u, 1363628533u, 818363998u }, + { 3023327955u, 3968427114u, 1363628533u }, + { 1284825950u, 2871663372u, 3968427114u } + }, + { + { 3827747418u, 3897287251u, 4106993377u }, + { 1527779946u, 3221052941u, 3897287251u }, + { 4178727866u, 4281160673u, 3221052941u } + }, + { + { 1174358892u, 2835476193u, 959978619u }, + { 850076464u, 3774782533u, 2835476193u }, + { 3880910680u, 3237990203u, 3774782533u } + } + }; +#endif // #ifndef __CUDACC_RTC__ + +CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS unsigned int mrg32k3aM2Seq[64][3][3] = { + { + { 1464411153u, 277697599u, 1610723613u }, + { 32183930u, 1464411153u, 1022607788u }, + { 2824425944u, 32183930u, 2093834863u } + }, + { + { 3492361727u, 1027004383u, 3167429889u }, + { 3674905362u, 3492361727u, 3572939265u }, + { 4270409313u, 3674905362u, 698814233u } + }, + { + { 880482061u, 205175925u, 4070445105u }, + { 2208329119u, 880482061u, 1933248566u }, + { 3741227945u, 2208329119u, 3962062826u } + }, + { + { 4184605179u, 1189429800u, 567967482u }, + { 107217966u, 4184605179u, 784865788u }, + { 549462420u, 107217966u, 3134382704u } + }, + { + { 2732536445u, 1231107067u, 3374588386u }, + { 409954030u, 2732536445u, 1044831206u }, + { 3398162498u, 409954030u, 3505648581u } + }, + { + { 2169560691u, 1076348534u, 637306236u }, + { 3704346564u, 2169560691u, 293694496u }, + { 632453145u, 3704346564u, 1609425246u } + }, + { + { 372115891u, 3928812480u, 2830541169u }, + { 3056527841u, 372115891u, 1924239834u }, + { 3044937468u, 3056527841u, 547142630u } + }, + { + { 1660852083u, 3635660815u, 1389092450u }, + { 1025573319u, 1660852083u, 3276803366u }, + { 4036331438u, 1025573319u, 4092197741u } + }, + { + { 1360732901u, 2887812973u, 4101068693u }, + { 52572783u, 1360732901u, 112458461u }, + { 2636566855u, 52572783u, 1136777988u } + }, + { + { 3455696508u, 536919193u, 3978804036u }, + { 3094157668u, 3455696508u, 3821833900u }, + { 2278849016u, 3094157668u, 2531965909u } + }, + { + { 2125991744u, 890897326u, 3790557569u }, + { 1433592392u, 2125991744u, 3671109604u }, + { 808215503u, 1433592392u, 2446306581u } + }, + { + { 3524411799u, 932865240u, 1838275365u }, + { 1789634890u, 3524411799u, 4130736474u }, + { 2252266098u, 1789634890u, 3048775967u } + }, + { + { 1773339925u, 948403862u, 1999624391u }, + { 983864203u, 1773339925u, 3734776305u }, + { 314407045u, 983864203u, 2648614071u } + }, + { + { 321802921u, 1099164995u, 2112167358u }, + { 3760936985u, 321802921u, 1003573324u }, + { 3758858458u, 3760936985u, 4014658840u } + }, + { + { 2196438580u, 805386227u, 4266375092u }, + { 4124675351u, 2196438580u, 2527961345u }, + { 94452540u, 4124675351u, 2825656399u } + }, + { + { 66735368u, 2228005807u, 4186703168u }, + { 2624855312u, 66735368u, 2708679078u }, + { 4098470056u, 2624855312u, 1773862183u } + }, + { + { 3072642883u, 2746897053u, 2690305546u }, + { 1105106652u, 3072642883u, 4047666135u }, + { 2862886282u, 1105106652u, 3597347398u } + }, + { + { 232906611u, 3873338256u, 4051554873u }, + { 3027413363u, 232906611u, 3159432673u }, + { 3872967050u, 3027413363u, 987156327u } + }, + { + { 1160686753u, 3676603152u, 1635979789u }, + { 1447386846u, 1160686753u, 2670438424u }, + { 816212890u, 1447386846u, 4288868534u } + }, + { + { 3825238244u, 1445162354u, 2362389441u }, + { 3440193648u, 3825238244u, 3520937545u }, + { 2652790808u, 3440193648u, 405299994u } + }, + { + { 1984094858u, 532165989u, 2027397575u }, + { 1455977136u, 1984094858u, 2433255524u }, + { 1039994763u, 1455977136u, 2069333087u } + }, + { + { 3680843319u, 2332949611u, 3516795313u }, + { 2033851810u, 3680843319u, 3843367307u }, + { 3686294589u, 2033851810u, 3912995069u } + }, + { + { 967423689u, 1724183394u, 635932799u }, + { 641380480u, 967423689u, 2145297779u }, + { 1723000412u, 641380480u, 455633660u } + }, + { + { 2130938335u, 1534972306u, 2511584766u }, + { 273828453u, 2130938335u, 3112810093u }, + { 4084843716u, 273828453u, 1399334152u } + }, + { + { 168278549u, 541167592u, 190177712u }, + { 403188859u, 168278549u, 2092073970u }, + { 58789558u, 403188859u, 2777887189u } + }, + { + { 634843389u, 4082275720u, 2092828966u }, + { 351187677u, 634843389u, 1312056270u }, + { 3347241070u, 351187677u, 2417192332u } + }, + { + { 443276110u, 1113643788u, 271102234u }, + { 3083745876u, 443276110u, 3370743767u }, + { 4200577503u, 3083745876u, 3298601960u } + }, + { + { 3533393557u, 764977733u, 3400275098u }, + { 144639933u, 3533393557u, 2646475951u }, + { 77963866u, 144639933u, 3794766611u } + }, + { + { 4064854722u, 1198665008u, 2872196602u }, + { 3274748603u, 4064854722u, 4164637970u }, + { 4238693771u, 3274748603u, 1981721347u } + }, + { + { 2279220396u, 2355957139u, 1417574285u }, + { 885864931u, 2279220396u, 1344421653u }, + { 1895527787u, 885864931u, 3726919367u } + }, + { + { 2898100178u, 2427331008u, 348923199u }, + { 3175444953u, 2898100178u, 4290541487u }, + { 246118669u, 3175444953u, 3410622769u } + }, + { + { 284442065u, 4064194676u, 2295560707u }, + { 4182706556u, 284442065u, 3696899246u }, + { 1201342255u, 4182706556u, 1145356382u } + }, + { + { 656615546u, 442908965u, 3724738272u }, + { 1624967553u, 656615546u, 798014134u }, + { 1157949454u, 1624967553u, 496247378u } + }, + { + { 265689579u, 675056541u, 3009083380u }, + { 3820679930u, 265689579u, 2961990151u }, + { 562287964u, 3820679930u, 1853486796u } + }, + { + { 1675739167u, 2319843005u, 760605578u }, + { 4161492847u, 1675739167u, 226142150u }, + { 1017447188u, 4161492847u, 3431158427u } + }, + { + { 1759873736u, 2334568602u, 2154570180u }, + { 1812793060u, 1759873736u, 2111094408u }, + { 1168460586u, 1812793060u, 2495653141u } + }, + { + { 317621194u, 868104288u, 664971082u }, + { 2340275074u, 317621194u, 2168960688u }, + { 725706104u, 2340275074u, 3532023115u } + }, + { + { 3926931954u, 2907684453u, 615601328u }, + { 1132340715u, 3926931954u, 676995757u }, + { 1154819290u, 1132340715u, 1662727700u } + }, + { + { 3921782078u, 3376494857u, 2969567377u }, + { 475345024u, 3921782078u, 4206379953u }, + { 1795936544u, 475345024u, 934679595u } + }, + { + { 3119292228u, 741613041u, 2083352304u }, + { 1047885963u, 3119292228u, 1581078542u }, + { 1065969969u, 1047885963u, 661718928u } + }, + { + { 3643472111u, 2870554228u, 3995474529u }, + { 3804264051u, 3643472111u, 1366457944u }, + { 1246805564u, 3804264051u, 993186530u } + }, + { + { 796711791u, 3878204845u, 3160293932u }, + { 255632881u, 796711791u, 3778927111u }, + { 3472564181u, 255632881u, 388382377u } + }, + { + { 1776984101u, 1742284034u, 3449763933u }, + { 1349354417u, 1776984101u, 1264780832u }, + { 715722511u, 1349354417u, 1213319489u } + }, + { + { 4261866865u, 1914382786u, 201872335u }, + { 614207188u, 4261866865u, 1853554849u }, + { 2046042882u, 614207188u, 3193186353u } + }, + { + { 2210205512u, 2847073169u, 3324925707u }, + { 1251969297u, 2210205512u, 3491451503u }, + { 470400916u, 1251969297u, 2184392547u } + }, + { + { 1523590942u, 2391111113u, 68341529u }, + { 295466806u, 1523590942u, 4143310876u }, + { 3527253079u, 295466806u, 4059123142u } + }, + { + { 1406902110u, 3735012720u, 1774518130u }, + { 1814959027u, 1406902110u, 1560544267u }, + { 346472965u, 1814959027u, 964257199u } + }, + { + { 855309653u, 4208503105u, 1518467541u }, + { 2025248418u, 855309653u, 4148125749u }, + { 1349947330u, 2025248418u, 1168504873u } + }, + { + { 2375338156u, 3629519168u, 409696181u }, + { 252401654u, 2375338156u, 3992097193u }, + { 2793725401u, 252401654u, 1350184085u } + }, + { + { 873141039u, 3885583138u, 361604799u }, + { 3554143374u, 873141039u, 894746180u }, + { 1919765327u, 3554143374u, 876210854u } + }, + { + { 246368794u, 1703793169u, 2317362874u }, + { 2300930144u, 246368794u, 2560214589u }, + { 2016163623u, 2300930144u, 1504276775u } + }, + { + { 1574610921u, 2147546631u, 4103450226u }, + { 107416526u, 1574610921u, 1773803959u }, + { 1402542742u, 107416526u, 550063800u } + }, + { + { 363388665u, 592194244u, 1746615522u }, + { 2637234667u, 363388665u, 4031408742u }, + { 2895130475u, 2637234667u, 296510335u } + }, + { + { 3997368560u, 3047771871u, 3178383826u }, + { 1160174754u, 3997368560u, 4027094919u }, + { 1234984211u, 1160174754u, 4226264344u } + }, + { + { 3303179301u, 4243968063u, 3235964171u }, + { 1776841674u, 3303179301u, 2867287469u }, + { 1500495759u, 1776841674u, 1708226553u } + }, + { + { 1482944153u, 3192311574u, 354466071u }, + { 3932773012u, 1482944153u, 389193591u }, + { 3350181058u, 3932773012u, 3398059015u } + }, + { + { 640968550u, 3226860971u, 922372912u }, + { 1254989667u, 640968550u, 2383815228u }, + { 2027371896u, 1254989667u, 2925300409u } + }, + { + { 2313146046u, 3910187183u, 1377591475u }, + { 1689291784u, 2313146046u, 4255405993u }, + { 1650609719u, 1689291784u, 1897624297u } + }, + { + { 3656310954u, 882924050u, 2702189958u }, + { 3185020283u, 3656310954u, 1923190496u }, + { 2449669145u, 3185020283u, 4235849984u } + }, + { + { 377232416u, 1498446142u, 4229103619u }, + { 3926377906u, 377232416u, 600268838u }, + { 511317726u, 3926377906u, 216160452u } + }, + { + { 1969399344u, 3273966859u, 4220943579u }, + { 3952111894u, 1969399344u, 575096961u }, + { 3815277103u, 3952111894u, 792177412u } + }, + { + { 2957238169u, 1410010554u, 1523740068u }, + { 3949237584u, 2957238169u, 74149658u }, + { 2564746147u, 3949237584u, 2557663578u } + }, + { + { 3377318569u, 1927835240u, 2556102508u }, + { 3022040116u, 3377318569u, 2549406364u }, + { 2387074241u, 3022040116u, 1477293711u } + }, + { + { 257306870u, 1748489735u, 547809226u }, + { 3708493374u, 257306870u, 4183546362u }, + { 4435502u, 3708493374u, 1607696753u } + } + }; + +#ifndef __CUDACC_RTC__ +CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS unsigned int mrg32k3aM2SeqHost[64][3][3] = { + { + { 1464411153u, 277697599u, 1610723613u }, + { 32183930u, 1464411153u, 1022607788u }, + { 2824425944u, 32183930u, 2093834863u } + }, + { + { 3492361727u, 1027004383u, 3167429889u }, + { 3674905362u, 3492361727u, 3572939265u }, + { 4270409313u, 3674905362u, 698814233u } + }, + { + { 880482061u, 205175925u, 4070445105u }, + { 2208329119u, 880482061u, 1933248566u }, + { 3741227945u, 2208329119u, 3962062826u } + }, + { + { 4184605179u, 1189429800u, 567967482u }, + { 107217966u, 4184605179u, 784865788u }, + { 549462420u, 107217966u, 3134382704u } + }, + { + { 2732536445u, 1231107067u, 3374588386u }, + { 409954030u, 2732536445u, 1044831206u }, + { 3398162498u, 409954030u, 3505648581u } + }, + { + { 2169560691u, 1076348534u, 637306236u }, + { 3704346564u, 2169560691u, 293694496u }, + { 632453145u, 3704346564u, 1609425246u } + }, + { + { 372115891u, 3928812480u, 2830541169u }, + { 3056527841u, 372115891u, 1924239834u }, + { 3044937468u, 3056527841u, 547142630u } + }, + { + { 1660852083u, 3635660815u, 1389092450u }, + { 1025573319u, 1660852083u, 3276803366u }, + { 4036331438u, 1025573319u, 4092197741u } + }, + { + { 1360732901u, 2887812973u, 4101068693u }, + { 52572783u, 1360732901u, 112458461u }, + { 2636566855u, 52572783u, 1136777988u } + }, + { + { 3455696508u, 536919193u, 3978804036u }, + { 3094157668u, 3455696508u, 3821833900u }, + { 2278849016u, 3094157668u, 2531965909u } + }, + { + { 2125991744u, 890897326u, 3790557569u }, + { 1433592392u, 2125991744u, 3671109604u }, + { 808215503u, 1433592392u, 2446306581u } + }, + { + { 3524411799u, 932865240u, 1838275365u }, + { 1789634890u, 3524411799u, 4130736474u }, + { 2252266098u, 1789634890u, 3048775967u } + }, + { + { 1773339925u, 948403862u, 1999624391u }, + { 983864203u, 1773339925u, 3734776305u }, + { 314407045u, 983864203u, 2648614071u } + }, + { + { 321802921u, 1099164995u, 2112167358u }, + { 3760936985u, 321802921u, 1003573324u }, + { 3758858458u, 3760936985u, 4014658840u } + }, + { + { 2196438580u, 805386227u, 4266375092u }, + { 4124675351u, 2196438580u, 2527961345u }, + { 94452540u, 4124675351u, 2825656399u } + }, + { + { 66735368u, 2228005807u, 4186703168u }, + { 2624855312u, 66735368u, 2708679078u }, + { 4098470056u, 2624855312u, 1773862183u } + }, + { + { 3072642883u, 2746897053u, 2690305546u }, + { 1105106652u, 3072642883u, 4047666135u }, + { 2862886282u, 1105106652u, 3597347398u } + }, + { + { 232906611u, 3873338256u, 4051554873u }, + { 3027413363u, 232906611u, 3159432673u }, + { 3872967050u, 3027413363u, 987156327u } + }, + { + { 1160686753u, 3676603152u, 1635979789u }, + { 1447386846u, 1160686753u, 2670438424u }, + { 816212890u, 1447386846u, 4288868534u } + }, + { + { 3825238244u, 1445162354u, 2362389441u }, + { 3440193648u, 3825238244u, 3520937545u }, + { 2652790808u, 3440193648u, 405299994u } + }, + { + { 1984094858u, 532165989u, 2027397575u }, + { 1455977136u, 1984094858u, 2433255524u }, + { 1039994763u, 1455977136u, 2069333087u } + }, + { + { 3680843319u, 2332949611u, 3516795313u }, + { 2033851810u, 3680843319u, 3843367307u }, + { 3686294589u, 2033851810u, 3912995069u } + }, + { + { 967423689u, 1724183394u, 635932799u }, + { 641380480u, 967423689u, 2145297779u }, + { 1723000412u, 641380480u, 455633660u } + }, + { + { 2130938335u, 1534972306u, 2511584766u }, + { 273828453u, 2130938335u, 3112810093u }, + { 4084843716u, 273828453u, 1399334152u } + }, + { + { 168278549u, 541167592u, 190177712u }, + { 403188859u, 168278549u, 2092073970u }, + { 58789558u, 403188859u, 2777887189u } + }, + { + { 634843389u, 4082275720u, 2092828966u }, + { 351187677u, 634843389u, 1312056270u }, + { 3347241070u, 351187677u, 2417192332u } + }, + { + { 443276110u, 1113643788u, 271102234u }, + { 3083745876u, 443276110u, 3370743767u }, + { 4200577503u, 3083745876u, 3298601960u } + }, + { + { 3533393557u, 764977733u, 3400275098u }, + { 144639933u, 3533393557u, 2646475951u }, + { 77963866u, 144639933u, 3794766611u } + }, + { + { 4064854722u, 1198665008u, 2872196602u }, + { 3274748603u, 4064854722u, 4164637970u }, + { 4238693771u, 3274748603u, 1981721347u } + }, + { + { 2279220396u, 2355957139u, 1417574285u }, + { 885864931u, 2279220396u, 1344421653u }, + { 1895527787u, 885864931u, 3726919367u } + }, + { + { 2898100178u, 2427331008u, 348923199u }, + { 3175444953u, 2898100178u, 4290541487u }, + { 246118669u, 3175444953u, 3410622769u } + }, + { + { 284442065u, 4064194676u, 2295560707u }, + { 4182706556u, 284442065u, 3696899246u }, + { 1201342255u, 4182706556u, 1145356382u } + }, + { + { 656615546u, 442908965u, 3724738272u }, + { 1624967553u, 656615546u, 798014134u }, + { 1157949454u, 1624967553u, 496247378u } + }, + { + { 265689579u, 675056541u, 3009083380u }, + { 3820679930u, 265689579u, 2961990151u }, + { 562287964u, 3820679930u, 1853486796u } + }, + { + { 1675739167u, 2319843005u, 760605578u }, + { 4161492847u, 1675739167u, 226142150u }, + { 1017447188u, 4161492847u, 3431158427u } + }, + { + { 1759873736u, 2334568602u, 2154570180u }, + { 1812793060u, 1759873736u, 2111094408u }, + { 1168460586u, 1812793060u, 2495653141u } + }, + { + { 317621194u, 868104288u, 664971082u }, + { 2340275074u, 317621194u, 2168960688u }, + { 725706104u, 2340275074u, 3532023115u } + }, + { + { 3926931954u, 2907684453u, 615601328u }, + { 1132340715u, 3926931954u, 676995757u }, + { 1154819290u, 1132340715u, 1662727700u } + }, + { + { 3921782078u, 3376494857u, 2969567377u }, + { 475345024u, 3921782078u, 4206379953u }, + { 1795936544u, 475345024u, 934679595u } + }, + { + { 3119292228u, 741613041u, 2083352304u }, + { 1047885963u, 3119292228u, 1581078542u }, + { 1065969969u, 1047885963u, 661718928u } + }, + { + { 3643472111u, 2870554228u, 3995474529u }, + { 3804264051u, 3643472111u, 1366457944u }, + { 1246805564u, 3804264051u, 993186530u } + }, + { + { 796711791u, 3878204845u, 3160293932u }, + { 255632881u, 796711791u, 3778927111u }, + { 3472564181u, 255632881u, 388382377u } + }, + { + { 1776984101u, 1742284034u, 3449763933u }, + { 1349354417u, 1776984101u, 1264780832u }, + { 715722511u, 1349354417u, 1213319489u } + }, + { + { 4261866865u, 1914382786u, 201872335u }, + { 614207188u, 4261866865u, 1853554849u }, + { 2046042882u, 614207188u, 3193186353u } + }, + { + { 2210205512u, 2847073169u, 3324925707u }, + { 1251969297u, 2210205512u, 3491451503u }, + { 470400916u, 1251969297u, 2184392547u } + }, + { + { 1523590942u, 2391111113u, 68341529u }, + { 295466806u, 1523590942u, 4143310876u }, + { 3527253079u, 295466806u, 4059123142u } + }, + { + { 1406902110u, 3735012720u, 1774518130u }, + { 1814959027u, 1406902110u, 1560544267u }, + { 346472965u, 1814959027u, 964257199u } + }, + { + { 855309653u, 4208503105u, 1518467541u }, + { 2025248418u, 855309653u, 4148125749u }, + { 1349947330u, 2025248418u, 1168504873u } + }, + { + { 2375338156u, 3629519168u, 409696181u }, + { 252401654u, 2375338156u, 3992097193u }, + { 2793725401u, 252401654u, 1350184085u } + }, + { + { 873141039u, 3885583138u, 361604799u }, + { 3554143374u, 873141039u, 894746180u }, + { 1919765327u, 3554143374u, 876210854u } + }, + { + { 246368794u, 1703793169u, 2317362874u }, + { 2300930144u, 246368794u, 2560214589u }, + { 2016163623u, 2300930144u, 1504276775u } + }, + { + { 1574610921u, 2147546631u, 4103450226u }, + { 107416526u, 1574610921u, 1773803959u }, + { 1402542742u, 107416526u, 550063800u } + }, + { + { 363388665u, 592194244u, 1746615522u }, + { 2637234667u, 363388665u, 4031408742u }, + { 2895130475u, 2637234667u, 296510335u } + }, + { + { 3997368560u, 3047771871u, 3178383826u }, + { 1160174754u, 3997368560u, 4027094919u }, + { 1234984211u, 1160174754u, 4226264344u } + }, + { + { 3303179301u, 4243968063u, 3235964171u }, + { 1776841674u, 3303179301u, 2867287469u }, + { 1500495759u, 1776841674u, 1708226553u } + }, + { + { 1482944153u, 3192311574u, 354466071u }, + { 3932773012u, 1482944153u, 389193591u }, + { 3350181058u, 3932773012u, 3398059015u } + }, + { + { 640968550u, 3226860971u, 922372912u }, + { 1254989667u, 640968550u, 2383815228u }, + { 2027371896u, 1254989667u, 2925300409u } + }, + { + { 2313146046u, 3910187183u, 1377591475u }, + { 1689291784u, 2313146046u, 4255405993u }, + { 1650609719u, 1689291784u, 1897624297u } + }, + { + { 3656310954u, 882924050u, 2702189958u }, + { 3185020283u, 3656310954u, 1923190496u }, + { 2449669145u, 3185020283u, 4235849984u } + }, + { + { 377232416u, 1498446142u, 4229103619u }, + { 3926377906u, 377232416u, 600268838u }, + { 511317726u, 3926377906u, 216160452u } + }, + { + { 1969399344u, 3273966859u, 4220943579u }, + { 3952111894u, 1969399344u, 575096961u }, + { 3815277103u, 3952111894u, 792177412u } + }, + { + { 2957238169u, 1410010554u, 1523740068u }, + { 3949237584u, 2957238169u, 74149658u }, + { 2564746147u, 3949237584u, 2557663578u } + }, + { + { 3377318569u, 1927835240u, 2556102508u }, + { 3022040116u, 3377318569u, 2549406364u }, + { 2387074241u, 3022040116u, 1477293711u } + }, + { + { 257306870u, 1748489735u, 547809226u }, + { 3708493374u, 257306870u, 4183546362u }, + { 4435502u, 3708493374u, 1607696753u } + } + }; +#endif // ifndef __CUDACC_RTC__ + +#ifdef CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS +#undef CURAND_MRG32K3A_MATRICES_DEVICE_QUALIFIERS +#endif + +#ifdef CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS +#undef CURAND_MRG32K3A_MATRICES_HOST_QUALIFIERS +#endif + +#endif /* !defined(CURAND_MRG32K3A_MATRICES_H_) */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32.h new file mode 100644 index 0000000000000000000000000000000000000000..ab8a5a5b78629ba86dbb996a7561b415e90dfb53 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32.h @@ -0,0 +1,210 @@ +/* + * Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +#ifndef CURAND_MTGP32_H +#define CURAND_MTGP32_H +/* + * @file curand_mtgp32.h + * + * @brief Mersenne Twister for Graphic Processors (mtgp32), which + * generates 32-bit unsigned integers and single precision floating + * point numbers based on IEEE 754 format. + * + * @author Mutsuo Saito (Hiroshima University) + * @author Makoto Matsumoto (Hiroshima University) + * + */ +/* + * Copyright (c) 2009, 2010 Mutsuo Saito, Makoto Matsumoto and Hiroshima + * University. All rights reserved. + * Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima + * University and University of Tokyo. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the Hiroshima University nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#define MTGPDC_MEXP 11213 +#define MTGPDC_N 351 +#define MTGPDC_FLOOR_2P 256 +#define MTGPDC_CEIL_2P 512 +#define MTGPDC_PARAM_TABLE mtgp32dc_params_fast_11213 +#define MTGP32_STATE_SIZE 1024 +#define MTGP32_STATE_MASK 1023 +#define CURAND_NUM_MTGP32_PARAMS 200 +#define MEXP 11213 +#define THREAD_NUM MTGPDC_FLOOR_2P +#define LARGE_SIZE (THREAD_NUM * 3) +#define TBL_SIZE 16 + +/** + * \addtogroup DEVICE Device API + * + * @{ + */ + +/* + * \struct MTGP32_PARAMS_FAST_T + * MTGP32 parameters. + * Some element is redundant to keep structure simple. + * + * \b pos is a pick up position which is selected to have good + * performance on graphic processors. 3 < \b pos < Q, where Q is a + * maximum number such that the size of status array - Q is a power of + * 2. For example, when \b mexp is 44497, size of 32-bit status array + * is 696, and Q is 184, then \b pos is between 4 and 183. This means + * 512 parallel calculations is allowed when \b mexp is 44497. + * + * \b poly_sha1 is SHA1 digest of the characteristic polynomial of + * state transition function. SHA1 is calculated based on printing + * form of the polynomial. This is important when we use parameters + * generated by the dynamic creator which + * + * \b mask This is a mask to make the dimension of state space have + * just Mersenne Prime. This is redundant. + */ + +struct mtgp32_params_fast; + +struct mtgp32_params_fast { + int mexp; /*< Mersenne exponent. This is redundant. */ + int pos; /*< pick up position. */ + int sh1; /*< shift value 1. 0 < sh1 < 32. */ + int sh2; /*< shift value 2. 0 < sh2 < 32. */ + unsigned int tbl[16]; /*< a small matrix. */ + unsigned int tmp_tbl[16]; /*< a small matrix for tempering. */ + unsigned int flt_tmp_tbl[16]; /*< a small matrix for tempering and + converting to float. */ + unsigned int mask; /*< This is a mask for state space */ + unsigned char poly_sha1[21]; /*< SHA1 digest */ +}; + +/** \cond UNHIDE_TYPEDEFS */ +typedef struct mtgp32_params_fast mtgp32_params_fast_t; +/** \endcond */ + +/* + * Generator Parameters. + */ +struct mtgp32_kernel_params; +struct mtgp32_kernel_params { + unsigned int pos_tbl[CURAND_NUM_MTGP32_PARAMS]; + unsigned int param_tbl[CURAND_NUM_MTGP32_PARAMS][TBL_SIZE]; + unsigned int temper_tbl[CURAND_NUM_MTGP32_PARAMS][TBL_SIZE]; + unsigned int single_temper_tbl[CURAND_NUM_MTGP32_PARAMS][TBL_SIZE]; + unsigned int sh1_tbl[CURAND_NUM_MTGP32_PARAMS]; + unsigned int sh2_tbl[CURAND_NUM_MTGP32_PARAMS]; + unsigned int mask[1]; +}; + +/** \cond UNHIDE_TYPEDEFS */ +typedef struct mtgp32_kernel_params mtgp32_kernel_params_t; +/** \endcond */ + + + +/* + * kernel I/O + * This structure must be initialized before first use. + */ + +/* MTGP (Mersenne Twister) RNG */ +/* This generator uses the Mersenne Twister algorithm of + * http://arxiv.org/abs/1005.4973v2 + * Has period 2^11213. +*/ + +/** + * CURAND MTGP32 state + */ +struct curandStateMtgp32; + +struct curandStateMtgp32 { + unsigned int s[MTGP32_STATE_SIZE]; + int offset; + int pIdx; + mtgp32_kernel_params_t * k; +}; + +/* + * CURAND MTGP32 state + */ +/** \cond UNHIDE_TYPEDEFS */ +typedef struct curandStateMtgp32 curandStateMtgp32_t; +/** \endcond */ + +/** @} */ + +#endif + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_host.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_host.h new file mode 100644 index 0000000000000000000000000000000000000000..7b9a2d31b314194e6999aeb7046db67b6c9e19ac --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_host.h @@ -0,0 +1,516 @@ +/* + * Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * curand_mtgp32_host.h + * + * + * MTGP32-11213 + * + * Mersenne Twister RNG for the GPU + * + * The period of generated integers is 211213-1. + * + * This code generates 32-bit unsigned integers, and + * single precision floating point numbers uniformly distributed + * in the range [1, 2). (float r; 1.0 <= r < 2.0) + */ + +/* + * Copyright (c) 2009, 2010 Mutsuo Saito, Makoto Matsumoto and Hiroshima + * University. All rights reserved. + * Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima + * University and University of Tokyo. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the Hiroshima University nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#if !defined CURAND_MTGP32_HOST_H +#define CURAND_MTGP32_HOST_H + +#if !defined(QUALIFIERS) +#define QUALIFIERS static inline __device__ +#endif + +#include +#include +#include +#include +#include "curand.h" +#include "curand_mtgp32.h" +#include "curand_mtgp32dc_p_11213.h" + + +/** + * \addtogroup DEVICE Device API + * + * @{ + */ + +static const unsigned int non_zero = 0x4d544750; + +/* + * This function represents a function used in the initialization + * by mtgp32_init_by_array() and mtgp32_init_by_str(). + * @param[in] x 32-bit integer + * @return 32-bit integer + */ +static __forceinline__ unsigned int ini_func1(unsigned int x) { + return (x ^ (x >> 27)) * (1664525); +} + +/* + * This function represents a function used in the initialization + * by mtgp32_init_by_array() and mtgp32_init_by_str(). + * @param[in] x 32-bit integer + * @return 32-bit integer + */ +static __forceinline__ unsigned int ini_func2(unsigned int x) { + return (x ^ (x >> 27)) * (1566083941); +} + +/* + * This function initializes the internal state array with a 32-bit + * integer seed. The allocated memory should be freed by calling + * mtgp32_free(). \b para should be one of the elements in the + * parameter table (mtgp32-param-ref.c). + * + * This function is call by cuda program, because cuda program uses + * another structure and another allocation method. + * + * @param[out] array MTGP internal status vector. + * @param[in] para parameter structure + * @param[in] seed a 32-bit integer used as the seed. + */ +static __forceinline__ __host__ +void mtgp32_init_state(unsigned int state[], + const mtgp32_params_fast_t *para, unsigned int seed) { + int i; + int size = para->mexp / 32 + 1; + unsigned int hidden_seed; + unsigned int tmp; + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = seed; + state[1] = hidden_seed; + for (i = 1; i < size; i++) { + state[i] ^= (1812433253) * (state[i - 1] ^ (state[i - 1] >> 30)) + i; + } +} + +/* + * This function initializes the internal state array + * with a 32-bit integer array. \b para should be one of the elements in + * the parameter table (mtgp32-param-ref.c). + * + * @param[out] mtgp32 MTGP structure. + * @param[in] para parameter structure + * @param[in] array a 32-bit integer array used as a seed. + * @param[in] length length of the array. + * @return CURAND_STATUS_SUCCESS + */ +static __forceinline__ __host__ +int mtgp32_init_by_array(unsigned int state[], + const mtgp32_params_fast_t *para, + unsigned int *array, int length) { + int i, j, count; + unsigned int r; + int lag; + int mid; + int size = para->mexp / 32 + 1; + unsigned int hidden_seed; + unsigned int tmp; + + if (size >= 623) { + lag = 11; + } else if (size >= 68) { + lag = 7; + } else if (size >= 39) { + lag = 5; + } else { + lag = 3; + } + mid = (size - lag) / 2; + + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = hidden_seed; + + if (length + 1 > size) { + count = length + 1; + } else { + count = size; + } + r = ini_func1(state[0] ^ state[mid] ^ state[size - 1]); + state[mid] += r; + r += length; + state[(mid + lag) % size] += r; + state[0] = r; + i = 1; + count--; + for (i = 1, j = 0; (j < count) && (j < length); j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += array[j] + i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (; j < count; j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (j = 0; j < size; j++) { + r = ini_func2(state[i] + state[(i + mid) % size] + + state[(i + size - 1) % size]); + state[(i + mid) % size] ^= r; + r -= i; + state[(i + mid + lag) % size] ^= r; + state[i] = r; + i = (i + 1) % size; + } + if (state[size - 1] == 0) { + state[size - 1] = non_zero; + } + return 0; +} + +/* + * This function initializes the internal state array + * with a character array. \b para should be one of the elements in + * the parameter table (mtgp32-param-ref.c). + * This is the same algorithm with mtgp32_init_by_array(), but hope to + * be more useful. + * + * @param[out] mtgp32 MTGP structure. + * @param[in] para parameter structure + * @param[in] array a character array used as a seed. (terminated by zero.) + * @return memory allocation result. if 0 then O.K. + */ +static __forceinline__ __host__ +int mtgp32_init_by_str(unsigned int state[], + const mtgp32_params_fast_t *para, unsigned char *array) { + int i, j, count; + unsigned int r; + int lag; + int mid; + int size = para->mexp / 32 + 1; + int length = (unsigned int)strlen((char *)array); + unsigned int hidden_seed; + unsigned int tmp; + + if (size >= 623) { + lag = 11; + } else if (size >= 68) { + lag = 7; + } else if (size >= 39) { + lag = 5; + } else { + lag = 3; + } + mid = (size - lag) / 2; + + hidden_seed = para->tbl[4] ^ (para->tbl[8] << 16); + tmp = hidden_seed; + tmp += tmp >> 16; + tmp += tmp >> 8; + memset(state, tmp & 0xff, sizeof(unsigned int) * size); + state[0] = hidden_seed; + + if (length + 1 > size) { + count = length + 1; + } else { + count = size; + } + r = ini_func1(state[0] ^ state[mid] ^ state[size - 1]); + state[mid] += r; + r += length; + state[(mid + lag) % size] += r; + state[0] = r; + i = 1; + count--; + for (i = 1, j = 0; (j < count) && (j < length); j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += array[j] + i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (; j < count; j++) { + r = ini_func1(state[i] ^ state[(i + mid) % size] + ^ state[(i + size - 1) % size]); + state[(i + mid) % size] += r; + r += i; + state[(i + mid + lag) % size] += r; + state[i] = r; + i = (i + 1) % size; + } + for (j = 0; j < size; j++) { + r = ini_func2(state[i] + state[(i + mid) % size] + + state[(i + size - 1) % size]); + state[(i + mid) % size] ^= r; + r -= i; + state[(i + mid + lag) % size] ^= r; + state[i] = r; + i = (i + 1) % size; + } + if (state[size - 1] == 0) { + state[size - 1] = non_zero; + } + return 0; +} + +template +static __forceinline__ __host__ +curandStatus_t curandMakeMTGP32ConstantsImpl(const mtgp32_params_fast_t params[], ParamsType * p, const int block_num) +{ + const int size1 = sizeof(unsigned int) * block_num; + const int size2 = sizeof(unsigned int) * block_num * TBL_SIZE; + unsigned int *h_pos_tbl; + unsigned int *h_sh1_tbl; + unsigned int *h_sh2_tbl; + unsigned int *h_param_tbl; + unsigned int *h_temper_tbl; + unsigned int *h_single_temper_tbl; + unsigned int *h_mask; + curandStatus_t status = CURAND_STATUS_SUCCESS; + + h_pos_tbl = (unsigned int *)malloc(size1); + h_sh1_tbl = (unsigned int *)malloc(size1); + h_sh2_tbl = (unsigned int *)malloc(size1); + h_param_tbl = (unsigned int *)malloc(size2); + h_temper_tbl = (unsigned int *)malloc(size2); + h_single_temper_tbl = (unsigned int *)malloc(size2); + h_mask = (unsigned int *)malloc(sizeof(unsigned int)); + if (h_pos_tbl == NULL + || h_sh1_tbl == NULL + || h_sh2_tbl == NULL + || h_param_tbl == NULL + || h_temper_tbl == NULL + || h_single_temper_tbl == NULL + || h_mask == NULL) { + if (h_pos_tbl != NULL) free(h_pos_tbl); + if (h_sh1_tbl != NULL) free(h_sh1_tbl); + if (h_sh2_tbl != NULL) free(h_sh2_tbl); + if (h_param_tbl != NULL) free(h_param_tbl); + if (h_temper_tbl != NULL) free(h_temper_tbl); + if (h_single_temper_tbl != NULL) free(h_single_temper_tbl); + if (h_mask != NULL) free(h_mask); + status = CURAND_STATUS_ALLOCATION_FAILED; + } else { + + h_mask[0] = params[0].mask; + for (int i = 0; i < block_num; i++) { + h_pos_tbl[i] = params[i].pos; + h_sh1_tbl[i] = params[i].sh1; + h_sh2_tbl[i] = params[i].sh2; + for (int j = 0; j < TBL_SIZE; j++) { + h_param_tbl[i * TBL_SIZE + j] = params[i].tbl[j]; + h_temper_tbl[i * TBL_SIZE + j] = params[i].tmp_tbl[j]; + h_single_temper_tbl[i * TBL_SIZE + j] = params[i].flt_tmp_tbl[j]; + } + } + if (cudaMemcpy( p->pos_tbl, + h_pos_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->sh1_tbl, + h_sh1_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->sh2_tbl, + h_sh2_tbl, size1, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->param_tbl, + h_param_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->temper_tbl, + h_temper_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->single_temper_tbl, + h_single_temper_tbl, size2, cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } else + if (cudaMemcpy( p->mask, + h_mask, sizeof(unsigned int), cudaMemcpyHostToDevice) != cudaSuccess) + { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } + } + if (h_pos_tbl != NULL) free(h_pos_tbl); + if (h_sh1_tbl != NULL) free(h_sh1_tbl); + if (h_sh2_tbl != NULL) free(h_sh2_tbl); + if (h_param_tbl != NULL) free(h_param_tbl); + if (h_temper_tbl != NULL) free(h_temper_tbl); + if (h_single_temper_tbl != NULL)free(h_single_temper_tbl); + if (h_mask != NULL) free(h_mask); + return status; +} + +/** + * \brief Set up constant parameters for the mtgp32 generator + * + * This host-side helper function re-organizes CURAND_NUM_MTGP32_PARAMS sets of + * generator parameters for use by kernel functions and copies the + * result to the specified location in device memory. + * + * \param params - Pointer to an array of type mtgp32_params_fast_t in host memory + * \param p - pointer to a structure of type mtgp32_kernel_params_t in device memory. + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if host memory could not be allocated + * - CURAND_STATUS_INITIALIZATION_FAILED if the copy to device memory failed + * - CURAND_STATUS_SUCCESS otherwise + */ +static __forceinline__ __host__ +curandStatus_t curandMakeMTGP32Constants(const mtgp32_params_fast_t params[], mtgp32_kernel_params_t * p) +{ + return curandMakeMTGP32ConstantsImpl(params, p, CURAND_NUM_MTGP32_PARAMS); +} + +/** + * \brief Set up initial states for the mtgp32 generator + * + * This host-side helper function initializes a number of states (one parameter set per state) for + * an mtgp32 generator. To accomplish this it allocates a state array in host memory, + * initializes that array, and copies the result to device memory. + * + * \param s - pointer to an array of states in device memory + * \param params - Pointer to an array of type mtgp32_params_fast_t in host memory + * \param k - pointer to a structure of type mtgp32_kernel_params_t in device memory + * \param n - number of parameter sets/states to initialize + * \param seed - seed value + * + * \return + * - CURAND_STATUS_ALLOCATION_FAILED if host memory state could not be allocated + * - CURAND_STATUS_INITIALIZATION_FAILED if the copy to device memory failed + * - CURAND_STATUS_SUCCESS otherwise + */ +static __forceinline__ __host__ +curandStatus_t CURANDAPI curandMakeMTGP32KernelState(curandStateMtgp32_t *s, + mtgp32_params_fast_t params[], + mtgp32_kernel_params_t *k, + int n, + unsigned long long seed) +{ + int i; + curandStatus_t status = CURAND_STATUS_SUCCESS; + curandStateMtgp32_t *h_status =(curandStateMtgp32_t *) malloc(sizeof(curandStateMtgp32_t) * n); + if (h_status == NULL) { + status = CURAND_STATUS_ALLOCATION_FAILED; + } else { + seed = seed ^ (seed >> 32); + for (i = 0; i < n; i++) { + mtgp32_init_state(&(h_status[i].s[0]), ¶ms[i],(unsigned int)seed + i + 1); + h_status[i].offset = 0; + h_status[i].pIdx = i; + h_status[i].k = k; + } + if (cudaMemcpy(s, h_status, + sizeof(curandStateMtgp32_t) * n, + cudaMemcpyHostToDevice) != cudaSuccess) { + status = CURAND_STATUS_INITIALIZATION_FAILED; + } + } + free(h_status); + return status; +} + +/** @} */ + +#endif + + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_kernel.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_kernel.h new file mode 100644 index 0000000000000000000000000000000000000000..087cdd0796d1e6d6731acd74a07718dfd1312275 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32_kernel.h @@ -0,0 +1,386 @@ +/* + * Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * curand_mtgp32_kernel.h + * + * + * MTGP32-11213 + * + * Mersenne Twister RNG for the GPU + * + * The period of generated integers is 211213-1. + * + * This code generates 32-bit unsigned integers, and + * single precision floating point numbers uniformly distributed + * in the range [1, 2). (float r; 1.0 <= r < 2.0) + */ + +/* + * Copyright (c) 2009, 2010 Mutsuo Saito, Makoto Matsumoto and Hiroshima + * University. All rights reserved. + * Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima + * University and University of Tokyo. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the Hiroshima University nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#if !defined CURAND_MTGP32_KERNEL_H +#define CURAND_MTGP32_KERNEL_H + +#if !defined(QUALIFIERS) +#define QUALIFIERS static __forceinline__ __device__ +#endif + +#ifndef __CUDACC_RTC__ +#include +#include +#include +#include +#endif // ifndef __CUDACC_RTC__ +#include +#include "curand.h" +#include "curand_mtgp32.h" + +/** + * \addtogroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDA_ARCH__ +// define blockDim and threadIdx for host compatibility call +extern const dim3 blockDim; +extern const uint3 threadIdx; +#endif + + +/* + * The function of the recursion formula calculation. + * + * @param[in] X1 the farthest part of state array. + * @param[in] X2 the second farthest part of state array. + * @param[in] Y a part of state array. + * @param[in] bid block id. + * @return output + */ +QUALIFIERS unsigned int para_rec(mtgp32_kernel_params_t * k,unsigned int X1, unsigned int X2, unsigned int Y, int bid) { + unsigned int X = (X1 & k->mask[0]) ^ X2; + unsigned int MAT; + + X ^= X << k->sh1_tbl[bid]; + Y = X ^ (Y >> k->sh2_tbl[bid]); + MAT = k->param_tbl[bid][Y & 0x0f]; + return Y ^ MAT; +} + +/* + * The tempering function. + * + * @param[in] V the output value should be tempered. + * @param[in] T the tempering helper value. + * @param[in] bid block id. + * @return the tempered value. + */ +QUALIFIERS unsigned int temper(mtgp32_kernel_params_t * k,unsigned int V, unsigned int T, int bid) { + unsigned int MAT; + + T ^= T >> 16; + T ^= T >> 8; + MAT = k->temper_tbl[bid][T & 0x0f]; + return V ^ MAT; +} + +/* + * The tempering and converting function. + * By using the preset table, converting to IEEE format + * and tempering are done simultaneously. + * + * @param[in] V the output value should be tempered. + * @param[in] T the tempering helper value. + * @param[in] bid block id. + * @return the tempered and converted value. + */ +QUALIFIERS unsigned int temper_single(mtgp32_kernel_params_t * k,unsigned int V, unsigned int T, int bid) { + unsigned int MAT; + unsigned int r; + + T ^= T >> 16; + T ^= T >> 8; + MAT = k->single_temper_tbl[bid][T & 0x0f]; + r = (V >> 9) ^ MAT; + return r; +} + +/** + * \brief Return 32-bits of pseudorandomness from a mtgp32 generator. + * + * Return 32-bits of pseudorandomness from the mtgp32 generator in \p state, + * increment position of generator by the number of threads in the block. + * Note the number of threads in the block can not exceed 256. + * + * \param state - Pointer to state to update + * + * \return 32-bits of pseudorandomness as an unsigned int, all bits valid to use. + */ +QUALIFIERS unsigned int curand(curandStateMtgp32_t *state) +{ + unsigned int t; + unsigned int d; + int pos = state->k->pos_tbl[state->pIdx]; + unsigned int r; + unsigned int o; + + d = blockDim.z * blockDim.y * blockDim.x; + //assert( d <= 256 ); + t = (blockDim.z * blockDim.y * threadIdx.z) + (blockDim.x * threadIdx.y) + threadIdx.x; + r = para_rec(state->k, state->s[(t + state->offset) & MTGP32_STATE_MASK], + state->s[(t + state->offset + 1) & MTGP32_STATE_MASK], + state->s[(t + state->offset + pos) & MTGP32_STATE_MASK], + state->pIdx); + + state->s[(t + state->offset + MTGPDC_N) & MTGP32_STATE_MASK] = r; + o = temper(state->k, r, + state->s[(t + state->offset + pos -1) & MTGP32_STATE_MASK], + state->pIdx); +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + if (t == 0) + { + state->offset = (state->offset + d) & MTGP32_STATE_MASK; + } +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + return o; + +} +/** + * \brief Return 32-bits of pseudorandomness from a specific position in a mtgp32 generator. + * + * Return 32-bits of pseudorandomness from position \p index of the mtgp32 generator in \p state, + * increment position of generator by \p n positions, which must be the total number of positions + * upddated in the state by the thread block, for this invocation. + * + * Note : + * Thread indices must range from 0...\ n - 1. + * The number of positions updated may not exceed 256. + * A thread block may update more than one state, but a given state may not be updated by more than one thread block. + * + * \param state - Pointer to state to update + * \param index - Index (0..255) of the position within the state to draw from and update + * \param n - The total number of postions in this state that are being updated by this invocation + * + * \return 32-bits of pseudorandomness as an unsigned int, all bits valid to use. + */ +QUALIFIERS unsigned int curand_mtgp32_specific(curandStateMtgp32_t *state, unsigned char index, unsigned char n) +{ + unsigned int t; + int pos = state->k->pos_tbl[state->pIdx]; + unsigned int r; + unsigned int o; + + t = index; + r = para_rec(state->k, state->s[(t + state->offset) & MTGP32_STATE_MASK], + state->s[(t + state->offset + 1) & MTGP32_STATE_MASK], + state->s[(t + state->offset + pos) & MTGP32_STATE_MASK], + state->pIdx); + + state->s[(t + state->offset + MTGPDC_N) & MTGP32_STATE_MASK] = r; + o = temper(state->k, r, + state->s[(t + state->offset + pos -1) & MTGP32_STATE_MASK], + state->pIdx); +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + if (index == 0) + { + state->offset = (state->offset + n) & MTGP32_STATE_MASK; + } +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + return o; +} +/** + * \brief Return a uniformly distributed float from a mtgp32 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the mtgp32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * Note: This alternate derivation of a uniform float is provided for completeness + * with the original source + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_mtgp32_single(curandStateMtgp32_t *state) +{ + unsigned int t; + unsigned int d; + int pos = state->k->pos_tbl[state->pIdx]; + unsigned int r; + unsigned int o_u; + float o_f; + + + t = blockDim.z * blockDim.y; + d = t * blockDim.x; + //assert( d <= 256 ); + t += threadIdx.x; + r = para_rec(state->k, state->s[(t + state->offset) & MTGP32_STATE_MASK], + state->s[(t + state->offset + 1) & MTGP32_STATE_MASK], + state->s[(t + state->offset + pos) & MTGP32_STATE_MASK], + state->pIdx); + + state->s[t] = r; + o_u = temper_single(state->k, r, + state->s[(t + state->offset + pos -1) & MTGP32_STATE_MASK], + state->pIdx); +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + if (threadIdx.x == 0) + { + state->offset = (state->offset + d) & MTGP32_STATE_MASK; + } +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + memcpy(&o_f, &o_u, sizeof(o_u)); + return o_f; +} + +/** + * \brief Return a uniformly distributed float from a specific position in a mtgp32 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from position \p index of the mtgp32 generator in \p state, and + * increment position of generator by \p n positions, which must be the total number of positions + * upddated in the state by the thread block, for this invocation. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * Note 1: + * Thread indices must range from 0...\p n - 1. + * The number of positions updated may not exceed 256. + * A thread block may update more than one state, but a given state may not be updated by more than one thread block. + * + * Note 2: This alternate derivation of a uniform float is provided for completeness + * with the original source + * + * \param state - Pointer to state to update + * \param index - Index (0..255) of the position within the state to draw from and update + * \param n - The total number of postions in this state that are being updated by this invocation + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_mtgp32_single_specific(curandStateMtgp32_t *state, unsigned char index, unsigned char n) +{ + unsigned int t; + int pos = state->k->pos_tbl[state->pIdx]; + unsigned int r; + unsigned int o_u; + float o_f; + + t = index; + r = para_rec(state->k, state->s[(t + state->offset) & MTGP32_STATE_MASK], + state->s[(t + state->offset + 1) & MTGP32_STATE_MASK], + state->s[(t + state->offset + pos) & MTGP32_STATE_MASK], + state->pIdx); + + state->s[t] = r; + o_u = temper_single(state->k, r, + state->s[(t + state->offset + pos -1) & MTGP32_STATE_MASK], + state->pIdx); +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + if (threadIdx.x == 0) + { + state->offset = (state->offset + n) & MTGP32_STATE_MASK; + } +NV_IF_TARGET(NV_IS_DEVICE, + __syncthreads(); +) + memcpy(&o_f, &o_u, sizeof(o_u)); + return o_f; +} + +/** @} */ + +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32dc_p_11213.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32dc_p_11213.h new file mode 100644 index 0000000000000000000000000000000000000000..56a8994c7f2016e4cd2bed77cf6b6516a42f26be --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_mtgp32dc_p_11213.h @@ -0,0 +1,11710 @@ +/* + * Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * Multiple sets of generator parameters for Mersenne Twister + * with period 2**11213 -1 + */ +/* + * Copyright (c) 2009, 2010 Mutsuo Saito, Makoto Matsumoto and Hiroshima + * University. All rights reserved. + * Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima + * University and University of Tokyo. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the Hiroshima University nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !defined CURAND_MTGP32DC_P_11213_H +#define CURAND_MTGP32DC_P_11213_H + +#include "curand_mtgp32.h" + + +#if (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +inline const int mtgpdc_params_11213_num = 200; +#else +static const int mtgpdc_params_11213_num = 200; +#endif + +#if (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +inline mtgp32_params_fast_t mtgp32dc_params_fast_11213[] +#else +static mtgp32_params_fast_t mtgp32dc_params_fast_11213[] +#endif + = { + { + /* No.0 delta:1599 weight:665 */ + 11213, + 88, + 19, + 5, + {(0x00000000), + (0xaba4d62c), + (0xbb076f87), + (0x10a3b9ab), + (0x22000000), + (0x89a4d62c), + (0x99076f87), + (0x32a3b9ab), + (0x000095ba), + (0xaba44396), + (0xbb07fa3d), + (0x10a32c11), + (0x220095ba), + (0x89a44396), + (0x9907fa3d), + (0x32a32c11)}, + {(0x00000000), + (0x06100000), + (0x25d80000), + (0x23c80000), + (0x282c0000), + (0x2e3c0000), + (0x0df40000), + (0x0be40000), + (0x3302de00), + (0x3512de00), + (0x16dade00), + (0x10cade00), + (0x1b2ede00), + (0x1d3ede00), + (0x3ef6de00), + (0x38e6de00)}, + {(0x3f800000), + (0x3f830800), + (0x3f92ec00), + (0x3f91e400), + (0x3f941600), + (0x3f971e00), + (0x3f86fa00), + (0x3f85f200), + (0x3f99816f), + (0x3f9a896f), + (0x3f8b6d6f), + (0x3f88656f), + (0x3f8d976f), + (0x3f8e9f6f), + (0x3f9f7b6f), + (0x3f9c736f)}, + (0xfff80000), + {0xcb,0xb0,0x3f,0xaa,0x65,0x0d,0xbd,0x1c,0x8c,0xc2, + 0x91,0x00,0x87,0x25,0x7f,0xf8,0x6f,0x23,0xf2,0x18,0x00} + }, + { + /* No.1 delta:1185 weight:1129 */ + 11213, + 84, + 15, + 12, + {(0x00000000), + (0x9a975707), + (0x75c21b11), + (0xef554c16), + (0x15500019), + (0x8fc7571e), + (0x60921b08), + (0xfa054c0f), + (0x0000d269), + (0x9a97856e), + (0x75c2c978), + (0xef559e7f), + (0x1550d270), + (0x8fc78577), + (0x6092c961), + (0xfa059e66)}, + {(0x00000000), + (0x00646c00), + (0x0810f000), + (0x08749c00), + (0x37028000), + (0x3766ec00), + (0x3f127000), + (0x3f761c00), + (0x00505e00), + (0x00343200), + (0x0840ae00), + (0x0824c200), + (0x3752de00), + (0x3736b200), + (0x3f422e00), + (0x3f264200)}, + {(0x3f800000), + (0x3f803236), + (0x3f840878), + (0x3f843a4e), + (0x3f9b8140), + (0x3f9bb376), + (0x3f9f8938), + (0x3f9fbb0e), + (0x3f80282f), + (0x3f801a19), + (0x3f842057), + (0x3f841261), + (0x3f9ba96f), + (0x3f9b9b59), + (0x3f9fa117), + (0x3f9f9321)}, + (0xfff80000), + {0x53,0xe0,0x89,0xe0,0x47,0x42,0x00,0xbd,0xe9,0x04, + 0xc9,0x11,0x5c,0xe3,0x97,0x94,0x94,0xd8,0xbb,0xfc,0x00} + }, + { + /* No.2 delta:2848 weight:755 */ + 11213, + 25, + 4, + 18, + {(0x00000000), + (0x507cbad4), + (0xe742103b), + (0xb73eaaef), + (0x71c00027), + (0x21bcbaf3), + (0x9682101c), + (0xc6feaac8), + (0x0000dd6c), + (0x507c67b8), + (0xe742cd57), + (0xb73e7783), + (0x71c0dd4b), + (0x21bc679f), + (0x9682cd70), + (0xc6fe77a4)}, + {(0x00000000), + (0x04210200), + (0x08040000), + (0x0c250200), + (0x11400000), + (0x15610200), + (0x19440000), + (0x1d650200), + (0x206f1e00), + (0x244e1c00), + (0x286b1e00), + (0x2c4a1c00), + (0x312f1e00), + (0x350e1c00), + (0x392b1e00), + (0x3d0a1c00)}, + {(0x3f800000), + (0x3f821081), + (0x3f840200), + (0x3f861281), + (0x3f88a000), + (0x3f8ab081), + (0x3f8ca200), + (0x3f8eb281), + (0x3f90378f), + (0x3f92270e), + (0x3f94358f), + (0x3f96250e), + (0x3f98978f), + (0x3f9a870e), + (0x3f9c958f), + (0x3f9e850e)}, + (0xfff80000), + {0x9e,0x64,0xa3,0x28,0x10,0x66,0x35,0x72,0xe3,0x07, + 0xf7,0xcf,0x5a,0xe3,0x57,0x6f,0x90,0x0c,0x28,0x79,0x00} + }, + { + /* No.3 delta:1100 weight:1261 */ + 11213, + 42, + 20, + 9, + {(0x00000000), + (0x3ef0ef20), + (0x9fddd9ea), + (0xa12d36ca), + (0x10300036), + (0x2ec0ef16), + (0x8fedd9dc), + (0xb11d36fc), + (0x00005ced), + (0x3ef0b3cd), + (0x9fdd8507), + (0xa12d6a27), + (0x10305cdb), + (0x2ec0b3fb), + (0x8fed8531), + (0xb11d6a11)}, + {(0x00000000), + (0x24470c00), + (0x00268200), + (0x24618e00), + (0x00530000), + (0x24140c00), + (0x00758200), + (0x24328e00), + (0x105c5e00), + (0x341b5200), + (0x107adc00), + (0x343dd000), + (0x100f5e00), + (0x34485200), + (0x1029dc00), + (0x346ed000)}, + {(0x3f800000), + (0x3f922386), + (0x3f801341), + (0x3f9230c7), + (0x3f802980), + (0x3f920a06), + (0x3f803ac1), + (0x3f921947), + (0x3f882e2f), + (0x3f9a0da9), + (0x3f883d6e), + (0x3f9a1ee8), + (0x3f8807af), + (0x3f9a2429), + (0x3f8814ee), + (0x3f9a3768)}, + (0xfff80000), + {0x9b,0x1d,0x8b,0x59,0x56,0x8e,0x7b,0x75,0x24,0x4a, + 0xaf,0x49,0x6e,0xcf,0xcb,0x5d,0x67,0x00,0x31,0xac,0x00} + }, + { + /* No.4 delta:5389 weight:1871 */ + 11213, + 22, + 1, + 5, + {(0x00000000), + (0xb004feb9), + (0x03b7c894), + (0xb3b3362d), + (0x0750004d), + (0xb754fef4), + (0x04e7c8d9), + (0xb4e33660), + (0x000049e4), + (0xb004b75d), + (0x03b78170), + (0xb3b37fc9), + (0x075049a9), + (0xb754b710), + (0x04e7813d), + (0xb4e37f84)}, + {(0x00000000), + (0x48698800), + (0x04010000), + (0x4c688800), + (0x60340000), + (0x285d8800), + (0x64350000), + (0x2c5c8800), + (0x20065e00), + (0x686fd600), + (0x24075e00), + (0x6c6ed600), + (0x40325e00), + (0x085bd600), + (0x44335e00), + (0x0c5ad600)}, + {(0x3f800000), + (0x3fa434c4), + (0x3f820080), + (0x3fa63444), + (0x3fb01a00), + (0x3f942ec4), + (0x3fb21a80), + (0x3f962e44), + (0x3f90032f), + (0x3fb437eb), + (0x3f9203af), + (0x3fb6376b), + (0x3fa0192f), + (0x3f842deb), + (0x3fa219af), + (0x3f862d6b)}, + (0xfff80000), + {0xbb,0x80,0x47,0x21,0x2c,0xbd,0xd4,0x7b,0xf3,0xb3, + 0xbd,0x4d,0x05,0x36,0xf5,0x4d,0xe7,0x89,0xdc,0x11,0x00} + }, + { + /* No.5 delta:2280 weight:1243 */ + 11213, + 11, + 16, + 1, + {(0x00000000), + (0x646a361c), + (0xe36e4823), + (0x87047e3f), + (0x2b20005f), + (0x4f4a3643), + (0xc84e487c), + (0xac247e60), + (0x0000caac), + (0x646afcb0), + (0xe36e828f), + (0x8704b493), + (0x2b20caf3), + (0x4f4afcef), + (0xc84e82d0), + (0xac24b4cc)}, + {(0x00000000), + (0xd49c4200), + (0x0b98f000), + (0xdf04b200), + (0x24007200), + (0xf09c3000), + (0x2f988200), + (0xfb04c000), + (0x5d311e00), + (0x89ad5c00), + (0x56a9ee00), + (0x8235ac00), + (0x79316c00), + (0xadad2e00), + (0x72a99c00), + (0xa635de00)}, + {(0x3f800000), + (0x3fea4e21), + (0x3f85cc78), + (0x3fef8259), + (0x3f920039), + (0x3ff84e18), + (0x3f97cc41), + (0x3ffd8260), + (0x3fae988f), + (0x3fc4d6ae), + (0x3fab54f7), + (0x3fc11ad6), + (0x3fbc98b6), + (0x3fd6d697), + (0x3fb954ce), + (0x3fd31aef)}, + (0xfff80000), + {0x24,0x94,0x81,0x62,0xb4,0x6f,0x10,0x4e,0x66,0xd1, + 0xb4,0xdd,0xa0,0x92,0x2e,0xdf,0x8d,0x6b,0x03,0xa3,0x00} + }, + { + /* No.6 delta:722 weight:1357 */ + 11213, + 76, + 16, + 6, + {(0x00000000), + (0x1bb96b3c), + (0x7c6323a4), + (0x67da4898), + (0x22400061), + (0x39f96b5d), + (0x5e2323c5), + (0x459a48f9), + (0x00004c61), + (0x1bb9275d), + (0x7c636fc5), + (0x67da04f9), + (0x22404c00), + (0x39f9273c), + (0x5e236fa4), + (0x459a0498)}, + {(0x00000000), + (0x08258800), + (0x1042c000), + (0x18674800), + (0x00203000), + (0x0805b800), + (0x1062f000), + (0x18477800), + (0x70c01e00), + (0x78e59600), + (0x6082de00), + (0x68a75600), + (0x70e02e00), + (0x78c5a600), + (0x60a2ee00), + (0x68876600)}, + {(0x3f800000), + (0x3f8412c4), + (0x3f882160), + (0x3f8c33a4), + (0x3f801018), + (0x3f8402dc), + (0x3f883178), + (0x3f8c23bc), + (0x3fb8600f), + (0x3fbc72cb), + (0x3fb0416f), + (0x3fb453ab), + (0x3fb87017), + (0x3fbc62d3), + (0x3fb05177), + (0x3fb443b3)}, + (0xfff80000), + {0x06,0x1a,0x0a,0x3e,0x05,0xb0,0xd2,0xab,0x76,0xef, + 0xe5,0xf6,0xe4,0x09,0x02,0x41,0x4b,0x21,0xef,0x76,0x00} + }, + { + /* No.7 delta:3952 weight:825 */ + 11213, + 11, + 15, + 16, + {(0x00000000), + (0xa49b7ddb), + (0xbc75e45f), + (0x18ee9984), + (0x75600076), + (0xd1fb7dad), + (0xc915e429), + (0x6d8e99f2), + (0x0000c4f9), + (0xa49bb922), + (0xbc7520a6), + (0x18ee5d7d), + (0x7560c48f), + (0xd1fbb954), + (0xc91520d0), + (0x6d8e5d0b)}, + {(0x00000000), + (0xf0015000), + (0x0a4c2c00), + (0xfa4d7c00), + (0x0482b000), + (0xf483e000), + (0x0ece9c00), + (0xfecfcc00), + (0x45105e00), + (0xb5110e00), + (0x4f5c7200), + (0xbf5d2200), + (0x4192ee00), + (0xb193be00), + (0x4bdec200), + (0xbbdf9200)}, + {(0x3f800000), + (0x3ff800a8), + (0x3f852616), + (0x3ffd26be), + (0x3f824158), + (0x3ffa41f0), + (0x3f87674e), + (0x3fff67e6), + (0x3fa2882f), + (0x3fda8887), + (0x3fa7ae39), + (0x3fdfae91), + (0x3fa0c977), + (0x3fd8c9df), + (0x3fa5ef61), + (0x3fddefc9)}, + (0xfff80000), + {0xa9,0x6f,0x34,0xf9,0xdd,0xff,0x0a,0x48,0x3c,0x3f, + 0x3e,0x6f,0x74,0x70,0x37,0x33,0x19,0xe4,0x24,0x9b,0x00} + }, + { + /* No.8 delta:4274 weight:1347 */ + 11213, + 42, + 6, + 11, + {(0x00000000), + (0x311b3c94), + (0xa1e0c93f), + (0x90fbf5ab), + (0x3c600082), + (0x0d7b3c16), + (0x9d80c9bd), + (0xac9bf529), + (0x0000b622), + (0x311b8ab6), + (0xa1e07f1d), + (0x90fb4389), + (0x3c60b6a0), + (0x0d7b8a34), + (0x9d807f9f), + (0xac9b430b)}, + {(0x00000000), + (0x80000000), + (0x00000000), + (0x80000000), + (0xc0000000), + (0x40000000), + (0xc0000000), + (0x40000000), + (0x20001e00), + (0xa0001e00), + (0x20001e00), + (0xa0001e00), + (0xe0001e00), + (0x60001e00), + (0xe0001e00), + (0x60001e00)}, + {(0x3f800000), + (0x3fc00000), + (0x3f800000), + (0x3fc00000), + (0x3fe00000), + (0x3fa00000), + (0x3fe00000), + (0x3fa00000), + (0x3f90000f), + (0x3fd0000f), + (0x3f90000f), + (0x3fd0000f), + (0x3ff0000f), + (0x3fb0000f), + (0x3ff0000f), + (0x3fb0000f)}, + (0xfff80000), + {0x3c,0x5a,0x73,0x0e,0xab,0x68,0x32,0x57,0x6f,0xe6, + 0x1d,0x93,0x6e,0xbd,0xef,0x1a,0x6f,0x25,0x1f,0x70,0x00} + }, + { + /* No.9 delta:1902 weight:1001 */ + 11213, + 60, + 6, + 11, + {(0x00000000), + (0xbc8ed6c0), + (0x4d9fbb3d), + (0xf1116dfd), + (0x8e70009d), + (0x32fed65d), + (0xc3efbba0), + (0x7f616d60), + (0x0000a00a), + (0xbc8e76ca), + (0x4d9f1b37), + (0xf111cdf7), + (0x8e70a097), + (0x32fe7657), + (0xc3ef1baa), + (0x7f61cd6a)}, + {(0x00000000), + (0xc0400400), + (0x00220000), + (0xc0620400), + (0x303e0000), + (0xf07e0400), + (0x301c0000), + (0xf05c0400), + (0x40021e00), + (0x80421a00), + (0x40201e00), + (0x80601a00), + (0x703c1e00), + (0xb07c1a00), + (0x701e1e00), + (0xb05e1a00)}, + {(0x3f800000), + (0x3fe02002), + (0x3f801100), + (0x3fe03102), + (0x3f981f00), + (0x3ff83f02), + (0x3f980e00), + (0x3ff82e02), + (0x3fa0010f), + (0x3fc0210d), + (0x3fa0100f), + (0x3fc0300d), + (0x3fb81e0f), + (0x3fd83e0d), + (0x3fb80f0f), + (0x3fd82f0d)}, + (0xfff80000), + {0x83,0x62,0x6c,0x11,0xe4,0x19,0x2b,0x9b,0x87,0x4d, + 0x8e,0x68,0xde,0x69,0x56,0xc5,0x44,0x33,0x4f,0x20,0x00} + }, + { + /* No.10 delta:1148 weight:927 */ + 11213, + 45, + 12, + 13, + {(0x00000000), + (0x06bc3338), + (0xdde8b9f9), + (0xdb548ac1), + (0xfb2000a5), + (0xfd9c339d), + (0x26c8b95c), + (0x20748a64), + (0x0000a4ec), + (0x06bc97d4), + (0xdde81d15), + (0xdb542e2d), + (0xfb20a449), + (0xfd9c9771), + (0x26c81db0), + (0x20742e88)}, + {(0x00000000), + (0x0c494c00), + (0x42040c00), + (0x4e4d4000), + (0x20090800), + (0x2c404400), + (0x620d0400), + (0x6e444800), + (0x10409e00), + (0x1c09d200), + (0x52449200), + (0x5e0dde00), + (0x30499600), + (0x3c00da00), + (0x724d9a00), + (0x7e04d600)}, + {(0x3f800000), + (0x3f8624a6), + (0x3fa10206), + (0x3fa726a0), + (0x3f900484), + (0x3f962022), + (0x3fb10682), + (0x3fb72224), + (0x3f88204f), + (0x3f8e04e9), + (0x3fa92249), + (0x3faf06ef), + (0x3f9824cb), + (0x3f9e006d), + (0x3fb926cd), + (0x3fbf026b)}, + (0xfff80000), + {0xf8,0x39,0x8a,0x36,0x0f,0x90,0x4f,0x3c,0x04,0x0c, + 0x0a,0x02,0xd4,0x04,0x1b,0xc9,0xc4,0x8e,0x15,0x55,0x00} + }, + { + /* No.11 delta:2163 weight:1669 */ + 11213, + 80, + 6, + 9, + {(0x00000000), + (0x247f444d), + (0xb70a5ab0), + (0x93751efd), + (0xc44000b5), + (0xe03f44f8), + (0x734a5a05), + (0x57351e48), + (0x0000554f), + (0x247f1102), + (0xb70a0fff), + (0x93754bb2), + (0xc44055fa), + (0xe03f11b7), + (0x734a0f4a), + (0x57354b07)}, + {(0x00000000), + (0x30200a00), + (0x106c0000), + (0x204c0a00), + (0x00180400), + (0x30380e00), + (0x10740400), + (0x20540e00), + (0x100a1e00), + (0x202a1400), + (0x00661e00), + (0x30461400), + (0x10121a00), + (0x20321000), + (0x007e1a00), + (0x305e1000)}, + {(0x3f800000), + (0x3f981005), + (0x3f883600), + (0x3f902605), + (0x3f800c02), + (0x3f981c07), + (0x3f883a02), + (0x3f902a07), + (0x3f88050f), + (0x3f90150a), + (0x3f80330f), + (0x3f98230a), + (0x3f88090d), + (0x3f901908), + (0x3f803f0d), + (0x3f982f08)}, + (0xfff80000), + {0x98,0xb0,0x30,0x32,0xcf,0x75,0x63,0xeb,0x3a,0xb6, + 0x4f,0x70,0x47,0x4e,0x6a,0xd1,0x7b,0x40,0xbd,0x90,0x00} + }, + { + /* No.12 delta:4985 weight:689 */ + 11213, + 81, + 8, + 18, + {(0x00000000), + (0xcdcab880), + (0xdedf1226), + (0x1315aaa6), + (0xd17000c6), + (0x1cbab846), + (0x0faf12e0), + (0xc265aa60), + (0x0000b647), + (0xcdca0ec7), + (0xdedfa461), + (0x13151ce1), + (0xd170b681), + (0x1cba0e01), + (0x0fafa4a7), + (0xc2651c27)}, + {(0x00000000), + (0x601c0000), + (0x08780000), + (0x68640000), + (0x00740000), + (0x60680000), + (0x080c0000), + (0x68100000), + (0x00a01e00), + (0x60bc1e00), + (0x08d81e00), + (0x68c41e00), + (0x00d41e00), + (0x60c81e00), + (0x08ac1e00), + (0x68b01e00)}, + {(0x3f800000), + (0x3fb00e00), + (0x3f843c00), + (0x3fb43200), + (0x3f803a00), + (0x3fb03400), + (0x3f840600), + (0x3fb40800), + (0x3f80500f), + (0x3fb05e0f), + (0x3f846c0f), + (0x3fb4620f), + (0x3f806a0f), + (0x3fb0640f), + (0x3f84560f), + (0x3fb4580f)}, + (0xfff80000), + {0x90,0xf2,0x51,0xc2,0x2d,0xc4,0x52,0x73,0x15,0xfa, + 0xeb,0xc3,0x64,0x51,0x48,0xf7,0xb1,0x26,0x38,0xb4,0x00} + }, + { + /* No.13 delta:6473 weight:513 */ + 11213, + 16, + 1, + 19, + {(0x00000000), + (0x2310a4f2), + (0x91c8cf8c), + (0xb2d86b7e), + (0x89c000d1), + (0xaad0a423), + (0x1808cf5d), + (0x3b186baf), + (0x0000f299), + (0x2310566b), + (0x91c83d15), + (0xb2d899e7), + (0x89c0f248), + (0xaad056ba), + (0x18083dc4), + (0x3b189936)}, + {(0x00000000), + (0x4c020000), + (0xa6800000), + (0xea820000), + (0x15000000), + (0x59020000), + (0xb3800000), + (0xff820000), + (0x29201e00), + (0x65221e00), + (0x8fa01e00), + (0xc3a21e00), + (0x3c201e00), + (0x70221e00), + (0x9aa01e00), + (0xd6a21e00)}, + {(0x3f800000), + (0x3fa60100), + (0x3fd34000), + (0x3ff54100), + (0x3f8a8000), + (0x3fac8100), + (0x3fd9c000), + (0x3fffc100), + (0x3f94900f), + (0x3fb2910f), + (0x3fc7d00f), + (0x3fe1d10f), + (0x3f9e100f), + (0x3fb8110f), + (0x3fcd500f), + (0x3feb510f)}, + (0xfff80000), + {0x89,0x7c,0x3c,0xc6,0x3d,0x0a,0xad,0xf2,0xa0,0xf5, + 0x0a,0x4c,0x4e,0x83,0xc5,0x45,0xdb,0xcb,0xb5,0x98,0x00} + }, + { + /* No.14 delta:1389 weight:725 */ + 11213, + 63, + 14, + 18, + {(0x00000000), + (0x81c7909c), + (0xecb46b0c), + (0x6d73fb90), + (0xf33000ef), + (0x72f79073), + (0x1f846be3), + (0x9e43fb7f), + (0x0000e902), + (0x81c7799e), + (0xecb4820e), + (0x6d731292), + (0xf330e9ed), + (0x72f77971), + (0x1f8482e1), + (0x9e43127d)}, + {(0x00000000), + (0x09001000), + (0x02010000), + (0x0b011000), + (0x00201800), + (0x09200800), + (0x02211800), + (0x0b210800), + (0x30039e00), + (0x39038e00), + (0x32029e00), + (0x3b028e00), + (0x30238600), + (0x39239600), + (0x32228600), + (0x3b229600)}, + {(0x3f800000), + (0x3f848008), + (0x3f810080), + (0x3f858088), + (0x3f80100c), + (0x3f849004), + (0x3f81108c), + (0x3f859084), + (0x3f9801cf), + (0x3f9c81c7), + (0x3f99014f), + (0x3f9d8147), + (0x3f9811c3), + (0x3f9c91cb), + (0x3f991143), + (0x3f9d914b)}, + (0xfff80000), + {0xb7,0x0b,0xee,0xcb,0xc6,0x29,0x7c,0xe3,0xc5,0x58, + 0x71,0xe7,0x4b,0xe5,0xc9,0x63,0xbd,0xa4,0x75,0xc7,0x00} + }, + { + /* No.15 delta:8365 weight:1135 */ + 11213, + 38, + 28, + 1, + {(0x00000000), + (0xe56c7b3b), + (0x759d951b), + (0x90f1ee20), + (0x1a6000fa), + (0xff0c7bc1), + (0x6ffd95e1), + (0x8a91eeda), + (0x00004474), + (0xe56c3f4f), + (0x759dd16f), + (0x90f1aa54), + (0x1a60448e), + (0xff0c3fb5), + (0x6ffdd195), + (0x8a91aaae)}, + {(0x00000000), + (0xc0410a00), + (0xe70c0400), + (0x274d0e00), + (0xfa3e8000), + (0x3a7f8a00), + (0x1d328400), + (0xdd738e00), + (0x20801e00), + (0xe0c11400), + (0xc78c1a00), + (0x07cd1000), + (0xdabe9e00), + (0x1aff9400), + (0x3db29a00), + (0xfdf39000)}, + {(0x3f800000), + (0x3fe02085), + (0x3ff38602), + (0x3f93a687), + (0x3ffd1f40), + (0x3f9d3fc5), + (0x3f8e9942), + (0x3feeb9c7), + (0x3f90400f), + (0x3ff0608a), + (0x3fe3c60d), + (0x3f83e688), + (0x3fed5f4f), + (0x3f8d7fca), + (0x3f9ed94d), + (0x3ffef9c8)}, + (0xfff80000), + {0xd2,0xa4,0x8f,0xf8,0x54,0x0f,0xe3,0x14,0x17,0xeb, + 0x17,0x78,0x41,0x78,0x69,0xbb,0x4b,0x01,0x85,0x8e,0x00} + }, + { + /* No.16 delta:6253 weight:641 */ + 11213, + 3, + 30, + 2, + {(0x00000000), + (0x83a2a3cb), + (0x52e0a64c), + (0xd1420587), + (0x9850010b), + (0x1bf2a2c0), + (0xcab0a747), + (0x4912048c), + (0x0000aaa5), + (0x83a2096e), + (0x52e00ce9), + (0xd142af22), + (0x9850abae), + (0x1bf20865), + (0xcab00de2), + (0x4912ae29)}, + {(0x00000000), + (0xe9100000), + (0x94d00000), + (0x7dc00000), + (0xdbcc0000), + (0x32dc0000), + (0x4f1c0000), + (0xa60c0000), + (0x09d01e00), + (0xe0c01e00), + (0x9d001e00), + (0x74101e00), + (0xd21c1e00), + (0x3b0c1e00), + (0x46cc1e00), + (0xafdc1e00)}, + {(0x3f800000), + (0x3ff48800), + (0x3fca6800), + (0x3fbee000), + (0x3fede600), + (0x3f996e00), + (0x3fa78e00), + (0x3fd30600), + (0x3f84e80f), + (0x3ff0600f), + (0x3fce800f), + (0x3fba080f), + (0x3fe90e0f), + (0x3f9d860f), + (0x3fa3660f), + (0x3fd7ee0f)}, + (0xfff80000), + {0xa6,0xc6,0x12,0x64,0xaf,0x79,0x40,0x50,0x7b,0xb9, + 0xa9,0xfa,0x9a,0xc0,0x7a,0xaf,0x63,0x83,0x39,0x6c,0x00} + }, + { + /* No.17 delta:5329 weight:467 */ + 11213, + 55, + 1, + 16, + {(0x00000000), + (0x2ce39cc8), + (0x6312ea87), + (0x4ff1764f), + (0x9ef00113), + (0xb2139ddb), + (0xfde2eb94), + (0xd101775c), + (0x00007ddc), + (0x2ce3e114), + (0x6312975b), + (0x4ff10b93), + (0x9ef07ccf), + (0xb213e007), + (0xfde29648), + (0xd1010a80)}, + {(0x00000000), + (0x0c021000), + (0xe3400000), + (0xef421000), + (0x02000000), + (0x0e021000), + (0xe1400000), + (0xed421000), + (0x50a01e00), + (0x5ca20e00), + (0xb3e01e00), + (0xbfe20e00), + (0x52a01e00), + (0x5ea20e00), + (0xb1e01e00), + (0xbde20e00)}, + {(0x3f800000), + (0x3f860108), + (0x3ff1a000), + (0x3ff7a108), + (0x3f810000), + (0x3f870108), + (0x3ff0a000), + (0x3ff6a108), + (0x3fa8500f), + (0x3fae5107), + (0x3fd9f00f), + (0x3fdff107), + (0x3fa9500f), + (0x3faf5107), + (0x3fd8f00f), + (0x3fdef107)}, + (0xfff80000), + {0xe4,0xb8,0x1d,0x0f,0x15,0xe2,0xd6,0xd2,0x30,0x67, + 0x18,0x06,0x38,0xd0,0x63,0x09,0x4d,0xc1,0xaa,0x48,0x00} + }, + { + /* No.18 delta:3046 weight:699 */ + 11213, + 9, + 9, + 15, + {(0x00000000), + (0x228294e5), + (0xc1861e7b), + (0xe3048a9e), + (0x6250012a), + (0x40d295cf), + (0xa3d61f51), + (0x81548bb4), + (0x00005800), + (0x2282cce5), + (0xc186467b), + (0xe304d29e), + (0x6250592a), + (0x40d2cdcf), + (0xa3d64751), + (0x8154d3b4)}, + {(0x00000000), + (0x57910c00), + (0xd07cc400), + (0x87edc800), + (0xa8036800), + (0xff926400), + (0x787fac00), + (0x2feea000), + (0x00521e00), + (0x57c31200), + (0xd02eda00), + (0x87bfd600), + (0xa8517600), + (0xffc07a00), + (0x782db200), + (0x2fbcbe00)}, + {(0x3f800000), + (0x3fabc886), + (0x3fe83e62), + (0x3fc3f6e4), + (0x3fd401b4), + (0x3fffc932), + (0x3fbc3fd6), + (0x3f97f750), + (0x3f80290f), + (0x3fabe189), + (0x3fe8176d), + (0x3fc3dfeb), + (0x3fd428bb), + (0x3fffe03d), + (0x3fbc16d9), + (0x3f97de5f)}, + (0xfff80000), + {0x3d,0xb7,0x41,0x11,0xf8,0x6e,0xe6,0x89,0x71,0x95, + 0x3b,0x7c,0x3a,0x38,0x60,0x12,0x4c,0xec,0xaa,0x83,0x00} + }, + { + /* No.19 delta:786 weight:1431 */ + 11213, + 75, + 17, + 6, + {(0x00000000), + (0x819ee5dc), + (0x4ffaa079), + (0xce6445a5), + (0xe6300137), + (0x67aee4eb), + (0xa9caa14e), + (0x28544492), + (0x00008a74), + (0x819e6fa8), + (0x4ffa2a0d), + (0xce64cfd1), + (0xe6308b43), + (0x67ae6e9f), + (0xa9ca2b3a), + (0x2854cee6)}, + {(0x00000000), + (0x98018000), + (0x20039800), + (0xb8021800), + (0x40104000), + (0xd811c000), + (0x6013d800), + (0xf8125800), + (0x00033e00), + (0x9802be00), + (0x2000a600), + (0xb8012600), + (0x40137e00), + (0xd812fe00), + (0x6010e600), + (0xf8116600)}, + {(0x3f800000), + (0x3fcc00c0), + (0x3f9001cc), + (0x3fdc010c), + (0x3fa00820), + (0x3fec08e0), + (0x3fb009ec), + (0x3ffc092c), + (0x3f80019f), + (0x3fcc015f), + (0x3f900053), + (0x3fdc0093), + (0x3fa009bf), + (0x3fec097f), + (0x3fb00873), + (0x3ffc08b3)}, + (0xfff80000), + {0x90,0xc1,0xc9,0xe7,0xea,0xaf,0xd9,0x5b,0x1f,0x93, + 0x8d,0xcd,0x9b,0xf4,0xbb,0x91,0x58,0xb2,0x03,0x70,0x00} + }, + { + /* No.20 delta:846 weight:909 */ + 11213, + 70, + 15, + 6, + {(0x00000000), + (0xc56d80c5), + (0x4bb862e9), + (0x8ed5e22c), + (0x92e00143), + (0x578d8186), + (0xd95863aa), + (0x1c35e36f), + (0x000095b5), + (0xc56d1570), + (0x4bb8f75c), + (0x8ed57799), + (0x92e094f6), + (0x578d1433), + (0xd958f61f), + (0x1c3576da)}, + {(0x00000000), + (0x20642000), + (0x2530d800), + (0x0554f800), + (0x01a05200), + (0x21c47200), + (0x24908a00), + (0x04f4aa00), + (0x00521e00), + (0x20363e00), + (0x2562c600), + (0x0506e600), + (0x01f24c00), + (0x21966c00), + (0x24c29400), + (0x04a6b400)}, + {(0x3f800000), + (0x3f903210), + (0x3f92986c), + (0x3f82aa7c), + (0x3f80d029), + (0x3f90e239), + (0x3f924845), + (0x3f827a55), + (0x3f80290f), + (0x3f901b1f), + (0x3f92b163), + (0x3f828373), + (0x3f80f926), + (0x3f90cb36), + (0x3f92614a), + (0x3f82535a)}, + (0xfff80000), + {0xd6,0xb1,0xe1,0x27,0x40,0x54,0x48,0x67,0x71,0xe5, + 0x2a,0x38,0xbf,0xa7,0x93,0x82,0x17,0xcd,0x71,0x33,0x00} + }, + { + /* No.21 delta:1909 weight:729 */ + 11213, + 63, + 15, + 17, + {(0x00000000), + (0x3c495454), + (0xf3a1ddf0), + (0xcfe889a4), + (0x1b200159), + (0x2769550d), + (0xe881dca9), + (0xd4c888fd), + (0x0000cd3b), + (0x3c49996f), + (0xf3a110cb), + (0xcfe8449f), + (0x1b20cc62), + (0x27699836), + (0xe8811192), + (0xd4c845c6)}, + {(0x00000000), + (0x08027000), + (0x9651d400), + (0x9e53a400), + (0x0040a400), + (0x0842d400), + (0x96117000), + (0x9e130000), + (0x006e9e00), + (0x086cee00), + (0x963f4a00), + (0x9e3d3a00), + (0x002e3a00), + (0x082c4a00), + (0x967fee00), + (0x9e7d9e00)}, + {(0x3f800000), + (0x3f840138), + (0x3fcb28ea), + (0x3fcf29d2), + (0x3f802052), + (0x3f84216a), + (0x3fcb08b8), + (0x3fcf0980), + (0x3f80374f), + (0x3f843677), + (0x3fcb1fa5), + (0x3fcf1e9d), + (0x3f80171d), + (0x3f841625), + (0x3fcb3ff7), + (0x3fcf3ecf)}, + (0xfff80000), + {0xc8,0xdc,0x70,0x0a,0x23,0xa5,0x20,0x35,0xa2,0xd7, + 0xd1,0x53,0xfc,0xe0,0xc1,0xde,0xc0,0x2b,0x65,0x4d,0x00} + }, + { + /* No.22 delta:2420 weight:985 */ + 11213, + 32, + 7, + 15, + {(0x00000000), + (0xd25d9ecf), + (0xb1288d77), + (0x637513b8), + (0xc3700160), + (0x112d9faf), + (0x72588c17), + (0xa00512d8), + (0x000093d5), + (0xd25d0d1a), + (0xb1281ea2), + (0x6375806d), + (0xc37092b5), + (0x112d0c7a), + (0x72581fc2), + (0xa005810d)}, + {(0x00000000), + (0x10134200), + (0x028b0000), + (0x12984200), + (0x50480000), + (0x405b4200), + (0x52c30000), + (0x42d04200), + (0x10ee5e00), + (0x00fd1c00), + (0x12655e00), + (0x02761c00), + (0x40a65e00), + (0x50b51c00), + (0x422d5e00), + (0x523e1c00)}, + {(0x3f800000), + (0x3f8809a1), + (0x3f814580), + (0x3f894c21), + (0x3fa82400), + (0x3fa02da1), + (0x3fa96180), + (0x3fa16821), + (0x3f88772f), + (0x3f807e8e), + (0x3f8932af), + (0x3f813b0e), + (0x3fa0532f), + (0x3fa85a8e), + (0x3fa116af), + (0x3fa91f0e)}, + (0xfff80000), + {0xd0,0xc2,0xd1,0x3e,0x09,0x41,0xc7,0x9c,0x09,0x33, + 0x25,0x5f,0x84,0x21,0xc4,0xcc,0xc5,0x43,0x2a,0x14,0x00} + }, + { + /* No.23 delta:985 weight:863 */ + 11213, + 70, + 12, + 10, + {(0x00000000), + (0x6e6163b2), + (0xa3cecdea), + (0xcdafae58), + (0xb670017d), + (0xd81162cf), + (0x15becc97), + (0x7bdfaf25), + (0x0000d554), + (0x6e61b6e6), + (0xa3ce18be), + (0xcdaf7b0c), + (0xb670d429), + (0xd811b79b), + (0x15be19c3), + (0x7bdf7a71)}, + {(0x00000000), + (0x0338d800), + (0x00545800), + (0x036c8000), + (0x01521000), + (0x026ac800), + (0x01064800), + (0x023e9000), + (0x0020de00), + (0x03180600), + (0x00748600), + (0x034c5e00), + (0x0172ce00), + (0x024a1600), + (0x01269600), + (0x021e4e00)}, + {(0x3f800000), + (0x3f819c6c), + (0x3f802a2c), + (0x3f81b640), + (0x3f80a908), + (0x3f813564), + (0x3f808324), + (0x3f811f48), + (0x3f80106f), + (0x3f818c03), + (0x3f803a43), + (0x3f81a62f), + (0x3f80b967), + (0x3f81250b), + (0x3f80934b), + (0x3f810f27)}, + (0xfff80000), + {0x57,0xda,0x1e,0x1e,0x0f,0xc1,0x5c,0xac,0x32,0x8f, + 0xe4,0x94,0x24,0xf0,0x86,0x24,0x1b,0xde,0x44,0x16,0x00} + }, + { + /* No.24 delta:1573 weight:1043 */ + 11213, + 58, + 21, + 2, + {(0x00000000), + (0xa6c80c3d), + (0x3502d818), + (0x93cad425), + (0xda700189), + (0x7cb80db4), + (0xef72d991), + (0x49bad5ac), + (0x0000cb8c), + (0xa6c8c7b1), + (0x35021394), + (0x93ca1fa9), + (0xda70ca05), + (0x7cb8c638), + (0xef72121d), + (0x49ba1e20)}, + {(0x00000000), + (0xd66f0400), + (0x014ca600), + (0xd723a200), + (0x00442a00), + (0xd62b2e00), + (0x01088c00), + (0xd7678800), + (0x0c835e00), + (0xdaec5a00), + (0x0dcff800), + (0xdba0fc00), + (0x0cc77400), + (0xdaa87000), + (0x0d8bd200), + (0xdbe4d600)}, + {(0x3f800000), + (0x3feb3782), + (0x3f80a653), + (0x3feb91d1), + (0x3f802215), + (0x3feb1597), + (0x3f808446), + (0x3febb3c4), + (0x3f8641af), + (0x3fed762d), + (0x3f86e7fc), + (0x3fedd07e), + (0x3f8663ba), + (0x3fed5438), + (0x3f86c5e9), + (0x3fedf26b)}, + (0xfff80000), + {0xd3,0x5b,0x43,0x3f,0x00,0x55,0xf8,0x40,0xfe,0x8f, + 0xd0,0xe0,0xac,0x48,0x50,0xf2,0x50,0x2a,0xb7,0xcf,0x00} + }, + { + /* No.25 delta:1860 weight:1169 */ + 11213, + 33, + 7, + 10, + {(0x00000000), + (0x3f9ccf17), + (0xcdd7a2a1), + (0xf24b6db6), + (0xf9c00195), + (0xc65cce82), + (0x3417a334), + (0x0b8b6c23), + (0x00006c32), + (0x3f9ca325), + (0xcdd7ce93), + (0xf24b0184), + (0xf9c06da7), + (0xc65ca2b0), + (0x3417cf06), + (0x0b8b0011)}, + {(0x00000000), + (0x043a0400), + (0x00714000), + (0x044b4400), + (0x10408400), + (0x147a8000), + (0x1031c400), + (0x140bc000), + (0x70049e00), + (0x743e9a00), + (0x7075de00), + (0x744fda00), + (0x60441a00), + (0x647e1e00), + (0x60355a00), + (0x640f5e00)}, + {(0x3f800000), + (0x3f821d02), + (0x3f8038a0), + (0x3f8225a2), + (0x3f882042), + (0x3f8a3d40), + (0x3f8818e2), + (0x3f8a05e0), + (0x3fb8024f), + (0x3fba1f4d), + (0x3fb83aef), + (0x3fba27ed), + (0x3fb0220d), + (0x3fb23f0f), + (0x3fb01aad), + (0x3fb207af)}, + (0xfff80000), + {0x6f,0x6a,0x15,0x14,0x9e,0x4e,0xca,0xcd,0xe1,0xfb, + 0x26,0x23,0xa0,0xa9,0x21,0x22,0xca,0x8c,0x68,0x8f,0x00} + }, + { + /* No.26 delta:2274 weight:1019 */ + 11213, + 18, + 7, + 13, + {(0x00000000), + (0x83f4f835), + (0x34e8f3fa), + (0xb71c0bcf), + (0xf21001a3), + (0x71e4f996), + (0xc6f8f259), + (0x450c0a6c), + (0x00009d49), + (0x83f4657c), + (0x34e86eb3), + (0xb71c9686), + (0xf2109cea), + (0x71e464df), + (0xc6f86f10), + (0x450c9725)}, + {(0x00000000), + (0x69050000), + (0x0b0a1800), + (0x620f1800), + (0x41a06000), + (0x28a56000), + (0x4aaa7800), + (0x23af7800), + (0x046b1e00), + (0x6d6e1e00), + (0x0f610600), + (0x66640600), + (0x45cb7e00), + (0x2cce7e00), + (0x4ec16600), + (0x27c46600)}, + {(0x3f800000), + (0x3fb48280), + (0x3f85850c), + (0x3fb1078c), + (0x3fa0d030), + (0x3f9452b0), + (0x3fa5553c), + (0x3f91d7bc), + (0x3f82358f), + (0x3fb6b70f), + (0x3f87b083), + (0x3fb33203), + (0x3fa2e5bf), + (0x3f96673f), + (0x3fa760b3), + (0x3f93e233)}, + (0xfff80000), + {0x6c,0xda,0xe3,0x3d,0xac,0x72,0x40,0x41,0xca,0xa3, + 0xf7,0xdf,0xff,0x2d,0x57,0xea,0x1f,0x8d,0x6c,0x04,0x00} + }, + { + /* No.27 delta:2503 weight:711 */ + 11213, + 9, + 12, + 13, + {(0x00000000), + (0xc54f7f87), + (0x6904a950), + (0xac4bd6d7), + (0x85c001bc), + (0x408f7e3b), + (0xecc4a8ec), + (0x298bd76b), + (0x00007b77), + (0xc54f04f0), + (0x6904d227), + (0xac4bada0), + (0x85c07acb), + (0x408f054c), + (0xecc4d39b), + (0x298bac1c)}, + {(0x00000000), + (0xc7002c00), + (0x5a61c800), + (0x9d61e400), + (0x12013800), + (0xd5011400), + (0x4860f000), + (0x8f60dc00), + (0xc8c01e00), + (0x0fc03200), + (0x92a1d600), + (0x55a1fa00), + (0xdac12600), + (0x1dc10a00), + (0x80a0ee00), + (0x47a0c200)}, + {(0x3f800000), + (0x3fe38016), + (0x3fad30e4), + (0x3fceb0f2), + (0x3f89009c), + (0x3fea808a), + (0x3fa43078), + (0x3fc7b06e), + (0x3fe4600f), + (0x3f87e019), + (0x3fc950eb), + (0x3faad0fd), + (0x3fed6093), + (0x3f8ee085), + (0x3fc05077), + (0x3fa3d061)}, + (0xfff80000), + {0xd6,0xd3,0xee,0x8e,0x9a,0x94,0x64,0x4c,0x3a,0x7b, + 0x1d,0x2f,0x64,0xef,0x67,0x33,0x0d,0x49,0x2e,0x20,0x00} + }, + { + /* No.28 delta:1642 weight:1597 */ + 11213, + 14, + 16, + 3, + {(0x00000000), + (0x8147d21a), + (0x627aba0f), + (0xe33d6815), + (0x279001c1), + (0xa6d7d3db), + (0x45eabbce), + (0xc4ad69d4), + (0x0000f4d1), + (0x814726cb), + (0x627a4ede), + (0xe33d9cc4), + (0x2790f510), + (0xa6d7270a), + (0x45ea4f1f), + (0xc4ad9d05)}, + {(0x00000000), + (0x210c6a00), + (0x0071b800), + (0x217dd200), + (0xcc021a00), + (0xed0e7000), + (0xcc73a200), + (0xed7fc800), + (0x41b2de00), + (0x60beb400), + (0x41c36600), + (0x60cf0c00), + (0x8db0c400), + (0xacbcae00), + (0x8dc17c00), + (0xaccd1600)}, + {(0x3f800000), + (0x3f908635), + (0x3f8038dc), + (0x3f90bee9), + (0x3fe6010d), + (0x3ff68738), + (0x3fe639d1), + (0x3ff6bfe4), + (0x3fa0d96f), + (0x3fb05f5a), + (0x3fa0e1b3), + (0x3fb06786), + (0x3fc6d862), + (0x3fd65e57), + (0x3fc6e0be), + (0x3fd6668b)}, + (0xfff80000), + {0x58,0xce,0x35,0x39,0xc0,0x04,0xad,0xd6,0xdd,0xb7, + 0x5d,0xf1,0xac,0xf9,0x85,0xea,0x3f,0x74,0x52,0x6d,0x00} + }, + { + /* No.29 delta:1888 weight:1763 */ + 11213, + 91, + 4, + 2, + {(0x00000000), + (0xa620066e), + (0x498ca8fb), + (0xefacae95), + (0xc3f001d3), + (0x65d007bd), + (0x8a7ca928), + (0x2c5caf46), + (0x0000927c), + (0xa6209412), + (0x498c3a87), + (0xefac3ce9), + (0xc3f093af), + (0x65d095c1), + (0x8a7c3b54), + (0x2c5c3d3a)}, + {(0x00000000), + (0x29909200), + (0x0074c600), + (0x29e45400), + (0x400e7000), + (0x699ee200), + (0x407ab600), + (0x69ea2400), + (0x44029e00), + (0x6d920c00), + (0x44765800), + (0x6de6ca00), + (0x040cee00), + (0x2d9c7c00), + (0x04782800), + (0x2de8ba00)}, + {(0x3f800000), + (0x3f94c849), + (0x3f803a63), + (0x3f94f22a), + (0x3fa00738), + (0x3fb4cf71), + (0x3fa03d5b), + (0x3fb4f512), + (0x3fa2014f), + (0x3fb6c906), + (0x3fa23b2c), + (0x3fb6f365), + (0x3f820677), + (0x3f96ce3e), + (0x3f823c14), + (0x3f96f45d)}, + (0xfff80000), + {0xbf,0x14,0xa8,0x90,0x29,0x75,0x15,0xde,0x68,0x12, + 0x39,0xb3,0x6e,0x2f,0xcb,0x19,0x1f,0xe6,0x2c,0x9b,0x00} + }, + { + /* No.30 delta:1194 weight:873 */ + 11213, + 90, + 10, + 14, + {(0x00000000), + (0xdd216696), + (0x738a5c01), + (0xaeab3a97), + (0x402001ec), + (0x9d01677a), + (0x33aa5ded), + (0xee8b3b7b), + (0x0000c5c9), + (0xdd21a35f), + (0x738a99c8), + (0xaeabff5e), + (0x4020c425), + (0x9d01a2b3), + (0x33aa9824), + (0xee8bfeb2)}, + {(0x00000000), + (0x193a0000), + (0x07a49000), + (0x1e9e9000), + (0x00658800), + (0x195f8800), + (0x07c11800), + (0x1efb1800), + (0x4456fe00), + (0x5d6cfe00), + (0x43f26e00), + (0x5ac86e00), + (0x44337600), + (0x5d097600), + (0x4397e600), + (0x5aade600)}, + {(0x3f800000), + (0x3f8c9d00), + (0x3f83d248), + (0x3f8f4f48), + (0x3f8032c4), + (0x3f8cafc4), + (0x3f83e08c), + (0x3f8f7d8c), + (0x3fa22b7f), + (0x3faeb67f), + (0x3fa1f937), + (0x3fad6437), + (0x3fa219bb), + (0x3fae84bb), + (0x3fa1cbf3), + (0x3fad56f3)}, + (0xfff80000), + {0x45,0xbe,0xc0,0x65,0xca,0x28,0x44,0x0e,0x06,0x4e, + 0xa0,0xbf,0x48,0xa8,0x8e,0x39,0x64,0x68,0xe1,0x30,0x00} + }, + { + /* No.31 delta:1509 weight:1313 */ + 11213, + 86, + 6, + 7, + {(0x00000000), + (0x41d73f34), + (0x0930d7f4), + (0x48e7e8c0), + (0x65b001f9), + (0x24673ecd), + (0x6c80d60d), + (0x2d57e939), + (0x00008ad2), + (0x41d7b5e6), + (0x09305d26), + (0x48e76212), + (0x65b08b2b), + (0x2467b41f), + (0x6c805cdf), + (0x2d5763eb)}, + {(0x00000000), + (0x02010000), + (0x10332000), + (0x12322000), + (0x10030000), + (0x12020000), + (0x00302000), + (0x02312000), + (0x403a9e00), + (0x423b9e00), + (0x5009be00), + (0x5208be00), + (0x50399e00), + (0x52389e00), + (0x400abe00), + (0x420bbe00)}, + {(0x3f800000), + (0x3f810080), + (0x3f881990), + (0x3f891910), + (0x3f880180), + (0x3f890100), + (0x3f801810), + (0x3f811890), + (0x3fa01d4f), + (0x3fa11dcf), + (0x3fa804df), + (0x3fa9045f), + (0x3fa81ccf), + (0x3fa91c4f), + (0x3fa0055f), + (0x3fa105df)}, + (0xfff80000), + {0x9f,0xb2,0x3a,0xbb,0xab,0xbd,0xc1,0x43,0x82,0x94, + 0x1f,0x8e,0xdf,0x89,0xbb,0xf6,0xee,0x6a,0x10,0x54,0x00} + }, + { + /* No.32 delta:3454 weight:869 */ + 11213, + 36, + 3, + 15, + {(0x00000000), + (0x1709ea04), + (0x8e9b8c43), + (0x99926647), + (0xdd100203), + (0xca19e807), + (0x538b8e40), + (0x44826444), + (0x0000f3b3), + (0x170919b7), + (0x8e9b7ff0), + (0x999295f4), + (0xdd10f1b0), + (0xca191bb4), + (0x538b7df3), + (0x448297f7)}, + {(0x00000000), + (0x28228000), + (0x1fc10000), + (0x37e38000), + (0x00400000), + (0x28628000), + (0x1f810000), + (0x37a38000), + (0x12b01e00), + (0x3a929e00), + (0x0d711e00), + (0x25539e00), + (0x12f01e00), + (0x3ad29e00), + (0x0d311e00), + (0x25139e00)}, + {(0x3f800000), + (0x3f941140), + (0x3f8fe080), + (0x3f9bf1c0), + (0x3f802000), + (0x3f943140), + (0x3f8fc080), + (0x3f9bd1c0), + (0x3f89580f), + (0x3f9d494f), + (0x3f86b88f), + (0x3f92a9cf), + (0x3f89780f), + (0x3f9d694f), + (0x3f86988f), + (0x3f9289cf)}, + (0xfff80000), + {0xbd,0x88,0xcf,0x70,0x9b,0x4f,0x1b,0xe7,0xe6,0xab, + 0x62,0x27,0x66,0xaf,0x36,0xbb,0x10,0x8b,0x27,0xd7,0x00} + }, + { + /* No.33 delta:1105 weight:1263 */ + 11213, + 40, + 9, + 3, + {(0x00000000), + (0x4406f6da), + (0xf592d5cb), + (0xb1942311), + (0xe0900211), + (0xa496f4cb), + (0x1502d7da), + (0x51042100), + (0x0000075b), + (0x4406f181), + (0xf592d290), + (0xb194244a), + (0xe090054a), + (0xa496f390), + (0x1502d081), + (0x5104265b)}, + {(0x00000000), + (0x10151000), + (0x10640000), + (0x00711000), + (0x20081800), + (0x301d0800), + (0x306c1800), + (0x20790800), + (0x00025e00), + (0x10174e00), + (0x10665e00), + (0x00734e00), + (0x200a4600), + (0x301f5600), + (0x306e4600), + (0x207b5600)}, + {(0x3f800000), + (0x3f880a88), + (0x3f883200), + (0x3f803888), + (0x3f90040c), + (0x3f980e84), + (0x3f98360c), + (0x3f903c84), + (0x3f80012f), + (0x3f880ba7), + (0x3f88332f), + (0x3f8039a7), + (0x3f900523), + (0x3f980fab), + (0x3f983723), + (0x3f903dab)}, + (0xfff80000), + {0x13,0x48,0x32,0x45,0xca,0x30,0xd6,0xa0,0xae,0xd3, + 0x68,0x38,0x03,0x61,0x73,0x81,0x24,0xd8,0x43,0xf3,0x00} + }, + { + /* No.34 delta:7663 weight:713 */ + 11213, + 62, + 2, + 15, + {(0x00000000), + (0x9fe7bf95), + (0x7e1ef3d4), + (0xe1f94c41), + (0x32e00221), + (0xad07bdb4), + (0x4cfef1f5), + (0xd3194e60), + (0x00005fc6), + (0x9fe7e053), + (0x7e1eac12), + (0xe1f91387), + (0x32e05de7), + (0xad07e272), + (0x4cfeae33), + (0xd31911a6)}, + {(0x00000000), + (0x00000000), + (0x00000000), + (0x00000000), + (0x20000000), + (0x20000000), + (0x20000000), + (0x20000000), + (0x50001e00), + (0x50001e00), + (0x50001e00), + (0x50001e00), + (0x70001e00), + (0x70001e00), + (0x70001e00), + (0x70001e00)}, + {(0x3f800000), + (0x3f800000), + (0x3f800000), + (0x3f800000), + (0x3f900000), + (0x3f900000), + (0x3f900000), + (0x3f900000), + (0x3fa8000f), + (0x3fa8000f), + (0x3fa8000f), + (0x3fa8000f), + (0x3fb8000f), + (0x3fb8000f), + (0x3fb8000f), + (0x3fb8000f)}, + (0xfff80000), + {0x05,0x3c,0xe6,0xed,0x20,0xd0,0x5e,0x82,0xc3,0x47, + 0x89,0x62,0x9a,0x00,0x4f,0xdf,0x8a,0xe2,0x89,0xe4,0x00} + }, + { + /* No.35 delta:1045 weight:1387 */ + 11213, + 66, + 18, + 8, + {(0x00000000), + (0xcc054daa), + (0x64ce00f1), + (0xa8cb4d5b), + (0xc6200238), + (0x0a254f92), + (0xa2ee02c9), + (0x6eeb4f63), + (0x00006fce), + (0xcc052264), + (0x64ce6f3f), + (0xa8cb2295), + (0xc6206df6), + (0x0a25205c), + (0xa2ee6d07), + (0x6eeb20ad)}, + {(0x00000000), + (0xd07d1a00), + (0x08927800), + (0xd8ef6200), + (0x00a4c000), + (0xd0d9da00), + (0x0836b800), + (0xd84ba200), + (0x00025e00), + (0xd07f4400), + (0x08902600), + (0xd8ed3c00), + (0x00a69e00), + (0xd0db8400), + (0x0834e600), + (0xd849fc00)}, + {(0x3f800000), + (0x3fe83e8d), + (0x3f84493c), + (0x3fec77b1), + (0x3f805260), + (0x3fe86ced), + (0x3f841b5c), + (0x3fec25d1), + (0x3f80012f), + (0x3fe83fa2), + (0x3f844813), + (0x3fec769e), + (0x3f80534f), + (0x3fe86dc2), + (0x3f841a73), + (0x3fec24fe)}, + (0xfff80000), + {0x53,0xdb,0x48,0x5e,0x80,0xb8,0xf7,0x7d,0xd4,0x43, + 0xc8,0x11,0x1f,0x88,0x87,0x4f,0x05,0x24,0x64,0x44,0x00} + }, + { + /* No.36 delta:2076 weight:1703 */ + 11213, + 75, + 9, + 2, + {(0x00000000), + (0xc42d5e09), + (0x3ecbb703), + (0xfae6e90a), + (0xe9b00243), + (0x2d9d5c4a), + (0xd77bb540), + (0x1356eb49), + (0x00003832), + (0xc42d663b), + (0x3ecb8f31), + (0xfae6d138), + (0xe9b03a71), + (0x2d9d6478), + (0xd77b8d72), + (0x1356d37b)}, + {(0x00000000), + (0x003c8000), + (0x00700000), + (0x004c8000), + (0x00080000), + (0x00348000), + (0x00780000), + (0x00448000), + (0x00021e00), + (0x003e9e00), + (0x00721e00), + (0x004e9e00), + (0x000a1e00), + (0x00369e00), + (0x007a1e00), + (0x00469e00)}, + {(0x3f800000), + (0x3f801e40), + (0x3f803800), + (0x3f802640), + (0x3f800400), + (0x3f801a40), + (0x3f803c00), + (0x3f802240), + (0x3f80010f), + (0x3f801f4f), + (0x3f80390f), + (0x3f80274f), + (0x3f80050f), + (0x3f801b4f), + (0x3f803d0f), + (0x3f80234f)}, + (0xfff80000), + {0x83,0xeb,0x26,0xe2,0x25,0xfd,0x8b,0x40,0xfc,0xd8, + 0x09,0x63,0xa1,0xb0,0x60,0x56,0xec,0x05,0xc2,0x27,0x00} + }, + { + /* No.37 delta:2017 weight:1375 */ + 11213, + 20, + 23, + 4, + {(0x00000000), + (0xf3dee608), + (0x43968c18), + (0xb0486a10), + (0x82100252), + (0x71cee45a), + (0xc1868e4a), + (0x32586842), + (0x0000b8e9), + (0xf3de5ee1), + (0x439634f1), + (0xb048d2f9), + (0x8210babb), + (0x71ce5cb3), + (0xc18636a3), + (0x3258d0ab)}, + {(0x00000000), + (0x0f350000), + (0x08b40000), + (0x07810000), + (0x20c1a000), + (0x2ff4a000), + (0x2875a000), + (0x2740a000), + (0x201c1e00), + (0x2f291e00), + (0x28a81e00), + (0x279d1e00), + (0x00ddbe00), + (0x0fe8be00), + (0x0869be00), + (0x075cbe00)}, + {(0x3f800000), + (0x3f879a80), + (0x3f845a00), + (0x3f83c080), + (0x3f9060d0), + (0x3f97fa50), + (0x3f943ad0), + (0x3f93a050), + (0x3f900e0f), + (0x3f97948f), + (0x3f94540f), + (0x3f93ce8f), + (0x3f806edf), + (0x3f87f45f), + (0x3f8434df), + (0x3f83ae5f)}, + (0xfff80000), + {0x64,0x1e,0x04,0xb6,0x86,0x5e,0xd5,0x07,0x5c,0xb3, + 0xbe,0x3a,0x1b,0xc8,0xe4,0x45,0x9e,0xc4,0xcf,0x11,0x00} + }, + { + /* No.38 delta:2221 weight:1197 */ + 11213, + 37, + 24, + 7, + {(0x00000000), + (0x4fb7bfce), + (0x968c3f7b), + (0xd93b80b5), + (0x11300267), + (0x5e87bda9), + (0x87bc3d1c), + (0xc80b82d2), + (0x000002b3), + (0x4fb7bd7d), + (0x968c3dc8), + (0xd93b8206), + (0x113000d4), + (0x5e87bf1a), + (0x87bc3faf), + (0xc80b8061)}, + {(0x00000000), + (0x207f2400), + (0x0138c000), + (0x2147e400), + (0x00160000), + (0x20692400), + (0x012ec000), + (0x2151e400), + (0x30127e00), + (0x106d5a00), + (0x312abe00), + (0x11559a00), + (0x30047e00), + (0x107b5a00), + (0x313cbe00), + (0x11439a00)}, + {(0x3f800000), + (0x3f903f92), + (0x3f809c60), + (0x3f90a3f2), + (0x3f800b00), + (0x3f903492), + (0x3f809760), + (0x3f90a8f2), + (0x3f98093f), + (0x3f8836ad), + (0x3f98955f), + (0x3f88aacd), + (0x3f98023f), + (0x3f883dad), + (0x3f989e5f), + (0x3f88a1cd)}, + (0xfff80000), + {0x56,0x6e,0x0e,0xb6,0x39,0x79,0xe8,0x2f,0xdb,0x3a, + 0xb8,0xa6,0xb7,0x15,0xb4,0x26,0x23,0x62,0x6c,0x7b,0x00} + }, + { + /* No.39 delta:3255 weight:871 */ + 11213, + 59, + 27, + 3, + {(0x00000000), + (0xd9be1e48), + (0x75016ef8), + (0xacbf70b0), + (0x0e00027a), + (0xd7be1c32), + (0x7b016c82), + (0xa2bf72ca), + (0x00004209), + (0xd9be5c41), + (0x75012cf1), + (0xacbf32b9), + (0x0e004073), + (0xd7be5e3b), + (0x7b012e8b), + (0xa2bf30c3)}, + {(0x00000000), + (0x14ad8000), + (0x05013000), + (0x11acb000), + (0x092e2000), + (0x1d83a000), + (0x0c2f1000), + (0x18829000), + (0x07501e00), + (0x13fd9e00), + (0x02512e00), + (0x16fcae00), + (0x0e7e3e00), + (0x1ad3be00), + (0x0b7f0e00), + (0x1fd28e00)}, + {(0x3f800000), + (0x3f8a56c0), + (0x3f828098), + (0x3f88d658), + (0x3f849710), + (0x3f8ec1d0), + (0x3f861788), + (0x3f8c4148), + (0x3f83a80f), + (0x3f89fecf), + (0x3f812897), + (0x3f8b7e57), + (0x3f873f1f), + (0x3f8d69df), + (0x3f85bf87), + (0x3f8fe947)}, + (0xfff80000), + {0xde,0x46,0xf8,0xe9,0xab,0x16,0xb9,0x71,0xfd,0x07, + 0x49,0x31,0xbb,0x29,0xb9,0xce,0xd3,0x1e,0x43,0x2e,0x00} + }, + { + /* No.40 delta:3532 weight:1325 */ + 11213, + 8, + 11, + 4, + {(0x00000000), + (0xe314ffbd), + (0x98f9b31f), + (0x7bed4ca2), + (0x71b0028c), + (0x92a4fd31), + (0xe949b193), + (0x0a5d4e2e), + (0x0000e823), + (0xe314179e), + (0x98f95b3c), + (0x7beda481), + (0x71b0eaaf), + (0x92a41512), + (0xe94959b0), + (0x0a5da60d)}, + {(0x00000000), + (0x0c000000), + (0x0a800000), + (0x06800000), + (0x16100000), + (0x1a100000), + (0x1c900000), + (0x10900000), + (0x95801e00), + (0x99801e00), + (0x9f001e00), + (0x93001e00), + (0x83901e00), + (0x8f901e00), + (0x89101e00), + (0x85101e00)}, + {(0x3f800000), + (0x3f860000), + (0x3f854000), + (0x3f834000), + (0x3f8b0800), + (0x3f8d0800), + (0x3f8e4800), + (0x3f884800), + (0x3fcac00f), + (0x3fccc00f), + (0x3fcf800f), + (0x3fc9800f), + (0x3fc1c80f), + (0x3fc7c80f), + (0x3fc4880f), + (0x3fc2880f)}, + (0xfff80000), + {0xc3,0xa5,0xf2,0x8c,0xb3,0x3e,0xd2,0x53,0x92,0x0c, + 0x01,0x4a,0x5c,0x0a,0x47,0xe9,0x85,0xa2,0xf5,0x7f,0x00} + }, + { + /* No.41 delta:5222 weight:1281 */ + 11213, + 90, + 27, + 2, + {(0x00000000), + (0xf1807db4), + (0x9f84df41), + (0x6e04a2f5), + (0x04200296), + (0xf5a07f22), + (0x9ba4ddd7), + (0x6a24a063), + (0x00005700), + (0xf1802ab4), + (0x9f848841), + (0x6e04f5f5), + (0x04205596), + (0xf5a02822), + (0x9ba48ad7), + (0x6a24f763)}, + {(0x00000000), + (0xe9519000), + (0x1a06a800), + (0xf3573800), + (0x0d032000), + (0xe452b000), + (0x17058800), + (0xfe541800), + (0x036ade00), + (0xea3b4e00), + (0x196c7600), + (0xf03de600), + (0x0e69fe00), + (0xe7386e00), + (0x146f5600), + (0xfd3ec600)}, + {(0x3f800000), + (0x3ff4a8c8), + (0x3f8d0354), + (0x3ff9ab9c), + (0x3f868190), + (0x3ff22958), + (0x3f8b82c4), + (0x3fff2a0c), + (0x3f81b56f), + (0x3ff51da7), + (0x3f8cb63b), + (0x3ff81ef3), + (0x3f8734ff), + (0x3ff39c37), + (0x3f8a37ab), + (0x3ffe9f63)}, + (0xfff80000), + {0x08,0x0d,0xba,0x61,0x69,0x6b,0x70,0x44,0xbf,0x27, + 0x4a,0xe9,0xcb,0x98,0x26,0xb9,0xb3,0x5d,0x82,0x3d,0x00} + }, + { + /* No.42 delta:1107 weight:1153 */ + 11213, + 48, + 16, + 10, + {(0x00000000), + (0x6adad7b8), + (0x649ee9f9), + (0x0e443e41), + (0x1b2002a0), + (0x71fad518), + (0x7fbeeb59), + (0x15643ce1), + (0x0000f400), + (0x6ada23b8), + (0x649e1df9), + (0x0e44ca41), + (0x1b20f6a0), + (0x71fa2118), + (0x7fbe1f59), + (0x1564c8e1)}, + {(0x00000000), + (0x09409c00), + (0x0060c000), + (0x09205c00), + (0x04104a00), + (0x0d50d600), + (0x04708a00), + (0x0d301600), + (0x00087e00), + (0x0948e200), + (0x0068be00), + (0x09282200), + (0x04183400), + (0x0d58a800), + (0x0478f400), + (0x0d386800)}, + {(0x3f800000), + (0x3f84a04e), + (0x3f803060), + (0x3f84902e), + (0x3f820825), + (0x3f86a86b), + (0x3f823845), + (0x3f86980b), + (0x3f80043f), + (0x3f84a471), + (0x3f80345f), + (0x3f849411), + (0x3f820c1a), + (0x3f86ac54), + (0x3f823c7a), + (0x3f869c34)}, + (0xfff80000), + {0xb4,0xff,0xa8,0x22,0xa3,0x34,0x7b,0xfd,0xd4,0xca, + 0xef,0x82,0x97,0x4e,0x9d,0x89,0xeb,0xb2,0x55,0x2c,0x00} + }, + { + /* No.43 delta:3289 weight:739 */ + 11213, + 90, + 3, + 15, + {(0x00000000), + (0x12510afd), + (0xc2094a89), + (0xd0584074), + (0x5ce002b7), + (0x4eb1084a), + (0x9ee9483e), + (0x8cb842c3), + (0x00009dee), + (0x12519713), + (0xc209d767), + (0xd058dd9a), + (0x5ce09f59), + (0x4eb195a4), + (0x9ee9d5d0), + (0x8cb8df2d)}, + {(0x00000000), + (0x0c230400), + (0x033c0000), + (0x0f1f0400), + (0x03b08000), + (0x0f938400), + (0x008c8000), + (0x0caf8400), + (0x08705e00), + (0x04535a00), + (0x0b4c5e00), + (0x076f5a00), + (0x0bc0de00), + (0x07e3da00), + (0x08fcde00), + (0x04dfda00)}, + {(0x3f800000), + (0x3f861182), + (0x3f819e00), + (0x3f878f82), + (0x3f81d840), + (0x3f87c9c2), + (0x3f804640), + (0x3f8657c2), + (0x3f84382f), + (0x3f8229ad), + (0x3f85a62f), + (0x3f83b7ad), + (0x3f85e06f), + (0x3f83f1ed), + (0x3f847e6f), + (0x3f826fed)}, + (0xfff80000), + {0x47,0xd8,0xbd,0x66,0xb2,0xe8,0x3c,0x2c,0x45,0x90, + 0x88,0x27,0x9c,0x8f,0x27,0x40,0xc8,0xd9,0x0e,0xd6,0x00} + }, + { + /* No.44 delta:1477 weight:1191 */ + 11213, + 33, + 20, + 2, + {(0x00000000), + (0x3f4d49c2), + (0xdca457bf), + (0xe3e91e7d), + (0x5d5002cf), + (0x621d4b0d), + (0x81f45570), + (0xbeb91cb2), + (0x0000c277), + (0x3f4d8bb5), + (0xdca495c8), + (0xe3e9dc0a), + (0x5d50c0b8), + (0x621d897a), + (0x81f49707), + (0xbeb9dec5)}, + {(0x00000000), + (0x0275b800), + (0x7149c400), + (0x733c7c00), + (0x1058c000), + (0x122d7800), + (0x61110400), + (0x6364bc00), + (0x006f3e00), + (0x021a8600), + (0x7126fa00), + (0x73534200), + (0x1037fe00), + (0x12424600), + (0x617e3a00), + (0x630b8200)}, + {(0x3f800000), + (0x3f813adc), + (0x3fb8a4e2), + (0x3fb99e3e), + (0x3f882c60), + (0x3f8916bc), + (0x3fb08882), + (0x3fb1b25e), + (0x3f80379f), + (0x3f810d43), + (0x3fb8937d), + (0x3fb9a9a1), + (0x3f881bff), + (0x3f892123), + (0x3fb0bf1d), + (0x3fb185c1)}, + (0xfff80000), + {0x43,0xbd,0xc4,0xf1,0xb1,0xd7,0x24,0x47,0xc5,0xd0, + 0xa4,0xbc,0xc9,0x66,0xb3,0x4b,0x26,0xd1,0x26,0x85,0x00} + }, + { + /* No.45 delta:1261 weight:1353 */ + 11213, + 24, + 18, + 5, + {(0x00000000), + (0xabac4677), + (0x903dfbe7), + (0x3b91bd90), + (0xf83002d0), + (0x539c44a7), + (0x680df937), + (0xc3a1bf40), + (0x00004840), + (0xabac0e37), + (0x903db3a7), + (0x3b91f5d0), + (0xf8304a90), + (0x539c0ce7), + (0x680db177), + (0xc3a1f700)}, + {(0x00000000), + (0x00762800), + (0x200acc00), + (0x207ce400), + (0x6ea81000), + (0x6ede3800), + (0x4ea2dc00), + (0x4ed4f400), + (0x004e1e00), + (0x00383600), + (0x2044d200), + (0x2032fa00), + (0x6ee60e00), + (0x6e902600), + (0x4eecc200), + (0x4e9aea00)}, + {(0x3f800000), + (0x3f803b14), + (0x3f900566), + (0x3f903e72), + (0x3fb75408), + (0x3fb76f1c), + (0x3fa7516e), + (0x3fa76a7a), + (0x3f80270f), + (0x3f801c1b), + (0x3f902269), + (0x3f90197d), + (0x3fb77307), + (0x3fb74813), + (0x3fa77661), + (0x3fa74d75)}, + (0xfff80000), + {0x1c,0x79,0xc4,0xaf,0x4a,0xca,0x6f,0x97,0x73,0x87, + 0xe2,0xfa,0x1b,0x02,0x4e,0xfc,0xc2,0xc5,0x85,0xa8,0x00} + }, + { + /* No.46 delta:2871 weight:1351 */ + 11213, + 24, + 4, + 11, + {(0x00000000), + (0x5f7bd2a5), + (0x9b479801), + (0xc43c4aa4), + (0x793002ea), + (0x264bd04f), + (0xe2779aeb), + (0xbd0c484e), + (0x0000737e), + (0x5f7ba1db), + (0x9b47eb7f), + (0xc43c39da), + (0x79307194), + (0x264ba331), + (0xe277e995), + (0xbd0c3b30)}, + {(0x00000000), + (0x0a8c0000), + (0x10810000), + (0x1a0d0000), + (0x00600800), + (0x0aec0800), + (0x10e10800), + (0x1a6d0800), + (0x40101e00), + (0x4a9c1e00), + (0x50911e00), + (0x5a1d1e00), + (0x40701600), + (0x4afc1600), + (0x50f11600), + (0x5a7d1600)}, + {(0x3f800000), + (0x3f854600), + (0x3f884080), + (0x3f8d0680), + (0x3f803004), + (0x3f857604), + (0x3f887084), + (0x3f8d3684), + (0x3fa0080f), + (0x3fa54e0f), + (0x3fa8488f), + (0x3fad0e8f), + (0x3fa0380b), + (0x3fa57e0b), + (0x3fa8788b), + (0x3fad3e8b)}, + (0xfff80000), + {0x23,0xc7,0xec,0x47,0xae,0x9d,0xf4,0x29,0xa3,0xce, + 0x13,0x6c,0x06,0x67,0x5b,0x3a,0xb2,0xac,0x33,0xdb,0x00} + }, + { + /* No.47 delta:4370 weight:1245 */ + 11213, + 26, + 30, + 4, + {(0x00000000), + (0x1af999ae), + (0x1bfe6053), + (0x0107f9fd), + (0xb1f002f1), + (0xab099b5f), + (0xaa0e62a2), + (0xb0f7fb0c), + (0x0000281b), + (0x1af9b1b5), + (0x1bfe4848), + (0x0107d1e6), + (0xb1f02aea), + (0xab09b344), + (0xaa0e4ab9), + (0xb0f7d317)}, + {(0x00000000), + (0x0c201000), + (0x03140000), + (0x0f341000), + (0xe4200800), + (0xe8001800), + (0xe7340800), + (0xeb141800), + (0x08001e00), + (0x04200e00), + (0x0b141e00), + (0x07340e00), + (0xec201600), + (0xe0000600), + (0xef341600), + (0xe3140600)}, + {(0x3f800000), + (0x3f861008), + (0x3f818a00), + (0x3f879a08), + (0x3ff21004), + (0x3ff4000c), + (0x3ff39a04), + (0x3ff58a0c), + (0x3f84000f), + (0x3f821007), + (0x3f858a0f), + (0x3f839a07), + (0x3ff6100b), + (0x3ff00003), + (0x3ff79a0b), + (0x3ff18a03)}, + (0xfff80000), + {0x98,0x58,0x06,0x9e,0x81,0x14,0x32,0xd7,0x93,0x32, + 0x65,0xc8,0x13,0x43,0x02,0x53,0x1e,0xd3,0xaf,0x94,0x00} + }, + { + /* No.48 delta:1177 weight:859 */ + 11213, + 75, + 13, + 16, + {(0x00000000), + (0x8e9ecf83), + (0xb438b3ee), + (0x3aa67c6d), + (0xbd800305), + (0x331ecc86), + (0x09b8b0eb), + (0x87267f68), + (0x0000d641), + (0x8e9e19c2), + (0xb43865af), + (0x3aa6aa2c), + (0xbd80d544), + (0x331e1ac7), + (0x09b866aa), + (0x8726a929)}, + {(0x00000000), + (0x0f7d1c00), + (0x76262000), + (0x795b3c00), + (0x41532000), + (0x4e2e3c00), + (0x37750000), + (0x38081c00), + (0x00429e00), + (0x0f3f8200), + (0x7664be00), + (0x7919a200), + (0x4111be00), + (0x4e6ca200), + (0x37379e00), + (0x384a8200)}, + {(0x3f800000), + (0x3f87be8e), + (0x3fbb1310), + (0x3fbcad9e), + (0x3fa0a990), + (0x3fa7171e), + (0x3f9bba80), + (0x3f9c040e), + (0x3f80214f), + (0x3f879fc1), + (0x3fbb325f), + (0x3fbc8cd1), + (0x3fa088df), + (0x3fa73651), + (0x3f9b9bcf), + (0x3f9c2541)}, + (0xfff80000), + {0xc9,0xe0,0x77,0x04,0x4f,0x92,0x96,0xd4,0x05,0xdc, + 0x3e,0x3c,0xa6,0xf3,0x8e,0x2d,0xdb,0xf2,0x8c,0xe4,0x00} + }, + { + /* No.49 delta:3224 weight:947 */ + 11213, + 65, + 7, + 13, + {(0x00000000), + (0x9221eadf), + (0x5003b0d0), + (0xc2225a0f), + (0x0d800317), + (0x9fa1e9c8), + (0x5d83b3c7), + (0xcfa25918), + (0x00005031), + (0x9221baee), + (0x5003e0e1), + (0xc2220a3e), + (0x0d805326), + (0x9fa1b9f9), + (0x5d83e3f6), + (0xcfa20929)}, + {(0x00000000), + (0x00400800), + (0x60600000), + (0x60200800), + (0x00000000), + (0x00400800), + (0x60600000), + (0x60200800), + (0x30101e00), + (0x30501600), + (0x50701e00), + (0x50301600), + (0x30101e00), + (0x30501600), + (0x50701e00), + (0x50301600)}, + {(0x3f800000), + (0x3f802004), + (0x3fb03000), + (0x3fb01004), + (0x3f800000), + (0x3f802004), + (0x3fb03000), + (0x3fb01004), + (0x3f98080f), + (0x3f98280b), + (0x3fa8380f), + (0x3fa8180b), + (0x3f98080f), + (0x3f98280b), + (0x3fa8380f), + (0x3fa8180b)}, + (0xfff80000), + {0xc1,0x70,0x72,0x7f,0xb1,0x1e,0x6e,0xc5,0xec,0xcc, + 0x69,0xd8,0x0b,0xba,0x4e,0x2c,0x73,0x46,0x81,0x52,0x00} + }, + { + /* No.50 delta:6665 weight:1221 */ + 11213, + 84, + 1, + 9, + {(0x00000000), + (0xbdb9b41e), + (0x9876c465), + (0x25cf707b), + (0x25c0032f), + (0x9879b731), + (0xbdb6c74a), + (0x000f7354), + (0x00003009), + (0xbdb98417), + (0x9876f46c), + (0x25cf4072), + (0x25c03326), + (0x98798738), + (0xbdb6f743), + (0x000f435d)}, + {(0x00000000), + (0x51000000), + (0x20000000), + (0x71000000), + (0x04200000), + (0x55200000), + (0x24200000), + (0x75200000), + (0x17201e00), + (0x46201e00), + (0x37201e00), + (0x66201e00), + (0x13001e00), + (0x42001e00), + (0x33001e00), + (0x62001e00)}, + {(0x3f800000), + (0x3fa88000), + (0x3f900000), + (0x3fb88000), + (0x3f821000), + (0x3faa9000), + (0x3f921000), + (0x3fba9000), + (0x3f8b900f), + (0x3fa3100f), + (0x3f9b900f), + (0x3fb3100f), + (0x3f89800f), + (0x3fa1000f), + (0x3f99800f), + (0x3fb1000f)}, + (0xfff80000), + {0xdf,0xd6,0xd2,0xb4,0x0a,0xa4,0x35,0xbe,0x0f,0xa6, + 0x48,0x42,0xfe,0x0c,0x0f,0xa3,0xa9,0x64,0x1b,0x93,0x00} + }, + { + /* No.51 delta:6604 weight:1075 */ + 11213, + 61, + 3, + 13, + {(0x00000000), + (0xe7ec9698), + (0xdc943f6e), + (0x3b78a9f6), + (0xdf600330), + (0x388c95a8), + (0x03f43c5e), + (0xe418aac6), + (0x000058c3), + (0xe7ecce5b), + (0xdc9467ad), + (0x3b78f135), + (0xdf605bf3), + (0x388ccd6b), + (0x03f4649d), + (0xe418f205)}, + {(0x00000000), + (0x80000000), + (0x50000000), + (0xd0000000), + (0x20000000), + (0xa0000000), + (0x70000000), + (0xf0000000), + (0x00001e00), + (0x80001e00), + (0x50001e00), + (0xd0001e00), + (0x20001e00), + (0xa0001e00), + (0x70001e00), + (0xf0001e00)}, + {(0x3f800000), + (0x3fc00000), + (0x3fa80000), + (0x3fe80000), + (0x3f900000), + (0x3fd00000), + (0x3fb80000), + (0x3ff80000), + (0x3f80000f), + (0x3fc0000f), + (0x3fa8000f), + (0x3fe8000f), + (0x3f90000f), + (0x3fd0000f), + (0x3fb8000f), + (0x3ff8000f)}, + (0xfff80000), + {0xf2,0x95,0xcc,0x96,0x13,0xa0,0x75,0xc2,0xea,0x1a, + 0x5c,0x2d,0xcc,0x41,0x22,0xf8,0x87,0x8d,0x52,0xc0,0x00} + }, + { + /* No.52 delta:980 weight:1115 */ + 11213, + 75, + 17, + 12, + {(0x00000000), + (0x619af787), + (0x463e8326), + (0x27a474a1), + (0xc5c00348), + (0xa45af4cf), + (0x83fe806e), + (0xe26477e9), + (0x00008ae3), + (0x619a7d64), + (0x463e09c5), + (0x27a4fe42), + (0xc5c089ab), + (0xa45a7e2c), + (0x83fe0a8d), + (0xe264fd0a)}, + {(0x00000000), + (0x107c1400), + (0x81204400), + (0x915c5000), + (0x00113400), + (0x106d2000), + (0x81317000), + (0x914d6400), + (0x000ede00), + (0x1072ca00), + (0x812e9a00), + (0x91528e00), + (0x001fea00), + (0x1063fe00), + (0x813fae00), + (0x9143ba00)}, + {(0x3f800000), + (0x3f883e0a), + (0x3fc09022), + (0x3fc8ae28), + (0x3f80089a), + (0x3f883690), + (0x3fc098b8), + (0x3fc8a6b2), + (0x3f80076f), + (0x3f883965), + (0x3fc0974d), + (0x3fc8a947), + (0x3f800ff5), + (0x3f8831ff), + (0x3fc09fd7), + (0x3fc8a1dd)}, + (0xfff80000), + {0x31,0x3b,0x59,0xba,0x4b,0xfa,0x15,0x6d,0x68,0x38, + 0xd0,0x59,0x4b,0xc5,0xee,0xd6,0xd1,0x72,0x77,0x56,0x00} + }, + { + /* No.53 delta:2128 weight:1031 */ + 11213, + 90, + 18, + 10, + {(0x00000000), + (0x54ddf61b), + (0x3289e26b), + (0x66541470), + (0x8c500359), + (0xd88df542), + (0xbed9e132), + (0xea041729), + (0x0000fb30), + (0x54dd0d2b), + (0x3289195b), + (0x6654ef40), + (0x8c50f869), + (0xd88d0e72), + (0xbed91a02), + (0xea04ec19)}, + {(0x00000000), + (0x80710000), + (0x704e0000), + (0xf03f0000), + (0x40450000), + (0xc0340000), + (0x300b0000), + (0xb07a0000), + (0x000c1e00), + (0x807d1e00), + (0x70421e00), + (0xf0331e00), + (0x40491e00), + (0xc0381e00), + (0x30071e00), + (0xb0761e00)}, + {(0x3f800000), + (0x3fc03880), + (0x3fb82700), + (0x3ff81f80), + (0x3fa02280), + (0x3fe01a00), + (0x3f980580), + (0x3fd83d00), + (0x3f80060f), + (0x3fc03e8f), + (0x3fb8210f), + (0x3ff8198f), + (0x3fa0248f), + (0x3fe01c0f), + (0x3f98038f), + (0x3fd83b0f)}, + (0xfff80000), + {0x2c,0x15,0xc7,0x91,0x8f,0xe7,0xba,0x43,0x56,0x9b, + 0xf8,0xd4,0x59,0xf2,0x0c,0x4e,0xf2,0x42,0x9a,0xfe,0x00} + }, + { + /* No.54 delta:2047 weight:935 */ + 11213, + 73, + 6, + 15, + {(0x00000000), + (0x1b3e4d84), + (0x40583cec), + (0x5b667168), + (0x82600363), + (0x995e4ee7), + (0xc2383f8f), + (0xd906720b), + (0x000025e9), + (0x1b3e686d), + (0x40581905), + (0x5b665481), + (0x8260268a), + (0x995e6b0e), + (0xc2381a66), + (0xd90657e2)}, + {(0x00000000), + (0x00524000), + (0x52804000), + (0x52d20000), + (0x00232000), + (0x00716000), + (0x52a36000), + (0x52f12000), + (0x21c51e00), + (0x21975e00), + (0x73455e00), + (0x73171e00), + (0x21e63e00), + (0x21b47e00), + (0x73667e00), + (0x73343e00)}, + {(0x3f800000), + (0x3f802920), + (0x3fa94020), + (0x3fa96900), + (0x3f801190), + (0x3f8038b0), + (0x3fa951b0), + (0x3fa97890), + (0x3f90e28f), + (0x3f90cbaf), + (0x3fb9a2af), + (0x3fb98b8f), + (0x3f90f31f), + (0x3f90da3f), + (0x3fb9b33f), + (0x3fb99a1f)}, + (0xfff80000), + {0x67,0xd5,0xbe,0x19,0x7f,0x4e,0x37,0xca,0xeb,0x0b, + 0x09,0x52,0xc2,0x91,0x23,0x02,0xb9,0xa6,0xdd,0x1e,0x00} + }, + { + /* No.55 delta:1367 weight:1089 */ + 11213, + 30, + 14, + 10, + {(0x00000000), + (0x3d4e7360), + (0xd47d559c), + (0xe93326fc), + (0x10e00371), + (0x2dae7011), + (0xc49d56ed), + (0xf9d3258d), + (0x0000f71b), + (0x3d4e847b), + (0xd47da287), + (0xe933d1e7), + (0x10e0f46a), + (0x2dae870a), + (0xc49da1f6), + (0xf9d3d296)}, + {(0x00000000), + (0x6b729000), + (0x206f1800), + (0x4b1d8800), + (0x00501a00), + (0x6b228a00), + (0x203f0200), + (0x4b4d9200), + (0x20103e00), + (0x4b62ae00), + (0x007f2600), + (0x6b0db600), + (0x20402400), + (0x4b32b400), + (0x002f3c00), + (0x6b5dac00)}, + {(0x3f800000), + (0x3fb5b948), + (0x3f90378c), + (0x3fa58ec4), + (0x3f80280d), + (0x3fb59145), + (0x3f901f81), + (0x3fa5a6c9), + (0x3f90081f), + (0x3fa5b157), + (0x3f803f93), + (0x3fb586db), + (0x3f902012), + (0x3fa5995a), + (0x3f80179e), + (0x3fb5aed6)}, + (0xfff80000), + {0x74,0x06,0xc4,0x94,0x50,0xc8,0x89,0xd9,0x6c,0x24, + 0x1b,0x4e,0x7f,0x96,0xbe,0x0a,0xb0,0xbb,0xa9,0x75,0x00} + }, + { + /* No.56 delta:1232 weight:1251 */ + 11213, + 56, + 20, + 8, + {(0x00000000), + (0x303bfd65), + (0x96ea74b0), + (0xa6d189d5), + (0x1d200385), + (0x2d1bfee0), + (0x8bca7735), + (0xbbf18a50), + (0x0000e0a3), + (0x303b1dc6), + (0x96ea9413), + (0xa6d16976), + (0x1d20e326), + (0x2d1b1e43), + (0x8bca9796), + (0xbbf16af3)}, + {(0x00000000), + (0x0e9c1400), + (0x00661e00), + (0x0efa0a00), + (0x20125000), + (0x2e8e4400), + (0x20744e00), + (0x2ee85a00), + (0x001abe00), + (0x0e86aa00), + (0x007ca000), + (0x0ee0b400), + (0x2008ee00), + (0x2e94fa00), + (0x206ef000), + (0x2ef2e400)}, + {(0x3f800000), + (0x3f874e0a), + (0x3f80330f), + (0x3f877d05), + (0x3f900928), + (0x3f974722), + (0x3f903a27), + (0x3f97742d), + (0x3f800d5f), + (0x3f874355), + (0x3f803e50), + (0x3f87705a), + (0x3f900477), + (0x3f974a7d), + (0x3f903778), + (0x3f977972)}, + (0xfff80000), + {0x9f,0xb8,0x5c,0x52,0x53,0x38,0x40,0xed,0x9b,0x43, + 0xe8,0x89,0x8c,0xd0,0x44,0x25,0x4b,0xbf,0xca,0xd0,0x00} + }, + { + /* No.57 delta:1379 weight:873 */ + 11213, + 89, + 13, + 1, + {(0x00000000), + (0xfacfdd0b), + (0x22ecafbf), + (0xd82372b4), + (0x85500390), + (0x7f9fde9b), + (0xa7bcac2f), + (0x5d737124), + (0x0000d423), + (0xfacf0928), + (0x22ec7b9c), + (0xd823a697), + (0x8550d7b3), + (0x7f9f0ab8), + (0xa7bc780c), + (0x5d73a507)}, + {(0x00000000), + (0x2c081000), + (0x05201800), + (0x29280800), + (0x20e00400), + (0x0ce81400), + (0x25c01c00), + (0x09c80c00), + (0x11481e00), + (0x3d400e00), + (0x14680600), + (0x38601600), + (0x31a81a00), + (0x1da00a00), + (0x34880200), + (0x18801200)}, + {(0x3f800000), + (0x3f960408), + (0x3f82900c), + (0x3f949404), + (0x3f907002), + (0x3f86740a), + (0x3f92e00e), + (0x3f84e406), + (0x3f88a40f), + (0x3f9ea007), + (0x3f8a3403), + (0x3f9c300b), + (0x3f98d40d), + (0x3f8ed005), + (0x3f9a4401), + (0x3f8c4009)}, + (0xfff80000), + {0x08,0x0f,0x24,0x9d,0x3a,0xba,0x6d,0xb4,0xb0,0x1a, + 0x1c,0x4b,0x44,0xe7,0x44,0xf7,0xc9,0x4a,0x5f,0x97,0x00} + }, + { + /* No.58 delta:904 weight:1097 */ + 11213, + 60, + 16, + 2, + {(0x00000000), + (0xda86476d), + (0x6c05798d), + (0xb6833ee0), + (0xb72003ae), + (0x6da644c3), + (0xdb257a23), + (0x01a33d4e), + (0x00001489), + (0xda8653e4), + (0x6c056d04), + (0xb6832a69), + (0xb7201727), + (0x6da6504a), + (0xdb256eaa), + (0x01a329c7)}, + {(0x00000000), + (0x0c74f000), + (0x0059a800), + (0x0c2d5800), + (0x02445000), + (0x0e30a000), + (0x021df800), + (0x0e690800), + (0x0902de00), + (0x05762e00), + (0x095b7600), + (0x052f8600), + (0x0b468e00), + (0x07327e00), + (0x0b1f2600), + (0x076bd600)}, + {(0x3f800000), + (0x3f863a78), + (0x3f802cd4), + (0x3f8616ac), + (0x3f812228), + (0x3f871850), + (0x3f810efc), + (0x3f873484), + (0x3f84816f), + (0x3f82bb17), + (0x3f84adbb), + (0x3f8297c3), + (0x3f85a347), + (0x3f83993f), + (0x3f858f93), + (0x3f83b5eb)}, + (0xfff80000), + {0xb8,0xe0,0xa0,0x3b,0x2e,0x11,0x17,0x83,0x7b,0x75, + 0x85,0x89,0xfa,0x1e,0x49,0xb4,0x5c,0xe6,0xb8,0xc1,0x00} + }, + { + /* No.59 delta:7724 weight:1539 */ + 11213, + 42, + 28, + 4, + {(0x00000000), + (0xdfefef22), + (0x804185a4), + (0x5fae6a86), + (0x54b003b3), + (0x8b5fec91), + (0xd4f18617), + (0x0b1e6935), + (0x00009211), + (0xdfef7d33), + (0x804117b5), + (0x5faef897), + (0x54b091a2), + (0x8b5f7e80), + (0xd4f11406), + (0x0b1efb24)}, + {(0x00000000), + (0x38020000), + (0x08014000), + (0x30034000), + (0x04000800), + (0x3c020800), + (0x0c014800), + (0x34034800), + (0x08001e00), + (0x30021e00), + (0x00015e00), + (0x38035e00), + (0x0c001600), + (0x34021600), + (0x04015600), + (0x3c035600)}, + {(0x3f800000), + (0x3f9c0100), + (0x3f8400a0), + (0x3f9801a0), + (0x3f820004), + (0x3f9e0104), + (0x3f8600a4), + (0x3f9a01a4), + (0x3f84000f), + (0x3f98010f), + (0x3f8000af), + (0x3f9c01af), + (0x3f86000b), + (0x3f9a010b), + (0x3f8200ab), + (0x3f9e01ab)}, + (0xfff80000), + {0x91,0xba,0x8c,0xac,0x44,0xa7,0x81,0xa7,0xed,0x37, + 0x7e,0x8d,0xaf,0xe5,0x08,0xe6,0xc7,0x1d,0xfd,0xe5,0x00} + }, + { + /* No.60 delta:2411 weight:1317 */ + 11213, + 13, + 24, + 5, + {(0x00000000), + (0x9dd3ce8f), + (0x90da0878), + (0x0d09c6f7), + (0xad8003cf), + (0x3053cd40), + (0x3d5a0bb7), + (0xa089c538), + (0x0000bcb0), + (0x9dd3723f), + (0x90dab4c8), + (0x0d097a47), + (0xad80bf7f), + (0x305371f0), + (0x3d5ab707), + (0xa0897988)}, + {(0x00000000), + (0x4c0b9800), + (0x0fa54000), + (0x43aed800), + (0x0067c000), + (0x4c6c5800), + (0x0fc28000), + (0x43c91800), + (0x0a105e00), + (0x461bc600), + (0x05b51e00), + (0x49be8600), + (0x0a779e00), + (0x467c0600), + (0x05d2de00), + (0x49d94600)}, + {(0x3f800000), + (0x3fa605cc), + (0x3f87d2a0), + (0x3fa1d76c), + (0x3f8033e0), + (0x3fa6362c), + (0x3f87e140), + (0x3fa1e48c), + (0x3f85082f), + (0x3fa30de3), + (0x3f82da8f), + (0x3fa4df43), + (0x3f853bcf), + (0x3fa33e03), + (0x3f82e96f), + (0x3fa4eca3)}, + (0xfff80000), + {0xac,0x0b,0xb8,0x4d,0x6f,0xbd,0x47,0x8b,0x3f,0x9c, + 0x92,0xd0,0x32,0xf9,0x89,0x38,0xda,0x67,0xea,0xbe,0x00} + }, + { + /* No.61 delta:1265 weight:827 */ + 11213, + 52, + 17, + 15, + {(0x00000000), + (0xa4b47608), + (0x36bc0fca), + (0x920879c2), + (0xdeb003d6), + (0x7a0475de), + (0xe80c0c1c), + (0x4cb87a14), + (0x0000fbcf), + (0xa4b48dc7), + (0x36bcf405), + (0x9208820d), + (0xdeb0f819), + (0x7a048e11), + (0xe80cf7d3), + (0x4cb881db)}, + {(0x00000000), + (0x0813ae00), + (0x20151000), + (0x2806be00), + (0x4029c000), + (0x483a6e00), + (0x603cd000), + (0x682f7e00), + (0x52035e00), + (0x5a10f000), + (0x72164e00), + (0x7a05e000), + (0x122a9e00), + (0x1a393000), + (0x323f8e00), + (0x3a2c2000)}, + {(0x3f800000), + (0x3f8409d7), + (0x3f900a88), + (0x3f94035f), + (0x3fa014e0), + (0x3fa41d37), + (0x3fb01e68), + (0x3fb417bf), + (0x3fa901af), + (0x3fad0878), + (0x3fb90b27), + (0x3fbd02f0), + (0x3f89154f), + (0x3f8d1c98), + (0x3f991fc7), + (0x3f9d1610)}, + (0xfff80000), + {0xb2,0x25,0x08,0xf6,0xcd,0xda,0xfa,0xdb,0x2f,0xe7, + 0x81,0x83,0x7f,0xb8,0x75,0x05,0xff,0x2c,0x1a,0x80,0x00} + }, + { + /* No.62 delta:3397 weight:1223 */ + 11213, + 44, + 3, + 7, + {(0x00000000), + (0x89ffcb3c), + (0xafe67560), + (0x2619be5c), + (0xf79003e8), + (0x7e6fc8d4), + (0x58767688), + (0xd189bdb4), + (0x0000dcdc), + (0x89ff17e0), + (0xafe6a9bc), + (0x26196280), + (0xf790df34), + (0x7e6f1408), + (0x5876aa54), + (0xd1896168)}, + {(0x00000000), + (0x00710000), + (0xb00e0800), + (0xb07f0800), + (0x90120000), + (0x90630000), + (0x201c0800), + (0x206d0800), + (0x40091e00), + (0x40781e00), + (0xf0071600), + (0xf0761600), + (0xd01b1e00), + (0xd06a1e00), + (0x60151600), + (0x60641600)}, + {(0x3f800000), + (0x3f803880), + (0x3fd80704), + (0x3fd83f84), + (0x3fc80900), + (0x3fc83180), + (0x3f900e04), + (0x3f903684), + (0x3fa0048f), + (0x3fa03c0f), + (0x3ff8038b), + (0x3ff83b0b), + (0x3fe80d8f), + (0x3fe8350f), + (0x3fb00a8b), + (0x3fb0320b)}, + (0xfff80000), + {0x65,0x92,0xc9,0x30,0xd4,0x39,0xe2,0xf8,0x3a,0x06, + 0x72,0x5a,0xf0,0xe9,0x6f,0x1d,0x41,0xb8,0x38,0xcb,0x00} + }, + { + /* No.63 delta:1253 weight:1063 */ + 11213, + 40, + 15, + 8, + {(0x00000000), + (0xf0f1fa2b), + (0xc095cbf9), + (0x306431d2), + (0x84c003f6), + (0x7431f9dd), + (0x4455c80f), + (0xb4a43224), + (0x000041b7), + (0xf0f1bb9c), + (0xc0958a4e), + (0x30647065), + (0x84c04241), + (0x7431b86a), + (0x445589b8), + (0xb4a47393)}, + {(0x00000000), + (0x000f4800), + (0x00c47000), + (0x00cb3800), + (0x001ec000), + (0x00118800), + (0x00dab000), + (0x00d5f800), + (0xc01d9e00), + (0xc012d600), + (0xc0d9ee00), + (0xc0d6a600), + (0xc0035e00), + (0xc00c1600), + (0xc0c72e00), + (0xc0c86600)}, + {(0x3f800000), + (0x3f8007a4), + (0x3f806238), + (0x3f80659c), + (0x3f800f60), + (0x3f8008c4), + (0x3f806d58), + (0x3f806afc), + (0x3fe00ecf), + (0x3fe0096b), + (0x3fe06cf7), + (0x3fe06b53), + (0x3fe001af), + (0x3fe0060b), + (0x3fe06397), + (0x3fe06433)}, + (0xfff80000), + {0x6a,0x42,0x24,0x72,0x49,0x2e,0x6c,0xc6,0x39,0xde, + 0x29,0x45,0x5e,0xba,0x3b,0xda,0xc6,0xb7,0x79,0xd2,0x00} + }, + { + /* No.64 delta:5028 weight:833 */ + 11213, + 40, + 3, + 16, + {(0x00000000), + (0x0fda9709), + (0xdb5d90d9), + (0xd48707d0), + (0x78500401), + (0x778a9308), + (0xa30d94d8), + (0xacd703d1), + (0x00000aa4), + (0x0fda9dad), + (0xdb5d9a7d), + (0xd4870d74), + (0x78500ea5), + (0x778a99ac), + (0xa30d9e7c), + (0xacd70975)}, + {(0x00000000), + (0x19200000), + (0x83a00000), + (0x9a800000), + (0x00800000), + (0x19a00000), + (0x83200000), + (0x9a000000), + (0x41001e00), + (0x58201e00), + (0xc2a01e00), + (0xdb801e00), + (0x41801e00), + (0x58a01e00), + (0xc2201e00), + (0xdb001e00)}, + {(0x3f800000), + (0x3f8c9000), + (0x3fc1d000), + (0x3fcd4000), + (0x3f804000), + (0x3f8cd000), + (0x3fc19000), + (0x3fcd0000), + (0x3fa0800f), + (0x3fac100f), + (0x3fe1500f), + (0x3fedc00f), + (0x3fa0c00f), + (0x3fac500f), + (0x3fe1100f), + (0x3fed800f)}, + (0xfff80000), + {0x7f,0xa7,0x79,0xc1,0x02,0x5a,0xb9,0x48,0xd7,0xc2, + 0x1b,0xde,0x64,0x28,0xca,0x0c,0xa1,0xb8,0xbd,0x71,0x00} + }, + { + /* No.65 delta:1199 weight:1181 */ + 11213, + 35, + 20, + 9, + {(0x00000000), + (0xf97f5fb7), + (0x820665df), + (0x7b793a68), + (0xeda00417), + (0x14df5ba0), + (0x6fa661c8), + (0x96d93e7f), + (0x0000be8a), + (0xf97fe13d), + (0x8206db55), + (0x7b7984e2), + (0xeda0ba9d), + (0x14dfe52a), + (0x6fa6df42), + (0x96d980f5)}, + {(0x00000000), + (0x0c163000), + (0x000c1000), + (0x0c1a2000), + (0xc0028000), + (0xcc14b000), + (0xc00e9000), + (0xcc18a000), + (0x7101de00), + (0x7d17ee00), + (0x710dce00), + (0x7d1bfe00), + (0xb1035e00), + (0xbd156e00), + (0xb10f4e00), + (0xbd197e00)}, + {(0x3f800000), + (0x3f860b18), + (0x3f800608), + (0x3f860d10), + (0x3fe00140), + (0x3fe60a58), + (0x3fe00748), + (0x3fe60c50), + (0x3fb880ef), + (0x3fbe8bf7), + (0x3fb886e7), + (0x3fbe8dff), + (0x3fd881af), + (0x3fde8ab7), + (0x3fd887a7), + (0x3fde8cbf)}, + (0xfff80000), + {0x44,0x09,0x7e,0x16,0x6a,0x0b,0xbf,0xd6,0xf6,0x83, + 0xc1,0x33,0x24,0x8d,0x24,0x40,0xc5,0xee,0xb0,0xd2,0x00} + }, + { + /* No.66 delta:1553 weight:539 */ + 11213, + 26, + 13, + 19, + {(0x00000000), + (0xc75eb6dc), + (0xfa4bc661), + (0x3d1570bd), + (0x6f600428), + (0xa83eb2f4), + (0x952bc249), + (0x52757495), + (0x0000df90), + (0xc75e694c), + (0xfa4b19f1), + (0x3d15af2d), + (0x6f60dbb8), + (0xa83e6d64), + (0x952b1dd9), + (0x5275ab05)}, + {(0x00000000), + (0x00521800), + (0x20647400), + (0x20366c00), + (0x60dc1800), + (0x608e0000), + (0x40b86c00), + (0x40ea7400), + (0x10341e00), + (0x10660600), + (0x30506a00), + (0x30027200), + (0x70e80600), + (0x70ba1e00), + (0x508c7200), + (0x50de6a00)}, + {(0x3f800000), + (0x3f80290c), + (0x3f90323a), + (0x3f901b36), + (0x3fb06e0c), + (0x3fb04700), + (0x3fa05c36), + (0x3fa0753a), + (0x3f881a0f), + (0x3f883303), + (0x3f982835), + (0x3f980139), + (0x3fb87403), + (0x3fb85d0f), + (0x3fa84639), + (0x3fa86f35)}, + (0xfff80000), + {0xe3,0x81,0xfe,0x0e,0xae,0xa6,0x17,0x99,0xb5,0xdc, + 0x36,0xa3,0xa9,0x84,0x5e,0xac,0xaf,0x0b,0xa6,0x5e,0x00} + }, + { + /* No.67 delta:1370 weight:1349 */ + 11213, + 50, + 8, + 4, + {(0x00000000), + (0xf2eee92e), + (0x184a48a6), + (0xeaa4a188), + (0x3cb00439), + (0xce5eed17), + (0x24fa4c9f), + (0xd614a5b1), + (0x0000c236), + (0xf2ee2b18), + (0x184a8a90), + (0xeaa463be), + (0x3cb0c60f), + (0xce5e2f21), + (0x24fa8ea9), + (0xd6146787)}, + {(0x00000000), + (0x40028000), + (0x70014000), + (0x3003c000), + (0x20002000), + (0x6002a000), + (0x50016000), + (0x1003e000), + (0x10001e00), + (0x50029e00), + (0x60015e00), + (0x2003de00), + (0x30003e00), + (0x7002be00), + (0x40017e00), + (0x0003fe00)}, + {(0x3f800000), + (0x3fa00140), + (0x3fb800a0), + (0x3f9801e0), + (0x3f900010), + (0x3fb00150), + (0x3fa800b0), + (0x3f8801f0), + (0x3f88000f), + (0x3fa8014f), + (0x3fb000af), + (0x3f9001ef), + (0x3f98001f), + (0x3fb8015f), + (0x3fa000bf), + (0x3f8001ff)}, + (0xfff80000), + {0xce,0xab,0xcf,0x53,0x4e,0xc1,0xc1,0xd0,0x64,0x84, + 0xd7,0xc3,0xad,0x13,0xad,0xf4,0xf7,0x14,0xe1,0xd6,0x00} + }, + { + /* No.68 delta:1769 weight:1053 */ + 11213, + 44, + 23, + 7, + {(0x00000000), + (0x1c10f784), + (0xb81f8711), + (0xa40f7095), + (0xd0d00449), + (0xccc0f3cd), + (0x68cf8358), + (0x74df74dc), + (0x00006582), + (0x1c109206), + (0xb81fe293), + (0xa40f1517), + (0xd0d061cb), + (0xccc0964f), + (0x68cfe6da), + (0x74df115e)}, + {(0x00000000), + (0x009da000), + (0x40746000), + (0x40e9c000), + (0x00028400), + (0x009f2400), + (0x4076e400), + (0x40eb4400), + (0x700bbe00), + (0x70961e00), + (0x307fde00), + (0x30e27e00), + (0x70093a00), + (0x70949a00), + (0x307d5a00), + (0x30e0fa00)}, + {(0x3f800000), + (0x3f804ed0), + (0x3fa03a30), + (0x3fa074e0), + (0x3f800142), + (0x3f804f92), + (0x3fa03b72), + (0x3fa075a2), + (0x3fb805df), + (0x3fb84b0f), + (0x3f983fef), + (0x3f98713f), + (0x3fb8049d), + (0x3fb84a4d), + (0x3f983ead), + (0x3f98707d)}, + (0xfff80000), + {0x25,0xc5,0x2b,0x7e,0x94,0x70,0x50,0xab,0x68,0x79, + 0xe0,0x34,0x49,0x1e,0xd3,0x2a,0xe2,0x9f,0xef,0x26,0x00} + }, + { + /* No.69 delta:1887 weight:1253 */ + 11213, + 64, + 9, + 8, + {(0x00000000), + (0x4cbf4fb8), + (0xcc209ffc), + (0x809fd044), + (0x7e700455), + (0x32cf4bed), + (0xb2509ba9), + (0xfeefd411), + (0x0000612d), + (0x4cbf2e95), + (0xcc20fed1), + (0x809fb169), + (0x7e706578), + (0x32cf2ac0), + (0xb250fa84), + (0xfeefb53c)}, + {(0x00000000), + (0x50090000), + (0x00035000), + (0x500a5000), + (0x04019000), + (0x54089000), + (0x0402c000), + (0x540bc000), + (0x05027e00), + (0x550b7e00), + (0x05012e00), + (0x55082e00), + (0x0103ee00), + (0x510aee00), + (0x0100be00), + (0x5109be00)}, + {(0x3f800000), + (0x3fa80480), + (0x3f8001a8), + (0x3fa80528), + (0x3f8200c8), + (0x3faa0448), + (0x3f820160), + (0x3faa05e0), + (0x3f82813f), + (0x3faa85bf), + (0x3f828097), + (0x3faa8417), + (0x3f8081f7), + (0x3fa88577), + (0x3f80805f), + (0x3fa884df)}, + (0xfff80000), + {0x1f,0x11,0x3a,0x53,0x30,0xf5,0x3a,0x92,0x69,0x8f, + 0x5e,0x40,0x86,0x58,0x16,0xa4,0x7f,0x33,0x04,0xc6,0x00} + }, + { + /* No.70 delta:1651 weight:1401 */ + 11213, + 35, + 9, + 8, + {(0x00000000), + (0xcaa73bcd), + (0x48ffa480), + (0x82589f4d), + (0x0b600460), + (0xc1c73fad), + (0x439fa0e0), + (0x89389b2d), + (0x0000d8fb), + (0xcaa7e336), + (0x48ff7c7b), + (0x825847b6), + (0x0b60dc9b), + (0xc1c7e756), + (0x439f781b), + (0x893843d6)}, + {(0x00000000), + (0x90604200), + (0x20222000), + (0xb0426200), + (0x5023a800), + (0xc043ea00), + (0x70018800), + (0xe061ca00), + (0x16031e00), + (0x86635c00), + (0x36213e00), + (0xa6417c00), + (0x4620b600), + (0xd640f400), + (0x66029600), + (0xf662d400)}, + {(0x3f800000), + (0x3fc83021), + (0x3f901110), + (0x3fd82131), + (0x3fa811d4), + (0x3fe021f5), + (0x3fb800c4), + (0x3ff030e5), + (0x3f8b018f), + (0x3fc331ae), + (0x3f9b109f), + (0x3fd320be), + (0x3fa3105b), + (0x3feb207a), + (0x3fb3014b), + (0x3ffb316a)}, + (0xfff80000), + {0xf7,0xac,0x3b,0x82,0x60,0x2e,0xa2,0x38,0xd5,0xbd, + 0x9e,0x07,0x19,0x05,0x37,0x68,0xa8,0x2b,0xcc,0x5b,0x00} + }, + { + /* No.71 delta:805 weight:1559 */ + 11213, + 85, + 17, + 2, + {(0x00000000), + (0x4ea39f4b), + (0xeedcca5e), + (0xa07f5515), + (0x1a80047d), + (0x54239b36), + (0xf45cce23), + (0xbaff5168), + (0x000051a3), + (0x4ea3cee8), + (0xeedc9bfd), + (0xa07f04b6), + (0x1a8055de), + (0x5423ca95), + (0xf45c9f80), + (0xbaff00cb)}, + {(0x00000000), + (0x0879e800), + (0x10141400), + (0x186dfc00), + (0x006c0800), + (0x0815e000), + (0x10781c00), + (0x1801f400), + (0x40237e00), + (0x485a9600), + (0x50376a00), + (0x584e8200), + (0x404f7600), + (0x48369e00), + (0x505b6200), + (0x58228a00)}, + {(0x3f800000), + (0x3f843cf4), + (0x3f880a0a), + (0x3f8c36fe), + (0x3f803604), + (0x3f840af0), + (0x3f883c0e), + (0x3f8c00fa), + (0x3fa011bf), + (0x3fa42d4b), + (0x3fa81bb5), + (0x3fac2741), + (0x3fa027bb), + (0x3fa41b4f), + (0x3fa82db1), + (0x3fac1145)}, + (0xfff80000), + {0x81,0x81,0xe0,0x37,0x51,0x1b,0x87,0x01,0xa3,0x40, + 0x70,0xd0,0xb9,0x63,0xbb,0xc0,0xe9,0x49,0x0b,0x62,0x00} + }, + { + /* No.72 delta:1929 weight:1383 */ + 11213, + 77, + 8, + 10, + {(0x00000000), + (0x9625646a), + (0xa06390e5), + (0x3646f48f), + (0x6c400487), + (0xfa6560ed), + (0xcc239462), + (0x5a06f008), + (0x00006232), + (0x96250658), + (0xa063f2d7), + (0x364696bd), + (0x6c4066b5), + (0xfa6502df), + (0xcc23f650), + (0x5a06923a)}, + {(0x00000000), + (0x60350000), + (0x08a08000), + (0x68958000), + (0x00120000), + (0x60270000), + (0x08b28000), + (0x68878000), + (0x60021e00), + (0x00371e00), + (0x68a29e00), + (0x08979e00), + (0x60101e00), + (0x00251e00), + (0x68b09e00), + (0x08859e00)}, + {(0x3f800000), + (0x3fb01a80), + (0x3f845040), + (0x3fb44ac0), + (0x3f800900), + (0x3fb01380), + (0x3f845940), + (0x3fb443c0), + (0x3fb0010f), + (0x3f801b8f), + (0x3fb4514f), + (0x3f844bcf), + (0x3fb0080f), + (0x3f80128f), + (0x3fb4584f), + (0x3f8442cf)}, + (0xfff80000), + {0xec,0xe8,0xd6,0x3f,0xf0,0x4f,0x6e,0xc9,0x92,0xb9, + 0x0b,0xf3,0x46,0x01,0x83,0x06,0xba,0xbb,0xfc,0x3c,0x00} + }, + { + /* No.73 delta:1312 weight:1037 */ + 11213, + 79, + 14, + 13, + {(0x00000000), + (0x3c3b4194), + (0x3b4a522a), + (0x077113be), + (0x70e00495), + (0x4cdb4501), + (0x4baa56bf), + (0x7791172b), + (0x00001842), + (0x3c3b59d6), + (0x3b4a4a68), + (0x07710bfc), + (0x70e01cd7), + (0x4cdb5d43), + (0x4baa4efd), + (0x77910f69)}, + {(0x00000000), + (0x5e1d3000), + (0x08002800), + (0x561d1800), + (0x00404000), + (0x5e5d7000), + (0x08406800), + (0x565d5800), + (0xa7841e00), + (0xf9992e00), + (0xaf843600), + (0xf1990600), + (0xa7c45e00), + (0xf9d96e00), + (0xafc47600), + (0xf1d94600)}, + {(0x3f800000), + (0x3faf0e98), + (0x3f840014), + (0x3fab0e8c), + (0x3f802020), + (0x3faf2eb8), + (0x3f842034), + (0x3fab2eac), + (0x3fd3c20f), + (0x3ffccc97), + (0x3fd7c21b), + (0x3ff8cc83), + (0x3fd3e22f), + (0x3ffcecb7), + (0x3fd7e23b), + (0x3ff8eca3)}, + (0xfff80000), + {0xe5,0x84,0x28,0x6a,0xc7,0xb8,0xff,0x35,0x7e,0x4a, + 0xd0,0x29,0x99,0x65,0xc9,0xf9,0x00,0xb5,0xa5,0x73,0x00} + }, + { + /* No.74 delta:1274 weight:753 */ + 11213, + 83, + 10, + 18, + {(0x00000000), + (0xdb6fd096), + (0x7bead936), + (0xa08509a0), + (0x059004a2), + (0xdeffd434), + (0x7e7add94), + (0xa5150d02), + (0x00003dd4), + (0xdb6fed42), + (0x7beae4e2), + (0xa0853474), + (0x05903976), + (0xdeffe9e0), + (0x7e7ae040), + (0xa51530d6)}, + {(0x00000000), + (0x0862a000), + (0x20176000), + (0x2875c000), + (0x21182000), + (0x297a8000), + (0x010f4000), + (0x096de000), + (0x100c1e00), + (0x186ebe00), + (0x301b7e00), + (0x3879de00), + (0x31143e00), + (0x39769e00), + (0x11035e00), + (0x1961fe00)}, + {(0x3f800000), + (0x3f843150), + (0x3f900bb0), + (0x3f943ae0), + (0x3f908c10), + (0x3f94bd40), + (0x3f8087a0), + (0x3f84b6f0), + (0x3f88060f), + (0x3f8c375f), + (0x3f980dbf), + (0x3f9c3cef), + (0x3f988a1f), + (0x3f9cbb4f), + (0x3f8881af), + (0x3f8cb0ff)}, + (0xfff80000), + {0x94,0x6b,0xe1,0x97,0xcf,0xd7,0x1d,0x69,0x3d,0xf1, + 0xd3,0x31,0x9b,0x3f,0x74,0x40,0xe4,0x78,0x37,0x93,0x00} + }, + { + /* No.75 delta:3240 weight:999 */ + 11213, + 25, + 3, + 14, + {(0x00000000), + (0x5231ede5), + (0x75f41157), + (0x27c5fcb2), + (0x231004bc), + (0x7121e959), + (0x56e415eb), + (0x04d5f80e), + (0x000014a2), + (0x5231f947), + (0x75f405f5), + (0x27c5e810), + (0x2310101e), + (0x7121fdfb), + (0x56e40149), + (0x04d5ecac)}, + {(0x00000000), + (0x09c10000), + (0x50f28000), + (0x59338000), + (0x12424000), + (0x1b834000), + (0x42b0c000), + (0x4b71c000), + (0x02361e00), + (0x0bf71e00), + (0x52c49e00), + (0x5b059e00), + (0x10745e00), + (0x19b55e00), + (0x4086de00), + (0x4947de00)}, + {(0x3f800000), + (0x3f84e080), + (0x3fa87940), + (0x3fac99c0), + (0x3f892120), + (0x3f8dc1a0), + (0x3fa15860), + (0x3fa5b8e0), + (0x3f811b0f), + (0x3f85fb8f), + (0x3fa9624f), + (0x3fad82cf), + (0x3f883a2f), + (0x3f8cdaaf), + (0x3fa0436f), + (0x3fa4a3ef)}, + (0xfff80000), + {0x22,0xa1,0x8f,0x2e,0x7e,0xb0,0x8f,0x95,0xab,0x7b, + 0xe4,0x15,0x6f,0x5a,0x78,0x2a,0xeb,0x47,0xfe,0xa6,0x00} + }, + { + /* No.76 delta:1884 weight:1457 */ + 11213, + 11, + 13, + 3, + {(0x00000000), + (0xb165bd1d), + (0x1f5b5cd1), + (0xae3ee1cc), + (0x07b004ca), + (0xb6d5b9d7), + (0x18eb581b), + (0xa98ee506), + (0x00000ebc), + (0xb165b3a1), + (0x1f5b526d), + (0xae3eef70), + (0x07b00a76), + (0xb6d5b76b), + (0x18eb56a7), + (0xa98eebba)}, + {(0x00000000), + (0x2a1ef400), + (0x43091000), + (0x6917e400), + (0x05182000), + (0x2f06d400), + (0x46113000), + (0x6c0fc400), + (0x20c41e00), + (0x0adaea00), + (0x63cd0e00), + (0x49d3fa00), + (0x25dc3e00), + (0x0fc2ca00), + (0x66d52e00), + (0x4ccbda00)}, + {(0x3f800000), + (0x3f950f7a), + (0x3fa18488), + (0x3fb48bf2), + (0x3f828c10), + (0x3f97836a), + (0x3fa30898), + (0x3fb607e2), + (0x3f90620f), + (0x3f856d75), + (0x3fb1e687), + (0x3fa4e9fd), + (0x3f92ee1f), + (0x3f87e165), + (0x3fb36a97), + (0x3fa665ed)}, + (0xfff80000), + {0x5f,0x66,0x78,0x0e,0x66,0x3f,0x37,0x9d,0x75,0xa2, + 0x49,0x78,0xb7,0x8c,0xf1,0x7c,0x84,0xf3,0xab,0x84,0x00} + }, + { + /* No.77 delta:1037 weight:1439 */ + 11213, + 43, + 15, + 7, + {(0x00000000), + (0x3b7738f7), + (0x2ee7f42b), + (0x1590ccdc), + (0x8c3004de), + (0xb7473c29), + (0xa2d7f0f5), + (0x99a0c802), + (0x0000b3f9), + (0x3b778b0e), + (0x2ee747d2), + (0x15907f25), + (0x8c30b727), + (0xb7478fd0), + (0xa2d7430c), + (0x99a07bfb)}, + {(0x00000000), + (0x20009400), + (0x70030800), + (0x50039c00), + (0x90011600), + (0xb0018200), + (0xe0021e00), + (0xc0028a00), + (0x40005e00), + (0x6000ca00), + (0x30035600), + (0x1003c200), + (0xd0014800), + (0xf001dc00), + (0xa0024000), + (0x8002d400)}, + {(0x3f800000), + (0x3f90004a), + (0x3fb80184), + (0x3fa801ce), + (0x3fc8008b), + (0x3fd800c1), + (0x3ff0010f), + (0x3fe00145), + (0x3fa0002f), + (0x3fb00065), + (0x3f9801ab), + (0x3f8801e1), + (0x3fe800a4), + (0x3ff800ee), + (0x3fd00120), + (0x3fc0016a)}, + (0xfff80000), + {0x4d,0xd9,0x1c,0xbc,0x61,0x94,0x41,0xb3,0x64,0x5a, + 0xe0,0x27,0x21,0x33,0x58,0x8a,0x3a,0x27,0xe7,0x61,0x00} + }, + { + /* No.78 delta:3771 weight:1149 */ + 11213, + 67, + 6, + 13, + {(0x00000000), + (0xeb935e7e), + (0x12dd9004), + (0xf94ece7a), + (0x518004ec), + (0xba135a92), + (0x435d94e8), + (0xa8ceca96), + (0x00002915), + (0xeb93776b), + (0x12ddb911), + (0xf94ee76f), + (0x51802df9), + (0xba137387), + (0x435dbdfd), + (0xa8cee383)}, + {(0x00000000), + (0x00600000), + (0x005c0000), + (0x003c0000), + (0xa7000000), + (0xa7600000), + (0xa75c0000), + (0xa73c0000), + (0x00381e00), + (0x00581e00), + (0x00641e00), + (0x00041e00), + (0xa7381e00), + (0xa7581e00), + (0xa7641e00), + (0xa7041e00)}, + {(0x3f800000), + (0x3f803000), + (0x3f802e00), + (0x3f801e00), + (0x3fd38000), + (0x3fd3b000), + (0x3fd3ae00), + (0x3fd39e00), + (0x3f801c0f), + (0x3f802c0f), + (0x3f80320f), + (0x3f80020f), + (0x3fd39c0f), + (0x3fd3ac0f), + (0x3fd3b20f), + (0x3fd3820f)}, + (0xfff80000), + {0x61,0xb9,0x79,0x4a,0xf6,0x0b,0x90,0x19,0x41,0xed, + 0xc7,0x02,0x30,0x6e,0x66,0x3a,0xa0,0x21,0x38,0x4d,0x00} + }, + { + /* No.79 delta:8905 weight:995 */ + 11213, + 37, + 2, + 14, + {(0x00000000), + (0xc386d224), + (0xa19cefca), + (0x621a3dee), + (0x73c004f0), + (0xb046d6d4), + (0xd25ceb3a), + (0x11da391e), + (0x00006023), + (0xc386b207), + (0xa19c8fe9), + (0x621a5dcd), + (0x73c064d3), + (0xb046b6f7), + (0xd25c8b19), + (0x11da593d)}, + {(0x00000000), + (0x50000000), + (0x60000000), + (0x30000000), + (0x00000000), + (0x50000000), + (0x60000000), + (0x30000000), + (0x10001e00), + (0x40001e00), + (0x70001e00), + (0x20001e00), + (0x10001e00), + (0x40001e00), + (0x70001e00), + (0x20001e00)}, + {(0x3f800000), + (0x3fa80000), + (0x3fb00000), + (0x3f980000), + (0x3f800000), + (0x3fa80000), + (0x3fb00000), + (0x3f980000), + (0x3f88000f), + (0x3fa0000f), + (0x3fb8000f), + (0x3f90000f), + (0x3f88000f), + (0x3fa0000f), + (0x3fb8000f), + (0x3f90000f)}, + (0xfff80000), + {0xcd,0x77,0xa6,0x4e,0x16,0x97,0x82,0x51,0x40,0x8c, + 0x23,0x3d,0x69,0x41,0x55,0xf4,0x6d,0xb5,0x97,0xc4,0x00} + }, + { + /* No.80 delta:1084 weight:1327 */ + 11213, + 41, + 20, + 7, + {(0x00000000), + (0x03b0124c), + (0x2709d148), + (0x24b9c304), + (0xd150050f), + (0xd2e01743), + (0xf659d447), + (0xf5e9c60b), + (0x0000e5a0), + (0x03b0f7ec), + (0x270934e8), + (0x24b926a4), + (0xd150e0af), + (0xd2e0f2e3), + (0xf65931e7), + (0xf5e923ab)}, + {(0x00000000), + (0x58fc3200), + (0x70059800), + (0x28f9aa00), + (0x00443a00), + (0x58b80800), + (0x7041a200), + (0x28bd9000), + (0x60225e00), + (0x38de6c00), + (0x1027c600), + (0x48dbf400), + (0x60666400), + (0x389a5600), + (0x1063fc00), + (0x489fce00)}, + {(0x3f800000), + (0x3fac7e19), + (0x3fb802cc), + (0x3f947cd5), + (0x3f80221d), + (0x3fac5c04), + (0x3fb820d1), + (0x3f945ec8), + (0x3fb0112f), + (0x3f9c6f36), + (0x3f8813e3), + (0x3fa46dfa), + (0x3fb03332), + (0x3f9c4d2b), + (0x3f8831fe), + (0x3fa44fe7)}, + (0xfff80000), + {0x17,0x06,0xb5,0x56,0x08,0x24,0x02,0x45,0x7d,0xec, + 0xaa,0x6e,0xee,0x42,0x3d,0x61,0xec,0x7b,0x95,0xda,0x00} + }, + { + /* No.81 delta:2107 weight:929 */ + 11213, + 68, + 7, + 13, + {(0x00000000), + (0xa2680084), + (0x72c07011), + (0xd0a87095), + (0xe9c00518), + (0x4ba8059c), + (0x9b007509), + (0x3968758d), + (0x000019d6), + (0xa2681952), + (0x72c069c7), + (0xd0a86943), + (0xe9c01cce), + (0x4ba81c4a), + (0x9b006cdf), + (0x39686c5b)}, + {(0x00000000), + (0x06214000), + (0x50182000), + (0x56396000), + (0x004c0000), + (0x066d4000), + (0x50542000), + (0x56756000), + (0x003abe00), + (0x061bfe00), + (0x50229e00), + (0x5603de00), + (0x0076be00), + (0x0657fe00), + (0x506e9e00), + (0x564fde00)}, + {(0x3f800000), + (0x3f8310a0), + (0x3fa80c10), + (0x3fab1cb0), + (0x3f802600), + (0x3f8336a0), + (0x3fa82a10), + (0x3fab3ab0), + (0x3f801d5f), + (0x3f830dff), + (0x3fa8114f), + (0x3fab01ef), + (0x3f803b5f), + (0x3f832bff), + (0x3fa8374f), + (0x3fab27ef)}, + (0xfff80000), + {0x06,0xc1,0x16,0x3a,0x4b,0xf5,0xcc,0xe4,0x06,0xc5, + 0x47,0x64,0xd8,0x26,0x6e,0xa3,0xd2,0xe3,0xfc,0x67,0x00} + }, + { + /* No.82 delta:1653 weight:993 */ + 11213, + 67, + 15, + 1, + {(0x00000000), + (0x205bddc2), + (0x51a5fb05), + (0x71fe26c7), + (0xbc800525), + (0x9cdbd8e7), + (0xed25fe20), + (0xcd7e23e2), + (0x0000ae60), + (0x205b73a2), + (0x51a55565), + (0x71fe88a7), + (0xbc80ab45), + (0x9cdb7687), + (0xed255040), + (0xcd7e8d82)}, + {(0x00000000), + (0x200d8e00), + (0x01004000), + (0x210dce00), + (0x1710c000), + (0x371d4e00), + (0x16108000), + (0x361d0e00), + (0x00409e00), + (0x204d1000), + (0x0140de00), + (0x214d5000), + (0x17505e00), + (0x375dd000), + (0x16501e00), + (0x365d9000)}, + {(0x3f800000), + (0x3f9006c7), + (0x3f808020), + (0x3f9086e7), + (0x3f8b8860), + (0x3f9b8ea7), + (0x3f8b0840), + (0x3f9b0e87), + (0x3f80204f), + (0x3f902688), + (0x3f80a06f), + (0x3f90a6a8), + (0x3f8ba82f), + (0x3f9baee8), + (0x3f8b280f), + (0x3f9b2ec8)}, + (0xfff80000), + {0x31,0x5a,0x14,0x56,0x22,0x69,0x71,0xb4,0xed,0xe9, + 0x57,0x3c,0xb3,0xa3,0xc2,0xd8,0x5c,0x3b,0xf9,0x7a,0x00} + }, + { + /* No.83 delta:2591 weight:1355 */ + 11213, + 78, + 3, + 3, + {(0x00000000), + (0x3fa6f3ae), + (0x11561526), + (0x2ef0e688), + (0x3f40053d), + (0x00e6f693), + (0x2e16101b), + (0x11b0e3b5), + (0x000038dd), + (0x3fa6cb73), + (0x11562dfb), + (0x2ef0de55), + (0x3f403de0), + (0x00e6ce4e), + (0x2e1628c6), + (0x11b0db68)}, + {(0x00000000), + (0x88264000), + (0x60420000), + (0xe8644000), + (0x20102000), + (0xa8366000), + (0x40522000), + (0xc8746000), + (0x00791e00), + (0x885f5e00), + (0x603b1e00), + (0xe81d5e00), + (0x20693e00), + (0xa84f7e00), + (0x402b3e00), + (0xc80d7e00)}, + {(0x3f800000), + (0x3fc41320), + (0x3fb02100), + (0x3ff43220), + (0x3f900810), + (0x3fd41b30), + (0x3fa02910), + (0x3fe43a30), + (0x3f803c8f), + (0x3fc42faf), + (0x3fb01d8f), + (0x3ff40eaf), + (0x3f90349f), + (0x3fd427bf), + (0x3fa0159f), + (0x3fe406bf)}, + (0xfff80000), + {0x95,0xde,0xea,0xd2,0x91,0x96,0x3a,0x31,0x18,0xb4, + 0x29,0x3c,0x05,0x83,0x13,0x20,0xa6,0xbb,0xfa,0x90,0x00} + }, + { + /* No.84 delta:1724 weight:1387 */ + 11213, + 31, + 24, + 7, + {(0x00000000), + (0x6f77a064), + (0x9d4e3ea4), + (0xf2399ec0), + (0xdab00543), + (0xb5c7a527), + (0x47fe3be7), + (0x28899b83), + (0x0000ba57), + (0x6f771a33), + (0x9d4e84f3), + (0xf2392497), + (0xdab0bf14), + (0xb5c71f70), + (0x47fe81b0), + (0x288921d4)}, + {(0x00000000), + (0x4052c800), + (0x403d7000), + (0x006fb800), + (0x01748400), + (0x41264c00), + (0x4149f400), + (0x011b3c00), + (0x30183e00), + (0x704af600), + (0x70254e00), + (0x30778600), + (0x316cba00), + (0x713e7200), + (0x7151ca00), + (0x31030200)}, + {(0x3f800000), + (0x3fa02964), + (0x3fa01eb8), + (0x3f8037dc), + (0x3f80ba42), + (0x3fa09326), + (0x3fa0a4fa), + (0x3f808d9e), + (0x3f980c1f), + (0x3fb8257b), + (0x3fb812a7), + (0x3f983bc3), + (0x3f98b65d), + (0x3fb89f39), + (0x3fb8a8e5), + (0x3f988181)}, + (0xfff80000), + {0x24,0x42,0xb5,0x8a,0x26,0x25,0x0b,0x43,0xb5,0xa1, + 0xfd,0xf3,0xef,0xe4,0x58,0x1d,0x2f,0x82,0x54,0xe1,0x00} + }, + { + /* No.85 delta:1315 weight:1167 */ + 11213, + 28, + 18, + 8, + {(0x00000000), + (0x7039a7b2), + (0x655a69d6), + (0x1563ce64), + (0x55800552), + (0x25b9a2e0), + (0x30da6c84), + (0x40e3cb36), + (0x0000db22), + (0x70397c90), + (0x655ab2f4), + (0x15631546), + (0x5580de70), + (0x25b979c2), + (0x30dab7a6), + (0x40e31014)}, + {(0x00000000), + (0x091ae000), + (0xc01fd200), + (0xc9053200), + (0x60072600), + (0x691dc600), + (0xa018f400), + (0xa9021400), + (0x40083e00), + (0x4912de00), + (0x8017ec00), + (0x890d0c00), + (0x200f1800), + (0x2915f800), + (0xe010ca00), + (0xe90a2a00)}, + {(0x3f800000), + (0x3f848d70), + (0x3fe00fe9), + (0x3fe48299), + (0x3fb00393), + (0x3fb48ee3), + (0x3fd00c7a), + (0x3fd4810a), + (0x3fa0041f), + (0x3fa4896f), + (0x3fc00bf6), + (0x3fc48686), + (0x3f90078c), + (0x3f948afc), + (0x3ff00865), + (0x3ff48515)}, + (0xfff80000), + {0x54,0x00,0xe5,0x09,0x83,0x8a,0xa3,0xac,0xe2,0x03, + 0xe4,0x5f,0x87,0xaa,0x93,0x3c,0x49,0xef,0xf1,0x12,0x00} + }, + { + /* No.86 delta:1805 weight:1023 */ + 11213, + 40, + 17, + 1, + {(0x00000000), + (0xd727963d), + (0x760f18b0), + (0xa1288e8d), + (0xe2d00563), + (0x35f7935e), + (0x94df1dd3), + (0x43f88bee), + (0x0000c942), + (0xd7275f7f), + (0x760fd1f2), + (0xa12847cf), + (0xe2d0cc21), + (0x35f75a1c), + (0x94dfd491), + (0x43f842ac)}, + {(0x00000000), + (0x207c0400), + (0x56934000), + (0x76ef4400), + (0x00009e00), + (0x207c9a00), + (0x5693de00), + (0x76efda00), + (0x20009e00), + (0x007c9a00), + (0x7693de00), + (0x56efda00), + (0x20000000), + (0x007c0400), + (0x76934000), + (0x56ef4400)}, + {(0x3f800000), + (0x3f903e02), + (0x3fab49a0), + (0x3fbb77a2), + (0x3f80004f), + (0x3f903e4d), + (0x3fab49ef), + (0x3fbb77ed), + (0x3f90004f), + (0x3f803e4d), + (0x3fbb49ef), + (0x3fab77ed), + (0x3f900000), + (0x3f803e02), + (0x3fbb49a0), + (0x3fab77a2)}, + (0xfff80000), + {0xc8,0x53,0x9a,0xab,0x96,0xd8,0xe7,0x02,0xe6,0xf1, + 0x74,0x36,0x00,0x32,0x32,0x6e,0x36,0xe4,0x78,0x88,0x00} + }, + { + /* No.87 delta:2165 weight:1423 */ + 11213, + 29, + 6, + 7, + {(0x00000000), + (0xb0a4f75d), + (0xd99a0020), + (0x693ef77d), + (0x0010057f), + (0xb0b4f222), + (0xd98a055f), + (0x692ef202), + (0x00002860), + (0xb0a4df3d), + (0xd99a2840), + (0x693edf1d), + (0x00102d1f), + (0xb0b4da42), + (0xd98a2d3f), + (0x692eda62)}, + {(0x00000000), + (0x00c02000), + (0x10102000), + (0x10d00000), + (0x700c0000), + (0x70cc2000), + (0x601c2000), + (0x60dc0000), + (0x00701e00), + (0x00b03e00), + (0x10603e00), + (0x10a01e00), + (0x707c1e00), + (0x70bc3e00), + (0x606c3e00), + (0x60ac1e00)}, + {(0x3f800000), + (0x3f806010), + (0x3f880810), + (0x3f886800), + (0x3fb80600), + (0x3fb86610), + (0x3fb00e10), + (0x3fb06e00), + (0x3f80380f), + (0x3f80581f), + (0x3f88301f), + (0x3f88500f), + (0x3fb83e0f), + (0x3fb85e1f), + (0x3fb0361f), + (0x3fb0560f)}, + (0xfff80000), + {0xc8,0x26,0xe1,0xb8,0xbd,0xd2,0x06,0x99,0x21,0x8b, + 0xa2,0x82,0x21,0x08,0x66,0x43,0x39,0x7d,0x22,0x3f,0x00} + }, + { + /* No.88 delta:2728 weight:929 */ + 11213, + 9, + 5, + 12, + {(0x00000000), + (0xba91b8b7), + (0x1f94657f), + (0xa505ddc8), + (0xc8900581), + (0x7201bd36), + (0xd70460fe), + (0x6d95d849), + (0x00009507), + (0xba912db0), + (0x1f94f078), + (0xa50548cf), + (0xc8909086), + (0x72012831), + (0xd704f5f9), + (0x6d954d4e)}, + {(0x00000000), + (0x74d60000), + (0x48810000), + (0x3c570000), + (0x07840000), + (0x73520000), + (0x4f050000), + (0x3bd30000), + (0xa0019e00), + (0xd4d79e00), + (0xe8809e00), + (0x9c569e00), + (0xa7859e00), + (0xd3539e00), + (0xef049e00), + (0x9bd29e00)}, + {(0x3f800000), + (0x3fba6b00), + (0x3fa44080), + (0x3f9e2b80), + (0x3f83c200), + (0x3fb9a900), + (0x3fa78280), + (0x3f9de980), + (0x3fd000cf), + (0x3fea6bcf), + (0x3ff4404f), + (0x3fce2b4f), + (0x3fd3c2cf), + (0x3fe9a9cf), + (0x3ff7824f), + (0x3fcde94f)}, + (0xfff80000), + {0xef,0x82,0x25,0x92,0x4d,0x84,0x32,0xcc,0x51,0x79, + 0xa6,0xf1,0xa8,0xb8,0xd3,0xc8,0xf4,0x1f,0x61,0x14,0x00} + }, + { + /* No.89 delta:1302 weight:829 */ + 11213, + 52, + 17, + 15, + {(0x00000000), + (0xff9c667b), + (0x076e42cb), + (0xf8f224b0), + (0x5a200593), + (0xa5bc63e8), + (0x5d4e4758), + (0xa2d22123), + (0x0000fbe9), + (0xff9c9d92), + (0x076eb922), + (0xf8f2df59), + (0x5a20fe7a), + (0xa5bc9801), + (0x5d4ebcb1), + (0xa2d2daca)}, + {(0x00000000), + (0x168c2000), + (0x08819000), + (0x1e0db000), + (0x8400d800), + (0x928cf800), + (0x8c814800), + (0x9a0d6800), + (0x0a023e00), + (0x1c8e1e00), + (0x0283ae00), + (0x140f8e00), + (0x8e02e600), + (0x988ec600), + (0x86837600), + (0x900f5600)}, + {(0x3f800000), + (0x3f8b4610), + (0x3f8440c8), + (0x3f8f06d8), + (0x3fc2006c), + (0x3fc9467c), + (0x3fc640a4), + (0x3fcd06b4), + (0x3f85011f), + (0x3f8e470f), + (0x3f8141d7), + (0x3f8a07c7), + (0x3fc70173), + (0x3fcc4763), + (0x3fc341bb), + (0x3fc807ab)}, + (0xfff80000), + {0x44,0x22,0x55,0x0c,0x46,0x02,0x05,0x6b,0x49,0xa7, + 0x79,0xcc,0xa0,0x5b,0x5c,0xeb,0x82,0xb3,0x48,0x1e,0x00} + }, + { + /* No.90 delta:1794 weight:683 */ + 11213, + 71, + 7, + 3, + {(0x00000000), + (0x28fcb37c), + (0x3de27e63), + (0x151ecd1f), + (0x99d005af), + (0xb12cb6d3), + (0xa4327bcc), + (0x8ccec8b0), + (0x0000473d), + (0x28fcf441), + (0x3de2395e), + (0x151e8a22), + (0x99d04292), + (0xb12cf1ee), + (0xa4323cf1), + (0x8cce8f8d)}, + {(0x00000000), + (0x00170000), + (0x00059200), + (0x00129200), + (0x61088000), + (0x611f8000), + (0x610d1200), + (0x611a1200), + (0x22825e00), + (0x22955e00), + (0x2287cc00), + (0x2290cc00), + (0x438ade00), + (0x439dde00), + (0x438f4c00), + (0x43984c00)}, + {(0x3f800000), + (0x3f800b80), + (0x3f8002c9), + (0x3f800949), + (0x3fb08440), + (0x3fb08fc0), + (0x3fb08689), + (0x3fb08d09), + (0x3f91412f), + (0x3f914aaf), + (0x3f9143e6), + (0x3f914866), + (0x3fa1c56f), + (0x3fa1ceef), + (0x3fa1c7a6), + (0x3fa1cc26)}, + (0xfff80000), + {0x63,0x96,0x53,0x66,0x89,0x8f,0x5a,0x0f,0x8c,0x80, + 0x0a,0x9a,0x17,0xd9,0x66,0x91,0xf8,0x92,0x97,0x62,0x00} + }, + { + /* No.91 delta:10527 weight:393 */ + 11213, + 5, + 2, + 19, + {(0x00000000), + (0x9ea45304), + (0x56ae02a1), + (0xc80a51a5), + (0x9ad005b9), + (0x047456bd), + (0xcc7e0718), + (0x52da541c), + (0x0000c554), + (0x9ea49650), + (0x56aec7f5), + (0xc80a94f1), + (0x9ad0c0ed), + (0x047493e9), + (0xcc7ec24c), + (0x52da9148)}, + {(0x00000000), + (0x64000000), + (0x0f800000), + (0x6b800000), + (0x00000000), + (0x64000000), + (0x0f800000), + (0x6b800000), + (0x00001e00), + (0x64001e00), + (0x0f801e00), + (0x6b801e00), + (0x00001e00), + (0x64001e00), + (0x0f801e00), + (0x6b801e00)}, + {(0x3f800000), + (0x3fb20000), + (0x3f87c000), + (0x3fb5c000), + (0x3f800000), + (0x3fb20000), + (0x3f87c000), + (0x3fb5c000), + (0x3f80000f), + (0x3fb2000f), + (0x3f87c00f), + (0x3fb5c00f), + (0x3f80000f), + (0x3fb2000f), + (0x3f87c00f), + (0x3fb5c00f)}, + (0xfff80000), + {0xd2,0x73,0xa3,0x8b,0x1a,0x90,0xef,0x94,0xe3,0x4a, + 0x16,0x2f,0x38,0x48,0xd9,0x68,0xf2,0xdf,0xe5,0xab,0x00} + }, + { + /* No.92 delta:2494 weight:1233 */ + 11213, + 7, + 21, + 4, + {(0x00000000), + (0x67c6fdcf), + (0x39165a15), + (0x5ed0a7da), + (0xa11005c0), + (0xc6d6f80f), + (0x98065fd5), + (0xffc0a21a), + (0x0000cdee), + (0x67c63021), + (0x391697fb), + (0x5ed06a34), + (0xa110c82e), + (0xc6d635e1), + (0x9806923b), + (0xffc06ff4)}, + {(0x00000000), + (0xc64d0800), + (0x67f58000), + (0xa1b88800), + (0x11ca8200), + (0xd7878a00), + (0x763f0200), + (0xb0720a00), + (0x4eb51e00), + (0x88f81600), + (0x29409e00), + (0xef0d9600), + (0x5f7f9c00), + (0x99329400), + (0x388a1c00), + (0xfec71400)}, + {(0x3f800000), + (0x3fe32684), + (0x3fb3fac0), + (0x3fd0dc44), + (0x3f88e541), + (0x3febc3c5), + (0x3fbb1f81), + (0x3fd83905), + (0x3fa75a8f), + (0x3fc47c0b), + (0x3f94a04f), + (0x3ff786cb), + (0x3fafbfce), + (0x3fcc994a), + (0x3f9c450e), + (0x3fff638a)}, + (0xfff80000), + {0x9e,0xa5,0x58,0x0a,0xe1,0x2c,0x68,0x94,0x2b,0x3f, + 0x4b,0xcd,0xe6,0xee,0x21,0x60,0xf3,0xf9,0x28,0xef,0x00} + }, + { + /* No.93 delta:2858 weight:713 */ + 11213, + 6, + 11, + 15, + {(0x00000000), + (0xce341fc2), + (0x74808815), + (0xbab497d7), + (0x396005de), + (0xf7541a1c), + (0x4de08dcb), + (0x83d49209), + (0x0000dee4), + (0xce34c126), + (0x748056f1), + (0xbab44933), + (0x3960db3a), + (0xf754c4f8), + (0x4de0532f), + (0x83d44ced)}, + {(0x00000000), + (0x0af25000), + (0x0c419c00), + (0x06b3cc00), + (0x82144400), + (0x88e61400), + (0x8e55d800), + (0x84a78800), + (0xe0053e00), + (0xeaf76e00), + (0xec44a200), + (0xe6b6f200), + (0x62117a00), + (0x68e32a00), + (0x6e50e600), + (0x64a2b600)}, + {(0x3f800000), + (0x3f857928), + (0x3f8620ce), + (0x3f8359e6), + (0x3fc10a22), + (0x3fc4730a), + (0x3fc72aec), + (0x3fc253c4), + (0x3ff0029f), + (0x3ff57bb7), + (0x3ff62251), + (0x3ff35b79), + (0x3fb108bd), + (0x3fb47195), + (0x3fb72873), + (0x3fb2515b)}, + (0xfff80000), + {0x67,0xfb,0x7b,0xdf,0x91,0xd7,0xa6,0xcb,0xfa,0x0c, + 0x9c,0xcf,0x32,0x59,0xd4,0x14,0x88,0x02,0x20,0xbd,0x00} + }, + { + /* No.94 delta:1428 weight:871 */ + 11213, + 51, + 24, + 3, + {(0x00000000), + (0x4055c0f5), + (0x3f9446d5), + (0x7fc18620), + (0xbd5005e5), + (0xfd05c510), + (0x82c44330), + (0xc29183c5), + (0x0000a8c2), + (0x40556837), + (0x3f94ee17), + (0x7fc12ee2), + (0xbd50ad27), + (0xfd056dd2), + (0x82c4ebf2), + (0xc2912b07)}, + {(0x00000000), + (0x6064a000), + (0x4ef89000), + (0x2e9c3000), + (0x08a1d000), + (0x68c57000), + (0x46594000), + (0x263de000), + (0x0c127e00), + (0x6c76de00), + (0x42eaee00), + (0x228e4e00), + (0x04b3ae00), + (0x64d70e00), + (0x4a4b3e00), + (0x2a2f9e00)}, + {(0x3f800000), + (0x3fb03250), + (0x3fa77c48), + (0x3f974e18), + (0x3f8450e8), + (0x3fb462b8), + (0x3fa32ca0), + (0x3f931ef0), + (0x3f86093f), + (0x3fb63b6f), + (0x3fa17577), + (0x3f914727), + (0x3f8259d7), + (0x3fb26b87), + (0x3fa5259f), + (0x3f9517cf)}, + (0xfff80000), + {0xfc,0xe1,0x89,0x6f,0x64,0xe4,0x4b,0x42,0xe3,0x27, + 0xa3,0x38,0x46,0x33,0x4f,0xf6,0x63,0x31,0xbb,0x80,0x00} + }, + { + /* No.95 delta:1914 weight:999 */ + 11213, + 43, + 8, + 13, + {(0x00000000), + (0x9c0723c5), + (0xc882db89), + (0x5485f84c), + (0x994005f3), + (0x05472636), + (0x51c2de7a), + (0xcdc5fdbf), + (0x000019bd), + (0x9c073a78), + (0xc882c234), + (0x5485e1f1), + (0x99401c4e), + (0x05473f8b), + (0x51c2c7c7), + (0xcdc5e402)}, + {(0x00000000), + (0x5061f000), + (0x105bc000), + (0x403a3000), + (0x00740400), + (0x5015f400), + (0x102fc400), + (0x404e3400), + (0x041c1e00), + (0x547dee00), + (0x1447de00), + (0x44262e00), + (0x04681a00), + (0x5409ea00), + (0x1433da00), + (0x44522a00)}, + {(0x3f800000), + (0x3fa830f8), + (0x3f882de0), + (0x3fa01d18), + (0x3f803a02), + (0x3fa80afa), + (0x3f8817e2), + (0x3fa0271a), + (0x3f820e0f), + (0x3faa3ef7), + (0x3f8a23ef), + (0x3fa21317), + (0x3f82340d), + (0x3faa04f5), + (0x3f8a19ed), + (0x3fa22915)}, + (0xfff80000), + {0xbf,0x5e,0xb4,0x48,0x47,0x8e,0xcb,0x36,0x4b,0x6a, + 0xc7,0x2c,0x1c,0xc9,0xdc,0x0d,0x4b,0x46,0x15,0xdf,0x00} + }, + { + /* No.96 delta:1078 weight:1383 */ + 11213, + 93, + 22, + 5, + {(0x00000000), + (0x4598c5d2), + (0x2a3c70f7), + (0x6fa4b525), + (0xf4e0060f), + (0xb178c3dd), + (0xdedc76f8), + (0x9b44b32a), + (0x0000ee71), + (0x45982ba3), + (0x2a3c9e86), + (0x6fa45b54), + (0xf4e0e87e), + (0xb1782dac), + (0xdedc9889), + (0x9b445d5b)}, + {(0x00000000), + (0x40220000), + (0x20738000), + (0x60518000), + (0x007e2000), + (0x405c2000), + (0x200da000), + (0x602fa000), + (0x80035e00), + (0xc0215e00), + (0xa070de00), + (0xe052de00), + (0x807d7e00), + (0xc05f7e00), + (0xa00efe00), + (0xe02cfe00)}, + {(0x3f800000), + (0x3fa01100), + (0x3f9039c0), + (0x3fb028c0), + (0x3f803f10), + (0x3fa02e10), + (0x3f9006d0), + (0x3fb017d0), + (0x3fc001af), + (0x3fe010af), + (0x3fd0386f), + (0x3ff0296f), + (0x3fc03ebf), + (0x3fe02fbf), + (0x3fd0077f), + (0x3ff0167f)}, + (0xfff80000), + {0xf7,0x01,0xdc,0x94,0xdb,0xfe,0x75,0xe3,0x41,0x0d, + 0xa7,0xcf,0xdb,0xc4,0xf8,0x63,0x39,0xf1,0x73,0x83,0x00} + }, + { + /* No.97 delta:1680 weight:855 */ + 11213, + 56, + 11, + 18, + {(0x00000000), + (0xed377fcb), + (0x935b7bcf), + (0x7e6c0404), + (0xb1b0061d), + (0x5c8779d6), + (0x22eb7dd2), + (0xcfdc0219), + (0x0000dc19), + (0xed37a3d2), + (0x935ba7d6), + (0x7e6cd81d), + (0xb1b0da04), + (0x5c87a5cf), + (0x22eba1cb), + (0xcfdcde00)}, + {(0x00000000), + (0x10100000), + (0x201c0000), + (0x300c0000), + (0x30000000), + (0x20100000), + (0x101c0000), + (0x000c0000), + (0x40051e00), + (0x50151e00), + (0x60191e00), + (0x70091e00), + (0x70051e00), + (0x60151e00), + (0x50191e00), + (0x40091e00)}, + {(0x3f800000), + (0x3f880800), + (0x3f900e00), + (0x3f980600), + (0x3f980000), + (0x3f900800), + (0x3f880e00), + (0x3f800600), + (0x3fa0028f), + (0x3fa80a8f), + (0x3fb00c8f), + (0x3fb8048f), + (0x3fb8028f), + (0x3fb00a8f), + (0x3fa80c8f), + (0x3fa0048f)}, + (0xfff80000), + {0xa7,0x90,0x32,0xf0,0xe5,0x54,0x81,0x86,0xda,0xa2, + 0x04,0x5e,0xda,0xe5,0xcd,0x25,0x97,0x20,0x5f,0xd8,0x00} + }, + { + /* No.98 delta:4818 weight:1887 */ + 11213, + 73, + 1, + 4, + {(0x00000000), + (0xf3234424), + (0xe4236cf9), + (0x170028dd), + (0x62d00623), + (0x91f34207), + (0x86f36ada), + (0x75d02efe), + (0x00003707), + (0xf3237323), + (0xe4235bfe), + (0x17001fda), + (0x62d03124), + (0x91f37500), + (0x86f35ddd), + (0x75d019f9)}, + {(0x00000000), + (0x40550000), + (0x40300000), + (0x00650000), + (0x7a81c000), + (0x3ad4c000), + (0x3ab1c000), + (0x7ae4c000), + (0x54351e00), + (0x14601e00), + (0x14051e00), + (0x54501e00), + (0x2eb4de00), + (0x6ee1de00), + (0x6e84de00), + (0x2ed1de00)}, + {(0x3f800000), + (0x3fa02a80), + (0x3fa01800), + (0x3f803280), + (0x3fbd40e0), + (0x3f9d6a60), + (0x3f9d58e0), + (0x3fbd7260), + (0x3faa1a8f), + (0x3f8a300f), + (0x3f8a028f), + (0x3faa280f), + (0x3f975a6f), + (0x3fb770ef), + (0x3fb7426f), + (0x3f9768ef)}, + (0xfff80000), + {0x78,0x4c,0x48,0x62,0xcb,0x43,0x6e,0xae,0x79,0x3f, + 0xa2,0x90,0xc7,0xd5,0xf6,0x2c,0x3a,0x94,0xf6,0x88,0x00} + }, + { + /* No.99 delta:4941 weight:807 */ + 11213, + 35, + 6, + 17, + {(0x00000000), + (0xceb13d37), + (0x6cab25b0), + (0xa21a1887), + (0x2d100639), + (0xe3a13b0e), + (0x41bb2389), + (0x8f0a1ebe), + (0x00002bd0), + (0xceb116e7), + (0x6cab0e60), + (0xa21a3357), + (0x2d102de9), + (0xe3a110de), + (0x41bb0859), + (0x8f0a356e)}, + {(0x00000000), + (0x07201000), + (0x42300200), + (0x45101200), + (0x40000000), + (0x47201000), + (0x02300200), + (0x05101200), + (0x70001e00), + (0x77200e00), + (0x32301c00), + (0x35100c00), + (0x30001e00), + (0x37200e00), + (0x72301c00), + (0x75100c00)}, + {(0x3f800000), + (0x3f839008), + (0x3fa11801), + (0x3fa28809), + (0x3fa00000), + (0x3fa39008), + (0x3f811801), + (0x3f828809), + (0x3fb8000f), + (0x3fbb9007), + (0x3f99180e), + (0x3f9a8806), + (0x3f98000f), + (0x3f9b9007), + (0x3fb9180e), + (0x3fba8806)}, + (0xfff80000), + {0x47,0x35,0x44,0x50,0x63,0x4a,0x6a,0xcd,0x53,0x03, + 0xdd,0x48,0x13,0x12,0x80,0xdf,0x0e,0x77,0xfa,0xf3,0x00} + }, + { + /* No.100 delta:1308 weight:863 */ + 11213, + 86, + 13, + 14, + {(0x00000000), + (0xc5ba19cb), + (0x67d04c0f), + (0xa26a55c4), + (0x36300642), + (0xf38a1f89), + (0x51e04a4d), + (0x945a5386), + (0x0000f011), + (0xc5bae9da), + (0x67d0bc1e), + (0xa26aa5d5), + (0x3630f653), + (0xf38aef98), + (0x51e0ba5c), + (0x945aa397)}, + {(0x00000000), + (0x09233a00), + (0x40645e00), + (0x49476400), + (0x1030a000), + (0x19139a00), + (0x5054fe00), + (0x5977c400), + (0x30c05e00), + (0x39e36400), + (0x70a40000), + (0x79873a00), + (0x20f0fe00), + (0x29d3c400), + (0x6094a000), + (0x69b79a00)}, + {(0x3f800000), + (0x3f84919d), + (0x3fa0322f), + (0x3fa4a3b2), + (0x3f881850), + (0x3f8c89cd), + (0x3fa82a7f), + (0x3facbbe2), + (0x3f98602f), + (0x3f9cf1b2), + (0x3fb85200), + (0x3fbcc39d), + (0x3f90787f), + (0x3f94e9e2), + (0x3fb04a50), + (0x3fb4dbcd)}, + (0xfff80000), + {0xbe,0xe1,0xe6,0x46,0x8d,0x04,0x11,0x44,0x1a,0x37, + 0x82,0xd9,0x6f,0xd6,0x9e,0xd5,0x25,0x58,0x1e,0xae,0x00} + }, + { + /* No.101 delta:3747 weight:693 */ + 11213, + 93, + 7, + 18, + {(0x00000000), + (0x34b395ad), + (0x437cf2d0), + (0x77cf677d), + (0xa770065c), + (0x93c393f1), + (0xe40cf48c), + (0xd0bf6121), + (0x0000f47f), + (0x34b361d2), + (0x437c06af), + (0x77cf9302), + (0xa770f223), + (0x93c3678e), + (0xe40c00f3), + (0xd0bf955e)}, + {(0x00000000), + (0x40700000), + (0x00580000), + (0x40280000), + (0x40680000), + (0x00180000), + (0x40300000), + (0x00400000), + (0x21601e00), + (0x61101e00), + (0x21381e00), + (0x61481e00), + (0x61081e00), + (0x21781e00), + (0x61501e00), + (0x21201e00)}, + {(0x3f800000), + (0x3fa03800), + (0x3f802c00), + (0x3fa01400), + (0x3fa03400), + (0x3f800c00), + (0x3fa01800), + (0x3f802000), + (0x3f90b00f), + (0x3fb0880f), + (0x3f909c0f), + (0x3fb0a40f), + (0x3fb0840f), + (0x3f90bc0f), + (0x3fb0a80f), + (0x3f90900f)}, + (0xfff80000), + {0xe2,0xf1,0x5a,0xc6,0xba,0x8b,0xae,0x08,0x43,0xcc, + 0x54,0xa6,0xe9,0x8f,0x81,0x0a,0x85,0xe3,0x5e,0xef,0x00} + }, + { + /* No.102 delta:3462 weight:1273 */ + 11213, + 55, + 23, + 8, + {(0x00000000), + (0xc3cc98c8), + (0xca3b10a5), + (0x09f7886d), + (0x18300660), + (0xdbfc9ea8), + (0xd20b16c5), + (0x11c78e0d), + (0x000030c4), + (0xc3cca80c), + (0xca3b2061), + (0x09f7b8a9), + (0x183036a4), + (0xdbfcae6c), + (0xd20b2601), + (0x11c7bec9)}, + {(0x00000000), + (0x08000000), + (0x00800000), + (0x08800000), + (0x88200000), + (0x80200000), + (0x88a00000), + (0x80a00000), + (0x03201e00), + (0x0b201e00), + (0x03a01e00), + (0x0ba01e00), + (0x8b001e00), + (0x83001e00), + (0x8b801e00), + (0x83801e00)}, + {(0x3f800000), + (0x3f840000), + (0x3f804000), + (0x3f844000), + (0x3fc41000), + (0x3fc01000), + (0x3fc45000), + (0x3fc05000), + (0x3f81900f), + (0x3f85900f), + (0x3f81d00f), + (0x3f85d00f), + (0x3fc5800f), + (0x3fc1800f), + (0x3fc5c00f), + (0x3fc1c00f)}, + (0xfff80000), + {0x43,0x1f,0x6f,0x01,0x80,0xf4,0x2e,0x31,0xcd,0xc1, + 0xb9,0x2f,0x6b,0x5c,0x0e,0x0b,0x35,0xa5,0x70,0x7e,0x00} + }, + { + /* No.103 delta:5054 weight:1635 */ + 11213, + 64, + 1, + 2, + {(0x00000000), + (0x4f30581d), + (0x5542c11f), + (0x1a729902), + (0x9da00670), + (0xd2905e6d), + (0xc8e2c76f), + (0x87d29f72), + (0x00007e47), + (0x4f30265a), + (0x5542bf58), + (0x1a72e745), + (0x9da07837), + (0xd290202a), + (0xc8e2b928), + (0x87d2e135)}, + {(0x00000000), + (0x0be21000), + (0x55018000), + (0x5ee39000), + (0x83944800), + (0x88765800), + (0xd695c800), + (0xdd77d800), + (0x00669e00), + (0x0b848e00), + (0x55671e00), + (0x5e850e00), + (0x83f2d600), + (0x8810c600), + (0xd6f35600), + (0xdd114600)}, + {(0x3f800000), + (0x3f85f108), + (0x3faa80c0), + (0x3faf71c8), + (0x3fc1ca24), + (0x3fc43b2c), + (0x3feb4ae4), + (0x3feebbec), + (0x3f80334f), + (0x3f85c247), + (0x3faab38f), + (0x3faf4287), + (0x3fc1f96b), + (0x3fc40863), + (0x3feb79ab), + (0x3fee88a3)}, + (0xfff80000), + {0x44,0x10,0x9f,0x8c,0xd9,0xbc,0x8e,0xb6,0xd5,0x14, + 0x72,0x32,0xdd,0xf2,0x3c,0xea,0xb3,0x38,0xb9,0x31,0x00} + }, + { + /* No.104 delta:2496 weight:907 */ + 11213, + 79, + 15, + 14, + {(0x00000000), + (0x5c0202d2), + (0x1c3f4858), + (0x403d4a8a), + (0xd2f0068f), + (0x8ef2045d), + (0xcecf4ed7), + (0x92cd4c05), + (0x0000d76d), + (0x5c02d5bf), + (0x1c3f9f35), + (0x403d9de7), + (0xd2f0d1e2), + (0x8ef2d330), + (0xcecf99ba), + (0x92cd9b68)}, + {(0x00000000), + (0x6b8d0400), + (0x1053a000), + (0x7bdea400), + (0x19807000), + (0x720d7400), + (0x09d3d000), + (0x625ed400), + (0x08441e00), + (0x63c91a00), + (0x1817be00), + (0x739aba00), + (0x11c46e00), + (0x7a496a00), + (0x0197ce00), + (0x6a1aca00)}, + {(0x3f800000), + (0x3fb5c682), + (0x3f8829d0), + (0x3fbdef52), + (0x3f8cc038), + (0x3fb906ba), + (0x3f84e9e8), + (0x3fb12f6a), + (0x3f84220f), + (0x3fb1e48d), + (0x3f8c0bdf), + (0x3fb9cd5d), + (0x3f88e237), + (0x3fbd24b5), + (0x3f80cbe7), + (0x3fb50d65)}, + (0xfff80000), + {0xb7,0xe4,0x3c,0x74,0x28,0xb1,0x2f,0xa4,0x5c,0x37, + 0xb1,0x69,0xd9,0x95,0x83,0xd9,0xa6,0x36,0x5b,0x12,0x00} + }, + { + /* No.105 delta:1174 weight:1019 */ + 11213, + 91, + 17, + 14, + {(0x00000000), + (0xa83f2177), + (0xa0b43c75), + (0x088b1d02), + (0x43300696), + (0xeb0f27e1), + (0xe3843ae3), + (0x4bbb1b94), + (0x00007f34), + (0xa83f5e43), + (0xa0b44341), + (0x088b6236), + (0x433079a2), + (0xeb0f58d5), + (0xe38445d7), + (0x4bbb64a0)}, + {(0x00000000), + (0x0115c000), + (0x90090000), + (0x911cc000), + (0x10422000), + (0x1157e000), + (0x804b2000), + (0x815ee000), + (0x10393e00), + (0x112cfe00), + (0x80303e00), + (0x8125fe00), + (0x007b1e00), + (0x016ede00), + (0x90721e00), + (0x9167de00)}, + {(0x3f800000), + (0x3f808ae0), + (0x3fc80480), + (0x3fc88e60), + (0x3f882110), + (0x3f88abf0), + (0x3fc02590), + (0x3fc0af70), + (0x3f881c9f), + (0x3f88967f), + (0x3fc0181f), + (0x3fc092ff), + (0x3f803d8f), + (0x3f80b76f), + (0x3fc8390f), + (0x3fc8b3ef)}, + (0xfff80000), + {0xe2,0x4f,0x2f,0xcb,0x05,0x76,0xce,0x0b,0xc7,0x7b, + 0xcc,0x65,0x06,0xce,0x2c,0x0c,0x3c,0xb6,0x2c,0x79,0x00} + }, + { + /* No.106 delta:1564 weight:925 */ + 11213, + 40, + 9, + 1, + {(0x00000000), + (0xd288f412), + (0x0b33c7cb), + (0xd9bb33d9), + (0xe0d006a8), + (0x3258f2ba), + (0xebe3c163), + (0x396b3571), + (0x00004470), + (0xd288b062), + (0x0b3383bb), + (0xd9bb77a9), + (0xe0d042d8), + (0x3258b6ca), + (0xebe38513), + (0x396b7101)}, + {(0x00000000), + (0x46794000), + (0x004d0000), + (0x46344000), + (0x007f0200), + (0x46064200), + (0x00320200), + (0x464b4200), + (0x00235e00), + (0x465a1e00), + (0x006e5e00), + (0x46171e00), + (0x005c5c00), + (0x46251c00), + (0x00115c00), + (0x46681c00)}, + {(0x3f800000), + (0x3fa33ca0), + (0x3f802680), + (0x3fa31a20), + (0x3f803f81), + (0x3fa30321), + (0x3f801901), + (0x3fa325a1), + (0x3f8011af), + (0x3fa32d0f), + (0x3f80372f), + (0x3fa30b8f), + (0x3f802e2e), + (0x3fa3128e), + (0x3f8008ae), + (0x3fa3340e)}, + (0xfff80000), + {0xc1,0x6e,0x8a,0x33,0x35,0x9f,0x07,0x03,0x76,0x11, + 0xe5,0x21,0xc3,0xdb,0x18,0x40,0x05,0xa0,0xd6,0x4c,0x00} + }, + { + /* No.107 delta:3386 weight:1851 */ + 11213, + 48, + 2, + 6, + {(0x00000000), + (0x5199ee9c), + (0x0606c085), + (0x579f2e19), + (0xe08006b0), + (0xb119e82c), + (0xe686c635), + (0xb71f28a9), + (0x000086be), + (0x51996822), + (0x0606463b), + (0x579fa8a7), + (0xe080800e), + (0xb1196e92), + (0xe686408b), + (0xb71fae17)}, + {(0x00000000), + (0x08250000), + (0x0a400800), + (0x02650800), + (0x10040000), + (0x18210000), + (0x1a440800), + (0x12610800), + (0x01081e00), + (0x092d1e00), + (0x0b481600), + (0x036d1600), + (0x110c1e00), + (0x19291e00), + (0x1b4c1600), + (0x13691600)}, + {(0x3f800000), + (0x3f841280), + (0x3f852004), + (0x3f813284), + (0x3f880200), + (0x3f8c1080), + (0x3f8d2204), + (0x3f893084), + (0x3f80840f), + (0x3f84968f), + (0x3f85a40b), + (0x3f81b68b), + (0x3f88860f), + (0x3f8c948f), + (0x3f8da60b), + (0x3f89b48b)}, + (0xfff80000), + {0x29,0x35,0xcb,0x9b,0x48,0x71,0x31,0x12,0x0b,0x2e, + 0xd3,0x98,0x06,0x50,0x05,0x3b,0xac,0x89,0x1a,0xaf,0x00} + }, + { + /* No.108 delta:2469 weight:1251 */ + 11213, + 31, + 7, + 1, + {(0x00000000), + (0x4efca9a0), + (0x3a920750), + (0x746eaef0), + (0x958006ce), + (0xdb7caf6e), + (0xaf12019e), + (0xe1eea83e), + (0x0000ee3c), + (0x4efc479c), + (0x3a92e96c), + (0x746e40cc), + (0x9580e8f2), + (0xdb7c4152), + (0xaf12efa2), + (0xe1ee4602)}, + {(0x00000000), + (0x405c0000), + (0x004ba200), + (0x4017a200), + (0x00600000), + (0x403c0000), + (0x002ba200), + (0x4077a200), + (0x80481e00), + (0xc0141e00), + (0x8003bc00), + (0xc05fbc00), + (0x80281e00), + (0xc0741e00), + (0x8063bc00), + (0xc03fbc00)}, + {(0x3f800000), + (0x3fa02e00), + (0x3f8025d1), + (0x3fa00bd1), + (0x3f803000), + (0x3fa01e00), + (0x3f8015d1), + (0x3fa03bd1), + (0x3fc0240f), + (0x3fe00a0f), + (0x3fc001de), + (0x3fe02fde), + (0x3fc0140f), + (0x3fe03a0f), + (0x3fc031de), + (0x3fe01fde)}, + (0xfff80000), + {0x05,0x56,0x79,0x8d,0xa1,0x79,0x94,0x9b,0xfd,0xfa, + 0xd1,0xd9,0x42,0x04,0x4f,0x21,0x8e,0xdb,0xe7,0xa3,0x00} + }, + { + /* No.109 delta:997 weight:681 */ + 11213, + 71, + 19, + 5, + {(0x00000000), + (0x21e405bb), + (0x4f97981d), + (0x6e739da6), + (0x01d006d7), + (0x2034036c), + (0x4e479eca), + (0x6fa39b71), + (0x0000e6b0), + (0x21e4e30b), + (0x4f977ead), + (0x6e737b16), + (0x01d0e067), + (0x2034e5dc), + (0x4e47787a), + (0x6fa37dc1)}, + {(0x00000000), + (0x40267000), + (0x0682d000), + (0x46a4a000), + (0x11832000), + (0x51a55000), + (0x1701f000), + (0x57278000), + (0x40581e00), + (0x007e6e00), + (0x46dace00), + (0x06fcbe00), + (0x51db3e00), + (0x11fd4e00), + (0x5759ee00), + (0x177f9e00)}, + {(0x3f800000), + (0x3fa01338), + (0x3f834168), + (0x3fa35250), + (0x3f88c190), + (0x3fa8d2a8), + (0x3f8b80f8), + (0x3fab93c0), + (0x3fa02c0f), + (0x3f803f37), + (0x3fa36d67), + (0x3f837e5f), + (0x3fa8ed9f), + (0x3f88fea7), + (0x3fabacf7), + (0x3f8bbfcf)}, + (0xfff80000), + {0x33,0x76,0x14,0x81,0x56,0x54,0xf0,0x4f,0x12,0x90, + 0xf4,0x03,0x95,0x9c,0x1a,0x38,0x51,0x80,0x32,0xaa,0x00} + }, + { + /* No.110 delta:2599 weight:829 */ + 11213, + 8, + 11, + 14, + {(0x00000000), + (0x4654c25e), + (0xa8eaa1d6), + (0xeebe6388), + (0x52a006e9), + (0x14f4c4b7), + (0xfa4aa73f), + (0xbc1e6561), + (0x000019ff), + (0x4654dba1), + (0xa8eab829), + (0xeebe7a77), + (0x52a01f16), + (0x14f4dd48), + (0xfa4abec0), + (0xbc1e7c9e)}, + {(0x00000000), + (0xfe272000), + (0x8207f000), + (0x7c20d000), + (0x4e344800), + (0xb0136800), + (0xcc33b800), + (0x32149800), + (0x01611e00), + (0xff463e00), + (0x8366ee00), + (0x7d41ce00), + (0x4f555600), + (0xb1727600), + (0xcd52a600), + (0x33758600)}, + {(0x3f800000), + (0x3fff1390), + (0x3fc103f8), + (0x3fbe1068), + (0x3fa71a24), + (0x3fd809b4), + (0x3fe619dc), + (0x3f990a4c), + (0x3f80b08f), + (0x3fffa31f), + (0x3fc1b377), + (0x3fbea0e7), + (0x3fa7aaab), + (0x3fd8b93b), + (0x3fe6a953), + (0x3f99bac3)}, + (0xfff80000), + {0xe0,0x6d,0x93,0xcf,0x6d,0x0f,0xa4,0xf7,0x93,0x3e, + 0x67,0xb4,0x20,0xb8,0x51,0x3a,0xe3,0xcd,0xf5,0xf9,0x00} + }, + { + /* No.111 delta:2048 weight:1649 */ + 11213, + 12, + 8, + 4, + {(0x00000000), + (0xbf40afc5), + (0xdef9c9b1), + (0x61b96674), + (0xfee006f8), + (0x41a0a93d), + (0x2019cf49), + (0x9f59608c), + (0x000056c5), + (0xbf40f900), + (0xdef99f74), + (0x61b930b1), + (0xfee0503d), + (0x41a0fff8), + (0x2019998c), + (0x9f593649)}, + {(0x00000000), + (0x2fa10c00), + (0x020b0000), + (0x2daa0c00), + (0x020ae000), + (0x2dabec00), + (0x0001e000), + (0x2fa0ec00), + (0x28021e00), + (0x07a31200), + (0x2a091e00), + (0x05a81200), + (0x2a08fe00), + (0x05a9f200), + (0x2803fe00), + (0x07a2f200)}, + {(0x3f800000), + (0x3f97d086), + (0x3f810580), + (0x3f96d506), + (0x3f810570), + (0x3f96d5f6), + (0x3f8000f0), + (0x3f97d076), + (0x3f94010f), + (0x3f83d189), + (0x3f95048f), + (0x3f82d409), + (0x3f95047f), + (0x3f82d4f9), + (0x3f9401ff), + (0x3f83d179)}, + (0xfff80000), + {0x4a,0x15,0xe8,0xf1,0x59,0x83,0x8e,0x52,0x8a,0x24, + 0xa4,0xb5,0x5d,0xfb,0x87,0xe0,0x22,0xe3,0x18,0x37,0x00} + }, + { + /* No.112 delta:2152 weight:1369 */ + 11213, + 81, + 6, + 10, + {(0x00000000), + (0xfbea0aeb), + (0xba6ad14d), + (0x4180dba6), + (0x21e00705), + (0xda0a0dee), + (0x9b8ad648), + (0x6060dca3), + (0x00003510), + (0xfbea3ffb), + (0xba6ae45d), + (0x4180eeb6), + (0x21e03215), + (0xda0a38fe), + (0x9b8ae358), + (0x6060e9b3)}, + {(0x00000000), + (0x01428000), + (0x04604000), + (0x0522c000), + (0x00081000), + (0x014a9000), + (0x04685000), + (0x052ad000), + (0x20261e00), + (0x21649e00), + (0x24465e00), + (0x2504de00), + (0x202e0e00), + (0x216c8e00), + (0x244e4e00), + (0x250cce00)}, + {(0x3f800000), + (0x3f80a140), + (0x3f823020), + (0x3f829160), + (0x3f800408), + (0x3f80a548), + (0x3f823428), + (0x3f829568), + (0x3f90130f), + (0x3f90b24f), + (0x3f92232f), + (0x3f92826f), + (0x3f901707), + (0x3f90b647), + (0x3f922727), + (0x3f928667)}, + (0xfff80000), + {0xfd,0x72,0xaa,0xc7,0x20,0x44,0x28,0xe5,0x03,0x3e, + 0xf9,0x6d,0xad,0x9f,0x51,0x0c,0x87,0xf6,0x43,0x0f,0x00} + }, + { + /* No.113 delta:1871 weight:1215 */ + 11213, + 61, + 14, + 10, + {(0x00000000), + (0x11856d8d), + (0xaac84415), + (0xbb4d2998), + (0xae00071a), + (0xbf856a97), + (0x04c8430f), + (0x154d2e82), + (0x0000cc65), + (0x1185a1e8), + (0xaac88870), + (0xbb4de5fd), + (0xae00cb7f), + (0xbf85a6f2), + (0x04c88f6a), + (0x154de2e7)}, + {(0x00000000), + (0x006d0000), + (0x00b10000), + (0x00dc0000), + (0x04490000), + (0x04240000), + (0x04f80000), + (0x04950000), + (0x00421e00), + (0x002f1e00), + (0x00f31e00), + (0x009e1e00), + (0x040b1e00), + (0x04661e00), + (0x04ba1e00), + (0x04d71e00)}, + {(0x3f800000), + (0x3f803680), + (0x3f805880), + (0x3f806e00), + (0x3f822480), + (0x3f821200), + (0x3f827c00), + (0x3f824a80), + (0x3f80210f), + (0x3f80178f), + (0x3f80798f), + (0x3f804f0f), + (0x3f82058f), + (0x3f82330f), + (0x3f825d0f), + (0x3f826b8f)}, + (0xfff80000), + {0x98,0xdb,0x7c,0xec,0x90,0x27,0x75,0x69,0x6c,0x3d, + 0x4c,0xec,0xa2,0x8e,0xab,0xef,0xd1,0x0c,0xbd,0x8c,0x00} + }, + { + /* No.114 delta:1950 weight:1011 */ + 11213, + 20, + 16, + 13, + {(0x00000000), + (0xbdc99be3), + (0xaafee229), + (0x173779ca), + (0x7300072e), + (0xcec99ccd), + (0xd9fee507), + (0x64377ee4), + (0x0000b504), + (0xbdc92ee7), + (0xaafe572d), + (0x1737ccce), + (0x7300b22a), + (0xcec929c9), + (0xd9fe5003), + (0x6437cbe0)}, + {(0x00000000), + (0x016ec000), + (0x8ce40000), + (0x8d8ac000), + (0x1c548000), + (0x1d3a4000), + (0x90b08000), + (0x91de4000), + (0x00869e00), + (0x01e85e00), + (0x8c629e00), + (0x8d0c5e00), + (0x1cd21e00), + (0x1dbcde00), + (0x90361e00), + (0x9158de00)}, + {(0x3f800000), + (0x3f80b760), + (0x3fc67200), + (0x3fc6c560), + (0x3f8e2a40), + (0x3f8e9d20), + (0x3fc85840), + (0x3fc8ef20), + (0x3f80434f), + (0x3f80f42f), + (0x3fc6314f), + (0x3fc6862f), + (0x3f8e690f), + (0x3f8ede6f), + (0x3fc81b0f), + (0x3fc8ac6f)}, + (0xfff80000), + {0xa7,0x22,0x09,0x2a,0x46,0xe2,0xa3,0x13,0x26,0x8f, + 0xa5,0xc6,0x28,0x12,0x57,0xb4,0x27,0x86,0xf1,0x1d,0x00} + }, + { + /* No.115 delta:1732 weight:1445 */ + 11213, + 29, + 17, + 7, + {(0x00000000), + (0xdb25076c), + (0x9bf7e9d5), + (0x40d2eeb9), + (0x95f00737), + (0x4ed5005b), + (0x0e07eee2), + (0xd522e98e), + (0x0000f5f0), + (0xdb25f29c), + (0x9bf71c25), + (0x40d21b49), + (0x95f0f2c7), + (0x4ed5f5ab), + (0x0e071b12), + (0xd5221c7e)}, + {(0x00000000), + (0x481e0000), + (0x80040000), + (0xc81a0000), + (0x007d0000), + (0x48630000), + (0x80790000), + (0xc8670000), + (0x40121e00), + (0x080c1e00), + (0xc0161e00), + (0x88081e00), + (0x406f1e00), + (0x08711e00), + (0xc06b1e00), + (0x88751e00)}, + {(0x3f800000), + (0x3fa40f00), + (0x3fc00200), + (0x3fe40d00), + (0x3f803e80), + (0x3fa43180), + (0x3fc03c80), + (0x3fe43380), + (0x3fa0090f), + (0x3f84060f), + (0x3fe00b0f), + (0x3fc4040f), + (0x3fa0378f), + (0x3f84388f), + (0x3fe0358f), + (0x3fc43a8f)}, + (0xfff80000), + {0xc2,0xbe,0xe6,0x5f,0xf5,0x28,0x34,0x1c,0x5e,0x2d, + 0xdb,0x99,0x36,0x5d,0x04,0x52,0x9e,0x76,0x9e,0xd5,0x00} + }, + { + /* No.116 delta:1707 weight:1245 */ + 11213, + 30, + 22, + 3, + {(0x00000000), + (0x0a5f3de8), + (0xcb7a16d6), + (0xc1252b3e), + (0xfcd0074b), + (0xf68f3aa3), + (0x37aa119d), + (0x3df52c75), + (0x00003bff), + (0x0a5f0617), + (0xcb7a2d29), + (0xc12510c1), + (0xfcd03cb4), + (0xf68f015c), + (0x37aa2a62), + (0x3df5178a)}, + {(0x00000000), + (0x402e8e00), + (0x0073d000), + (0x405d5e00), + (0x206d4000), + (0x6043ce00), + (0x201e9000), + (0x60301e00), + (0xd21dfe00), + (0x92337000), + (0xd26e2e00), + (0x9240a000), + (0xf270be00), + (0xb25e3000), + (0xf2036e00), + (0xb22de000)}, + {(0x3f800000), + (0x3fa01747), + (0x3f8039e8), + (0x3fa02eaf), + (0x3f9036a0), + (0x3fb021e7), + (0x3f900f48), + (0x3fb0180f), + (0x3fe90eff), + (0x3fc919b8), + (0x3fe93717), + (0x3fc92050), + (0x3ff9385f), + (0x3fd92f18), + (0x3ff901b7), + (0x3fd916f0)}, + (0xfff80000), + {0x30,0x04,0x85,0xba,0x89,0x2d,0x19,0x39,0x57,0x1c, + 0x54,0xa8,0xb5,0x0a,0x05,0x27,0x14,0x6a,0xed,0xe0,0x00} + }, + { + /* No.117 delta:2917 weight:1743 */ + 11213, + 37, + 3, + 6, + {(0x00000000), + (0x501b23d2), + (0x2770f82a), + (0x776bdbf8), + (0x67300751), + (0x372b2483), + (0x4040ff7b), + (0x105bdca9), + (0x000038d9), + (0x501b1b0b), + (0x2770c0f3), + (0x776be321), + (0x67303f88), + (0x372b1c5a), + (0x4040c7a2), + (0x105be470)}, + {(0x00000000), + (0x20542200), + (0x40387800), + (0x606c5a00), + (0x14402000), + (0x34140200), + (0x54785800), + (0x742c7a00), + (0x1840de00), + (0x3814fc00), + (0x5878a600), + (0x782c8400), + (0x0c00fe00), + (0x2c54dc00), + (0x4c388600), + (0x6c6ca400)}, + {(0x3f800000), + (0x3f902a11), + (0x3fa01c3c), + (0x3fb0362d), + (0x3f8a2010), + (0x3f9a0a01), + (0x3faa3c2c), + (0x3fba163d), + (0x3f8c206f), + (0x3f9c0a7e), + (0x3fac3c53), + (0x3fbc1642), + (0x3f86007f), + (0x3f962a6e), + (0x3fa61c43), + (0x3fb63652)}, + (0xfff80000), + {0x86,0x60,0xf6,0x24,0x0e,0xff,0xd7,0xe9,0x32,0x8f, + 0xa0,0x96,0x77,0x67,0x0e,0xec,0x2e,0x00,0x3b,0x13,0x00} + }, + { + /* No.118 delta:983 weight:1587 */ + 11213, + 62, + 19, + 4, + {(0x00000000), + (0x08eb784a), + (0x736759ff), + (0x7b8c21b5), + (0x0ca0076b), + (0x044b7f21), + (0x7fc75e94), + (0x772c26de), + (0x0000d939), + (0x08eba173), + (0x736780c6), + (0x7b8cf88c), + (0x0ca0de52), + (0x044ba618), + (0x7fc787ad), + (0x772cffe7)}, + {(0x00000000), + (0x041eba00), + (0x20637000), + (0x247dca00), + (0x20110000), + (0x240fba00), + (0x00727000), + (0x046cca00), + (0x10001e00), + (0x141ea400), + (0x30636e00), + (0x347dd400), + (0x30111e00), + (0x340fa400), + (0x10726e00), + (0x146cd400)}, + {(0x3f800000), + (0x3f820f5d), + (0x3f9031b8), + (0x3f923ee5), + (0x3f900880), + (0x3f9207dd), + (0x3f803938), + (0x3f823665), + (0x3f88000f), + (0x3f8a0f52), + (0x3f9831b7), + (0x3f9a3eea), + (0x3f98088f), + (0x3f9a07d2), + (0x3f883937), + (0x3f8a366a)}, + (0xfff80000), + {0x70,0x7f,0x78,0xb3,0x65,0x02,0xe0,0xb9,0x55,0x49, + 0xd9,0x60,0xa8,0xa5,0xd3,0x10,0x3b,0x08,0x55,0xfd,0x00} + }, + { + /* No.119 delta:1397 weight:1065 */ + 11213, + 57, + 14, + 11, + {(0x00000000), + (0x5e421ddc), + (0x638787c4), + (0x3dc59a18), + (0x8e00077d), + (0xd0421aa1), + (0xed8780b9), + (0xb3c59d65), + (0x0000840f), + (0x5e4299d3), + (0x638703cb), + (0x3dc51e17), + (0x8e008372), + (0xd0429eae), + (0xed8704b6), + (0xb3c5196a)}, + {(0x00000000), + (0x08e5ec00), + (0x245ea400), + (0x2cbb4800), + (0x00688000), + (0x088d6c00), + (0x24362400), + (0x2cd3c800), + (0x00111e00), + (0x08f4f200), + (0x244fba00), + (0x2caa5600), + (0x00799e00), + (0x089c7200), + (0x24273a00), + (0x2cc2d600)}, + {(0x3f800000), + (0x3f8472f6), + (0x3f922f52), + (0x3f965da4), + (0x3f803440), + (0x3f8446b6), + (0x3f921b12), + (0x3f9669e4), + (0x3f80088f), + (0x3f847a79), + (0x3f9227dd), + (0x3f96552b), + (0x3f803ccf), + (0x3f844e39), + (0x3f92139d), + (0x3f96616b)}, + (0xfff80000), + {0x72,0xeb,0x0e,0x84,0xe7,0xef,0x0c,0xb3,0x72,0xaf, + 0x80,0x06,0xbc,0xf9,0x33,0xf7,0x21,0x72,0x27,0x28,0x00} + }, + { + /* No.120 delta:1392 weight:827 */ + 11213, + 46, + 15, + 17, + {(0x00000000), + (0xa557bf77), + (0x097f4c89), + (0xac28f3fe), + (0xffa0078b), + (0x5af7b8fc), + (0xf6df4b02), + (0x5388f475), + (0x00006249), + (0xa557dd3e), + (0x097f2ec0), + (0xac2891b7), + (0xffa065c2), + (0x5af7dab5), + (0xf6df294b), + (0x5388963c)}, + {(0x00000000), + (0x68748400), + (0x4200ae00), + (0x2a742a00), + (0x1c086000), + (0x747ce400), + (0x5e08ce00), + (0x367c4a00), + (0x0046fe00), + (0x68327a00), + (0x42465000), + (0x2a32d400), + (0x1c4e9e00), + (0x743a1a00), + (0x5e4e3000), + (0x363ab400)}, + {(0x3f800000), + (0x3fb43a42), + (0x3fa10057), + (0x3f953a15), + (0x3f8e0430), + (0x3fba3e72), + (0x3faf0467), + (0x3f9b3e25), + (0x3f80237f), + (0x3fb4193d), + (0x3fa12328), + (0x3f95196a), + (0x3f8e274f), + (0x3fba1d0d), + (0x3faf2718), + (0x3f9b1d5a)}, + (0xfff80000), + {0x7c,0xb2,0x6a,0xff,0x78,0xfa,0xd6,0x78,0xf9,0xba, + 0x77,0x1d,0x84,0xb3,0xbb,0xcb,0xac,0xdf,0x51,0x54,0x00} + }, + { + /* No.121 delta:1663 weight:775 */ + 11213, + 82, + 9, + 17, + {(0x00000000), + (0x1fe0e7a6), + (0x67406a7f), + (0x78a08dd9), + (0xda30079d), + (0xc5d0e03b), + (0xbd706de2), + (0xa2908a44), + (0x000076e4), + (0x1fe09142), + (0x67401c9b), + (0x78a0fb3d), + (0xda307179), + (0xc5d096df), + (0xbd701b06), + (0xa290fca0)}, + {(0x00000000), + (0x100e1000), + (0x20734000), + (0x307d5000), + (0x5008e200), + (0x4006f200), + (0x707ba200), + (0x6075b200), + (0x3242de00), + (0x224cce00), + (0x12319e00), + (0x023f8e00), + (0x624a3c00), + (0x72442c00), + (0x42397c00), + (0x52376c00)}, + {(0x3f800000), + (0x3f880708), + (0x3f9039a0), + (0x3f983ea8), + (0x3fa80471), + (0x3fa00379), + (0x3fb83dd1), + (0x3fb03ad9), + (0x3f99216f), + (0x3f912667), + (0x3f8918cf), + (0x3f811fc7), + (0x3fb1251e), + (0x3fb92216), + (0x3fa11cbe), + (0x3fa91bb6)}, + (0xfff80000), + {0xa3,0xd8,0x55,0xcd,0x98,0xdc,0x68,0x95,0x68,0xdf, + 0xcf,0x56,0x03,0x2a,0x94,0x75,0x10,0xec,0x0a,0x47,0x00} + }, + { + /* No.122 delta:1328 weight:751 */ + 11213, + 67, + 14, + 18, + {(0x00000000), + (0x76bc3aa8), + (0xc37bdc20), + (0xb5c7e688), + (0x38b007ab), + (0x4e0c3d03), + (0xfbcbdb8b), + (0x8d77e123), + (0x0000bd02), + (0x76bc87aa), + (0xc37b6122), + (0xb5c75b8a), + (0x38b0baa9), + (0x4e0c8001), + (0xfbcb6689), + (0x8d775c21)}, + {(0x00000000), + (0x1112c200), + (0x18038000), + (0x09114200), + (0x00065000), + (0x11149200), + (0x1805d000), + (0x09171200), + (0x6001de00), + (0x71131c00), + (0x78025e00), + (0x69109c00), + (0x60078e00), + (0x71154c00), + (0x78040e00), + (0x6916cc00)}, + {(0x3f800000), + (0x3f888961), + (0x3f8c01c0), + (0x3f8488a1), + (0x3f800328), + (0x3f888a49), + (0x3f8c02e8), + (0x3f848b89), + (0x3fb000ef), + (0x3fb8898e), + (0x3fbc012f), + (0x3fb4884e), + (0x3fb003c7), + (0x3fb88aa6), + (0x3fbc0207), + (0x3fb48b66)}, + (0xfff80000), + {0x18,0x30,0x32,0x35,0xe2,0xb4,0xcd,0x94,0x5e,0x6b, + 0xe6,0x78,0x0b,0x92,0x24,0xbf,0x7c,0xc5,0xbd,0xe2,0x00} + }, + { + /* No.123 delta:1657 weight:573 */ + 11213, + 70, + 8, + 19, + {(0x00000000), + (0xfd59bd60), + (0xe0041fb5), + (0x1d5da2d5), + (0x836007b6), + (0x7e39bad6), + (0x63641803), + (0x9e3da563), + (0x0000b1f6), + (0xfd590c96), + (0xe004ae43), + (0x1d5d1323), + (0x8360b640), + (0x7e390b20), + (0x6364a9f5), + (0x9e3d1495)}, + {(0x00000000), + (0x57b14800), + (0x5868a400), + (0x0fd9ec00), + (0x084c7000), + (0x5ffd3800), + (0x5024d400), + (0x07959c00), + (0x10121e00), + (0x47a35600), + (0x487aba00), + (0x1fcbf200), + (0x185e6e00), + (0x4fef2600), + (0x4036ca00), + (0x17878200)}, + {(0x3f800000), + (0x3fabd8a4), + (0x3fac3452), + (0x3f87ecf6), + (0x3f842638), + (0x3faffe9c), + (0x3fa8126a), + (0x3f83cace), + (0x3f88090f), + (0x3fa3d1ab), + (0x3fa43d5d), + (0x3f8fe5f9), + (0x3f8c2f37), + (0x3fa7f793), + (0x3fa01b65), + (0x3f8bc3c1)}, + (0xfff80000), + {0x0b,0xcb,0xeb,0x33,0x75,0x01,0x5e,0xeb,0x92,0xfb, + 0x37,0xae,0xe0,0x31,0x80,0xa9,0x06,0x42,0x2b,0xd5,0x00} + }, + { + /* No.124 delta:1016 weight:1635 */ + 11213, + 80, + 18, + 2, + {(0x00000000), + (0x65b814ab), + (0x0b7c8e4e), + (0x6ec49ae5), + (0xe3e007c1), + (0x8658136a), + (0xe89c898f), + (0x8d249d24), + (0x00008bf0), + (0x65b89f5b), + (0x0b7c05be), + (0x6ec41115), + (0xe3e08c31), + (0x8658989a), + (0xe89c027f), + (0x8d2416d4)}, + {(0x00000000), + (0x110f9000), + (0x08401000), + (0x194f8000), + (0x20040000), + (0x310b9000), + (0x28441000), + (0x394b8000), + (0x00025e00), + (0x110dce00), + (0x08424e00), + (0x194dde00), + (0x20065e00), + (0x3109ce00), + (0x28464e00), + (0x3949de00)}, + {(0x3f800000), + (0x3f8887c8), + (0x3f842008), + (0x3f8ca7c0), + (0x3f900200), + (0x3f9885c8), + (0x3f942208), + (0x3f9ca5c0), + (0x3f80012f), + (0x3f8886e7), + (0x3f842127), + (0x3f8ca6ef), + (0x3f90032f), + (0x3f9884e7), + (0x3f942327), + (0x3f9ca4ef)}, + (0xfff80000), + {0xe8,0x1c,0x9d,0xcc,0x4a,0x97,0xc0,0xae,0x9d,0xce, + 0x1a,0xa4,0x45,0x9f,0x41,0xc4,0x83,0xd9,0x62,0x72,0x00} + }, + { + /* No.125 delta:1214 weight:1175 */ + 11213, + 28, + 16, + 7, + {(0x00000000), + (0x7b11b46d), + (0x3e529f7c), + (0x45432b11), + (0x05a007d2), + (0x7eb1b3bf), + (0x3bf298ae), + (0x40e32cc3), + (0x00001cdb), + (0x7b11a8b6), + (0x3e5283a7), + (0x454337ca), + (0x05a01b09), + (0x7eb1af64), + (0x3bf28475), + (0x40e33018)}, + {(0x00000000), + (0x4460cc00), + (0x50de6c00), + (0x14bea000), + (0x43011e00), + (0x0761d200), + (0x13df7200), + (0x57bfbe00), + (0x41807e00), + (0x05e0b200), + (0x115e1200), + (0x553ede00), + (0x02816000), + (0x46e1ac00), + (0x525f0c00), + (0x163fc000)}, + {(0x3f800000), + (0x3fa23066), + (0x3fa86f36), + (0x3f8a5f50), + (0x3fa1808f), + (0x3f83b0e9), + (0x3f89efb9), + (0x3fabdfdf), + (0x3fa0c03f), + (0x3f82f059), + (0x3f88af09), + (0x3faa9f6f), + (0x3f8140b0), + (0x3fa370d6), + (0x3fa92f86), + (0x3f8b1fe0)}, + (0xfff80000), + {0x5c,0x4c,0x7f,0xad,0xc2,0x0a,0xe3,0x36,0x3a,0x3f, + 0x3e,0x28,0x97,0x26,0xce,0xab,0xdb,0x12,0x07,0x20,0x00} + }, + { + /* No.126 delta:962 weight:1245 */ + 11213, + 78, + 18, + 5, + {(0x00000000), + (0xee0a807e), + (0xe937683b), + (0x073de845), + (0x14f007e9), + (0xfafa8797), + (0xfdc76fd2), + (0x13cdefac), + (0x0000f676), + (0xee0a7608), + (0xe9379e4d), + (0x073d1e33), + (0x14f0f19f), + (0xfafa71e1), + (0xfdc799a4), + (0x13cd19da)}, + {(0x00000000), + (0xb028bc00), + (0x08652400), + (0xb84d9800), + (0x14028600), + (0xa42a3a00), + (0x1c67a200), + (0xac4f1e00), + (0x00023e00), + (0xb02a8200), + (0x08671a00), + (0xb84fa600), + (0x1400b800), + (0xa4280400), + (0x1c659c00), + (0xac4d2000)}, + {(0x3f800000), + (0x3fd8145e), + (0x3f843292), + (0x3fdc26cc), + (0x3f8a0143), + (0x3fd2151d), + (0x3f8e33d1), + (0x3fd6278f), + (0x3f80011f), + (0x3fd81541), + (0x3f84338d), + (0x3fdc27d3), + (0x3f8a005c), + (0x3fd21402), + (0x3f8e32ce), + (0x3fd62690)}, + (0xfff80000), + {0x1f,0xae,0x0b,0x7d,0x23,0x0c,0x6e,0xd6,0x26,0xa9, + 0x92,0xbc,0x8f,0x01,0x36,0x36,0x07,0xe9,0x2c,0x7c,0x00} + }, + { + /* No.127 delta:4656 weight:1185 */ + 11213, + 57, + 4, + 13, + {(0x00000000), + (0x7d46d3c2), + (0x107426fc), + (0x6d32f53e), + (0x832007fe), + (0xfe66d43c), + (0x93542102), + (0xee12f2c0), + (0x00009ac7), + (0x7d464905), + (0x1074bc3b), + (0x6d326ff9), + (0x83209d39), + (0xfe664efb), + (0x9354bbc5), + (0xee126807)}, + {(0x00000000), + (0x18401000), + (0x14000000), + (0x0c401000), + (0x00000000), + (0x18401000), + (0x14000000), + (0x0c401000), + (0x10001e00), + (0x08400e00), + (0x04001e00), + (0x1c400e00), + (0x10001e00), + (0x08400e00), + (0x04001e00), + (0x1c400e00)}, + {(0x3f800000), + (0x3f8c2008), + (0x3f8a0000), + (0x3f862008), + (0x3f800000), + (0x3f8c2008), + (0x3f8a0000), + (0x3f862008), + (0x3f88000f), + (0x3f842007), + (0x3f82000f), + (0x3f8e2007), + (0x3f88000f), + (0x3f842007), + (0x3f82000f), + (0x3f8e2007)}, + (0xfff80000), + {0x2b,0xf5,0xba,0x2c,0x06,0x65,0xd9,0xae,0x19,0x02, + 0xa4,0xb4,0xe6,0x92,0x03,0x77,0xb7,0xb8,0x8c,0x23,0x00} + }, + { + /* No.128 delta:2214 weight:1371 */ + 11213, + 43, + 23, + 2, + {(0x00000000), + (0xe454d1ab), + (0x80c8a6d9), + (0x649c7772), + (0xb0f00808), + (0x54a4d9a3), + (0x3038aed1), + (0xd46c7f7a), + (0x00004f07), + (0xe4549eac), + (0x80c8e9de), + (0x649c3875), + (0xb0f0470f), + (0x54a496a4), + (0x3038e1d6), + (0xd46c307d)}, + {(0x00000000), + (0xca494000), + (0x00538000), + (0xca1ac000), + (0x10bd2000), + (0xdaf46000), + (0x10eea000), + (0xdaa7e000), + (0x18905e00), + (0xd2d91e00), + (0x18c3de00), + (0xd28a9e00), + (0x082d7e00), + (0xc2643e00), + (0x087efe00), + (0xc237be00)}, + {(0x3f800000), + (0x3fe524a0), + (0x3f8029c0), + (0x3fe50d60), + (0x3f885e90), + (0x3fed7a30), + (0x3f887750), + (0x3fed53f0), + (0x3f8c482f), + (0x3fe96c8f), + (0x3f8c61ef), + (0x3fe9454f), + (0x3f8416bf), + (0x3fe1321f), + (0x3f843f7f), + (0x3fe11bdf)}, + (0xfff80000), + {0xf5,0xb9,0x08,0x2c,0x6d,0x40,0xb0,0x38,0xb5,0x70, + 0x83,0x86,0xbb,0x54,0xe7,0x5e,0x64,0xf3,0x40,0x61,0x00} + }, + { + /* No.129 delta:886 weight:915 */ + 11213, + 70, + 12, + 5, + {(0x00000000), + (0x242c5090), + (0x10199a60), + (0x3435caf0), + (0xe9d00810), + (0xcdfc5880), + (0xf9c99270), + (0xdde5c2e0), + (0x00003567), + (0x242c65f7), + (0x1019af07), + (0x3435ff97), + (0xe9d03d77), + (0xcdfc6de7), + (0xf9c9a717), + (0xdde5f787)}, + {(0x00000000), + (0x004e4000), + (0x1009c000), + (0x10478000), + (0x0e025000), + (0x0e4c1000), + (0x1e0b9000), + (0x1e45d000), + (0x10345e00), + (0x107a1e00), + (0x003d9e00), + (0x0073de00), + (0x1e360e00), + (0x1e784e00), + (0x0e3fce00), + (0x0e718e00)}, + {(0x3f800000), + (0x3f802720), + (0x3f8804e0), + (0x3f8823c0), + (0x3f870128), + (0x3f872608), + (0x3f8f05c8), + (0x3f8f22e8), + (0x3f881a2f), + (0x3f883d0f), + (0x3f801ecf), + (0x3f8039ef), + (0x3f8f1b07), + (0x3f8f3c27), + (0x3f871fe7), + (0x3f8738c7)}, + (0xfff80000), + {0xae,0x65,0xce,0x51,0xe8,0x63,0xb5,0x45,0x7a,0xb5, + 0x06,0x3b,0x06,0x88,0x6c,0x62,0x83,0x37,0xc8,0xb9,0x00} + }, + { + /* No.130 delta:2602 weight:1519 */ + 11213, + 18, + 4, + 6, + {(0x00000000), + (0x4fa484d0), + (0x546a6e84), + (0x1bceea54), + (0x4a400828), + (0x05e48cf8), + (0x1e2a66ac), + (0x518ee27c), + (0x0000bda0), + (0x4fa43970), + (0x546ad324), + (0x1bce57f4), + (0x4a40b588), + (0x05e43158), + (0x1e2adb0c), + (0x518e5fdc)}, + {(0x00000000), + (0x13081400), + (0x928e3000), + (0x81862400), + (0x010e0000), + (0x12061400), + (0x93803000), + (0x80882400), + (0x10581e00), + (0x03500a00), + (0x82d62e00), + (0x91de3a00), + (0x11561e00), + (0x025e0a00), + (0x83d82e00), + (0x90d03a00)}, + {(0x3f800000), + (0x3f89840a), + (0x3fc94718), + (0x3fc0c312), + (0x3f808700), + (0x3f89030a), + (0x3fc9c018), + (0x3fc04412), + (0x3f882c0f), + (0x3f81a805), + (0x3fc16b17), + (0x3fc8ef1d), + (0x3f88ab0f), + (0x3f812f05), + (0x3fc1ec17), + (0x3fc8681d)}, + (0xfff80000), + {0x13,0xcb,0x05,0x11,0x83,0xac,0xeb,0x2f,0xe5,0x15, + 0x1a,0x0e,0x87,0xa3,0x4d,0xac,0x2b,0xc0,0xb1,0xf3,0x00} + }, + { + /* No.131 delta:1006 weight:1303 */ + 11213, + 69, + 16, + 7, + {(0x00000000), + (0xeb61a85a), + (0x9e89b6f4), + (0x75e81eae), + (0x4cc00837), + (0xa7a1a06d), + (0xd249bec3), + (0x39281699), + (0x00006d8a), + (0xeb61c5d0), + (0x9e89db7e), + (0x75e87324), + (0x4cc065bd), + (0xa7a1cde7), + (0xd249d349), + (0x39287b13)}, + {(0x00000000), + (0x20bcb000), + (0x51807000), + (0x713cc000), + (0x02a2a000), + (0x221e1000), + (0x5322d000), + (0x739e6000), + (0x00067e00), + (0x20bace00), + (0x51860e00), + (0x713abe00), + (0x02a4de00), + (0x22186e00), + (0x5324ae00), + (0x73981e00)}, + {(0x3f800000), + (0x3f905e58), + (0x3fa8c038), + (0x3fb89e60), + (0x3f815150), + (0x3f910f08), + (0x3fa99168), + (0x3fb9cf30), + (0x3f80033f), + (0x3f905d67), + (0x3fa8c307), + (0x3fb89d5f), + (0x3f81526f), + (0x3f910c37), + (0x3fa99257), + (0x3fb9cc0f)}, + (0xfff80000), + {0xbc,0xf3,0x6a,0x80,0xa6,0xee,0x61,0x78,0xa8,0x3d, + 0x8c,0xee,0x29,0x1b,0x5e,0xfd,0x0b,0xf8,0x0f,0x41,0x00} + }, + { + /* No.132 delta:2899 weight:1651 */ + 11213, + 57, + 3, + 7, + {(0x00000000), + (0x7a913b6d), + (0xeed573ba), + (0x944448d7), + (0xfbd00846), + (0x8141332b), + (0x15057bfc), + (0x6f944091), + (0x00003675), + (0x7a910d18), + (0xeed545cf), + (0x94447ea2), + (0xfbd03e33), + (0x8141055e), + (0x15054d89), + (0x6f9476e4)}, + {(0x00000000), + (0x28410000), + (0x92350000), + (0xba740000), + (0x00601000), + (0x28211000), + (0x92551000), + (0xba141000), + (0x20161e00), + (0x08571e00), + (0xb2231e00), + (0x9a621e00), + (0x20760e00), + (0x08370e00), + (0xb2430e00), + (0x9a020e00)}, + {(0x3f800000), + (0x3f942080), + (0x3fc91a80), + (0x3fdd3a00), + (0x3f803008), + (0x3f941088), + (0x3fc92a88), + (0x3fdd0a08), + (0x3f900b0f), + (0x3f842b8f), + (0x3fd9118f), + (0x3fcd310f), + (0x3f903b07), + (0x3f841b87), + (0x3fd92187), + (0x3fcd0107)}, + (0xfff80000), + {0xa3,0x9f,0x64,0xc5,0x74,0x6d,0x2d,0x17,0xe7,0x4d, + 0x9a,0xaf,0xeb,0xb2,0x24,0x54,0x22,0x7a,0x93,0x8c,0x00} + }, + { + /* No.133 delta:1681 weight:1015 */ + 11213, + 83, + 12, + 13, + {(0x00000000), + (0x9193fd4c), + (0x375d8e7c), + (0xa6ce7330), + (0xbf90085d), + (0x2e03f511), + (0x88cd8621), + (0x195e7b6d), + (0x0000af07), + (0x9193524b), + (0x375d217b), + (0xa6cedc37), + (0xbf90a75a), + (0x2e035a16), + (0x88cd2926), + (0x195ed46a)}, + {(0x00000000), + (0x10740800), + (0x200dc000), + (0x3079c800), + (0x2056f800), + (0x3022f000), + (0x005b3800), + (0x102f3000), + (0x20031e00), + (0x30771600), + (0x000ede00), + (0x107ad600), + (0x0055e600), + (0x1021ee00), + (0x20582600), + (0x302c2e00)}, + {(0x3f800000), + (0x3f883a04), + (0x3f9006e0), + (0x3f983ce4), + (0x3f902b7c), + (0x3f981178), + (0x3f802d9c), + (0x3f881798), + (0x3f90018f), + (0x3f983b8b), + (0x3f80076f), + (0x3f883d6b), + (0x3f802af3), + (0x3f8810f7), + (0x3f902c13), + (0x3f981617)}, + (0xfff80000), + {0x5d,0xf8,0x9e,0x34,0xb8,0x35,0x07,0x7f,0xd2,0xe0, + 0x4f,0x6e,0x48,0xe9,0xdf,0x81,0x9d,0xf1,0x95,0x7a,0x00} + }, + { + /* No.134 delta:2863 weight:755 */ + 11213, + 84, + 6, + 17, + {(0x00000000), + (0x61047d07), + (0x957fb46d), + (0xf47bc96a), + (0x58f00860), + (0x39f47567), + (0xcd8fbc0d), + (0xac8bc10a), + (0x0000e9c0), + (0x610494c7), + (0x957f5dad), + (0xf47b20aa), + (0x58f0e1a0), + (0x39f49ca7), + (0xcd8f55cd), + (0xac8b28ca)}, + {(0x00000000), + (0x007c0000), + (0x13020000), + (0x137e0000), + (0x00020000), + (0x007e0000), + (0x13000000), + (0x137c0000), + (0x20401e00), + (0x203c1e00), + (0x33421e00), + (0x333e1e00), + (0x20421e00), + (0x203e1e00), + (0x33401e00), + (0x333c1e00)}, + {(0x3f800000), + (0x3f803e00), + (0x3f898100), + (0x3f89bf00), + (0x3f800100), + (0x3f803f00), + (0x3f898000), + (0x3f89be00), + (0x3f90200f), + (0x3f901e0f), + (0x3f99a10f), + (0x3f999f0f), + (0x3f90210f), + (0x3f901f0f), + (0x3f99a00f), + (0x3f999e0f)}, + (0xfff80000), + {0xcf,0x5c,0xa5,0xf4,0x7e,0x51,0x25,0xe8,0xf1,0x2b, + 0x6a,0x13,0xd4,0x31,0xca,0x76,0x97,0x3d,0x44,0x1a,0x00} + }, + { + /* No.135 delta:1967 weight:665 */ + 11213, + 19, + 12, + 19, + {(0x00000000), + (0xabbc4cf0), + (0xdf51c626), + (0x74ed8ad6), + (0x74a00878), + (0xdf1c4488), + (0xabf1ce5e), + (0x004d82ae), + (0x0000858b), + (0xabbcc97b), + (0xdf5143ad), + (0x74ed0f5d), + (0x74a08df3), + (0xdf1cc103), + (0xabf14bd5), + (0x004d0725)}, + {(0x00000000), + (0x41001800), + (0x004bc000), + (0x414bd800), + (0x8b86e200), + (0xca86fa00), + (0x8bcd2200), + (0xcacd3a00), + (0x70061e00), + (0x31060600), + (0x704dde00), + (0x314dc600), + (0xfb80fc00), + (0xba80e400), + (0xfbcb3c00), + (0xbacb2400)}, + {(0x3f800000), + (0x3fa0800c), + (0x3f8025e0), + (0x3fa0a5ec), + (0x3fc5c371), + (0x3fe5437d), + (0x3fc5e691), + (0x3fe5669d), + (0x3fb8030f), + (0x3f988303), + (0x3fb826ef), + (0x3f98a6e3), + (0x3ffdc07e), + (0x3fdd4072), + (0x3ffde59e), + (0x3fdd6592)}, + (0xfff80000), + {0xa2,0xe2,0xa5,0xe0,0x11,0x34,0xcb,0xf8,0xfc,0xa2, + 0x71,0xc6,0xbf,0xe2,0xc1,0x23,0x58,0x95,0xf4,0x86,0x00} + }, + { + /* No.136 delta:918 weight:1551 */ + 11213, + 47, + 18, + 4, + {(0x00000000), + (0x09adadc4), + (0xf017020b), + (0xf9baafcf), + (0x03300880), + (0x0a9da544), + (0xf3270a8b), + (0xfa8aa74f), + (0x0000cfe7), + (0x09ad6223), + (0xf017cdec), + (0xf9ba6028), + (0x0330c767), + (0x0a9d6aa3), + (0xf327c56c), + (0xfa8a68a8)}, + {(0x00000000), + (0x18747400), + (0x204c5200), + (0x38382600), + (0x10026c00), + (0x08761800), + (0x304e3e00), + (0x283a4a00), + (0x10011e00), + (0x08756a00), + (0x304d4c00), + (0x28393800), + (0x00037200), + (0x18770600), + (0x204f2000), + (0x383b5400)}, + {(0x3f800000), + (0x3f8c3a3a), + (0x3f902629), + (0x3f9c1c13), + (0x3f880136), + (0x3f843b0c), + (0x3f98271f), + (0x3f941d25), + (0x3f88008f), + (0x3f843ab5), + (0x3f9826a6), + (0x3f941c9c), + (0x3f8001b9), + (0x3f8c3b83), + (0x3f902790), + (0x3f9c1daa)}, + (0xfff80000), + {0xfd,0x25,0x81,0xf4,0x6f,0xd2,0x73,0x0c,0x1d,0xf8, + 0x3c,0x0b,0xd2,0x33,0xf7,0x54,0x12,0xcd,0x88,0xa9,0x00} + }, + { + /* No.137 delta:4265 weight:777 */ + 11213, + 70, + 4, + 16, + {(0x00000000), + (0xab4eac1a), + (0x41078fcd), + (0xea4923d7), + (0x9d20089e), + (0x366ea484), + (0xdc278753), + (0x77692b49), + (0x0000022a), + (0xab4eae30), + (0x41078de7), + (0xea4921fd), + (0x9d200ab4), + (0x366ea6ae), + (0xdc278579), + (0x77692963)}, + {(0x00000000), + (0x39400800), + (0x00500000), + (0x39100800), + (0x002c0000), + (0x396c0800), + (0x007c0000), + (0x393c0800), + (0x5e881e00), + (0x67c81600), + (0x5ed81e00), + (0x67981600), + (0x5ea41e00), + (0x67e41600), + (0x5ef41e00), + (0x67b41600)}, + {(0x3f800000), + (0x3f9ca004), + (0x3f802800), + (0x3f9c8804), + (0x3f801600), + (0x3f9cb604), + (0x3f803e00), + (0x3f9c9e04), + (0x3faf440f), + (0x3fb3e40b), + (0x3faf6c0f), + (0x3fb3cc0b), + (0x3faf520f), + (0x3fb3f20b), + (0x3faf7a0f), + (0x3fb3da0b)}, + (0xfff80000), + {0x67,0x39,0x69,0x46,0xb6,0xab,0xda,0x03,0x1a,0xb9, + 0x33,0x5c,0x43,0x1d,0xc4,0x88,0x65,0xf4,0x6e,0x7c,0x00} + }, + { + /* No.138 delta:2916 weight:1245 */ + 11213, + 12, + 4, + 11, + {(0x00000000), + (0x8bd9bb70), + (0x6536d8cf), + (0xeeef63bf), + (0x83c008a3), + (0x0819b3d3), + (0xe6f6d06c), + (0x6d2f6b1c), + (0x00006357), + (0x8bd9d827), + (0x6536bb98), + (0xeeef00e8), + (0x83c06bf4), + (0x0819d084), + (0xe6f6b33b), + (0x6d2f084b)}, + {(0x00000000), + (0x10b20000), + (0x0c210800), + (0x1c930800), + (0x29540000), + (0x39e60000), + (0x25750800), + (0x35c70800), + (0x02001e00), + (0x12b21e00), + (0x0e211600), + (0x1e931600), + (0x2b541e00), + (0x3be61e00), + (0x27751600), + (0x37c71600)}, + {(0x3f800000), + (0x3f885900), + (0x3f861084), + (0x3f8e4984), + (0x3f94aa00), + (0x3f9cf300), + (0x3f92ba84), + (0x3f9ae384), + (0x3f81000f), + (0x3f89590f), + (0x3f87108b), + (0x3f8f498b), + (0x3f95aa0f), + (0x3f9df30f), + (0x3f93ba8b), + (0x3f9be38b)}, + (0xfff80000), + {0xf3,0xfa,0x1e,0x93,0x8b,0xfb,0x73,0xc0,0xf1,0x10, + 0x33,0xac,0x5f,0x6b,0x3c,0x07,0xa2,0x98,0x75,0xed,0x00} + }, + { + /* No.139 delta:2344 weight:1631 */ + 11213, + 19, + 8, + 7, + {(0x00000000), + (0xfee0d62f), + (0x304aad76), + (0xceaa7b59), + (0x871008b7), + (0x79f0de98), + (0xb75aa5c1), + (0x49ba73ee), + (0x00003b80), + (0xfee0edaf), + (0x304a96f6), + (0xceaa40d9), + (0x87103337), + (0x79f0e518), + (0xb75a9e41), + (0x49ba486e)}, + {(0x00000000), + (0x05204400), + (0x00640000), + (0x05444400), + (0x00510400), + (0x05714000), + (0x00350400), + (0x05154000), + (0x32861e00), + (0x37a65a00), + (0x32e21e00), + (0x37c25a00), + (0x32d71a00), + (0x37f75e00), + (0x32b31a00), + (0x37935e00)}, + {(0x3f800000), + (0x3f829022), + (0x3f803200), + (0x3f82a222), + (0x3f802882), + (0x3f82b8a0), + (0x3f801a82), + (0x3f828aa0), + (0x3f99430f), + (0x3f9bd32d), + (0x3f99710f), + (0x3f9be12d), + (0x3f996b8d), + (0x3f9bfbaf), + (0x3f99598d), + (0x3f9bc9af)}, + (0xfff80000), + {0xaf,0x4b,0x20,0xda,0xcd,0xb1,0xdf,0x23,0x89,0x9b, + 0x9d,0xaf,0x0b,0x97,0x1e,0x9f,0x61,0xe7,0xfc,0x34,0x00} + }, + { + /* No.140 delta:8901 weight:1275 */ + 11213, + 67, + 29, + 1, + {(0x00000000), + (0x10b888fe), + (0xd0c6c2fc), + (0xc07e4a02), + (0x93a008cd), + (0x83188033), + (0x4366ca31), + (0x53de42cf), + (0x00009412), + (0x10b81cec), + (0xd0c656ee), + (0xc07ede10), + (0x93a09cdf), + (0x83181421), + (0x43665e23), + (0x53ded6dd)}, + {(0x00000000), + (0xd4620000), + (0x7a000000), + (0xae620000), + (0x01000000), + (0xd5620000), + (0x7b000000), + (0xaf620000), + (0x20a01e00), + (0xf4c21e00), + (0x5aa01e00), + (0x8ec21e00), + (0x21a01e00), + (0xf5c21e00), + (0x5ba01e00), + (0x8fc21e00)}, + {(0x3f800000), + (0x3fea3100), + (0x3fbd0000), + (0x3fd73100), + (0x3f808000), + (0x3feab100), + (0x3fbd8000), + (0x3fd7b100), + (0x3f90500f), + (0x3ffa610f), + (0x3fad500f), + (0x3fc7610f), + (0x3f90d00f), + (0x3ffae10f), + (0x3fadd00f), + (0x3fc7e10f)}, + (0xfff80000), + {0x57,0x96,0xba,0x7d,0x3b,0x31,0xd7,0xac,0xb2,0xe9, + 0x75,0xcd,0xdb,0x72,0x76,0x05,0x30,0x7f,0xd3,0xa0,0x00} + }, + { + /* No.141 delta:3341 weight:741 */ + 11213, + 28, + 3, + 17, + {(0x00000000), + (0xac86815e), + (0xed762180), + (0x41f0a0de), + (0x81a008df), + (0x2d268981), + (0x6cd6295f), + (0xc050a801), + (0x00004e54), + (0xac86cf0a), + (0xed766fd4), + (0x41f0ee8a), + (0x81a0468b), + (0x2d26c7d5), + (0x6cd6670b), + (0xc050e655)}, + {(0x00000000), + (0x9a110000), + (0x0f440000), + (0x95550000), + (0x70020000), + (0xea130000), + (0x7f460000), + (0xe5570000), + (0x21561e00), + (0xbb471e00), + (0x2e121e00), + (0xb4031e00), + (0x51541e00), + (0xcb451e00), + (0x5e101e00), + (0xc4011e00)}, + {(0x3f800000), + (0x3fcd0880), + (0x3f87a200), + (0x3fcaaa80), + (0x3fb80100), + (0x3ff50980), + (0x3fbfa300), + (0x3ff2ab80), + (0x3f90ab0f), + (0x3fdda38f), + (0x3f97090f), + (0x3fda018f), + (0x3fa8aa0f), + (0x3fe5a28f), + (0x3faf080f), + (0x3fe2008f)}, + (0xfff80000), + {0xcc,0x1d,0x62,0xab,0x61,0x1e,0xfc,0xe5,0x74,0x60, + 0xa2,0x5f,0xd0,0xfe,0xff,0x0e,0xfb,0x75,0x83,0x88,0x00} + }, + { + /* No.142 delta:5114 weight:1233 */ + 11213, + 35, + 30, + 3, + {(0x00000000), + (0xb9cd2997), + (0xab1ac509), + (0x12d7ec9e), + (0x5b2008ea), + (0xe2ed217d), + (0xf03acde3), + (0x49f7e474), + (0x0000ef9a), + (0xb9cdc60d), + (0xab1a2a93), + (0x12d70304), + (0x5b20e770), + (0xe2edcee7), + (0xf03a2279), + (0x49f70bee)}, + {(0x00000000), + (0xaef05000), + (0x2d801000), + (0x83704000), + (0x2390a000), + (0x8d60f000), + (0x0e10b000), + (0xa0e0e000), + (0x01001e00), + (0xaff04e00), + (0x2c800e00), + (0x82705e00), + (0x2290be00), + (0x8c60ee00), + (0x0f10ae00), + (0xa1e0fe00)}, + {(0x3f800000), + (0x3fd77828), + (0x3f96c008), + (0x3fc1b820), + (0x3f91c850), + (0x3fc6b078), + (0x3f870858), + (0x3fd07070), + (0x3f80800f), + (0x3fd7f827), + (0x3f964007), + (0x3fc1382f), + (0x3f91485f), + (0x3fc63077), + (0x3f878857), + (0x3fd0f07f)}, + (0xfff80000), + {0xce,0x51,0x4c,0x65,0x7a,0xae,0xbf,0x6f,0xd6,0x0b, + 0x0c,0x85,0x1c,0x15,0xe3,0xbf,0x9f,0x2b,0xa1,0x5d,0x00} + }, + { + /* No.143 delta:2115 weight:1465 */ + 11213, + 11, + 20, + 4, + {(0x00000000), + (0x34795048), + (0x0b9d244e), + (0x3fe47406), + (0xc90008f2), + (0xfd7958ba), + (0xc29d2cbc), + (0xf6e47cf4), + (0x00008680), + (0x3479d6c8), + (0x0b9da2ce), + (0x3fe4f286), + (0xc9008e72), + (0xfd79de3a), + (0xc29daa3c), + (0xf6e4fa74)}, + {(0x00000000), + (0xc1592000), + (0x16984000), + (0xd7c16000), + (0x21226800), + (0xe07b4800), + (0x37ba2800), + (0xf6e30800), + (0x08345e00), + (0xc96d7e00), + (0x1eac1e00), + (0xdff53e00), + (0x29163600), + (0xe84f1600), + (0x3f8e7600), + (0xfed75600)}, + {(0x3f800000), + (0x3fe0ac90), + (0x3f8b4c20), + (0x3febe0b0), + (0x3f909134), + (0x3ff03da4), + (0x3f9bdd14), + (0x3ffb7184), + (0x3f841a2f), + (0x3fe4b6bf), + (0x3f8f560f), + (0x3feffa9f), + (0x3f948b1b), + (0x3ff4278b), + (0x3f9fc73b), + (0x3fff6bab)}, + (0xfff80000), + {0x5f,0xfb,0xd7,0xc9,0x75,0x94,0x0e,0x84,0xfd,0x2b, + 0xc3,0xaf,0xdd,0x54,0xe4,0x81,0x96,0x14,0x65,0x90,0x00} + }, + { + /* No.144 delta:1074 weight:843 */ + 11213, + 50, + 20, + 11, + {(0x00000000), + (0xa8afcf6f), + (0x497c3b6e), + (0xe1d3f401), + (0xa0800909), + (0x082fc666), + (0xe9fc3267), + (0x4153fd08), + (0x0000ec80), + (0xa8af23ef), + (0x497cd7ee), + (0xe1d31881), + (0xa080e589), + (0x082f2ae6), + (0xe9fcdee7), + (0x41531188)}, + {(0x00000000), + (0x00081200), + (0xd0708400), + (0xd0789600), + (0x70302a00), + (0x70383800), + (0xa040ae00), + (0xa048bc00), + (0x1040fe00), + (0x1048ec00), + (0xc0307a00), + (0xc0386800), + (0x6070d400), + (0x6078c600), + (0xb0005000), + (0xb0084200)}, + {(0x3f800000), + (0x3f800409), + (0x3fe83842), + (0x3fe83c4b), + (0x3fb81815), + (0x3fb81c1c), + (0x3fd02057), + (0x3fd0245e), + (0x3f88207f), + (0x3f882476), + (0x3fe0183d), + (0x3fe01c34), + (0x3fb0386a), + (0x3fb03c63), + (0x3fd80028), + (0x3fd80421)}, + (0xfff80000), + {0x95,0xfe,0x49,0x06,0x5e,0xae,0xca,0x7d,0x0a,0xce, + 0xf9,0x80,0x70,0xc2,0x03,0xa9,0x1c,0xc3,0x16,0x85,0x00} + }, + { + /* No.145 delta:2918 weight:721 */ + 11213, + 86, + 4, + 18, + {(0x00000000), + (0x3bebda5d), + (0x18b70390), + (0x235cd9cd), + (0x2c60091c), + (0x178bd341), + (0x34d70a8c), + (0x0f3cd0d1), + (0x00004f75), + (0x3beb9528), + (0x18b74ce5), + (0x235c96b8), + (0x2c604669), + (0x178b9c34), + (0x34d745f9), + (0x0f3c9fa4)}, + {(0x00000000), + (0x1e710200), + (0x09800000), + (0x17f10200), + (0x00c00000), + (0x1eb10200), + (0x09400000), + (0x17310200), + (0x30431e00), + (0x2e321c00), + (0x39c31e00), + (0x27b21c00), + (0x30831e00), + (0x2ef21c00), + (0x39031e00), + (0x27721c00)}, + {(0x3f800000), + (0x3f8f3881), + (0x3f84c000), + (0x3f8bf881), + (0x3f806000), + (0x3f8f5881), + (0x3f84a000), + (0x3f8b9881), + (0x3f98218f), + (0x3f97190e), + (0x3f9ce18f), + (0x3f93d90e), + (0x3f98418f), + (0x3f97790e), + (0x3f9c818f), + (0x3f93b90e)}, + (0xfff80000), + {0x3c,0x75,0x1b,0x34,0x56,0x7d,0x5c,0xdd,0x5a,0x41, + 0xb9,0x82,0x6d,0x1d,0xc3,0x11,0x62,0x1e,0xea,0x73,0x00} + }, + { + /* No.146 delta:2588 weight:993 */ + 11213, + 77, + 8, + 11, + {(0x00000000), + (0x29b76eba), + (0xb5519d7b), + (0x9ce6f3c1), + (0xac000920), + (0x85b7679a), + (0x1951945b), + (0x30e6fae1), + (0x00002499), + (0x29b74a23), + (0xb551b9e2), + (0x9ce6d758), + (0xac002db9), + (0x85b74303), + (0x1951b0c2), + (0x30e6de78)}, + {(0x00000000), + (0x00350000), + (0x086a0000), + (0x085f0000), + (0x085c0000), + (0x08690000), + (0x00360000), + (0x00030000), + (0x00519e00), + (0x00649e00), + (0x083b9e00), + (0x080e9e00), + (0x080d9e00), + (0x08389e00), + (0x00679e00), + (0x00529e00)}, + {(0x3f800000), + (0x3f801a80), + (0x3f843500), + (0x3f842f80), + (0x3f842e00), + (0x3f843480), + (0x3f801b00), + (0x3f800180), + (0x3f8028cf), + (0x3f80324f), + (0x3f841dcf), + (0x3f84074f), + (0x3f8406cf), + (0x3f841c4f), + (0x3f8033cf), + (0x3f80294f)}, + (0xfff80000), + {0x78,0x89,0x90,0x85,0x2f,0x08,0xc7,0x62,0xed,0x99, + 0x04,0xfb,0xe5,0x26,0x8d,0x20,0x08,0xbc,0xe0,0x01,0x00} + }, + { + /* No.147 delta:1196 weight:1067 */ + 11213, + 65, + 15, + 11, + {(0x00000000), + (0xe3c8118c), + (0x346df077), + (0xd7a5e1fb), + (0xff500936), + (0x1c9818ba), + (0xcb3df941), + (0x28f5e8cd), + (0x000057eb), + (0xe3c84667), + (0x346da79c), + (0xd7a5b610), + (0xff505edd), + (0x1c984f51), + (0xcb3daeaa), + (0x28f5bf26)}, + {(0x00000000), + (0x00411800), + (0x0c060000), + (0x0c471800), + (0x260a4800), + (0x264b5000), + (0x2a0c4800), + (0x2a4d5000), + (0x0003de00), + (0x0042c600), + (0x0c05de00), + (0x0c44c600), + (0x26099600), + (0x26488e00), + (0x2a0f9600), + (0x2a4e8e00)}, + {(0x3f800000), + (0x3f80208c), + (0x3f860300), + (0x3f86238c), + (0x3f930524), + (0x3f9325a8), + (0x3f950624), + (0x3f9526a8), + (0x3f8001ef), + (0x3f802163), + (0x3f8602ef), + (0x3f862263), + (0x3f9304cb), + (0x3f932447), + (0x3f9507cb), + (0x3f952747)}, + (0xfff80000), + {0x1f,0x15,0xcd,0x92,0x4b,0xcd,0x46,0xa5,0x75,0xd5, + 0x6e,0xf4,0x6d,0x40,0x10,0x3c,0xa0,0xd0,0x56,0x85,0x00} + }, + { + /* No.148 delta:995 weight:1397 */ + 11213, + 48, + 20, + 6, + {(0x00000000), + (0x81afe9a5), + (0xc7e54dd3), + (0x464aa476), + (0x42100942), + (0xc3bfe0e7), + (0x85f54491), + (0x045aad34), + (0x0000d573), + (0x81af3cd6), + (0xc7e598a0), + (0x464a7105), + (0x4210dc31), + (0xc3bf3594), + (0x85f591e2), + (0x045a7847)}, + {(0x00000000), + (0x0c8d6800), + (0x00660a00), + (0x0ceb6200), + (0x0190c600), + (0x0d1dae00), + (0x01f6cc00), + (0x0d7ba400), + (0x00423e00), + (0x0ccf5600), + (0x00243400), + (0x0ca95c00), + (0x01d2f800), + (0x0d5f9000), + (0x01b4f200), + (0x0d399a00)}, + {(0x3f800000), + (0x3f8646b4), + (0x3f803305), + (0x3f8675b1), + (0x3f80c863), + (0x3f868ed7), + (0x3f80fb66), + (0x3f86bdd2), + (0x3f80211f), + (0x3f8667ab), + (0x3f80121a), + (0x3f8654ae), + (0x3f80e97c), + (0x3f86afc8), + (0x3f80da79), + (0x3f869ccd)}, + (0xfff80000), + {0x89,0x5d,0x4d,0xfa,0x78,0x98,0x8a,0x59,0x89,0x1d, + 0x43,0x6d,0x08,0x21,0x0f,0x15,0xef,0xea,0xed,0x4f,0x00} + }, + { + /* No.149 delta:1807 weight:1017 */ + 11213, + 25, + 17, + 13, + {(0x00000000), + (0x95fafe23), + (0x258e5d0f), + (0xb074a32c), + (0x5b000950), + (0xcefaf773), + (0x7e8e545f), + (0xeb74aa7c), + (0x00007b8f), + (0x95fa85ac), + (0x258e2680), + (0xb074d8a3), + (0x5b0072df), + (0xcefa8cfc), + (0x7e8e2fd0), + (0xeb74d1f3)}, + {(0x00000000), + (0x40690000), + (0x107c4000), + (0x50154000), + (0x0061b000), + (0x4008b000), + (0x101df000), + (0x5074f000), + (0x10221e00), + (0x504b1e00), + (0x005e5e00), + (0x40375e00), + (0x1043ae00), + (0x502aae00), + (0x003fee00), + (0x4056ee00)}, + {(0x3f800000), + (0x3fa03480), + (0x3f883e20), + (0x3fa80aa0), + (0x3f8030d8), + (0x3fa00458), + (0x3f880ef8), + (0x3fa83a78), + (0x3f88110f), + (0x3fa8258f), + (0x3f802f2f), + (0x3fa01baf), + (0x3f8821d7), + (0x3fa81557), + (0x3f801ff7), + (0x3fa02b77)}, + (0xfff80000), + {0x29,0x89,0x68,0x24,0x4a,0xc0,0x9c,0xf5,0x79,0x14, + 0xc1,0x26,0xaa,0x3d,0xbf,0x1f,0xc1,0xbc,0x78,0x97,0x00} + }, + { + /* No.150 delta:2642 weight:975 */ + 11213, + 44, + 4, + 15, + {(0x00000000), + (0x3cf7745b), + (0x8a251fd4), + (0xb6d26b8f), + (0xc580096c), + (0xf9777d37), + (0x4fa516b8), + (0x735262e3), + (0x00007ddf), + (0x3cf70984), + (0x8a25620b), + (0xb6d21650), + (0xc58074b3), + (0xf97700e8), + (0x4fa56b67), + (0x73521f3c)}, + {(0x00000000), + (0x52780000), + (0x13600000), + (0x41180000), + (0x08cc0000), + (0x5ab40000), + (0x1bac0000), + (0x49d40000), + (0x02401e00), + (0x50381e00), + (0x11201e00), + (0x43581e00), + (0x0a8c1e00), + (0x58f41e00), + (0x19ec1e00), + (0x4b941e00)}, + {(0x3f800000), + (0x3fa93c00), + (0x3f89b000), + (0x3fa08c00), + (0x3f846600), + (0x3fad5a00), + (0x3f8dd600), + (0x3fa4ea00), + (0x3f81200f), + (0x3fa81c0f), + (0x3f88900f), + (0x3fa1ac0f), + (0x3f85460f), + (0x3fac7a0f), + (0x3f8cf60f), + (0x3fa5ca0f)}, + (0xfff80000), + {0x1c,0x8b,0x81,0x2c,0x97,0xf0,0xd6,0x0f,0xeb,0x28, + 0x7e,0xbd,0x56,0xe1,0x95,0x03,0x72,0xd1,0x0a,0x96,0x00} + }, + { + /* No.151 delta:962 weight:1023 */ + 11213, + 78, + 12, + 10, + {(0x00000000), + (0x171b50e0), + (0x997dbf57), + (0x8e66efb7), + (0x22d00977), + (0x35cb5997), + (0xbbadb620), + (0xacb6e6c0), + (0x00001c87), + (0x171b4c67), + (0x997da3d0), + (0x8e66f330), + (0x22d015f0), + (0x35cb4510), + (0xbbadaaa7), + (0xacb6fa47)}, + {(0x00000000), + (0x21821c00), + (0x10102200), + (0x31923e00), + (0x60023000), + (0x41802c00), + (0x70121200), + (0x51900e00), + (0xc100de00), + (0xe082c200), + (0xd110fc00), + (0xf092e000), + (0xa102ee00), + (0x8080f200), + (0xb112cc00), + (0x9090d000)}, + {(0x3f800000), + (0x3f90c10e), + (0x3f880811), + (0x3f98c91f), + (0x3fb00118), + (0x3fa0c016), + (0x3fb80909), + (0x3fa8c807), + (0x3fe0806f), + (0x3ff04161), + (0x3fe8887e), + (0x3ff84970), + (0x3fd08177), + (0x3fc04079), + (0x3fd88966), + (0x3fc84868)}, + (0xfff80000), + {0xb1,0xe6,0xdf,0x01,0xdd,0xa2,0x07,0x31,0x50,0x37, + 0xbf,0x34,0x2a,0x6d,0xfe,0xe7,0x69,0x32,0x01,0x60,0x00} + }, + { + /* No.152 delta:1302 weight:1041 */ + 11213, + 55, + 10, + 13, + {(0x00000000), + (0xd0556a8d), + (0x5e4d31d5), + (0x8e185b58), + (0xe6600989), + (0x36356304), + (0xb82d385c), + (0x687852d1), + (0x000019bb), + (0xd0557336), + (0x5e4d286e), + (0x8e1842e3), + (0xe6601032), + (0x36357abf), + (0xb82d21e7), + (0x68784b6a)}, + {(0x00000000), + (0x627c4000), + (0x3034a000), + (0x5248e000), + (0x00038000), + (0x627fc000), + (0x30372000), + (0x524b6000), + (0x80519e00), + (0xe22dde00), + (0xb0653e00), + (0xd2197e00), + (0x80521e00), + (0xe22e5e00), + (0xb066be00), + (0xd21afe00)}, + {(0x3f800000), + (0x3fb13e20), + (0x3f981a50), + (0x3fa92470), + (0x3f8001c0), + (0x3fb13fe0), + (0x3f981b90), + (0x3fa925b0), + (0x3fc028cf), + (0x3ff116ef), + (0x3fd8329f), + (0x3fe90cbf), + (0x3fc0290f), + (0x3ff1172f), + (0x3fd8335f), + (0x3fe90d7f)}, + (0xfff80000), + {0x9e,0x26,0x73,0xd6,0xbe,0x9b,0x5f,0x7d,0x6b,0x71, + 0x07,0x55,0x14,0xdf,0x70,0x0c,0x4a,0x9a,0xdd,0x23,0x00} + }, + { + /* No.153 delta:1084 weight:1123 */ + 11213, + 86, + 22, + 10, + {(0x00000000), + (0xa2a5f5b9), + (0x2b421269), + (0x89e7e7d0), + (0x54300991), + (0xf695fc28), + (0x7f721bf8), + (0xddd7ee41), + (0x0000dc1c), + (0xa2a529a5), + (0x2b42ce75), + (0x89e73bcc), + (0x5430d58d), + (0xf6952034), + (0x7f72c7e4), + (0xddd7325d)}, + {(0x00000000), + (0x40cc0000), + (0x50668000), + (0x10aa8000), + (0x0069f000), + (0x40a5f000), + (0x500f7000), + (0x10c37000), + (0x00131e00), + (0x40df1e00), + (0x50759e00), + (0x10b99e00), + (0x007aee00), + (0x40b6ee00), + (0x501c6e00), + (0x10d06e00)}, + {(0x3f800000), + (0x3fa06600), + (0x3fa83340), + (0x3f885540), + (0x3f8034f8), + (0x3fa052f8), + (0x3fa807b8), + (0x3f8861b8), + (0x3f80098f), + (0x3fa06f8f), + (0x3fa83acf), + (0x3f885ccf), + (0x3f803d77), + (0x3fa05b77), + (0x3fa80e37), + (0x3f886837)}, + (0xfff80000), + {0x27,0x0a,0x3f,0xdb,0x36,0x65,0x8b,0x9c,0x6c,0x3d, + 0xb3,0x81,0x6b,0x82,0xdc,0xaf,0x77,0xa0,0x5a,0x41,0x00} + }, + { + /* No.154 delta:1218 weight:1125 */ + 11213, + 33, + 17, + 9, + {(0x00000000), + (0xbc510269), + (0x187fd997), + (0xa42edbfe), + (0xb2d009a5), + (0x0e810bcc), + (0xaaafd032), + (0x16fed25b), + (0x00008c92), + (0xbc518efb), + (0x187f5505), + (0xa42e576c), + (0xb2d08537), + (0x0e81875e), + (0xaaaf5ca0), + (0x16fe5ec9)}, + {(0x00000000), + (0x4674aa00), + (0x20885800), + (0x66fcf200), + (0x010e8000), + (0x477a2a00), + (0x2186d800), + (0x67f27200), + (0x02c2be00), + (0x44b61400), + (0x224ae600), + (0x643e4c00), + (0x03cc3e00), + (0x45b89400), + (0x23446600), + (0x6530cc00)}, + {(0x3f800000), + (0x3fa33a55), + (0x3f90442c), + (0x3fb37e79), + (0x3f808740), + (0x3fa3bd15), + (0x3f90c36c), + (0x3fb3f939), + (0x3f81615f), + (0x3fa25b0a), + (0x3f912573), + (0x3fb21f26), + (0x3f81e61f), + (0x3fa2dc4a), + (0x3f91a233), + (0x3fb29866)}, + (0xfff80000), + {0xcd,0xbe,0xfa,0xd2,0x8e,0x1c,0x9f,0x67,0x49,0xe4, + 0xe4,0x6c,0xb2,0xe3,0x01,0xb2,0x56,0x77,0x18,0x40,0x00} + }, + { + /* No.155 delta:2783 weight:955 */ + 11213, + 59, + 3, + 7, + {(0x00000000), + (0xac2382ba), + (0x6ff1673d), + (0xc3d2e587), + (0x37a009b6), + (0x9b838b0c), + (0x58516e8b), + (0xf472ec31), + (0x0000a5f6), + (0xac23274c), + (0x6ff1c2cb), + (0xc3d24071), + (0x37a0ac40), + (0x9b832efa), + (0x5851cb7d), + (0xf47249c7)}, + {(0x00000000), + (0x14228400), + (0x00948000), + (0x14b60400), + (0x206a8400), + (0x34480000), + (0x20fe0400), + (0x34dc8000), + (0x40481e00), + (0x546a9a00), + (0x40dc9e00), + (0x54fe1a00), + (0x60229a00), + (0x74001e00), + (0x60b61a00), + (0x74949e00)}, + {(0x3f800000), + (0x3f8a1142), + (0x3f804a40), + (0x3f8a5b02), + (0x3f903542), + (0x3f9a2400), + (0x3f907f02), + (0x3f9a6e40), + (0x3fa0240f), + (0x3faa354d), + (0x3fa06e4f), + (0x3faa7f0d), + (0x3fb0114d), + (0x3fba000f), + (0x3fb05b0d), + (0x3fba4a4f)}, + (0xfff80000), + {0x12,0x6b,0xe6,0x1a,0xef,0x03,0x6a,0x5a,0xeb,0x44, + 0xd4,0xe8,0x31,0x17,0x3d,0x9b,0xd7,0xd8,0xc8,0xd2,0x00} + }, + { + /* No.156 delta:2681 weight:1401 */ + 11213, + 11, + 22, + 2, + {(0x00000000), + (0xfcaff0c3), + (0xee10c3a9), + (0x12bf336a), + (0x1ea009c1), + (0xe20ff902), + (0xf0b0ca68), + (0x0c1f3aab), + (0x0000a3d9), + (0xfcaf531a), + (0xee106070), + (0x12bf90b3), + (0x1ea0aa18), + (0xe20f5adb), + (0xf0b069b1), + (0x0c1f9972)}, + {(0x00000000), + (0x8f318000), + (0x0c949000), + (0x83a51000), + (0x61378000), + (0xee060000), + (0x6da31000), + (0xe2929000), + (0x4044de00), + (0xcf755e00), + (0x4cd04e00), + (0xc3e1ce00), + (0x21735e00), + (0xae42de00), + (0x2de7ce00), + (0xa2d64e00)}, + {(0x3f800000), + (0x3fc798c0), + (0x3f864a48), + (0x3fc1d288), + (0x3fb09bc0), + (0x3ff70300), + (0x3fb6d188), + (0x3ff14948), + (0x3fa0226f), + (0x3fe7baaf), + (0x3fa66827), + (0x3fe1f0e7), + (0x3f90b9af), + (0x3fd7216f), + (0x3f96f3e7), + (0x3fd16b27)}, + (0xfff80000), + {0x83,0x73,0xde,0x94,0x03,0x6f,0x08,0x85,0xc8,0x3c, + 0xf2,0x9a,0xb2,0x9d,0x8f,0xfe,0x34,0x78,0xe6,0x25,0x00} + }, + { + /* No.157 delta:4633 weight:903 */ + 11213, + 70, + 1, + 8, + {(0x00000000), + (0x4732d8c0), + (0x2145def8), + (0x66770638), + (0x8ec009da), + (0xc9f2d11a), + (0xaf85d722), + (0xe8b70fe2), + (0x000031b0), + (0x4732e970), + (0x2145ef48), + (0x66773788), + (0x8ec0386a), + (0xc9f2e0aa), + (0xaf85e692), + (0xe8b73e52)}, + {(0x00000000), + (0x10400000), + (0x24640000), + (0x34240000), + (0x81100000), + (0x91500000), + (0xa5740000), + (0xb5340000), + (0x08431e00), + (0x18031e00), + (0x2c271e00), + (0x3c671e00), + (0x89531e00), + (0x99131e00), + (0xad371e00), + (0xbd771e00)}, + {(0x3f800000), + (0x3f882000), + (0x3f923200), + (0x3f9a1200), + (0x3fc08800), + (0x3fc8a800), + (0x3fd2ba00), + (0x3fda9a00), + (0x3f84218f), + (0x3f8c018f), + (0x3f96138f), + (0x3f9e338f), + (0x3fc4a98f), + (0x3fcc898f), + (0x3fd69b8f), + (0x3fdebb8f)}, + (0xfff80000), + {0xdd,0x87,0x76,0x32,0x84,0x88,0x7a,0x5f,0x52,0x09, + 0x1f,0x36,0xae,0xfa,0x7b,0x5d,0xb4,0x87,0x91,0x59,0x00} + }, + { + /* No.158 delta:1376 weight:811 */ + 11213, + 58, + 16, + 14, + {(0x00000000), + (0xdc5d3a0a), + (0x023cad01), + (0xde61970b), + (0x286009e2), + (0xf43d33e8), + (0x2a5ca4e3), + (0xf6019ee9), + (0x00009c42), + (0xdc5da648), + (0x023c3143), + (0xde610b49), + (0x286095a0), + (0xf43dafaa), + (0x2a5c38a1), + (0xf60102ab)}, + {(0x00000000), + (0x50081000), + (0x305e0000), + (0x60561000), + (0x10324000), + (0x403a5000), + (0x206c4000), + (0x70645000), + (0x20011e00), + (0x70090e00), + (0x105f1e00), + (0x40570e00), + (0x30335e00), + (0x603b4e00), + (0x006d5e00), + (0x50654e00)}, + {(0x3f800000), + (0x3fa80408), + (0x3f982f00), + (0x3fb02b08), + (0x3f881920), + (0x3fa01d28), + (0x3f903620), + (0x3fb83228), + (0x3f90008f), + (0x3fb80487), + (0x3f882f8f), + (0x3fa02b87), + (0x3f9819af), + (0x3fb01da7), + (0x3f8036af), + (0x3fa832a7)}, + (0xfff80000), + {0x96,0xe0,0xc6,0xef,0x7f,0x51,0x3c,0x13,0xd3,0x63, + 0x80,0x54,0xc8,0x09,0xcc,0x33,0x8e,0x9a,0x15,0x91,0x00} + }, + { + /* No.159 delta:1647 weight:1099 */ + 11213, + 91, + 19, + 1, + {(0x00000000), + (0xeffea95b), + (0x587a7fdf), + (0xb784d684), + (0xe5b009ff), + (0x0a4ea0a4), + (0xbdca7620), + (0x5234df7b), + (0x00008677), + (0xeffe2f2c), + (0x587af9a8), + (0xb78450f3), + (0xe5b08f88), + (0x0a4e26d3), + (0xbdcaf057), + (0x5234590c)}, + {(0x00000000), + (0xc3463c00), + (0x20814400), + (0xe3c77800), + (0x04036400), + (0xc7455800), + (0x24822000), + (0xe7c41c00), + (0x66201e00), + (0xa5662200), + (0x46a15a00), + (0x85e76600), + (0x62237a00), + (0xa1654600), + (0x42a23e00), + (0x81e40200)}, + {(0x3f800000), + (0x3fe1a31e), + (0x3f9040a2), + (0x3ff1e3bc), + (0x3f8201b2), + (0x3fe3a2ac), + (0x3f924110), + (0x3ff3e20e), + (0x3fb3100f), + (0x3fd2b311), + (0x3fa350ad), + (0x3fc2f3b3), + (0x3fb111bd), + (0x3fd0b2a3), + (0x3fa1511f), + (0x3fc0f201)}, + (0xfff80000), + {0x6f,0x70,0x62,0xec,0x14,0x82,0xd2,0xb9,0xc0,0x8d, + 0xdc,0xae,0x07,0x77,0xb8,0x94,0x3f,0xc9,0xfa,0xe1,0x00} + }, + { + /* No.160 delta:2967 weight:901 */ + 11213, + 53, + 18, + 1, + {(0x00000000), + (0xaa302b40), + (0x85ec337a), + (0x2fdc183a), + (0x3dd00a0a), + (0x97e0214a), + (0xb83c3970), + (0x120c1230), + (0x00008c9b), + (0xaa30a7db), + (0x85ecbfe1), + (0x2fdc94a1), + (0x3dd08691), + (0x97e0add1), + (0xb83cb5eb), + (0x120c9eab)}, + {(0x00000000), + (0x0e4c0c00), + (0x81a28000), + (0x8fee8c00), + (0x01009400), + (0x0f4c9800), + (0x80a21400), + (0x8eee1800), + (0x09031e00), + (0x074f1200), + (0x88a19e00), + (0x86ed9200), + (0x08038a00), + (0x064f8600), + (0x89a10a00), + (0x87ed0600)}, + {(0x3f800000), + (0x3f872606), + (0x3fc0d140), + (0x3fc7f746), + (0x3f80804a), + (0x3f87a64c), + (0x3fc0510a), + (0x3fc7770c), + (0x3f84818f), + (0x3f83a789), + (0x3fc450cf), + (0x3fc376c9), + (0x3f8401c5), + (0x3f8327c3), + (0x3fc4d085), + (0x3fc3f683)}, + (0xfff80000), + {0xa5,0x57,0xd6,0x41,0xd4,0x56,0x49,0x1c,0xe3,0x86, + 0x35,0xfc,0x5c,0xaf,0xd9,0xba,0x3e,0xfe,0x47,0xfa,0x00} + }, + { + /* No.161 delta:1285 weight:1009 */ + 11213, + 44, + 22, + 9, + {(0x00000000), + (0xbd887100), + (0x6d55a627), + (0xd0ddd727), + (0x18000a1d), + (0xa5887b1d), + (0x7555ac3a), + (0xc8dddd3a), + (0x0000acfa), + (0xbd88ddfa), + (0x6d550add), + (0xd0dd7bdd), + (0x1800a6e7), + (0xa588d7e7), + (0x755500c0), + (0xc8dd71c0)}, + {(0x00000000), + (0x0fe36000), + (0x0045f000), + (0x0fa69000), + (0x121a2000), + (0x1df94000), + (0x125fd000), + (0x1dbcb000), + (0x00371e00), + (0x0fd47e00), + (0x0072ee00), + (0x0f918e00), + (0x122d3e00), + (0x1dce5e00), + (0x1268ce00), + (0x1d8bae00)}, + {(0x3f800000), + (0x3f87f1b0), + (0x3f8022f8), + (0x3f87d348), + (0x3f890d10), + (0x3f8efca0), + (0x3f892fe8), + (0x3f8ede58), + (0x3f801b8f), + (0x3f87ea3f), + (0x3f803977), + (0x3f87c8c7), + (0x3f89169f), + (0x3f8ee72f), + (0x3f893467), + (0x3f8ec5d7)}, + (0xfff80000), + {0xb3,0x0a,0x52,0x2b,0xc3,0xf3,0x8a,0x0b,0x60,0xcf, + 0x50,0x81,0xc0,0x03,0x13,0x44,0x56,0xfd,0xe5,0x6c,0x00} + }, + { + /* No.162 delta:3653 weight:1321 */ + 11213, + 77, + 4, + 1, + {(0x00000000), + (0x09eb7b50), + (0x4a578b30), + (0x43bcf060), + (0xc4b00a20), + (0xcd5b7170), + (0x8ee78110), + (0x870cfa40), + (0x000030d1), + (0x09eb4b81), + (0x4a57bbe1), + (0x43bcc0b1), + (0xc4b03af1), + (0xcd5b41a1), + (0x8ee7b1c1), + (0x870cca91)}, + {(0x00000000), + (0x20630000), + (0x00492000), + (0x202a2000), + (0x400a0000), + (0x60690000), + (0x40432000), + (0x60202000), + (0xc0027e00), + (0xe0617e00), + (0xc04b5e00), + (0xe0285e00), + (0x80087e00), + (0xa06b7e00), + (0x80415e00), + (0xa0225e00)}, + {(0x3f800000), + (0x3f903180), + (0x3f802490), + (0x3f901510), + (0x3fa00500), + (0x3fb03480), + (0x3fa02190), + (0x3fb01010), + (0x3fe0013f), + (0x3ff030bf), + (0x3fe025af), + (0x3ff0142f), + (0x3fc0043f), + (0x3fd035bf), + (0x3fc020af), + (0x3fd0112f)}, + (0xfff80000), + {0xed,0x0f,0x9e,0x5d,0x4b,0x7d,0x2e,0x4f,0xf8,0xa4, + 0xba,0x23,0xdc,0x1a,0x0e,0x40,0xa9,0xff,0xbf,0xfa,0x00} + }, + { + /* No.163 delta:1515 weight:829 */ + 11213, + 59, + 16, + 13, + {(0x00000000), + (0xd192fecc), + (0x1c86d46e), + (0xcd142aa2), + (0xeb900a31), + (0x3a02f4fd), + (0xf716de5f), + (0x26842093), + (0x00009c7b), + (0xd19262b7), + (0x1c864815), + (0xcd14b6d9), + (0xeb90964a), + (0x3a026886), + (0xf7164224), + (0x2684bce8)}, + {(0x00000000), + (0xc9688000), + (0x08400200), + (0xc1288200), + (0x082d4800), + (0xc145c800), + (0x006d4a00), + (0xc905ca00), + (0x312c1e00), + (0xf8449e00), + (0x396c1c00), + (0xf0049c00), + (0x39015600), + (0xf069d600), + (0x31415400), + (0xf829d400)}, + {(0x3f800000), + (0x3fe4b440), + (0x3f842001), + (0x3fe09441), + (0x3f8416a4), + (0x3fe0a2e4), + (0x3f8036a5), + (0x3fe482e5), + (0x3f98960f), + (0x3ffc224f), + (0x3f9cb60e), + (0x3ff8024e), + (0x3f9c80ab), + (0x3ff834eb), + (0x3f98a0aa), + (0x3ffc14ea)}, + (0xfff80000), + {0xe7,0xaa,0x57,0x85,0x45,0x30,0x30,0xea,0x81,0x55, + 0x14,0xf3,0xe1,0x42,0x5a,0xfc,0x05,0x1e,0xd3,0xf0,0x00} + }, + { + /* No.164 delta:5942 weight:1403 */ + 11213, + 49, + 28, + 3, + {(0x00000000), + (0x96bbff16), + (0x0e2dd758), + (0x9896284e), + (0xb5700a46), + (0x23cbf550), + (0xbb5ddd1e), + (0x2de62208), + (0x0000f8d9), + (0x96bb07cf), + (0x0e2d2f81), + (0x9896d097), + (0xb570f29f), + (0x23cb0d89), + (0xbb5d25c7), + (0x2de6dad1)}, + {(0x00000000), + (0x44940000), + (0x03b80000), + (0x472c0000), + (0x48600000), + (0x0cf40000), + (0x4bd80000), + (0x0f4c0000), + (0x00801e00), + (0x44141e00), + (0x03381e00), + (0x47ac1e00), + (0x48e01e00), + (0x0c741e00), + (0x4b581e00), + (0x0fcc1e00)}, + {(0x3f800000), + (0x3fa24a00), + (0x3f81dc00), + (0x3fa39600), + (0x3fa43000), + (0x3f867a00), + (0x3fa5ec00), + (0x3f87a600), + (0x3f80400f), + (0x3fa20a0f), + (0x3f819c0f), + (0x3fa3d60f), + (0x3fa4700f), + (0x3f863a0f), + (0x3fa5ac0f), + (0x3f87e60f)}, + (0xfff80000), + {0x76,0xb3,0x89,0x96,0x29,0x62,0x6a,0x7b,0xe7,0x6f, + 0x4a,0x6c,0x1f,0xbf,0x96,0x66,0x8d,0x45,0x5d,0x5c,0x00} + }, + { + /* No.165 delta:1776 weight:1045 */ + 11213, + 74, + 10, + 13, + {(0x00000000), + (0x24c994e7), + (0x7e990c2c), + (0x5a5098cb), + (0xb9000a51), + (0x9dc99eb6), + (0xc799067d), + (0xe350929a), + (0x0000dbdf), + (0x24c94f38), + (0x7e99d7f3), + (0x5a504314), + (0xb900d18e), + (0x9dc94569), + (0xc799dda2), + (0xe3504945)}, + {(0x00000000), + (0x00764000), + (0x000d4000), + (0x007b0000), + (0x102e6000), + (0x10582000), + (0x10232000), + (0x10556000), + (0x10065e00), + (0x10701e00), + (0x100b1e00), + (0x107d5e00), + (0x00283e00), + (0x005e7e00), + (0x00257e00), + (0x00533e00)}, + {(0x3f800000), + (0x3f803b20), + (0x3f8006a0), + (0x3f803d80), + (0x3f881730), + (0x3f882c10), + (0x3f881190), + (0x3f882ab0), + (0x3f88032f), + (0x3f88380f), + (0x3f88058f), + (0x3f883eaf), + (0x3f80141f), + (0x3f802f3f), + (0x3f8012bf), + (0x3f80299f)}, + (0xfff80000), + {0xfb,0xa8,0xac,0x3b,0xfe,0x8d,0xcc,0xf9,0x64,0x79, + 0xa4,0xdb,0x6d,0x8f,0x8a,0x6e,0xb9,0x91,0x4e,0xb0,0x00} + }, + { + /* No.166 delta:1278 weight:1311 */ + 11213, + 38, + 18, + 10, + {(0x00000000), + (0x1aa51933), + (0x7654762b), + (0x6cf16f18), + (0x06100a69), + (0x1cb5135a), + (0x70447c42), + (0x6ae16571), + (0x0000bdcd), + (0x1aa5a4fe), + (0x7654cbe6), + (0x6cf1d2d5), + (0x0610b7a4), + (0x1cb5ae97), + (0x7044c18f), + (0x6ae1d8bc)}, + {(0x00000000), + (0x1c020c00), + (0x10065600), + (0x0c045a00), + (0xa4030000), + (0xb8010c00), + (0xb4055600), + (0xa8075a00), + (0x51205e00), + (0x4d225200), + (0x41260800), + (0x5d240400), + (0xf5235e00), + (0xe9215200), + (0xe5250800), + (0xf9270400)}, + {(0x3f800000), + (0x3f8e0106), + (0x3f88032b), + (0x3f86022d), + (0x3fd20180), + (0x3fdc0086), + (0x3fda02ab), + (0x3fd403ad), + (0x3fa8902f), + (0x3fa69129), + (0x3fa09304), + (0x3fae9202), + (0x3ffa91af), + (0x3ff490a9), + (0x3ff29284), + (0x3ffc9382)}, + (0xfff80000), + {0xe2,0x4b,0xe1,0x7f,0x94,0x30,0x00,0x2c,0x65,0x3e, + 0x59,0x45,0xfa,0x87,0x44,0x25,0xe1,0x2d,0xb7,0xdb,0x00} + }, + { + /* No.167 delta:1582 weight:743 */ + 11213, + 80, + 9, + 17, + {(0x00000000), + (0xf8f257fd), + (0x26c7fb3f), + (0xde35acc2), + (0xba900a7d), + (0x42625d80), + (0x9c57f142), + (0x64a5a6bf), + (0x00008157), + (0xf8f2d6aa), + (0x26c77a68), + (0xde352d95), + (0xba908b2a), + (0x4262dcd7), + (0x9c577015), + (0x64a527e8)}, + {(0x00000000), + (0x884f0000), + (0x11035000), + (0x994c5000), + (0x2a02a800), + (0xa24da800), + (0x3b01f800), + (0xb34ef800), + (0x10041e00), + (0x984b1e00), + (0x01074e00), + (0x89484e00), + (0x3a06b600), + (0xb249b600), + (0x2b05e600), + (0xa34ae600)}, + {(0x3f800000), + (0x3fc42780), + (0x3f8881a8), + (0x3fcca628), + (0x3f950154), + (0x3fd126d4), + (0x3f9d80fc), + (0x3fd9a77c), + (0x3f88020f), + (0x3fcc258f), + (0x3f8083a7), + (0x3fc4a427), + (0x3f9d035b), + (0x3fd924db), + (0x3f9582f3), + (0x3fd1a573)}, + (0xfff80000), + {0xad,0x7a,0xb9,0x26,0x28,0x43,0xfc,0x1a,0x71,0x9d, + 0xfe,0xb1,0x4c,0x75,0x45,0xcd,0x8d,0xf2,0x4d,0x01,0x00} + }, + { + /* No.168 delta:7619 weight:787 */ + 11213, + 59, + 26, + 1, + {(0x00000000), + (0x98e8b6d9), + (0x521f6a74), + (0xcaf7dcad), + (0x53d00a8d), + (0xcb38bc54), + (0x01cf60f9), + (0x9927d620), + (0x0000f72a), + (0x98e841f3), + (0x521f9d5e), + (0xcaf72b87), + (0x53d0fda7), + (0xcb384b7e), + (0x01cf97d3), + (0x9927210a)}, + {(0x00000000), + (0x4e200000), + (0x70542000), + (0x3e742000), + (0x13942000), + (0x5db42000), + (0x63c00000), + (0x2de00000), + (0x08001e00), + (0x46201e00), + (0x78543e00), + (0x36743e00), + (0x1b943e00), + (0x55b43e00), + (0x6bc01e00), + (0x25e01e00)}, + {(0x3f800000), + (0x3fa71000), + (0x3fb82a10), + (0x3f9f3a10), + (0x3f89ca10), + (0x3faeda10), + (0x3fb1e000), + (0x3f96f000), + (0x3f84000f), + (0x3fa3100f), + (0x3fbc2a1f), + (0x3f9b3a1f), + (0x3f8dca1f), + (0x3faada1f), + (0x3fb5e00f), + (0x3f92f00f)}, + (0xfff80000), + {0xc1,0xeb,0x15,0xa4,0x17,0x5a,0x94,0xa3,0xdd,0x5b, + 0x7e,0x69,0x12,0x88,0xd9,0x94,0x36,0x81,0x7c,0x98,0x00} + }, + { + /* No.169 delta:1710 weight:1097 */ + 11213, + 57, + 14, + 11, + {(0x00000000), + (0x5e421ddc), + (0x638787c4), + (0x3dc59a18), + (0x8e000a9d), + (0xd0421741), + (0xed878d59), + (0xb3c59085), + (0x0000840f), + (0x5e4299d3), + (0x638703cb), + (0x3dc51e17), + (0x8e008e92), + (0xd042934e), + (0xed870956), + (0xb3c5148a)}, + {(0x00000000), + (0x4a752000), + (0xd0784000), + (0x9a0d6000), + (0x004c4000), + (0x4a396000), + (0xd0340000), + (0x9a412000), + (0x00005e00), + (0x4a757e00), + (0xd0781e00), + (0x9a0d3e00), + (0x004c1e00), + (0x4a393e00), + (0xd0345e00), + (0x9a417e00)}, + {(0x3f800000), + (0x3fa53a90), + (0x3fe83c20), + (0x3fcd06b0), + (0x3f802620), + (0x3fa51cb0), + (0x3fe81a00), + (0x3fcd2090), + (0x3f80002f), + (0x3fa53abf), + (0x3fe83c0f), + (0x3fcd069f), + (0x3f80260f), + (0x3fa51c9f), + (0x3fe81a2f), + (0x3fcd20bf)}, + (0xfff80000), + {0x63,0xf7,0x0a,0xee,0x1d,0x41,0x31,0xa9,0xfd,0x48, + 0x35,0xb8,0x86,0xd8,0xf7,0x25,0x29,0x14,0xb0,0x12,0x00} + }, + { + /* No.170 delta:4372 weight:995 */ + 11213, + 28, + 7, + 15, + {(0x00000000), + (0x655fb5a5), + (0x87997101), + (0xe2c6c4a4), + (0x59f00aaa), + (0x3cafbf0f), + (0xde697bab), + (0xbb36ce0e), + (0x0000365d), + (0x655f83f8), + (0x8799475c), + (0xe2c6f2f9), + (0x59f03cf7), + (0x3caf8952), + (0xde694df6), + (0xbb36f853)}, + {(0x00000000), + (0x81898800), + (0xd202e000), + (0x538b6800), + (0x08d64000), + (0x895fc800), + (0xdad4a000), + (0x5b5d2800), + (0x004a5e00), + (0x81c3d600), + (0xd248be00), + (0x53c13600), + (0x089c1e00), + (0x89159600), + (0xda9efe00), + (0x5b177600)}, + {(0x3f800000), + (0x3fc0c4c4), + (0x3fe90170), + (0x3fa9c5b4), + (0x3f846b20), + (0x3fc4afe4), + (0x3fed6a50), + (0x3fadae94), + (0x3f80252f), + (0x3fc0e1eb), + (0x3fe9245f), + (0x3fa9e09b), + (0x3f844e0f), + (0x3fc48acb), + (0x3fed4f7f), + (0x3fad8bbb)}, + (0xfff80000), + {0x89,0xf5,0x02,0x8f,0x88,0xdf,0x79,0x2c,0xc5,0x67, + 0x1f,0x9e,0xd5,0x1b,0xd9,0x5a,0x79,0x7f,0xca,0x71,0x00} + }, + { + /* No.171 delta:3023 weight:1549 */ + 11213, + 32, + 3, + 5, + {(0x00000000), + (0x3b134609), + (0x5b97bf87), + (0x6084f98e), + (0xdbb00aba), + (0xe0a34cb3), + (0x8027b53d), + (0xbb34f334), + (0x00000ea9), + (0x3b1348a0), + (0x5b97b12e), + (0x6084f727), + (0xdbb00413), + (0xe0a3421a), + (0x8027bb94), + (0xbb34fd9d)}, + {(0x00000000), + (0x04030000), + (0x00c10000), + (0x04c20000), + (0x304a8000), + (0x34498000), + (0x308b8000), + (0x34888000), + (0x00679e00), + (0x04649e00), + (0x00a69e00), + (0x04a59e00), + (0x302d1e00), + (0x342e1e00), + (0x30ec1e00), + (0x34ef1e00)}, + {(0x3f800000), + (0x3f820180), + (0x3f806080), + (0x3f826100), + (0x3f982540), + (0x3f9a24c0), + (0x3f9845c0), + (0x3f9a4440), + (0x3f8033cf), + (0x3f82324f), + (0x3f80534f), + (0x3f8252cf), + (0x3f98168f), + (0x3f9a170f), + (0x3f98760f), + (0x3f9a778f)}, + (0xfff80000), + {0x6a,0x8d,0xed,0xda,0x5f,0x16,0x85,0xea,0xd9,0x4c, + 0x66,0x31,0xe2,0x9c,0xc6,0x66,0x6d,0x10,0xa0,0xf9,0x00} + }, + { + /* No.172 delta:892 weight:1461 */ + 11213, + 41, + 18, + 4, + {(0x00000000), + (0x51c43b00), + (0x7d71cf7d), + (0x2cb5f47d), + (0x03f00ac3), + (0x523431c3), + (0x7e81c5be), + (0x2f45febe), + (0x0000fa3d), + (0x51c4c13d), + (0x7d713540), + (0x2cb50e40), + (0x03f0f0fe), + (0x5234cbfe), + (0x7e813f83), + (0x2f450483)}, + {(0x00000000), + (0x40672000), + (0x00508c00), + (0x4037ac00), + (0x00402000), + (0x40270000), + (0x0010ac00), + (0x40778c00), + (0x0e881e00), + (0x4eef3e00), + (0x0ed89200), + (0x4ebfb200), + (0x0ec83e00), + (0x4eaf1e00), + (0x0e98b200), + (0x4eff9200)}, + {(0x3f800000), + (0x3fa03390), + (0x3f802846), + (0x3fa01bd6), + (0x3f802010), + (0x3fa01380), + (0x3f800856), + (0x3fa03bc6), + (0x3f87440f), + (0x3fa7779f), + (0x3f876c49), + (0x3fa75fd9), + (0x3f87641f), + (0x3fa7578f), + (0x3f874c59), + (0x3fa77fc9)}, + (0xfff80000), + {0xc5,0x69,0xaf,0xb6,0xea,0x60,0x78,0x16,0x94,0x3a, + 0x36,0x01,0x5a,0xe7,0x99,0xcd,0x09,0x6a,0xda,0xea,0x00} + }, + { + /* No.173 delta:1013 weight:1115 */ + 11213, + 91, + 19, + 8, + {(0x00000000), + (0xd6aede60), + (0xdfd2815a), + (0x097c5f3a), + (0xbc400ad0), + (0x6aeed4b0), + (0x63928b8a), + (0xb53c55ea), + (0x000003b3), + (0xd6aeddd3), + (0xdfd282e9), + (0x097c5c89), + (0xbc400963), + (0x6aeed703), + (0x63928839), + (0xb53c5659)}, + {(0x00000000), + (0x24590000), + (0x08c14000), + (0x2c984000), + (0x80083800), + (0xa4513800), + (0x88c97800), + (0xac907800), + (0x50c09e00), + (0x74999e00), + (0x5801de00), + (0x7c58de00), + (0xd0c8a600), + (0xf491a600), + (0xd809e600), + (0xfc50e600)}, + {(0x3f800000), + (0x3f922c80), + (0x3f8460a0), + (0x3f964c20), + (0x3fc0041c), + (0x3fd2289c), + (0x3fc464bc), + (0x3fd6483c), + (0x3fa8604f), + (0x3fba4ccf), + (0x3fac00ef), + (0x3fbe2c6f), + (0x3fe86453), + (0x3ffa48d3), + (0x3fec04f3), + (0x3ffe2873)}, + (0xfff80000), + {0x55,0x6c,0x5c,0x20,0xdd,0xbb,0xa3,0xad,0x56,0x67, + 0x8f,0xcf,0xc9,0xb4,0xc5,0x0f,0x66,0xf7,0xb5,0xcc,0x00} + }, + { + /* No.174 delta:2582 weight:887 */ + 11213, + 40, + 4, + 1, + {(0x00000000), + (0x70c0d1b0), + (0x83972550), + (0xf357f4e0), + (0xbbc00ae0), + (0xcb00db50), + (0x38572fb0), + (0x4897fe00), + (0x0000df80), + (0x70c00e30), + (0x8397fad0), + (0xf3572b60), + (0xbbc0d560), + (0xcb0004d0), + (0x3857f030), + (0x48972180)}, + {(0x00000000), + (0x00b20200), + (0x00430000), + (0x00f10200), + (0x40024000), + (0x40b04200), + (0x40414000), + (0x40f34200), + (0x6401de00), + (0x64b3dc00), + (0x6442de00), + (0x64f0dc00), + (0x24039e00), + (0x24b19c00), + (0x24409e00), + (0x24f29c00)}, + {(0x3f800000), + (0x3f805901), + (0x3f802180), + (0x3f807881), + (0x3fa00120), + (0x3fa05821), + (0x3fa020a0), + (0x3fa079a1), + (0x3fb200ef), + (0x3fb259ee), + (0x3fb2216f), + (0x3fb2786e), + (0x3f9201cf), + (0x3f9258ce), + (0x3f92204f), + (0x3f92794e)}, + (0xfff80000), + {0x4c,0x34,0x96,0xf1,0x70,0xe5,0x52,0xb1,0x4d,0x38, + 0xa6,0x34,0x26,0x09,0x5c,0x6c,0x92,0xe6,0x3e,0xcb,0x00} + }, + { + /* No.175 delta:1962 weight:1531 */ + 11213, + 11, + 19, + 4, + {(0x00000000), + (0x91291aaa), + (0xdc02bffd), + (0x4d2ba557), + (0x1fc00af5), + (0x8ee9105f), + (0xc3c2b508), + (0x52ebafa2), + (0x0000add4), + (0x9129b77e), + (0xdc021229), + (0x4d2b0883), + (0x1fc0a721), + (0x8ee9bd8b), + (0xc3c218dc), + (0x52eb0276)}, + {(0x00000000), + (0x09ff0c00), + (0x09141600), + (0x00eb1a00), + (0x7510e000), + (0x7cefec00), + (0x7c04f600), + (0x75fbfa00), + (0x05509e00), + (0x0caf9200), + (0x0c448800), + (0x05bb8400), + (0x70407e00), + (0x79bf7200), + (0x79546800), + (0x70ab6400)}, + {(0x3f800000), + (0x3f84ff86), + (0x3f848a0b), + (0x3f80758d), + (0x3fba8870), + (0x3fbe77f6), + (0x3fbe027b), + (0x3fbafdfd), + (0x3f82a84f), + (0x3f8657c9), + (0x3f862244), + (0x3f82ddc2), + (0x3fb8203f), + (0x3fbcdfb9), + (0x3fbcaa34), + (0x3fb855b2)}, + (0xfff80000), + {0x6f,0x40,0xbd,0xae,0x48,0xc1,0x7d,0x5b,0x99,0x1a, + 0x4e,0x57,0x61,0x39,0x1e,0x68,0xb1,0xf7,0xc0,0xaa,0x00} + }, + { + /* No.176 delta:2277 weight:543 */ + 11213, + 33, + 7, + 19, + {(0x00000000), + (0x8044010b), + (0x62414b11), + (0xe2054a1a), + (0xbb700b06), + (0x3b340a0d), + (0xd9314017), + (0x5975411c), + (0x000099a5), + (0x804498ae), + (0x6241d2b4), + (0xe205d3bf), + (0xbb7092a3), + (0x3b3493a8), + (0xd931d9b2), + (0x5975d8b9)}, + {(0x00000000), + (0x0c3e0800), + (0x80be4000), + (0x8c804800), + (0x00483000), + (0x0c763800), + (0x80f67000), + (0x8cc87800), + (0x00791e00), + (0x0c471600), + (0x80c75e00), + (0x8cf95600), + (0x00312e00), + (0x0c0f2600), + (0x808f6e00), + (0x8cb16600)}, + {(0x3f800000), + (0x3f861f04), + (0x3fc05f20), + (0x3fc64024), + (0x3f802418), + (0x3f863b1c), + (0x3fc07b38), + (0x3fc6643c), + (0x3f803c8f), + (0x3f86238b), + (0x3fc063af), + (0x3fc67cab), + (0x3f801897), + (0x3f860793), + (0x3fc047b7), + (0x3fc658b3)}, + (0xfff80000), + {0xfc,0x12,0x23,0x4e,0x03,0xa3,0xf6,0xfd,0x28,0xb5, + 0xf1,0x0e,0x0a,0x5d,0xed,0x4a,0xd6,0x0c,0xfa,0x9a,0x00} + }, + { + /* No.177 delta:1331 weight:1179 */ + 11213, + 60, + 21, + 4, + {(0x00000000), + (0x8e46be68), + (0x9cb3a5d7), + (0x12f51bbf), + (0x3e600b12), + (0xb026b57a), + (0xa2d3aec5), + (0x2c9510ad), + (0x0000942c), + (0x8e462a44), + (0x9cb331fb), + (0x12f58f93), + (0x3e609f3e), + (0xb0262156), + (0xa2d33ae9), + (0x2c958481)}, + {(0x00000000), + (0x0940a800), + (0x388c9000), + (0x31cc3800), + (0x00608000), + (0x09202800), + (0x38ec1000), + (0x31acb800), + (0x005c7e00), + (0x091cd600), + (0x38d0ee00), + (0x31904600), + (0x003cfe00), + (0x097c5600), + (0x38b06e00), + (0x31f0c600)}, + {(0x3f800000), + (0x3f84a054), + (0x3f9c4648), + (0x3f98e61c), + (0x3f803040), + (0x3f849014), + (0x3f9c7608), + (0x3f98d65c), + (0x3f802e3f), + (0x3f848e6b), + (0x3f9c6877), + (0x3f98c823), + (0x3f801e7f), + (0x3f84be2b), + (0x3f9c5837), + (0x3f98f863)}, + (0xfff80000), + {0x71,0x3a,0xb0,0x71,0xe1,0x95,0x3c,0xba,0x23,0x00, + 0x7a,0xc6,0x93,0x4a,0xb7,0xb8,0xeb,0x00,0x24,0x8e,0x00} + }, + { + /* No.178 delta:3213 weight:657 */ + 11213, + 46, + 22, + 1, + {(0x00000000), + (0x53fdf1b0), + (0x32502578), + (0x61add4c8), + (0x46c00b28), + (0x153dfa98), + (0x74902e50), + (0x276ddfe0), + (0x00006d70), + (0x53fd9cc0), + (0x32504808), + (0x61adb9b8), + (0x46c06658), + (0x153d97e8), + (0x74904320), + (0x276db290)}, + {(0x00000000), + (0x44633a00), + (0x44038600), + (0x0060bc00), + (0x1819c200), + (0x5c7af800), + (0x5c1a4400), + (0x18797e00), + (0x21eade00), + (0x6589e400), + (0x65e95800), + (0x218a6200), + (0x39f31c00), + (0x7d902600), + (0x7df09a00), + (0x3993a000)}, + {(0x3f800000), + (0x3fa2319d), + (0x3fa201c3), + (0x3f80305e), + (0x3f8c0ce1), + (0x3fae3d7c), + (0x3fae0d22), + (0x3f8c3cbf), + (0x3f90f56f), + (0x3fb2c4f2), + (0x3fb2f4ac), + (0x3f90c531), + (0x3f9cf98e), + (0x3fbec813), + (0x3fbef84d), + (0x3f9cc9d0)}, + (0xfff80000), + {0x92,0xb2,0x66,0x1e,0x08,0xb8,0x0b,0x02,0x41,0xdc, + 0x45,0x04,0x59,0x65,0x0b,0x55,0x82,0x05,0xeb,0x6d,0x00} + }, + { + /* No.179 delta:4972 weight:1077 */ + 11213, + 16, + 7, + 11, + {(0x00000000), + (0xcf8962a9), + (0xb6d797a1), + (0x795ef508), + (0xfbb00b36), + (0x3439699f), + (0x4d679c97), + (0x82eefe3e), + (0x0000d59e), + (0xcf89b737), + (0xb6d7423f), + (0x795e2096), + (0xfbb0dea8), + (0x3439bc01), + (0x4d674909), + (0x82ee2ba0)}, + {(0x00000000), + (0x01000000), + (0x08000000), + (0x09000000), + (0x41800000), + (0x40800000), + (0x49800000), + (0x48800000), + (0x06801e00), + (0x07801e00), + (0x0e801e00), + (0x0f801e00), + (0x47001e00), + (0x46001e00), + (0x4f001e00), + (0x4e001e00)}, + {(0x3f800000), + (0x3f808000), + (0x3f840000), + (0x3f848000), + (0x3fa0c000), + (0x3fa04000), + (0x3fa4c000), + (0x3fa44000), + (0x3f83400f), + (0x3f83c00f), + (0x3f87400f), + (0x3f87c00f), + (0x3fa3800f), + (0x3fa3000f), + (0x3fa7800f), + (0x3fa7000f)}, + (0xfff80000), + {0x55,0xe1,0xc9,0x26,0x74,0x2c,0xed,0x5c,0x7b,0x89, + 0xe7,0x1d,0x6f,0x5d,0x02,0xe5,0x4a,0x19,0x8c,0x04,0x00} + }, + { + /* No.180 delta:2285 weight:1529 */ + 11213, + 16, + 5, + 9, + {(0x00000000), + (0x5766ef3b), + (0xaca2499c), + (0xfbc4a6a7), + (0x63800b4f), + (0x34e6e474), + (0xcf2242d3), + (0x9844ade8), + (0x0000a19a), + (0x57664ea1), + (0xaca2e806), + (0xfbc4073d), + (0x6380aad5), + (0x34e645ee), + (0xcf22e349), + (0x98440c72)}, + {(0x00000000), + (0x1901c200), + (0x88118000), + (0x91104200), + (0x02ef8000), + (0x1bee4200), + (0x8afe0000), + (0x93ffc200), + (0x3087be00), + (0x29867c00), + (0xb8963e00), + (0xa197fc00), + (0x32683e00), + (0x2b69fc00), + (0xba79be00), + (0xa3787c00)}, + {(0x3f800000), + (0x3f8c80e1), + (0x3fc408c0), + (0x3fc88821), + (0x3f8177c0), + (0x3f8df721), + (0x3fc57f00), + (0x3fc9ffe1), + (0x3f9843df), + (0x3f94c33e), + (0x3fdc4b1f), + (0x3fd0cbfe), + (0x3f99341f), + (0x3f95b4fe), + (0x3fdd3cdf), + (0x3fd1bc3e)}, + (0xfff80000), + {0x4b,0xb0,0xb5,0xae,0x6b,0x5e,0xea,0x44,0x3b,0xd2, + 0xcf,0xf3,0x8a,0x8d,0xff,0x98,0xeb,0xce,0xa2,0x22,0x00} + }, + { + /* No.181 delta:1320 weight:1461 */ + 11213, + 52, + 21, + 2, + {(0x00000000), + (0x2f3716e3), + (0x0af6f7a8), + (0x25c1e14b), + (0x67900b5a), + (0x48a71db9), + (0x6d66fcf2), + (0x4251ea11), + (0x0000adb5), + (0x2f37bb56), + (0x0af65a1d), + (0x25c14cfe), + (0x6790a6ef), + (0x48a7b00c), + (0x6d665147), + (0x425147a4)}, + {(0x00000000), + (0xc0295e00), + (0x1040c000), + (0xd0699e00), + (0x20fc7200), + (0xe0d52c00), + (0x30bcb200), + (0xf095ec00), + (0x10a2fe00), + (0xd08ba000), + (0x00e23e00), + (0xc0cb6000), + (0x305e8c00), + (0xf077d200), + (0x201e4c00), + (0xe0371200)}, + {(0x3f800000), + (0x3fe014af), + (0x3f882060), + (0x3fe834cf), + (0x3f907e39), + (0x3ff06a96), + (0x3f985e59), + (0x3ff84af6), + (0x3f88517f), + (0x3fe845d0), + (0x3f80711f), + (0x3fe065b0), + (0x3f982f46), + (0x3ff83be9), + (0x3f900f26), + (0x3ff01b89)}, + (0xfff80000), + {0xf7,0x30,0xe4,0xa1,0xb6,0x2c,0xff,0x05,0x23,0x13, + 0xd1,0x56,0xd7,0x7a,0x22,0x24,0xae,0xf7,0x34,0x52,0x00} + }, + { + /* No.182 delta:789 weight:1509 */ + 11213, + 74, + 16, + 6, + {(0x00000000), + (0xe416060b), + (0xd6bfa624), + (0x32a9a02f), + (0x56500b61), + (0xb2460d6a), + (0x80efad45), + (0x64f9ab4e), + (0x0000ce80), + (0xe416c88b), + (0xd6bf68a4), + (0x32a96eaf), + (0x5650c5e1), + (0xb246c3ea), + (0x80ef63c5), + (0x64f965ce)}, + {(0x00000000), + (0x804c0800), + (0x107ad000), + (0x9036d800), + (0x0055c400), + (0x8019cc00), + (0x102f1400), + (0x90631c00), + (0x00033e00), + (0x804f3600), + (0x1079ee00), + (0x9035e600), + (0x0056fa00), + (0x801af200), + (0x102c2a00), + (0x90602200)}, + {(0x3f800000), + (0x3fc02604), + (0x3f883d68), + (0x3fc81b6c), + (0x3f802ae2), + (0x3fc00ce6), + (0x3f88178a), + (0x3fc8318e), + (0x3f80019f), + (0x3fc0279b), + (0x3f883cf7), + (0x3fc81af3), + (0x3f802b7d), + (0x3fc00d79), + (0x3f881615), + (0x3fc83011)}, + (0xfff80000), + {0xa2,0xea,0x48,0x1e,0xb3,0x8f,0x99,0x75,0xba,0x12, + 0x9c,0xbf,0xf3,0xa0,0xb8,0x5d,0xc8,0x38,0xc4,0x74,0x00} + }, + { + /* No.183 delta:1268 weight:1109 */ + 11213, + 42, + 13, + 11, + {(0x00000000), + (0xf7ba01fd), + (0xaa8773ac), + (0x5d3d7251), + (0xa5b00b7d), + (0x520a0a80), + (0x0f3778d1), + (0xf88d792c), + (0x0000aaa0), + (0xf7baab5d), + (0xaa87d90c), + (0x5d3dd8f1), + (0xa5b0a1dd), + (0x520aa020), + (0x0f37d271), + (0xf88dd38c)}, + {(0x00000000), + (0x92abc000), + (0x00443800), + (0x92eff800), + (0x00c12000), + (0x926ae000), + (0x00851800), + (0x922ed800), + (0x02a3be00), + (0x90087e00), + (0x02e78600), + (0x904c4600), + (0x02629e00), + (0x90c95e00), + (0x0226a600), + (0x908d6600)}, + {(0x3f800000), + (0x3fc955e0), + (0x3f80221c), + (0x3fc977fc), + (0x3f806090), + (0x3fc93570), + (0x3f80428c), + (0x3fc9176c), + (0x3f8151df), + (0x3fc8043f), + (0x3f8173c3), + (0x3fc82623), + (0x3f81314f), + (0x3fc864af), + (0x3f811353), + (0x3fc846b3)}, + (0xfff80000), + {0xb0,0x87,0xce,0x22,0xcb,0xa4,0x10,0xdc,0xdb,0x3e, + 0x3c,0x67,0xae,0x3f,0xc0,0x11,0xf3,0xec,0xe2,0x06,0x00} + }, + { + /* No.184 delta:1092 weight:1295 */ + 11213, + 91, + 17, + 8, + {(0x00000000), + (0x2fa2608e), + (0x8f680761), + (0xa0ca67ef), + (0x13a00b8a), + (0x3c026b04), + (0x9cc80ceb), + (0xb36a6c65), + (0x00007f70), + (0x2fa21ffe), + (0x8f687811), + (0xa0ca189f), + (0x13a074fa), + (0x3c021474), + (0x9cc8739b), + (0xb36a1315)}, + {(0x00000000), + (0x089d6000), + (0x1a00e200), + (0x129d8200), + (0x40df4000), + (0x48422000), + (0x5adfa200), + (0x5242c200), + (0x01a6de00), + (0x093bbe00), + (0x1ba63c00), + (0x133b5c00), + (0x41799e00), + (0x49e4fe00), + (0x5b797c00), + (0x53e41c00)}, + {(0x3f800000), + (0x3f844eb0), + (0x3f8d0071), + (0x3f894ec1), + (0x3fa06fa0), + (0x3fa42110), + (0x3fad6fd1), + (0x3fa92161), + (0x3f80d36f), + (0x3f849ddf), + (0x3f8dd31e), + (0x3f899dae), + (0x3fa0bccf), + (0x3fa4f27f), + (0x3fadbcbe), + (0x3fa9f20e)}, + (0xfff80000), + {0xbd,0xb1,0x02,0x3f,0x46,0x65,0xe7,0x62,0xbf,0x9e, + 0x12,0xaa,0x33,0xbe,0x0c,0x5d,0x89,0x02,0x2c,0x11,0x00} + }, + { + /* No.185 delta:8146 weight:1071 */ + 11213, + 66, + 28, + 1, + {(0x00000000), + (0xc3e3a60c), + (0x80c000cd), + (0x4323a6c1), + (0xda800b97), + (0x1963ad9b), + (0x5a400b5a), + (0x99a3ad56), + (0x000058ad), + (0xc3e3fea1), + (0x80c05860), + (0x4323fe6c), + (0xda80533a), + (0x1963f536), + (0x5a4053f7), + (0x99a3f5fb)}, + {(0x00000000), + (0x89d10a00), + (0x403c0200), + (0xc9ed0800), + (0x53520000), + (0xda830a00), + (0x136e0200), + (0x9abf0800), + (0x61609e00), + (0xe8b19400), + (0x215c9c00), + (0xa88d9600), + (0x32329e00), + (0xbbe39400), + (0x720e9c00), + (0xfbdf9600)}, + {(0x3f800000), + (0x3fc4e885), + (0x3fa01e01), + (0x3fe4f684), + (0x3fa9a900), + (0x3fed4185), + (0x3f89b701), + (0x3fcd5f84), + (0x3fb0b04f), + (0x3ff458ca), + (0x3f90ae4e), + (0x3fd446cb), + (0x3f99194f), + (0x3fddf1ca), + (0x3fb9074e), + (0x3ffdefcb)}, + (0xfff80000), + {0xf7,0x3c,0x9c,0x40,0x28,0xb5,0xbe,0xbf,0x2e,0x97, + 0xa1,0x61,0x3b,0x82,0x2a,0x82,0x3c,0xa0,0xf4,0x90,0x00} + }, + { + /* No.186 delta:2697 weight:1957 */ + 11213, + 43, + 3, + 3, + {(0x00000000), + (0x7a0a48fc), + (0x29a53edd), + (0x53af7621), + (0x08f00ba0), + (0x72fa435c), + (0x2155357d), + (0x5b5f7d81), + (0x0000132f), + (0x7a0a5bd3), + (0x29a52df2), + (0x53af650e), + (0x08f0188f), + (0x72fa5073), + (0x21552652), + (0x5b5f6eae)}, + {(0x00000000), + (0xa2021000), + (0x1c21a000), + (0xbe23b000), + (0x00408000), + (0xa2429000), + (0x1c612000), + (0xbe633000), + (0x40201e00), + (0xe2220e00), + (0x5c01be00), + (0xfe03ae00), + (0x40609e00), + (0xe2628e00), + (0x5c413e00), + (0xfe432e00)}, + {(0x3f800000), + (0x3fd10108), + (0x3f8e10d0), + (0x3fdf11d8), + (0x3f802040), + (0x3fd12148), + (0x3f8e3090), + (0x3fdf3198), + (0x3fa0100f), + (0x3ff11107), + (0x3fae00df), + (0x3fff01d7), + (0x3fa0304f), + (0x3ff13147), + (0x3fae209f), + (0x3fff2197)}, + (0xfff80000), + {0x1a,0x79,0x8f,0xb2,0xec,0xc2,0xee,0xfc,0x66,0xa6, + 0x37,0x12,0x4d,0x78,0x6e,0xa1,0xb0,0x60,0x86,0x37,0x00} + }, + { + /* No.187 delta:2420 weight:1355 */ + 11213, + 28, + 24, + 3, + {(0x00000000), + (0x9580742c), + (0xce45a063), + (0x5bc5d44f), + (0x33f00bbf), + (0xa6707f93), + (0xfdb5abdc), + (0x6835dff0), + (0x000009ba), + (0x95807d96), + (0xce45a9d9), + (0x5bc5ddf5), + (0x33f00205), + (0xa6707629), + (0xfdb5a266), + (0x6835d64a)}, + {(0x00000000), + (0x40bf0200), + (0x00440200), + (0x40fb0000), + (0x3411d000), + (0x74aed200), + (0x3455d200), + (0x74ead000), + (0x9082de00), + (0xd03ddc00), + (0x90c6dc00), + (0xd079de00), + (0xa4930e00), + (0xe42c0c00), + (0xa4d70c00), + (0xe4680e00)}, + {(0x3f800000), + (0x3fa05f81), + (0x3f802201), + (0x3fa07d80), + (0x3f9a08e8), + (0x3fba5769), + (0x3f9a2ae9), + (0x3fba7568), + (0x3fc8416f), + (0x3fe81eee), + (0x3fc8636e), + (0x3fe83cef), + (0x3fd24987), + (0x3ff21606), + (0x3fd26b86), + (0x3ff23407)}, + (0xfff80000), + {0x20,0xe4,0x7d,0x6c,0xc4,0xf9,0x2b,0x4a,0x56,0x18, + 0x64,0xa0,0x86,0x2c,0x45,0x4a,0x42,0x3a,0x22,0x49,0x00} + }, + { + /* No.188 delta:1841 weight:735 */ + 11213, + 62, + 10, + 18, + {(0x00000000), + (0x179a1ef2), + (0x535f148e), + (0x44c50a7c), + (0x33700bc3), + (0x24ea1531), + (0x602f1f4d), + (0x77b501bf), + (0x0000df3e), + (0x179ac1cc), + (0x535fcbb0), + (0x44c5d542), + (0x3370d4fd), + (0x24eaca0f), + (0x602fc073), + (0x77b5de81)}, + {(0x00000000), + (0x30b90000), + (0x083c0000), + (0x38850000), + (0x40070000), + (0x70be0000), + (0x483b0000), + (0x78820000), + (0x10651e00), + (0x20dc1e00), + (0x18591e00), + (0x28e01e00), + (0x50621e00), + (0x60db1e00), + (0x585e1e00), + (0x68e71e00)}, + {(0x3f800000), + (0x3f985c80), + (0x3f841e00), + (0x3f9c4280), + (0x3fa00380), + (0x3fb85f00), + (0x3fa41d80), + (0x3fbc4100), + (0x3f88328f), + (0x3f906e0f), + (0x3f8c2c8f), + (0x3f94700f), + (0x3fa8310f), + (0x3fb06d8f), + (0x3fac2f0f), + (0x3fb4738f)}, + (0xfff80000), + {0x09,0x19,0x78,0xe9,0x81,0xea,0xdf,0x95,0x46,0x6b, + 0x4f,0xa1,0xca,0x2b,0xbc,0x8a,0x0b,0xaa,0x44,0xb8,0x00} + }, + { + /* No.189 delta:3318 weight:1469 */ + 11213, + 81, + 3, + 7, + {(0x00000000), + (0xfe728280), + (0xcc048331), + (0x327601b1), + (0x42200bd8), + (0xbc528958), + (0x8e2488e9), + (0x70560a69), + (0x0000d1a0), + (0xfe725320), + (0xcc045291), + (0x3276d011), + (0x4220da78), + (0xbc5258f8), + (0x8e245949), + (0x7056dbc9)}, + {(0x00000000), + (0x12010000), + (0x53002000), + (0x41012000), + (0x20414000), + (0x32404000), + (0x73416000), + (0x61406000), + (0x20321e00), + (0x32331e00), + (0x73323e00), + (0x61333e00), + (0x00735e00), + (0x12725e00), + (0x53737e00), + (0x41727e00)}, + {(0x3f800000), + (0x3f890080), + (0x3fa98010), + (0x3fa08090), + (0x3f9020a0), + (0x3f992020), + (0x3fb9a0b0), + (0x3fb0a030), + (0x3f90190f), + (0x3f99198f), + (0x3fb9991f), + (0x3fb0999f), + (0x3f8039af), + (0x3f89392f), + (0x3fa9b9bf), + (0x3fa0b93f)}, + (0xfff80000), + {0x0f,0xe8,0x93,0xf4,0x0e,0x7e,0xaf,0xe0,0x5d,0x20, + 0x58,0x92,0x06,0x7d,0x5b,0x05,0x6b,0x8a,0x33,0xbb,0x00} + }, + { + /* No.190 delta:1194 weight:821 */ + 11213, + 72, + 11, + 16, + {(0x00000000), + (0x44a385c2), + (0xca99870f), + (0x8e3a02cd), + (0x06c00be8), + (0x42638e2a), + (0xcc598ce7), + (0x88fa0925), + (0x00007bbf), + (0x44a3fe7d), + (0xca99fcb0), + (0x8e3a7972), + (0x06c07057), + (0x4263f595), + (0xcc59f758), + (0x88fa729a)}, + {(0x00000000), + (0x00527800), + (0x302f0400), + (0x307d7c00), + (0x20017000), + (0x20530800), + (0x102e7400), + (0x107c0c00), + (0x10429e00), + (0x1010e600), + (0x206d9a00), + (0x203fe200), + (0x3043ee00), + (0x30119600), + (0x006cea00), + (0x003e9200)}, + {(0x3f800000), + (0x3f80293c), + (0x3f981782), + (0x3f983ebe), + (0x3f9000b8), + (0x3f902984), + (0x3f88173a), + (0x3f883e06), + (0x3f88214f), + (0x3f880873), + (0x3f9036cd), + (0x3f901ff1), + (0x3f9821f7), + (0x3f9808cb), + (0x3f803675), + (0x3f801f49)}, + (0xfff80000), + {0xba,0xb7,0xd5,0xc8,0xec,0x6d,0xc1,0x0c,0x19,0x38, + 0x0f,0x27,0x93,0x3b,0xd8,0x74,0xa1,0x4e,0x45,0x89,0x00} + }, + { + /* No.191 delta:1166 weight:1045 */ + 11213, + 40, + 11, + 9, + {(0x00000000), + (0x212f4af4), + (0xf0432caf), + (0xd16c665b), + (0x11d00bf5), + (0x30ff4101), + (0xe193275a), + (0xc0bc6dae), + (0x0000755f), + (0x212f3fab), + (0xf04359f0), + (0xd16c1304), + (0x11d07eaa), + (0x30ff345e), + (0xe1935205), + (0xc0bc18f1)}, + {(0x00000000), + (0x08528000), + (0x70084000), + (0x785ac000), + (0x00196000), + (0x084be000), + (0x70112000), + (0x7843a000), + (0x0024fe00), + (0x08767e00), + (0x702cbe00), + (0x787e3e00), + (0x003d9e00), + (0x086f1e00), + (0x7035de00), + (0x78675e00)}, + {(0x3f800000), + (0x3f842940), + (0x3fb80420), + (0x3fbc2d60), + (0x3f800cb0), + (0x3f8425f0), + (0x3fb80890), + (0x3fbc21d0), + (0x3f80127f), + (0x3f843b3f), + (0x3fb8165f), + (0x3fbc3f1f), + (0x3f801ecf), + (0x3f84378f), + (0x3fb81aef), + (0x3fbc33af)}, + (0xfff80000), + {0xbf,0xbb,0x3f,0x17,0x6e,0x1a,0x3b,0x45,0x9b,0x2a, + 0x22,0x6a,0xf9,0xf5,0xba,0x97,0x3b,0x8a,0xec,0xd6,0x00} + }, + { + /* No.192 delta:4742 weight:1471 */ + 11213, + 27, + 4, + 6, + {(0x00000000), + (0x7fe173b6), + (0x51169f27), + (0x2ef7ec91), + (0x0a300c00), + (0x75d17fb6), + (0x5b269327), + (0x24c7e091), + (0x00001d00), + (0x7fe16eb6), + (0x51168227), + (0x2ef7f191), + (0x0a301100), + (0x75d162b6), + (0x5b268e27), + (0x24c7fd91)}, + {(0x00000000), + (0x41420000), + (0x00010000), + (0x41430000), + (0x29040000), + (0x68460000), + (0x29050000), + (0x68470000), + (0x00009e00), + (0x41429e00), + (0x00019e00), + (0x41439e00), + (0x29049e00), + (0x68469e00), + (0x29059e00), + (0x68479e00)}, + {(0x3f800000), + (0x3fa0a100), + (0x3f800080), + (0x3fa0a180), + (0x3f948200), + (0x3fb42300), + (0x3f948280), + (0x3fb42380), + (0x3f80004f), + (0x3fa0a14f), + (0x3f8000cf), + (0x3fa0a1cf), + (0x3f94824f), + (0x3fb4234f), + (0x3f9482cf), + (0x3fb423cf)}, + (0xfff80000), + {0xb4,0x7f,0x09,0x23,0xa8,0x3f,0x5e,0x9d,0x3e,0x97, + 0x19,0x94,0x35,0x0d,0xdb,0x3e,0xb7,0x43,0x15,0xd0,0x00} + }, + { + /* No.193 delta:3962 weight:1171 */ + 11213, + 92, + 2, + 13, + {(0x00000000), + (0x76b1ced9), + (0x928504d8), + (0xe434ca01), + (0x7b300c1a), + (0x0d81c2c3), + (0xe9b508c2), + (0x9f04c61b), + (0x0000b2d9), + (0x76b17c00), + (0x9285b601), + (0xe43478d8), + (0x7b30bec3), + (0x0d81701a), + (0xe9b5ba1b), + (0x9f0474c2)}, + {(0x00000000), + (0x08400000), + (0x06400000), + (0x0e000000), + (0x01200000), + (0x09600000), + (0x07600000), + (0x0f200000), + (0x04c01e00), + (0x0c801e00), + (0x02801e00), + (0x0ac01e00), + (0x05e01e00), + (0x0da01e00), + (0x03a01e00), + (0x0be01e00)}, + {(0x3f800000), + (0x3f842000), + (0x3f832000), + (0x3f870000), + (0x3f809000), + (0x3f84b000), + (0x3f83b000), + (0x3f879000), + (0x3f82600f), + (0x3f86400f), + (0x3f81400f), + (0x3f85600f), + (0x3f82f00f), + (0x3f86d00f), + (0x3f81d00f), + (0x3f85f00f)}, + (0xfff80000), + {0xdf,0x8e,0xab,0x00,0xdb,0xdc,0xe0,0x7a,0xb0,0x4c, + 0x05,0x23,0x25,0x58,0x15,0xac,0x74,0x97,0x22,0x21,0x00} + }, + { + /* No.194 delta:2215 weight:1499 */ + 11213, + 63, + 26, + 4, + {(0x00000000), + (0xad5d413b), + (0x166ef61d), + (0xbb33b726), + (0x9e000c20), + (0x335d4d1b), + (0x886efa3d), + (0x2533bb06), + (0x000077be), + (0xad5d3685), + (0x166e81a3), + (0xbb33c098), + (0x9e007b9e), + (0x335d3aa5), + (0x886e8d83), + (0x2533ccb8)}, + {(0x00000000), + (0x10720800), + (0x60810000), + (0x70f30800), + (0x300c0000), + (0x207e0800), + (0x508d0000), + (0x40ff0800), + (0x20023e00), + (0x30703600), + (0x40833e00), + (0x50f13600), + (0x100e3e00), + (0x007c3600), + (0x708f3e00), + (0x60fd3600)}, + {(0x3f800000), + (0x3f883904), + (0x3fb04080), + (0x3fb87984), + (0x3f980600), + (0x3f903f04), + (0x3fa84680), + (0x3fa07f84), + (0x3f90011f), + (0x3f98381b), + (0x3fa0419f), + (0x3fa8789b), + (0x3f88071f), + (0x3f803e1b), + (0x3fb8479f), + (0x3fb07e9b)}, + (0xfff80000), + {0x31,0xb8,0x64,0x9a,0xae,0xad,0xc8,0xf8,0x53,0x9b, + 0x64,0x2d,0x8c,0xb0,0xd2,0xa7,0x8e,0x2e,0xb2,0xc8,0x00} + }, + { + /* No.195 delta:1215 weight:463 */ + 11213, + 60, + 13, + 19, + {(0x00000000), + (0x60520e47), + (0xae8c1b90), + (0xcede15d7), + (0xc1c00c35), + (0xa1920272), + (0x6f4c17a5), + (0x0f1e19e2), + (0x0000fd60), + (0x6052f327), + (0xae8ce6f0), + (0xcedee8b7), + (0xc1c0f155), + (0xa192ff12), + (0x6f4ceac5), + (0x0f1ee482)}, + {(0x00000000), + (0x02e00000), + (0x10cd1200), + (0x122d1200), + (0x14101800), + (0x16f01800), + (0x04dd0a00), + (0x063d0a00), + (0x0057be00), + (0x02b7be00), + (0x109aac00), + (0x127aac00), + (0x1447a600), + (0x16a7a600), + (0x048ab400), + (0x066ab400)}, + {(0x3f800000), + (0x3f817000), + (0x3f886689), + (0x3f891689), + (0x3f8a080c), + (0x3f8b780c), + (0x3f826e85), + (0x3f831e85), + (0x3f802bdf), + (0x3f815bdf), + (0x3f884d56), + (0x3f893d56), + (0x3f8a23d3), + (0x3f8b53d3), + (0x3f82455a), + (0x3f83355a)}, + (0xfff80000), + {0x67,0xca,0xf4,0x9a,0x13,0x78,0x64,0xbc,0x60,0x6d, + 0x5b,0x5f,0x48,0x61,0x94,0x6f,0xdf,0x81,0x2c,0xe1,0x00} + }, + { + /* No.196 delta:939 weight:857 */ + 11213, + 51, + 11, + 2, + {(0x00000000), + (0xa61e8990), + (0x67d50999), + (0xc1cb8009), + (0xa3f00c49), + (0x05ee85d9), + (0xc42505d0), + (0x623b8c40), + (0x00000381), + (0xa61e8a11), + (0x67d50a18), + (0xc1cb8388), + (0xa3f00fc8), + (0x05ee8658), + (0xc4250651), + (0x623b8fc1)}, + {(0x00000000), + (0x08105000), + (0x0002b000), + (0x0812e000), + (0x90084c00), + (0x98181c00), + (0x900afc00), + (0x981aac00), + (0x01007e00), + (0x09102e00), + (0x0102ce00), + (0x09129e00), + (0x91083200), + (0x99186200), + (0x910a8200), + (0x991ad200)}, + {(0x3f800000), + (0x3f840828), + (0x3f800158), + (0x3f840970), + (0x3fc80426), + (0x3fcc0c0e), + (0x3fc8057e), + (0x3fcc0d56), + (0x3f80803f), + (0x3f848817), + (0x3f808167), + (0x3f84894f), + (0x3fc88419), + (0x3fcc8c31), + (0x3fc88541), + (0x3fcc8d69)}, + (0xfff80000), + {0x2c,0x79,0x20,0x40,0xe3,0x10,0xb7,0x11,0xcb,0xf4, + 0xba,0x4e,0xee,0x8b,0x5f,0x86,0xa9,0xdb,0x06,0x27,0x00} + }, + { + /* No.197 delta:1583 weight:1233 */ + 11213, + 26, + 20, + 8, + {(0x00000000), + (0x33fe7f24), + (0x88809fc9), + (0xbb7ee0ed), + (0x68600c55), + (0x5b9e7371), + (0xe0e0939c), + (0xd31eecb8), + (0x0000a12e), + (0x33fede0a), + (0x88803ee7), + (0xbb7e41c3), + (0x6860ad7b), + (0x5b9ed25f), + (0xe0e032b2), + (0xd31e4d96)}, + {(0x00000000), + (0x08750800), + (0x82099800), + (0x8a7c9000), + (0x40e2b000), + (0x4897b800), + (0xc2eb2800), + (0xca9e2000), + (0x004a5e00), + (0x083f5600), + (0x8243c600), + (0x8a36ce00), + (0x40a8ee00), + (0x48dde600), + (0xc2a17600), + (0xcad47e00)}, + {(0x3f800000), + (0x3f843a84), + (0x3fc104cc), + (0x3fc53e48), + (0x3fa07158), + (0x3fa44bdc), + (0x3fe17594), + (0x3fe54f10), + (0x3f80252f), + (0x3f841fab), + (0x3fc121e3), + (0x3fc51b67), + (0x3fa05477), + (0x3fa46ef3), + (0x3fe150bb), + (0x3fe56a3f)}, + (0xfff80000), + {0xb0,0x71,0x91,0x64,0xda,0x74,0xb8,0xc6,0x16,0x8c, + 0x5a,0x7e,0x26,0xea,0x75,0x3a,0x0b,0xa4,0xd9,0x97,0x00} + }, + { + /* No.198 delta:1565 weight:813 */ + 11213, + 89, + 7, + 10, + {(0x00000000), + (0x98a83f1e), + (0xcb779281), + (0x53dfad9f), + (0x20400c6a), + (0xb8e83374), + (0xeb379eeb), + (0x739fa1f5), + (0x000092fc), + (0x98a8ade2), + (0xcb77007d), + (0x53df3f63), + (0x20409e96), + (0xb8e8a188), + (0xeb370c17), + (0x739f3309)}, + {(0x00000000), + (0x467a0c00), + (0x04059800), + (0x427f9400), + (0x01093800), + (0x47733400), + (0x050ca000), + (0x4376ac00), + (0xc0e0fe00), + (0x869af200), + (0xc4e56600), + (0x829f6a00), + (0xc1e9c600), + (0x8793ca00), + (0xc5ec5e00), + (0x83965200)}, + {(0x3f800000), + (0x3fa33d06), + (0x3f8202cc), + (0x3fa13fca), + (0x3f80849c), + (0x3fa3b99a), + (0x3f828650), + (0x3fa1bb56), + (0x3fe0707f), + (0x3fc34d79), + (0x3fe272b3), + (0x3fc14fb5), + (0x3fe0f4e3), + (0x3fc3c9e5), + (0x3fe2f62f), + (0x3fc1cb29)}, + (0xfff80000), + {0x32,0x19,0xd6,0x71,0xe2,0x9d,0xf7,0x99,0x34,0xa0, + 0x5f,0x9a,0xcd,0x9f,0x42,0x5a,0x43,0x47,0xee,0xb2,0x00} + }, + { + /* No.199 delta:3921 weight:921 */ + 11213, + 49, + 3, + 15, + {(0x00000000), + (0xbb75ffa8), + (0xa0b33e2a), + (0x1bc6c182), + (0x9a200c78), + (0x2155f3d0), + (0x3a933252), + (0x81e6cdfa), + (0x000015a3), + (0xbb75ea0b), + (0xa0b32b89), + (0x1bc6d421), + (0x9a2019db), + (0x2155e673), + (0x3a9327f1), + (0x81e6d859)}, + {(0x00000000), + (0x45540800), + (0x07840400), + (0x42d00c00), + (0x08200000), + (0x4d740800), + (0x0fa40400), + (0x4af00c00), + (0x02201e00), + (0x47741600), + (0x05a41a00), + (0x40f01200), + (0x0a001e00), + (0x4f541600), + (0x0d841a00), + (0x48d01200)}, + {(0x3f800000), + (0x3fa2aa04), + (0x3f83c202), + (0x3fa16806), + (0x3f841000), + (0x3fa6ba04), + (0x3f87d202), + (0x3fa57806), + (0x3f81100f), + (0x3fa3ba0b), + (0x3f82d20d), + (0x3fa07809), + (0x3f85000f), + (0x3fa7aa0b), + (0x3f86c20d), + (0x3fa46809)}, + (0xfff80000), + {0x86,0x1e,0x5b,0xa8,0x8e,0x65,0x6f,0xc0,0xbc,0x92, + 0x81,0x1c,0x6d,0xbd,0x0f,0xd4,0x7e,0x57,0x5f,0x75,0x00} + } +}; + +#endif + + diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal.h new file mode 100644 index 0000000000000000000000000000000000000000..e3c91001032acf253959df8b8a5464d038ee252b --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal.h @@ -0,0 +1,840 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_NORMAL_H_) +#define CURAND_NORMAL_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ +#include + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" +#include "curand_normal_static.h" + +QUALIFIERS float2 _curand_box_muller(unsigned int x, unsigned int y) +{ + float2 result; + float u = x * CURAND_2POW32_INV + (CURAND_2POW32_INV/2); + float v = y * CURAND_2POW32_INV_2PI + (CURAND_2POW32_INV_2PI/2); + float s; +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + s = sqrtf(-2.0f * logf(u)); + __sincosf(v, &result.x, &result.y); +, + s = sqrtf(-2.0f * logf(u)); + result.x = sinf(v); + result.y = cosf(v); +) + result.x *= s; + result.y *= s; + return result; +} + +QUALIFIERS float2 curand_box_muller_mrg(curandStateMRG32k3a_t * state) +{ + float x, y; + x = curand_uniform(state); + y = curand_uniform(state) * CURAND_2PI; + float2 result; + float s; +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + s = sqrtf(-2.0f * logf(x)); + __sincosf(y, &result.x, &result.y); +, + s = sqrtf(-2.0f * logf(x)); + result.x = sinf(y); + result.y = cosf(y); +) + result.x *= s; + result.y *= s; + return result; +} + +QUALIFIERS double2 +_curand_box_muller_double(unsigned int x0, unsigned int x1, + unsigned int y0, unsigned int y1) +{ + double2 result; + unsigned long long zx = (unsigned long long)x0 ^ + ((unsigned long long)x1 << (53 - 32)); + double u = zx * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/2.0); + unsigned long long zy = (unsigned long long)y0 ^ + ((unsigned long long)y1 << (53 - 32)); + double v = zy * (CURAND_2POW53_INV_DOUBLE*2.0) + CURAND_2POW53_INV_DOUBLE; + double s = sqrt(-2.0 * log(u)); + +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + sincospi(v, &result.x, &result.y); +, + result.x = sin(v*CURAND_PI_DOUBLE); + result.y = cos(v*CURAND_PI_DOUBLE); +) + result.x *= s; + result.y *= s; + + return result; +} + +QUALIFIERS double2 +curand_box_muller_mrg_double(curandStateMRG32k3a_t * state) +{ + double x, y; + double2 result; + x = curand_uniform_double(state); + y = curand_uniform_double(state) * 2.0; + + double s = sqrt(-2.0 * log(x)); +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + sincospi(y, &result.x, &result.y); +, + result.x = sin(y*CURAND_PI_DOUBLE); + result.y = cos(y*CURAND_PI_DOUBLE); +) + result.x *= s; + result.y *= s; + return result; +} + +template +QUALIFIERS float2 curand_box_muller(R *state) +{ + float2 result; + unsigned int x = curand(state); + unsigned int y = curand(state); + result = _curand_box_muller(x, y); + return result; +} + +template +QUALIFIERS float4 curand_box_muller4(R *state) +{ + float4 result; + float2 _result; + uint4 x = curand4(state); + //unsigned int y = curand(state); + _result = _curand_box_muller(x.x, x.y); + result.x = _result.x; + result.y = _result.y; + _result = _curand_box_muller(x.z, x.w); + result.z = _result.x; + result.w = _result.y; + return result; +} + +template +QUALIFIERS double2 curand_box_muller_double(R *state) +{ + double2 result; + unsigned int x0 = curand(state); + unsigned int x1 = curand(state); + unsigned int y0 = curand(state); + unsigned int y1 = curand(state); + result = _curand_box_muller_double(x0, x1, y0, y1); + return result; +} + +template +QUALIFIERS double2 curand_box_muller2_double(R *state) +{ + double2 result; + uint4 _x; + _x = curand4(state); + result = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + return result; +} + + +template +QUALIFIERS double4 curand_box_muller4_double(R *state) +{ + double4 result; + double2 _res1; + double2 _res2; + uint4 _x; + uint4 _y; + _x = curand4(state); + _y = curand4(state); + _res1 = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + _res2 = _curand_box_muller_double(_y.x, _y.y, _y.z, _y.w); + result.x = _res1.x; + result.y = _res1.y; + result.z = _res2.x; + result.w = _res2.y; + return result; +} + +//QUALIFIERS float _curand_normal_icdf(unsigned int x) +//{ +//#if __CUDA_ARCH__ > 0 || defined(HOST_HAVE_ERFCINVF) +// float s = CURAND_SQRT2; +// // Mirror to avoid loss of precision +// if(x > 0x80000000UL) { +// x = 0xffffffffUL - x; +// s = -s; +// } +// float p = x * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); +// // p is in (0, 0.5], 2p is in (0, 1] +// return s * erfcinvf(2.0f * p); +//#else +// x++; //suppress warnings +// return 0.0f; +//#endif +//} +// +//QUALIFIERS float _curand_normal_icdf(unsigned long long x) +//{ +//#if __CUDA_ARCH__ > 0 || defined(HOST_HAVE_ERFCINVF) +// unsigned int t = (unsigned int)(x >> 32); +// float s = CURAND_SQRT2; +// // Mirror to avoid loss of precision +// if(t > 0x80000000UL) { +// t = 0xffffffffUL - t; +// s = -s; +// } +// float p = t * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); +// // p is in (0, 0.5], 2p is in (0, 1] +// return s * erfcinvf(2.0f * p); +//#else +// x++; +// return 0.0f; +//#endif +//} +// +//QUALIFIERS double _curand_normal_icdf_double(unsigned int x) +//{ +//#if __CUDA_ARCH__ > 0 || defined(HOST_HAVE_ERFCINVF) +// double s = CURAND_SQRT2_DOUBLE; +// // Mirror to avoid loss of precision +// if(x > 0x80000000UL) { +// x = 0xffffffffUL - x; +// s = -s; +// } +// double p = x * CURAND_2POW32_INV_DOUBLE + (CURAND_2POW32_INV_DOUBLE/2.0); +// // p is in (0, 0.5], 2p is in (0, 1] +// return s * erfcinv(2.0 * p); +//#else +// x++; +// return 0.0; +//#endif +//} +// +//QUALIFIERS double _curand_normal_icdf_double(unsigned long long x) +//{ +//#if __CUDA_ARCH__ > 0 || defined(HOST_HAVE_ERFCINVF) +// double s = CURAND_SQRT2_DOUBLE; +// x >>= 11; +// // Mirror to avoid loss of precision +// if(x > 0x10000000000000UL) { +// x = 0x1fffffffffffffUL - x; +// s = -s; +// } +// double p = x * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/2.0); +// // p is in (0, 0.5], 2p is in (0, 1] +// return s * erfcinv(2.0 * p); +//#else +// x++; +// return 0.0; +//#endif +//} +// + +/** + * \brief Return a normally distributed float from an XORWOW generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the XORWOW generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateXORWOW_t *state) +{ + if(state->boxmuller_flag != EXTRA_FLAG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = v.y; + state->boxmuller_flag = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return a normally distributed float from an Philox4_32_10 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the Philox4_32_10 generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ + +QUALIFIERS float curand_normal(curandStatePhilox4_32_10_t *state) +{ + if(state->boxmuller_flag != EXTRA_FLAG_NORMAL) { + unsigned int x, y; + x = curand(state); + y = curand(state); + float2 v = _curand_box_muller(x, y); + state->boxmuller_extra = v.y; + state->boxmuller_flag = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + + + +/** + * \brief Return a normally distributed float from an MRG32k3a generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the MRG32k3a generator in \p state, + * increment position of generator by one. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateMRG32k3a_t *state) +{ + if(state->boxmuller_flag != EXTRA_FLAG_NORMAL) { + float2 v = curand_box_muller_mrg(state); + state->boxmuller_extra = v.y; + state->boxmuller_flag = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag = 0; + return state->boxmuller_extra; +} + +/** + * \brief Return two normally distributed floats from an XORWOW generator. + * + * Return two normally distributed floats with mean \p 0.0f and + * standard deviation \p 1.0f from the XORWOW generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float2 where each element is from a + * distribution with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float2 curand_normal2(curandStateXORWOW_t *state) +{ + return curand_box_muller(state); +} +/** + * \brief Return two normally distributed floats from an Philox4_32_10 generator. + * + * Return two normally distributed floats with mean \p 0.0f and + * standard deviation \p 1.0f from the Philox4_32_10 generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float2 where each element is from a + * distribution with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float2 curand_normal2(curandStatePhilox4_32_10_t *state) +{ + return curand_box_muller(state); +} + +/** + * \brief Return four normally distributed floats from an Philox4_32_10 generator. + * + * Return four normally distributed floats with mean \p 0.0f and + * standard deviation \p 1.0f from the Philox4_32_10 generator in \p state, + * increment position of generator by four. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float2 where each element is from a + * distribution with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float4 curand_normal4(curandStatePhilox4_32_10_t *state) +{ + return curand_box_muller4(state); +} + + + +/** + * \brief Return two normally distributed floats from an MRG32k3a generator. + * + * Return two normally distributed floats with mean \p 0.0f and + * standard deviation \p 1.0f from the MRG32k3a generator in \p state, + * increment position of generator by two. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float2 where each element is from a + * distribution with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float2 curand_normal2(curandStateMRG32k3a_t *state) +{ + return curand_box_muller_mrg(state); +} + +/** + * \brief Return a normally distributed float from a MTGP32 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateMtgp32_t *state) +{ + return _curand_normal_icdf(curand(state)); +} +/** + * \brief Return a normally distributed float from a Sobol32 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateSobol32_t *state) +{ + return _curand_normal_icdf(curand(state)); +} + +/** + * \brief Return a normally distributed float from a scrambled Sobol32 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateScrambledSobol32_t *state) +{ + return _curand_normal_icdf(curand(state)); +} + +/** + * \brief Return a normally distributed float from a Sobol64 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateSobol64_t *state) +{ + return _curand_normal_icdf(curand(state)); +} + +/** + * \brief Return a normally distributed float from a scrambled Sobol64 generator. + * + * Return a single normally distributed float with mean \p 0.0f and + * standard deviation \p 1.0f from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed float with mean \p 0.0f and standard deviation \p 1.0f + */ +QUALIFIERS float curand_normal(curandStateScrambledSobol64_t *state) +{ + return _curand_normal_icdf(curand(state)); +} + +/** + * \brief Return a normally distributed double from an XORWOW generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the XORWOW generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateXORWOW_t *state) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_NORMAL) { + unsigned int x0, x1, y0, y1; + x0 = curand(state); + x1 = curand(state); + y0 = curand(state); + y1 = curand(state); + double2 v = _curand_box_muller_double(x0, x1, y0, y1); + state->boxmuller_extra_double = v.y; + state->boxmuller_flag_double = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return a normally distributed double from an Philox4_32_10 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the Philox4_32_10 generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ + +QUALIFIERS double curand_normal_double(curandStatePhilox4_32_10_t *state) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_NORMAL) { + uint4 _x; + _x = curand4(state); + double2 v = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + state->boxmuller_extra_double = v.y; + state->boxmuller_flag_double = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + + +/** + * \brief Return a normally distributed double from an MRG32k3a generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the XORWOW generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results, then returns them one at a time. + * See ::curand_normal2_double() for a more efficient version that returns + * both results at once. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateMRG32k3a_t *state) +{ + if(state->boxmuller_flag_double != EXTRA_FLAG_NORMAL) { + double2 v = curand_box_muller_mrg_double(state); + state->boxmuller_extra_double = v.y; + state->boxmuller_flag_double = EXTRA_FLAG_NORMAL; + return v.x; + } + state->boxmuller_flag_double = 0; + return state->boxmuller_extra_double; +} + +/** + * \brief Return two normally distributed doubles from an XORWOW generator. + * + * Return two normally distributed doubles with mean \p 0.0 and + * standard deviation \p 1.0 from the XORWOW generator in \p state, + * increment position of generator by 2. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double2 where each element is from a + * distribution with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double2 curand_normal2_double(curandStateXORWOW_t *state) +{ + return curand_box_muller_double(state); +} + +/** + * \brief Return two normally distributed doubles from an Philox4_32_10 generator. + * + * Return two normally distributed doubles with mean \p 0.0 and + * standard deviation \p 1.0 from the Philox4_32_10 generator in \p state, + * increment position of generator by 2. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double2 where each element is from a + * distribution with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double2 curand_normal2_double(curandStatePhilox4_32_10_t *state) +{ + uint4 _x; + double2 result; + + _x = curand4(state); + double2 v1 = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + result.x = v1.x; + result.y = v1.y; + + return result; +} + + // not a part of API +QUALIFIERS double4 curand_normal4_double(curandStatePhilox4_32_10_t *state) +{ + uint4 _x; + uint4 _y; + double4 result; + + _x = curand4(state); + _y = curand4(state); + double2 v1 = _curand_box_muller_double(_x.x, _x.y, _x.z, _x.w); + double2 v2 = _curand_box_muller_double(_y.x, _y.y, _y.z, _y.w); + result.x = v1.x; + result.y = v1.y; + result.z = v2.x; + result.w = v2.y; + + return result; +} + + +/** + * \brief Return two normally distributed doubles from an MRG32k3a generator. + * + * Return two normally distributed doubles with mean \p 0.0 and + * standard deviation \p 1.0 from the MRG32k3a generator in \p state, + * increment position of generator. + * + * The implementation uses a Box-Muller transform to generate two + * normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double2 where each element is from a + * distribution with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double2 curand_normal2_double(curandStateMRG32k3a_t *state) +{ + return curand_box_muller_mrg_double(state); +} + +/** + * \brief Return a normally distributed double from an MTGP32 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the MTGP32 generator in \p state, + * increment position of generator. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateMtgp32_t *state) +{ + return _curand_normal_icdf_double(curand(state)); +} + +/** + * \brief Return a normally distributed double from an Sobol32 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateSobol32_t *state) +{ + return _curand_normal_icdf_double(curand(state)); +} + +/** + * \brief Return a normally distributed double from a scrambled Sobol32 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the scrambled Sobol32 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateScrambledSobol32_t *state) +{ + return _curand_normal_icdf_double(curand(state)); +} + +/** + * \brief Return a normally distributed double from a Sobol64 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateSobol64_t *state) +{ + return _curand_normal_icdf_double(curand(state)); +} + +/** + * \brief Return a normally distributed double from a scrambled Sobol64 generator. + * + * Return a single normally distributed double with mean \p 0.0 and + * standard deviation \p 1.0 from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * The implementation uses the inverse cumulative distribution function + * to generate normally distributed results. + * + * \param state - Pointer to state to update + * + * \return Normally distributed double with mean \p 0.0 and standard deviation \p 1.0 + */ +QUALIFIERS double curand_normal_double(curandStateScrambledSobol64_t *state) +{ + return _curand_normal_icdf_double(curand(state)); +} +#endif // !defined(CURAND_NORMAL_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal_static.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal_static.h new file mode 100644 index 0000000000000000000000000000000000000000..f731101c22504b9cb68c1c5694d6087bc66df18a --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_normal_static.h @@ -0,0 +1,134 @@ + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ +#ifndef CURAND_NORMAL_STATIC_H +#define CURAND_NORMAL_STATIC_H + +#define QUALIFIERS_STATIC __host__ __device__ __forceinline__ + +#include +#if defined(HOST_HAVE_ERFCINVF) + #define IF_DEVICE_OR_HAVE_ERFCINVF(t, f) _NV_BLOCK_EXPAND(t) +#else + #define IF_DEVICE_OR_HAVE_ERFCINVF(t, f) NV_IF_ELSE_TARGET(NV_IS_DEVICE, t, f) +#endif + +QUALIFIERS_STATIC float _curand_normal_icdf(unsigned int x) +{ +IF_DEVICE_OR_HAVE_ERFCINVF( + float s = CURAND_SQRT2; + // Mirror to avoid loss of precision + if(x > 0x80000000UL) { + x = 0xffffffffUL - x; + s = -s; + } + float p = x * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + // p is in (0, 0.5], 2p is in (0, 1] + return s * erfcinvf(2.0f * p); +, + x++; //suppress warnings + return 0.0f; +) +} + +QUALIFIERS_STATIC float _curand_normal_icdf(unsigned long long x) +{ +IF_DEVICE_OR_HAVE_ERFCINVF( + unsigned int t = (unsigned int)(x >> 32); + float s = CURAND_SQRT2; + // Mirror to avoid loss of precision + if(t > 0x80000000UL) { + t = 0xffffffffUL - t; + s = -s; + } + float p = t * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + // p is in (0 - 0.5] 2p is in (0 - 1] + return s * erfcinvf(2.0f * p); +, + x++; + return 0.0f; +) +} + +QUALIFIERS_STATIC double _curand_normal_icdf_double(unsigned int x) +{ +IF_DEVICE_OR_HAVE_ERFCINVF( + double s = CURAND_SQRT2_DOUBLE; + // Mirror to avoid loss of precision + if(x > 0x80000000UL) { + x = 0xffffffffUL - x; + s = -s; + } + double p = x * CURAND_2POW32_INV_DOUBLE + (CURAND_2POW32_INV_DOUBLE/2.0); + // p is in (0 - 0.5] 2p is in (0 - 1] + return s * erfcinv(2.0 * p); +, + x++; + return 0.0; +) +} + +QUALIFIERS_STATIC double _curand_normal_icdf_double(unsigned long long x) +{ +IF_DEVICE_OR_HAVE_ERFCINVF( + double s = CURAND_SQRT2_DOUBLE; + x >>= 11; + // Mirror to avoid loss of precision + if(x > 0x10000000000000UL) { + x = 0x1fffffffffffffUL - x; + s = -s; + } + double p = x * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/2.0); + // p is in (0 - 0.5] 2p is in (0 - 1] + return s * erfcinv(2.0 * p); +, + x++; + return 0.0; +) +} +#undef QUALIFIERS_STATIC +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_philox4x32_x.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_philox4x32_x.h new file mode 100644 index 0000000000000000000000000000000000000000..3dbda4a0ce9ef3e11460320728886f7feb10cf2d --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_philox4x32_x.h @@ -0,0 +1,195 @@ +/* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ +/* + Copyright 2010-2011, D. E. Shaw Research. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions, and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of D. E. Shaw Research nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CURAND_PHILOX4X32_X__H_ +#define CURAND_PHILOX4X32_X__H_ +#include + +#if !defined(QUALIFIERS) +#define QUALIFIERS static __forceinline__ __device__ +#endif + +#define PHILOX_W32_0 (0x9E3779B9) +#define PHILOX_W32_1 (0xBB67AE85) +#define PHILOX_M4x32_0 (0xD2511F53) +#define PHILOX_M4x32_1 (0xCD9E8D57) + +struct curandStatePhilox4_32_10 { + uint4 ctr; + uint4 output; + uint2 key; + unsigned int STATE; + int boxmuller_flag; + int boxmuller_flag_double; + float boxmuller_extra; + double boxmuller_extra_double; +}; + +typedef struct curandStatePhilox4_32_10 curandStatePhilox4_32_10_t; + + +QUALIFIERS void Philox_State_Incr(curandStatePhilox4_32_10_t* s, unsigned long long n) +{ + unsigned int nlo = (unsigned int)(n); + unsigned int nhi = (unsigned int)(n>>32); + + s->ctr.x += nlo; + if( s->ctr.x < nlo ) + nhi++; + + s->ctr.y += nhi; + if(nhi <= s->ctr.y) + return; + if(++s->ctr.z) return; + ++s->ctr.w; +} + +QUALIFIERS void Philox_State_Incr_hi(curandStatePhilox4_32_10_t* s, unsigned long long n) +{ + unsigned int nlo = (unsigned int)(n); + unsigned int nhi = (unsigned int)(n>>32); + + s->ctr.z += nlo; + if( s->ctr.z < nlo ) + nhi++; + + s->ctr.w += nhi; +} + + + +QUALIFIERS void Philox_State_Incr(curandStatePhilox4_32_10_t* s) +{ + if(++s->ctr.x) return; + if(++s->ctr.y) return; + if(++s->ctr.z) return; + ++s->ctr.w; +} + + +QUALIFIERS unsigned int mulhilo32(unsigned int a, unsigned int b, unsigned int* hip) +{ +NV_IF_ELSE_TARGET(NV_IS_HOST, + // host code + unsigned long long product = ((unsigned long long)a) * ((unsigned long long)b); + *hip = product >> 32; + return (unsigned int)product; +, + // device code + *hip = __umulhi(a,b); + return a*b; +) +} + +QUALIFIERS uint4 _philox4x32round(uint4 ctr, uint2 key) +{ + unsigned int hi0; + unsigned int hi1; + unsigned int lo0 = mulhilo32(PHILOX_M4x32_0, ctr.x, &hi0); + unsigned int lo1 = mulhilo32(PHILOX_M4x32_1, ctr.z, &hi1); + + uint4 ret = {hi1^ctr.y^key.x, lo1, hi0^ctr.w^key.y, lo0}; + return ret; +} + +QUALIFIERS uint4 curand_Philox4x32_10( uint4 c, uint2 k) +{ + c = _philox4x32round(c, k); // 1 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 2 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 3 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 4 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 5 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 6 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 7 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 8 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + c = _philox4x32round(c, k); // 9 + k.x += PHILOX_W32_0; k.y += PHILOX_W32_1; + return _philox4x32round(c, k); // 10 +} + + +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_poisson.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_poisson.h new file mode 100644 index 0000000000000000000000000000000000000000..7881194cb868be14a197b581d7c82bf9dd16d617 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_poisson.h @@ -0,0 +1,763 @@ + + /* Copyright 2010-2014 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_POISSON_H_) +#define CURAND_POISSON_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" + +#define CR_CUDART_PI 3.1415926535897931e+0 +#define CR_CUDART_TWO_TO_52 4503599627370496.0 + + +QUALIFIERS float __cr_rsqrt(float a) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + asm ("rsqrt.approx.f32.ftz %0, %1;" : "=f"(a) : "f"(a)); +, + a = 1.0f / sqrtf (a); +) + return a; +} + +QUALIFIERS float __cr_exp (float a) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + a = a * 1.4426950408889634074; + asm ("ex2.approx.f32.ftz %0, %1;" : "=f"(a) : "f"(a)); +, + a = expf (a); +) + return a; +} + +QUALIFIERS float __cr_log (float a) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + asm ("lg2.approx.f32.ftz %0, %1;" : "=f"(a) : "f"(a)); + a = a * 0.69314718055994530942; +, + a = logf (a); +) + return a; +} + +QUALIFIERS float __cr_rcp (float a) +{ +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + asm ("rcp.approx.f32.ftz %0, %1;" : "=f"(a) : "f"(a)); +, + a = 1.0f / a; +) + return a; +} + +/* Computes regularized gamma function: gammainc(a,x)/gamma(a) */ +QUALIFIERS float __cr_pgammainc (float a, float x) +{ + float t, alpha, beta; + + /* First level parametrization constants */ + float ma1 = 1.43248035075540910f, + ma2 = 0.12400979329415655f, + ma3 = 0.00025361074907033f, + mb1 = 0.21096734870196546f, + mb2 = 1.97381164089999420f, + mb3 = 0.94201734077887530f; + + /* Second level parametrization constants (depends only on a) */ + + alpha = __cr_rsqrt (a - ma2); + alpha = ma1 * alpha + ma3; + beta = __cr_rsqrt (a - mb2); + beta = mb1 * beta + mb3; + + /* Final approximation (depends on a and x) */ + + t = a - x; + t = alpha * t - beta; + t = 1.0f + __cr_exp (t); + t = t * t; + t = __cr_rcp (t); + + /* Negative a,x or a,x=NAN requires special handling */ + //t = !(x > 0 && a >= 0) ? 0.0 : t; + + return t; +} + +/* Computes inverse of pgammainc */ +QUALIFIERS float __cr_pgammaincinv (float a, float y) +{ + float t, alpha, beta; + + /* First level parametrization constants */ + + float ma1 = 1.43248035075540910f, + ma2 = 0.12400979329415655f, + ma3 = 0.00025361074907033f, + mb1 = 0.21096734870196546f, + mb2 = 1.97381164089999420f, + mb3 = 0.94201734077887530f; + + /* Second level parametrization constants (depends only on a) */ + + alpha = __cr_rsqrt (a - ma2); + alpha = ma1 * alpha + ma3; + beta = __cr_rsqrt (a - mb2); + beta = mb1 * beta + mb3; + + /* Final approximation (depends on a and y) */ + + t = __cr_rsqrt (y) - 1.0f; + t = __cr_log (t); + t = beta + t; + t = - t * __cr_rcp (alpha) + a; + /* Negative a,x or a,x=NAN requires special handling */ + //t = !(y > 0 && a >= 0) ? 0.0 : t; + return t; +} + +#if defined(__CUDACC_RDC__) && (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +inline __constant__ double __cr_lgamma_table [] = { +#else +static __constant__ double __cr_lgamma_table [] = { +#endif + 0.000000000000000000e-1, + 0.000000000000000000e-1, + 6.931471805599453094e-1, + 1.791759469228055001e0, + 3.178053830347945620e0, + 4.787491742782045994e0, + 6.579251212010100995e0, + 8.525161361065414300e0, + 1.060460290274525023e1 +}; + + +QUALIFIERS double __cr_lgamma_integer(int a) +{ + double s; + double t; + double fa = fabs((float)a); + double sum; + + if (a > 8) { + /* Stirling approximation; coefficients from Hart et al, "Computer + * Approximations", Wiley 1968. Approximation 5404. + */ + s = 1.0 / fa; + t = s * s; + sum = -0.1633436431e-2; + sum = sum * t + 0.83645878922e-3; + sum = sum * t - 0.5951896861197e-3; + sum = sum * t + 0.793650576493454e-3; + sum = sum * t - 0.277777777735865004e-2; + sum = sum * t + 0.833333333333331018375e-1; + sum = sum * s + 0.918938533204672; + s = 0.5 * log (fa); + t = fa - 0.5; + s = s * t; + t = s - fa; + s = s + sum; + t = t + s; + return t; + } else { +NV_IF_ELSE_TARGET(NV_IS_DEVICE, + return __cr_lgamma_table [(int) fa-1]; +, + switch(a) { + case 1: return 0.000000000000000000e-1; + case 2: return 0.000000000000000000e-1; + case 3: return 6.931471805599453094e-1; + case 4: return 1.791759469228055001e0; + case 5: return 3.178053830347945620e0; + case 6: return 4.787491742782045994e0; + case 7: return 6.579251212010100995e0; + case 8: return 8.525161361065414300e0; + default: return 1.060460290274525023e1; + } +) + } +} + +#define KNUTH_FLOAT_CONST 60.0 +template +// Donald E. Knuth Seminumerical Algorithms. The Art of Computer Programming, Volume 2 +QUALIFIERS unsigned int curand_poisson_knuth(T *state, float lambda) +{ + unsigned int k = 0; + float p = expf(lambda); + do{ + k++; + p *= curand_uniform(state); + }while (p > 1.0); + return k-1; +} + +template +// Donald E. Knuth Seminumerical Algorithms. The Art of Computer Programming, Volume 2 +QUALIFIERS uint4 curand_poisson_knuth4(T *state, float lambda) +{ + uint4 k = {0,0,0,0}; + float exp_lambda = expf(lambda); + float4 p={ exp_lambda,exp_lambda,exp_lambda,exp_lambda }; + do{ + k.x++; + p.x *= curand_uniform(state); + }while (p.x > 1.0); + do{ + k.y++; + p.y *= curand_uniform(state); + }while (p.y > 1.0); + do{ + k.z++; + p.z *= curand_uniform(state); + }while (p.z > 1.0); + do{ + k.w++; + p.w *= curand_uniform(state); + }while (p.w > 1.0); + + k.x--; + k.y--; + k.z--; + k.w--; + return k; +} + +template +// Marsaglia, Tsang, Wang Journal of Statistical Software, square histogram. +QUALIFIERS unsigned int _curand_M2_double(T x, curandDistributionM2Shift_t distributionM2) +{ + double u = _curand_uniform_double(x); + int j = (int) floor(distributionM2->length*u); + + double histogramVj; + unsigned int histogramKj; +NV_IF_ELSE_TARGET(NV_PROVIDES_SM_35, + histogramVj = __ldg( &(distributionM2->histogram->V[j])); + histogramKj = __ldg( &(distributionM2->histogram->K[j])); +, + histogramVj = distributionM2->histogram->V[j]; + histogramKj = distributionM2->histogram->K[j]; +) + //if (u < distributionM2->histogram->V[j]) return distributionM2->shift + j; + //return distributionM2->shift + distributionM2->histogram->K[j]; + if (u < histogramVj) return distributionM2->shift + j; + return distributionM2->shift + histogramKj; +} + +template +// Marsaglia, Tsang, Wang Journal of Statistical Software, square histogram. +QUALIFIERS uint4 _curand_M2_double4(T x, curandDistributionM2Shift_t distributionM2) +{ + double4 u; + uint4 result = {0,0,0,0}; + int4 flag = {1,1,1,1}; + + u.x = _curand_uniform_double(x.x); + u.y = _curand_uniform_double(x.y); + u.z = _curand_uniform_double(x.z); + u.w = _curand_uniform_double(x.w); + + int4 j; + j.x = (int) floor(distributionM2->length*u.x); + j.y = (int) floor(distributionM2->length*u.y); + j.z = (int) floor(distributionM2->length*u.z); + j.w = (int) floor(distributionM2->length*u.w); +// int result; + + double histogramVjx; + double histogramVjy; + double histogramVjz; + double histogramVjw; + unsigned int histogramKjx; + unsigned int histogramKjy; + unsigned int histogramKjz; + unsigned int histogramKjw; +NV_IF_ELSE_TARGET(NV_PROVIDES_SM_35, + histogramVjx = __ldg( &(distributionM2->histogram->V[j.x])); + histogramVjy = __ldg( &(distributionM2->histogram->V[j.y])); + histogramVjz = __ldg( &(distributionM2->histogram->V[j.z])); + histogramVjw = __ldg( &(distributionM2->histogram->V[j.w])); + + histogramKjx = __ldg( &(distributionM2->histogram->K[j.x])); + histogramKjy = __ldg( &(distributionM2->histogram->K[j.y])); + histogramKjz = __ldg( &(distributionM2->histogram->K[j.z])); + histogramKjw = __ldg( &(distributionM2->histogram->K[j.w])); +, + histogramVjx = distributionM2->histogram->V[j.x]; + histogramVjy = distributionM2->histogram->V[j.y]; + histogramVjz = distributionM2->histogram->V[j.z]; + histogramVjw = distributionM2->histogram->V[j.w]; + + histogramKjx = distributionM2->histogram->K[j.x]; + histogramKjy = distributionM2->histogram->K[j.y]; + histogramKjz = distributionM2->histogram->K[j.z]; + histogramKjw = distributionM2->histogram->K[j.w]; +) + + if (u.x < histogramVjx){ result.x = distributionM2->shift + j.x; flag.x = 0; } + if (u.y < histogramVjy){ result.y = distributionM2->shift + j.y; flag.y = 0; } + if (u.z < histogramVjz){ result.z = distributionM2->shift + j.z; flag.z = 0; } + if (u.w < histogramVjw){ result.w = distributionM2->shift + j.w; flag.w = 0; } + //return distributionM2->shift + distributionM2->histogram->K[j]; + + if(flag.x) result.x = distributionM2->shift + histogramKjx; + if(flag.y) result.y = distributionM2->shift + histogramKjy; + if(flag.z) result.z = distributionM2->shift + histogramKjz; + if(flag.w) result.w = distributionM2->shift + histogramKjw; + + return result; +} + +template +QUALIFIERS unsigned int curand_M2_double(STATE *state, curandDistributionM2Shift_t distributionM2) +{ + return _curand_M2_double(curand(state), distributionM2); +} + +template +QUALIFIERS uint4 curand_M2_double4(STATE *state, curandDistributionM2Shift_t distributionM2) +{ + return _curand_M2_double4(curand4(state), distributionM2); +} + + +template +QUALIFIERS unsigned int _curand_binary_search_double(T x, curandDistributionShift_t distribution) +{ + double u = _curand_uniform_double(x); + int min = 0; + int max = distribution->length-1; + do{ + int mid = (max + min)/2; + double probability_mid; +NV_IF_ELSE_TARGET(NV_PROVIDES_SM_35, + probability_mid = __ldg( &(distribution->probability[mid])); +, + probability_mid = distribution->probability[mid]; +) + if (u <= probability_mid){ + max = mid; + }else{ + min = mid+1; + } + }while (min < max); + return distribution->shift + min; +} + +template +QUALIFIERS unsigned int curand_binary_search_double(STATE *state, curandDistributionShift_t distribution) +{ + return _curand_binary_search_double(curand(state), distribution); +} + +// Generates uniformly distributed double values in range (0.0; 1.0) from uniformly distributed +// unsigned int. We can't use standard _curand_uniform_double since it can generate 1.0. +// This is required only for _curand_poisson_ITR_double. +QUALIFIERS double _curand_uniform_double_excluding_one(unsigned int x) +{ + return x * CURAND_2POW32_INV_DOUBLE + (CURAND_2POW32_INV_DOUBLE/2.0); +} + +// Overload for unsigned long long. +// This is required only for _curand_poisson_ITR_double. +QUALIFIERS double _curand_uniform_double_excluding_one(unsigned long long x) +{ + return (x >> 11) * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/4.0); +} + +#define MAGIC_DOUBLE_CONST 500.0 +template +//George S. Fishman Discrete-event simulation: modeling, programming, and analysis +QUALIFIERS unsigned int _curand_poisson_ITR_double(T x, double lambda) +{ + double L,p = 1.0; + double q = 1.0; + unsigned int k = 0; + int pow=0; + // This algorithm requires u to be in (0;1) range, however, _curand_uniform_double + // returns a number in range (0;1]. If u is 1.0 the inner loop never ends. The + // following operation transforms the range from (0;1] to (0;1). + double u = _curand_uniform_double_excluding_one(x); + do{ + if (lambda > (double)(pow+MAGIC_DOUBLE_CONST)){ + L = exp(-MAGIC_DOUBLE_CONST); + }else{ + L = exp((double)(pow - lambda)); + } + p *= L; + q *= L; + pow += (int) MAGIC_DOUBLE_CONST; + while (u > q){ + k++; + p *= ((double)lambda / (double) k); + q += p; + } + }while((double)pow < lambda); + return k; +} + +template +/* Rejection Method for Poisson distribution based on gammainc approximation */ +QUALIFIERS unsigned int curand_poisson_gammainc(T state, float lambda){ + float y, x, t, z,v; + float logl = __cr_log (lambda); + while (true) { + y = curand_uniform (state); + x = __cr_pgammaincinv (lambda, y); + x = floorf (x); + z = curand_uniform (state); + v = (__cr_pgammainc (lambda, x + 1.0f) - __cr_pgammainc (lambda, x)) * 1.3f; + z = z*v; + t = (float)__cr_exp (-lambda + x * logl - (float)__cr_lgamma_integer ((int)(1.0f + x))); + if ((z < t) && (v>=1e-20)) + break; + } + return (unsigned int)x; +} + +template +/* Rejection Method for Poisson distribution based on gammainc approximation */ +QUALIFIERS uint4 curand_poisson_gammainc4(T state, float lambda){ + uint4 result; + float y, x, t, z,v; + float logl = __cr_log (lambda); + while (true) { + y = curand_uniform(state); + x = __cr_pgammaincinv (lambda, y); + x = floorf (x); + z = curand_uniform (state); + v = (__cr_pgammainc (lambda, x + 1.0f) - __cr_pgammainc (lambda, x)) * 1.3f; + z = z*v; + t = (float)__cr_exp (-lambda + x * logl - (float)__cr_lgamma_integer ((int)(1.0f + x))); + if ((z < t) && (v>=1e-20)) + break; + } + result.x = (unsigned int)x; + + while (true) { + y = curand_uniform(state); + x = __cr_pgammaincinv (lambda, y); + x = floorf (x); + z = curand_uniform (state); + v = (__cr_pgammainc (lambda, x + 1.0f) - __cr_pgammainc (lambda, x)) * 1.3f; + z = z*v; + t = (float)__cr_exp (-lambda + x * logl - (float)__cr_lgamma_integer ((int)(1.0f + x))); + if ((z < t) && (v>=1e-20)) + break; + } + result.y = (unsigned int)x; + + while (true) { + y = curand_uniform(state); + x = __cr_pgammaincinv (lambda, y); + x = floorf (x); + z = curand_uniform (state); + v = (__cr_pgammainc (lambda, x + 1.0f) - __cr_pgammainc (lambda, x)) * 1.3f; + z = z*v; + t = (float)__cr_exp (-lambda + x * logl - (float)__cr_lgamma_integer ((int)(1.0f + x))); + if ((z < t) && (v>=1e-20)) + break; + } + result.z = (unsigned int)x; + + while (true) { + y = curand_uniform(state); + x = __cr_pgammaincinv (lambda, y); + x = floorf (x); + z = curand_uniform (state); + v = (__cr_pgammainc (lambda, x + 1.0f) - __cr_pgammainc (lambda, x)) * 1.3f; + z = z*v; + t = (float)__cr_exp (-lambda + x * logl - (float)__cr_lgamma_integer ((int)(1.0f + x))); + if ((z < t) && (v>=1e-20)) + break; + } + result.w = (unsigned int)x; + + return result; +} +// Note below that the round to nearest integer, where needed,is done in line with code that +// assumes the range of values is < 2**32 + +template +QUALIFIERS unsigned int _curand_poisson(T x, double lambda) +{ + if (lambda < 1000) + return _curand_poisson_ITR_double(x, lambda); + return (unsigned int)((sqrt(lambda) * _curand_normal_icdf_double(x)) + lambda + 0.5); //Round to nearest +} + +template +QUALIFIERS unsigned int _curand_poisson_from_normal(T x, double lambda) +{ + return (unsigned int)((sqrt(lambda) * _curand_normal_icdf(x)) + lambda + 0.5); //Round to nearest +} + +template +QUALIFIERS unsigned int curand_poisson_from_normal(STATE state, double lambda) +{ + return (unsigned int)((sqrt(lambda) * curand_normal(state)) + lambda + 0.5); //Round to nearest +} + +template +QUALIFIERS uint4 curand_poisson_from_normal4(STATE state, double lambda) +{ + uint4 result; + float4 _res; + + _res = curand_normal4(state); + + result.x = (unsigned int)((sqrt(lambda) * _res.x) + lambda + 0.5); //Round to nearest + result.y = (unsigned int)((sqrt(lambda) * _res.y) + lambda + 0.5); //Round to nearest + result.z = (unsigned int)((sqrt(lambda) * _res.z) + lambda + 0.5); //Round to nearest + result.w = (unsigned int)((sqrt(lambda) * _res.w) + lambda + 0.5); //Round to nearest + return result; //Round to nearest +} + +/** + * \brief Return a Poisson-distributed unsigned int from a XORWOW generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the XORWOW generator in \p state, + * increment the position of the generator by a variable amount, depending + * on the algorithm used. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateXORWOW_t *state, double lambda) +{ + if (lambda < 64) + return curand_poisson_knuth(state, (float)lambda); + if (lambda > 4000) + return (unsigned int)((sqrt(lambda) * curand_normal_double(state)) + lambda + 0.5); //Round to nearest + return curand_poisson_gammainc(state, (float)lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a Philox4_32_10 generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the Philox4_32_10 generator in \p state, + * increment the position of the generator by a variable amount, depending + * on the algorithm used. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStatePhilox4_32_10_t *state, double lambda) +{ + if (lambda < 64) + return curand_poisson_knuth(state, (float)lambda); + if (lambda > 4000) + return (unsigned int)((sqrt(lambda) * curand_normal_double(state)) + lambda + 0.5); //Round to nearest + return curand_poisson_gammainc(state, (float)lambda); +} +/** + * \brief Return four Poisson-distributed unsigned ints from a Philox4_32_10 generator. + * + * Return a four unsigned ints from a Poisson + * distribution with lambda \p lambda from the Philox4_32_10 generator in \p state, + * increment the position of the generator by a variable amount, depending + * on the algorithm used. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS uint4 curand_poisson4(curandStatePhilox4_32_10_t *state, double lambda) +{ + uint4 result; + double4 _res; + if (lambda < 64) + return curand_poisson_knuth4(state, (float)lambda); + if (lambda > 4000) { + _res = curand_normal4_double(state); + result.x = (unsigned int)((sqrt(lambda) * _res.x) + lambda + 0.5); //Round to nearest + result.y = (unsigned int)((sqrt(lambda) * _res.y) + lambda + 0.5); //Round to nearest + result.z = (unsigned int)((sqrt(lambda) * _res.z) + lambda + 0.5); //Round to nearest + result.w = (unsigned int)((sqrt(lambda) * _res.w) + lambda + 0.5); //Round to nearest + return result; + } + return curand_poisson_gammainc4(state, (float)lambda); +} + + + +/** + * \brief Return a Poisson-distributed unsigned int from a MRG32k3A generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the MRG32k3a generator in \p state, + * increment the position of the generator by a variable amount, depending + * on the algorithm used. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateMRG32k3a_t *state, double lambda) +{ + if (lambda < 64) + return curand_poisson_knuth(state, (float)lambda); + if (lambda > 4000) + return (unsigned int)((sqrt(lambda) * curand_normal_double(state)) + lambda + 0.5); //Round to nearest + return curand_poisson_gammainc(state, (float)lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a MTGP32 generator. + * + * Return a single int from a Poisson + * distribution with lambda \p lambda from the MTGP32 generator in \p state, + * increment the position of the generator by one. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateMtgp32_t *state, double lambda) +{ + return _curand_poisson(curand(state), lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a Sobol32 generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the Sobol32 generator in \p state, + * increment the position of the generator by one. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ + +QUALIFIERS unsigned int curand_poisson(curandStateSobol32_t *state, double lambda) +{ + return _curand_poisson(curand(state), lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a scrambled Sobol32 generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the scrambled Sobol32 generator in \p state, + * increment the position of the generator by one. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateScrambledSobol32_t *state, double lambda) +{ + return _curand_poisson(curand(state), lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a Sobol64 generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the Sobol64 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateSobol64_t *state, double lambda) +{ + return _curand_poisson(curand(state), lambda); +} + +/** + * \brief Return a Poisson-distributed unsigned int from a scrambled Sobol64 generator. + * + * Return a single unsigned int from a Poisson + * distribution with lambda \p lambda from the scrambled Sobol64 generator in \p state, + * increment position of generator by one. + * + * \param state - Pointer to state to update + * \param lambda - Lambda of the Poisson distribution + * + * \return Poisson-distributed unsigned int with lambda \p lambda + */ +QUALIFIERS unsigned int curand_poisson(curandStateScrambledSobol64_t *state, double lambda) +{ + return _curand_poisson(curand(state), lambda); +} +#endif // !defined(CURAND_POISSON_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_precalc.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_precalc.h new file mode 100644 index 0000000000000000000000000000000000000000..01818fb642856eb09f7e3fa0b8202d34c37c8566 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_precalc.h @@ -0,0 +1,3548 @@ +/* Copyright 2010-2012 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ +#if !defined(CURAND_XORWOW_PRECALCULATED_H_) +#define CURAND_XORWOW_PRECALCULATED_H_ + +#define PRECALC_NUM_MATRICES (32) +#define PRECALC_BLOCK_SIZE (2) +#define PRECALC_BLOCK_MASK ((1<= 201703L) && defined(__cpp_inline_variables) +#define CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS inline __device__ +#else +#define CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS static __device__ +#endif + +#if (__cplusplus >= 201703L) && defined(__cpp_inline_variables) +#define CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS inline +#else +#define CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS static +#endif +CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS unsigned int precalc_xorwow_matrix[32][800] = { +{ +850664906UL, 2293210629UL, 1517805917UL, 1215500405UL, 1612415445UL, 645388200UL, 824349799UL, 3517232886UL, 4075591755UL, 3089899292UL, 4249786064UL, 3811424903UL, 1100783479UL, 53649761UL, 2817264826UL, 3159462529UL, 1654848550UL, 950025444UL, 3095510002UL, 4080567211UL, 4111078399UL, 3241719305UL, 2788212779UL, 4256963770UL, 2426893717UL, 4190211142UL, 1420776905UL, 3780537969UL, 1102912875UL, 1657948873UL, 3354905256UL, 2519610308UL, +515777663UL, 3396785394UL, 1832603711UL, 1154211550UL, 1915690212UL, 1933919046UL, 789578337UL, 337961173UL, 1359089498UL, 2249086205UL, 3417955173UL, 862571348UL, 528120760UL, 1265685672UL, 1970052076UL, 3585976752UL, 3645339918UL, 312171257UL, 1360991400UL, 1994321680UL, 2327168468UL, 2540437053UL, 1180483641UL, 2217962701UL, 182726833UL, 590204372UL, 1904496495UL, 2545607041UL, 3697978033UL, 1084030545UL, 3397906968UL, 2192325323UL, +2704204176UL, 1069092002UL, 2364406907UL, 1578647245UL, 3561974633UL, 3437665426UL, 1464127305UL, 1616628807UL, 2243114101UL, 3639967880UL, 1702613633UL, 2437350057UL, 39991274UL, 2024323584UL, 3795072940UL, 3604530798UL, 443099203UL, 643536212UL, 1919517328UL, 3931285769UL, 427935569UL, 276421624UL, 2492081750UL, 262729512UL, 3088549877UL, 2922650665UL, 1816283755UL, 4246096489UL, 842575914UL, 1460435650UL, 3050522190UL, 2640849794UL, +3697925816UL, 3465779075UL, 3856929655UL, 1365559780UL, 2897029415UL, 2747033756UL, 3611830629UL, 1891542518UL, 1897590206UL, 437451803UL, 677924906UL, 123809117UL, 3940574372UL, 687640291UL, 3488484529UL, 470218446UL, 1092571016UL, 1537938503UL, 1073323937UL, 611300083UL, 3809285994UL, 3975678726UL, 925845389UL, 2514775760UL, 2859302390UL, 2761919483UL, 993285307UL, 164095287UL, 3736193671UL, 2078946336UL, 1418537059UL, 1202525920UL, +4234029440UL, 1313593624UL, 2484428922UL, 1833969372UL, 661495122UL, 2217907395UL, 2795045321UL, 2950835531UL, 1402379354UL, 351314168UL, 1902476749UL, 1914974334UL, 2873973176UL, 1321203603UL, 3316118265UL, 3282193947UL, 1342191737UL, 793441242UL, 3281524559UL, 296088733UL, 487851702UL, 712098215UL, 1388727135UL, 1705533557UL, 3557800292UL, 399729516UL, 1355829467UL, 291276309UL, 421164833UL, 1318404599UL, 2064519128UL, 1161612642UL, +2076623594UL, 850664906UL, 2293210629UL, 1517805917UL, 1215500405UL, 3847487204UL, 645388200UL, 824349799UL, 3517232886UL, 4075591755UL, 2755872609UL, 4249786064UL, 3811424903UL, 1100783479UL, 53649761UL, 1417544262UL, 3159462529UL, 1654848550UL, 950025444UL, 3095510002UL, 1908900347UL, 4111078399UL, 3241719305UL, 2788212779UL, 4256963770UL, 3750258343UL, 4190211142UL, 1420776905UL, 3780537969UL, 1102912875UL, 1690550UL, 3354905256UL, +2519610308UL, 515777663UL, 3396785394UL, 2658162202UL, 1154211550UL, 1915690212UL, 1933919046UL, 789578337UL, 189880016UL, 1359089498UL, 2249086205UL, 3417955173UL, 862571348UL, 998719835UL, 1265685672UL, 1970052076UL, 3585976752UL, 3645339918UL, 2973042959UL, 1360991400UL, 1994321680UL, 2327168468UL, 2540437053UL, 2283905032UL, 2217962701UL, 182726833UL, 590204372UL, 1904496495UL, 110719262UL, 3697978033UL, 1084030545UL, 3397906968UL, +2192325323UL, 4133333579UL, 1069092002UL, 2364406907UL, 1578647245UL, 3561974633UL, 3629845331UL, 1464127305UL, 1616628807UL, 2243114101UL, 3639967880UL, 3256744141UL, 2437350057UL, 39991274UL, 2024323584UL, 3795072940UL, 1024703328UL, 443099203UL, 643536212UL, 1919517328UL, 3931285769UL, 2755167056UL, 276421624UL, 2492081750UL, 262729512UL, 3088549877UL, 2817867653UL, 1816283755UL, 4246096489UL, 842575914UL, 1460435650UL, 2276077438UL, +2640849794UL, 3697925816UL, 3465779075UL, 3856929655UL, 130551477UL, 2897029415UL, 2747033756UL, 3611830629UL, 1891542518UL, 804565809UL, 437451803UL, 677924906UL, 123809117UL, 3940574372UL, 2446610749UL, 3488484529UL, 470218446UL, 1092571016UL, 1537938503UL, 1502147484UL, 611300083UL, 3809285994UL, 3975678726UL, 925845389UL, 872826112UL, 2859302390UL, 2761919483UL, 993285307UL, 164095287UL, 3901654538UL, 2078946336UL, 1418537059UL, +1202525920UL, 4234029440UL, 704759480UL, 2484428922UL, 1833969372UL, 661495122UL, 2217907395UL, 3287413716UL, 2950835531UL, 1402379354UL, 351314168UL, 1902476749UL, 2033316109UL, 2873973176UL, 1321203603UL, 3316118265UL, 3282193947UL, 1316780684UL, 793441242UL, 3281524559UL, 296088733UL, 487851702UL, 314311643UL, 1388727135UL, 1705533557UL, 3557800292UL, 399729516UL, 1660074989UL, 291276309UL, 421164833UL, 1318404599UL, 2064519128UL, +3156334112UL, 2076623594UL, 850664906UL, 2293210629UL, 1517805917UL, 335452425UL, 3847487204UL, 645388200UL, 824349799UL, 3517232886UL, 954487767UL, 2755872609UL, 4249786064UL, 3811424903UL, 1100783479UL, 3408594583UL, 1417544262UL, 3159462529UL, 1654848550UL, 950025444UL, 324339737UL, 1908900347UL, 4111078399UL, 3241719305UL, 2788212779UL, 1890540205UL, 3750258343UL, 4190211142UL, 1420776905UL, 3780537969UL, 3716648585UL, 1690550UL, +3354905256UL, 2519610308UL, 515777663UL, 3758156132UL, 2658162202UL, 1154211550UL, 1915690212UL, 1933919046UL, 844149171UL, 189880016UL, 1359089498UL, 2249086205UL, 3417955173UL, 1031812215UL, 998719835UL, 1265685672UL, 1970052076UL, 3585976752UL, 3174204115UL, 2973042959UL, 1360991400UL, 1994321680UL, 2327168468UL, 714016907UL, 2283905032UL, 2217962701UL, 182726833UL, 590204372UL, 2151450260UL, 110719262UL, 3697978033UL, 1084030545UL, +3397906968UL, 767772303UL, 4133333579UL, 1069092002UL, 2364406907UL, 1578647245UL, 42955292UL, 3629845331UL, 1464127305UL, 1616628807UL, 2243114101UL, 3222189776UL, 3256744141UL, 2437350057UL, 39991274UL, 2024323584UL, 3142424684UL, 1024703328UL, 443099203UL, 643536212UL, 1919517328UL, 918511196UL, 2755167056UL, 276421624UL, 2492081750UL, 262729512UL, 4246877536UL, 2817867653UL, 1816283755UL, 4246096489UL, 842575914UL, 1425765936UL, +2276077438UL, 2640849794UL, 3697925816UL, 3465779075UL, 1491702526UL, 130551477UL, 2897029415UL, 2747033756UL, 3611830629UL, 1844578694UL, 804565809UL, 437451803UL, 677924906UL, 123809117UL, 3419189841UL, 2446610749UL, 3488484529UL, 470218446UL, 1092571016UL, 3272535988UL, 1502147484UL, 611300083UL, 3809285994UL, 3975678726UL, 2853681168UL, 872826112UL, 2859302390UL, 2761919483UL, 993285307UL, 1434560128UL, 3901654538UL, 2078946336UL, +1418537059UL, 1202525920UL, 2530097881UL, 704759480UL, 2484428922UL, 1833969372UL, 661495122UL, 503878844UL, 3287413716UL, 2950835531UL, 1402379354UL, 351314168UL, 4131886119UL, 2033316109UL, 2873973176UL, 1321203603UL, 3316118265UL, 237900321UL, 1316780684UL, 793441242UL, 3281524559UL, 296088733UL, 1730738847UL, 314311643UL, 1388727135UL, 1705533557UL, 3557800292UL, 1553835665UL, 1660074989UL, 291276309UL, 421164833UL, 1318404599UL, +964731488UL, 3156334112UL, 2076623594UL, 850664906UL, 2293210629UL, 1105350579UL, 335452425UL, 3847487204UL, 645388200UL, 824349799UL, 2789953706UL, 954487767UL, 2755872609UL, 4249786064UL, 3811424903UL, 3937839949UL, 3408594583UL, 1417544262UL, 3159462529UL, 1654848550UL, 624060530UL, 324339737UL, 1908900347UL, 4111078399UL, 3241719305UL, 2294919498UL, 1890540205UL, 3750258343UL, 4190211142UL, 1420776905UL, 2279133729UL, 3716648585UL, +1690550UL, 3354905256UL, 2519610308UL, 3563975602UL, 3758156132UL, 2658162202UL, 1154211550UL, 1915690212UL, 3505586122UL, 844149171UL, 189880016UL, 1359089498UL, 2249086205UL, 2389487504UL, 1031812215UL, 998719835UL, 1265685672UL, 1970052076UL, 2798611919UL, 3174204115UL, 2973042959UL, 1360991400UL, 1994321680UL, 1684134678UL, 714016907UL, 2283905032UL, 2217962701UL, 182726833UL, 1734988742UL, 2151450260UL, 110719262UL, 3697978033UL, +1084030545UL, 159906818UL, 767772303UL, 4133333579UL, 1069092002UL, 2364406907UL, 1290801202UL, 42955292UL, 3629845331UL, 1464127305UL, 1616628807UL, 987794861UL, 3222189776UL, 3256744141UL, 2437350057UL, 39991274UL, 3644076751UL, 3142424684UL, 1024703328UL, 443099203UL, 643536212UL, 1487589384UL, 918511196UL, 2755167056UL, 276421624UL, 2492081750UL, 137688638UL, 4246877536UL, 2817867653UL, 1816283755UL, 4246096489UL, 1518475380UL, +1425765936UL, 2276077438UL, 2640849794UL, 3697925816UL, 4226506771UL, 1491702526UL, 130551477UL, 2897029415UL, 2747033756UL, 2033599579UL, 1844578694UL, 804565809UL, 437451803UL, 677924906UL, 2749065512UL, 3419189841UL, 2446610749UL, 3488484529UL, 470218446UL, 290444026UL, 3272535988UL, 1502147484UL, 611300083UL, 3809285994UL, 2546040767UL, 2853681168UL, 872826112UL, 2859302390UL, 2761919483UL, 4097961150UL, 1434560128UL, 3901654538UL, +2078946336UL, 1418537059UL, 2725734455UL, 2530097881UL, 704759480UL, 2484428922UL, 1833969372UL, 3999408333UL, 503878844UL, 3287413716UL, 2950835531UL, 1402379354UL, 3861442503UL, 4131886119UL, 2033316109UL, 2873973176UL, 1321203603UL, 1267331405UL, 237900321UL, 1316780684UL, 793441242UL, 3281524559UL, 1273427916UL, 1730738847UL, 314311643UL, 1388727135UL, 1705533557UL, 1474310231UL, 1553835665UL, 1660074989UL, 291276309UL, 421164833UL, +3884815658UL, 3088049345UL, 3307042227UL, 3228948601UL, 1717605083UL, 1864502063UL, 3799516572UL, 2372822470UL, 2691586476UL, 1172840854UL, 1577099080UL, 870101866UL, 2139291021UL, 406996656UL, 255568268UL, 897760202UL, 674745664UL, 885214361UL, 3753233375UL, 3015215223UL, 1711461259UL, 3241363282UL, 2125360928UL, 2493601640UL, 2350228245UL, 3434627328UL, 2095642963UL, 3360932494UL, 3287396242UL, 4070512427UL, 3415702664UL, 1958354224UL, +3280206940UL, 3929504236UL, 3390499817UL, 4144225735UL, 3621750606UL, 3205006592UL, 3495743785UL, 269239326UL, 2181299371UL, 2898796651UL, 2613623219UL, 3988711298UL, 2162437858UL, 949553433UL, 3289670000UL, 3559525307UL, 3366925567UL, 2112148665UL, 955626393UL, 1790865381UL, 699223558UL, 3889584301UL, 1020750250UL, 4105283899UL, 2295851818UL, 4045668915UL, 2224770025UL, 766386910UL, 4265157386UL, 89139307UL, 2099710177UL, 1012450874UL, +1875492446UL, 1927399417UL, 767450812UL, 654474783UL, 4265293038UL, 4041215389UL, 4102336947UL, 4263617328UL, 2135826340UL, 2317231535UL, 3773895729UL, 403151111UL, 1400693138UL, 4255050194UL, 755369466UL, 2325764302UL, 2617301159UL, 4165707294UL, 1206304709UL, 2415645397UL, 4276004841UL, 1457022279UL, 662660652UL, 795140282UL, 828519889UL, 805830562UL, 1179976369UL, 2212548232UL, 755708248UL, 1034682071UL, 899950902UL, 1906046264UL, +1861009040UL, 310711525UL, 920739741UL, 2322414272UL, 3179236470UL, 81822135UL, 4111390320UL, 1800166783UL, 112253014UL, 688771939UL, 1050990794UL, 3124647483UL, 287052171UL, 1363630156UL, 3447798279UL, 1405733552UL, 3075862538UL, 1682808202UL, 1595154222UL, 1173705692UL, 680713285UL, 2748212230UL, 568610527UL, 3434965538UL, 1114942930UL, 2835858745UL, 2575992250UL, 3243355150UL, 2127580225UL, 1855934450UL, 3915941751UL, 2228679809UL, +1514780124UL, 1506688039UL, 1033083295UL, 793807083UL, 1120681149UL, 4105670165UL, 3999570340UL, 2083020131UL, 1213356023UL, 3684882757UL, 3375797774UL, 3577986103UL, 2092046164UL, 2593847443UL, 1826450612UL, 367828409UL, 3198272513UL, 1941316667UL, 943707510UL, 907134807UL, 2020457947UL, 1462193665UL, 2964617539UL, 4216491663UL, 2625270800UL, 2395371467UL, 3691003028UL, 3659016793UL, 2381847054UL, 3513105567UL, 3013019506UL, 2731245927UL, +}, +{ +1680024716UL, 2112340059UL, 3387475367UL, 2080916186UL, 1431532386UL, 3907378472UL, 2636491350UL, 2176128529UL, 2236616671UL, 3736851460UL, 2604001339UL, 3893075234UL, 3495918635UL, 4116370522UL, 1384310379UL, 3660102574UL, 2030233939UL, 2759207091UL, 49347923UL, 97526506UL, 2566932710UL, 1566181275UL, 3127827248UL, 578401670UL, 1499229308UL, 2581732444UL, 279715551UL, 809690877UL, 1438444015UL, 878935323UL, 1495277039UL, 3417305339UL, +2858903785UL, 3074075088UL, 603749086UL, 2370669734UL, 391683868UL, 3933465331UL, 2884128106UL, 1478317876UL, 1864988335UL, 2925823809UL, 4133578805UL, 218104493UL, 368652174UL, 1998600344UL, 1109346044UL, 1716435313UL, 415435111UL, 91393686UL, 2536620737UL, 1440068573UL, 481874870UL, 142128108UL, 988825519UL, 2077118779UL, 2858045339UL, 4068162251UL, 115593872UL, 1364244587UL, 3550167006UL, 3728768059UL, 1772423685UL, 2504624145UL, +248732306UL, 1412607307UL, 4081166331UL, 154438218UL, 1652901877UL, 3932533490UL, 3142799969UL, 3154073676UL, 3112018078UL, 2757873595UL, 2364830126UL, 2855791484UL, 793851407UL, 507785167UL, 263713916UL, 4060700051UL, 3291978358UL, 1584226715UL, 2546417990UL, 450747961UL, 2951067700UL, 2706009093UL, 1788578194UL, 4030171132UL, 2610979903UL, 573420740UL, 4269115622UL, 2180305819UL, 2646894726UL, 716649335UL, 3875715683UL, 853428184UL, +2436760738UL, 4190071217UL, 2754423535UL, 540698101UL, 4082489821UL, 741976046UL, 267559495UL, 1591532642UL, 2500610323UL, 3203248679UL, 147312102UL, 2772368222UL, 1412987047UL, 2295185573UL, 1932341300UL, 898396308UL, 1837129999UL, 3113914292UL, 2613354524UL, 3141601915UL, 276087167UL, 1887389351UL, 757801450UL, 3752353732UL, 2745818074UL, 1442953464UL, 3802648347UL, 223728071UL, 2169947402UL, 1338125300UL, 3642174036UL, 2794462634UL, +2326349851UL, 862746036UL, 3577092599UL, 627103363UL, 552173564UL, 4142604459UL, 2310329406UL, 583522272UL, 189323282UL, 1217612313UL, 73550248UL, 2434692829UL, 2757269706UL, 2392210091UL, 3032922600UL, 3573904125UL, 2897178037UL, 2632631469UL, 3085332665UL, 3775619904UL, 2563291734UL, 1351375865UL, 4043427793UL, 1803743084UL, 3112116579UL, 522940594UL, 2690374983UL, 2613871529UL, 3810037031UL, 1765642390UL, 534554747UL, 1930852049UL, +2264349344UL, 1680024716UL, 2112340059UL, 3387475367UL, 2080916186UL, 75966494UL, 3907378472UL, 2636491350UL, 2176128529UL, 2236616671UL, 2372987046UL, 2604001339UL, 3893075234UL, 3495918635UL, 4116370522UL, 534929913UL, 3660102574UL, 2030233939UL, 2759207091UL, 49347923UL, 987575186UL, 2566932710UL, 1566181275UL, 3127827248UL, 578401670UL, 3731513754UL, 2581732444UL, 279715551UL, 809690877UL, 1438444015UL, 2185866850UL, 1495277039UL, +3417305339UL, 2858903785UL, 3074075088UL, 4198538376UL, 2370669734UL, 391683868UL, 3933465331UL, 2884128106UL, 1400216510UL, 1864988335UL, 2925823809UL, 4133578805UL, 218104493UL, 2798390374UL, 1998600344UL, 1109346044UL, 1716435313UL, 415435111UL, 1892535124UL, 2536620737UL, 1440068573UL, 481874870UL, 142128108UL, 329082740UL, 2077118779UL, 2858045339UL, 4068162251UL, 115593872UL, 2644000449UL, 3550167006UL, 3728768059UL, 1772423685UL, +2504624145UL, 2140118619UL, 1412607307UL, 4081166331UL, 154438218UL, 1652901877UL, 3804911318UL, 3142799969UL, 3154073676UL, 3112018078UL, 2757873595UL, 50297646UL, 2855791484UL, 793851407UL, 507785167UL, 263713916UL, 3324588195UL, 3291978358UL, 1584226715UL, 2546417990UL, 450747961UL, 3455625012UL, 2706009093UL, 1788578194UL, 4030171132UL, 2610979903UL, 3835380965UL, 4269115622UL, 2180305819UL, 2646894726UL, 716649335UL, 2607142354UL, +853428184UL, 2436760738UL, 4190071217UL, 2754423535UL, 456808691UL, 4082489821UL, 741976046UL, 267559495UL, 1591532642UL, 2722205042UL, 3203248679UL, 147312102UL, 2772368222UL, 1412987047UL, 1950543946UL, 1932341300UL, 898396308UL, 1837129999UL, 3113914292UL, 428616392UL, 3141601915UL, 276087167UL, 1887389351UL, 757801450UL, 963534966UL, 2745818074UL, 1442953464UL, 3802648347UL, 223728071UL, 229039300UL, 1338125300UL, 3642174036UL, +2794462634UL, 2326349851UL, 206115203UL, 3577092599UL, 627103363UL, 552173564UL, 4142604459UL, 1492461846UL, 583522272UL, 189323282UL, 1217612313UL, 73550248UL, 3552211807UL, 2757269706UL, 2392210091UL, 3032922600UL, 3573904125UL, 810640644UL, 2632631469UL, 3085332665UL, 3775619904UL, 2563291734UL, 922608790UL, 4043427793UL, 1803743084UL, 3112116579UL, 522940594UL, 1785093944UL, 2613871529UL, 3810037031UL, 1765642390UL, 534554747UL, +3528050076UL, 2264349344UL, 1680024716UL, 2112340059UL, 3387475367UL, 3295682653UL, 75966494UL, 3907378472UL, 2636491350UL, 2176128529UL, 3574915532UL, 2372987046UL, 2604001339UL, 3893075234UL, 3495918635UL, 1280296085UL, 534929913UL, 3660102574UL, 2030233939UL, 2759207091UL, 299776535UL, 987575186UL, 2566932710UL, 1566181275UL, 3127827248UL, 3874691533UL, 3731513754UL, 2581732444UL, 279715551UL, 809690877UL, 3100791084UL, 2185866850UL, +1495277039UL, 3417305339UL, 2858903785UL, 1310351481UL, 4198538376UL, 2370669734UL, 391683868UL, 3933465331UL, 2749085130UL, 1400216510UL, 1864988335UL, 2925823809UL, 4133578805UL, 3352814594UL, 2798390374UL, 1998600344UL, 1109346044UL, 1716435313UL, 1571752941UL, 1892535124UL, 2536620737UL, 1440068573UL, 481874870UL, 2485033697UL, 329082740UL, 2077118779UL, 2858045339UL, 4068162251UL, 3837440666UL, 2644000449UL, 3550167006UL, 3728768059UL, +1772423685UL, 1176559812UL, 2140118619UL, 1412607307UL, 4081166331UL, 154438218UL, 2902622972UL, 3804911318UL, 3142799969UL, 3154073676UL, 3112018078UL, 2403391233UL, 50297646UL, 2855791484UL, 793851407UL, 507785167UL, 2351826747UL, 3324588195UL, 3291978358UL, 1584226715UL, 2546417990UL, 746876926UL, 3455625012UL, 2706009093UL, 1788578194UL, 4030171132UL, 3779307353UL, 3835380965UL, 4269115622UL, 2180305819UL, 2646894726UL, 2602235234UL, +2607142354UL, 853428184UL, 2436760738UL, 4190071217UL, 2066757692UL, 456808691UL, 4082489821UL, 741976046UL, 267559495UL, 3001080633UL, 2722205042UL, 3203248679UL, 147312102UL, 2772368222UL, 89950260UL, 1950543946UL, 1932341300UL, 898396308UL, 1837129999UL, 947911286UL, 428616392UL, 3141601915UL, 276087167UL, 1887389351UL, 2583987247UL, 963534966UL, 2745818074UL, 1442953464UL, 3802648347UL, 4229124441UL, 229039300UL, 1338125300UL, +3642174036UL, 2794462634UL, 2472155633UL, 206115203UL, 3577092599UL, 627103363UL, 552173564UL, 2586882739UL, 1492461846UL, 583522272UL, 189323282UL, 1217612313UL, 3501549884UL, 3552211807UL, 2757269706UL, 2392210091UL, 3032922600UL, 740675778UL, 810640644UL, 2632631469UL, 3085332665UL, 3775619904UL, 3643289881UL, 922608790UL, 4043427793UL, 1803743084UL, 3112116579UL, 2213337398UL, 1785093944UL, 2613871529UL, 3810037031UL, 1765642390UL, +762472016UL, 3528050076UL, 2264349344UL, 1680024716UL, 2112340059UL, 1372272974UL, 3295682653UL, 75966494UL, 3907378472UL, 2636491350UL, 3117471955UL, 3574915532UL, 2372987046UL, 2604001339UL, 3893075234UL, 915576383UL, 1280296085UL, 534929913UL, 3660102574UL, 2030233939UL, 346368350UL, 299776535UL, 987575186UL, 2566932710UL, 1566181275UL, 3535223896UL, 3874691533UL, 3731513754UL, 2581732444UL, 279715551UL, 2456894951UL, 3100791084UL, +2185866850UL, 1495277039UL, 3417305339UL, 1618871086UL, 1310351481UL, 4198538376UL, 2370669734UL, 391683868UL, 2009676005UL, 2749085130UL, 1400216510UL, 1864988335UL, 2925823809UL, 58955107UL, 3352814594UL, 2798390374UL, 1998600344UL, 1109346044UL, 3273979614UL, 1571752941UL, 1892535124UL, 2536620737UL, 1440068573UL, 1174168447UL, 2485033697UL, 329082740UL, 2077118779UL, 2858045339UL, 4062921629UL, 3837440666UL, 2644000449UL, 3550167006UL, +3728768059UL, 2642133401UL, 1176559812UL, 2140118619UL, 1412607307UL, 4081166331UL, 3124905304UL, 2902622972UL, 3804911318UL, 3142799969UL, 3154073676UL, 1449454613UL, 2403391233UL, 50297646UL, 2855791484UL, 793851407UL, 3514201526UL, 2351826747UL, 3324588195UL, 3291978358UL, 1584226715UL, 3636681672UL, 746876926UL, 3455625012UL, 2706009093UL, 1788578194UL, 3451519459UL, 3779307353UL, 3835380965UL, 4269115622UL, 2180305819UL, 3987989524UL, +2602235234UL, 2607142354UL, 853428184UL, 2436760738UL, 2151617107UL, 2066757692UL, 456808691UL, 4082489821UL, 741976046UL, 3590081269UL, 3001080633UL, 2722205042UL, 3203248679UL, 147312102UL, 3432947806UL, 89950260UL, 1950543946UL, 1932341300UL, 898396308UL, 3828432864UL, 947911286UL, 428616392UL, 3141601915UL, 276087167UL, 2517666433UL, 2583987247UL, 963534966UL, 2745818074UL, 1442953464UL, 2223986807UL, 4229124441UL, 229039300UL, +1338125300UL, 3642174036UL, 1053796945UL, 2472155633UL, 206115203UL, 3577092599UL, 627103363UL, 1113276084UL, 2586882739UL, 1492461846UL, 583522272UL, 189323282UL, 1490604990UL, 3501549884UL, 3552211807UL, 2757269706UL, 2392210091UL, 3545407532UL, 740675778UL, 810640644UL, 2632631469UL, 3085332665UL, 755862267UL, 3643289881UL, 922608790UL, 4043427793UL, 1803743084UL, 1954166630UL, 2213337398UL, 1785093944UL, 2613871529UL, 3810037031UL, +3042935707UL, 3162182177UL, 2791346436UL, 1901925289UL, 863100941UL, 3367519168UL, 1972623238UL, 3664303070UL, 604922059UL, 3026817982UL, 1436412310UL, 4096180631UL, 1597561857UL, 4206212303UL, 4127914332UL, 3228677359UL, 3985733659UL, 3597290113UL, 4251197894UL, 3451370603UL, 609679338UL, 3360835257UL, 1372239885UL, 638572328UL, 3806422284UL, 3974147336UL, 1804280837UL, 4209089291UL, 2021797469UL, 3557188838UL, 409727186UL, 2114649178UL, +687702120UL, 2542445992UL, 1235991799UL, 460479179UL, 2008348175UL, 887884478UL, 3942327811UL, 2999928223UL, 4171339789UL, 2286339235UL, 1293442231UL, 1575942850UL, 76122475UL, 1440527701UL, 2006558403UL, 1544148172UL, 895899367UL, 681826913UL, 4094701935UL, 3995413790UL, 1027509154UL, 2264990896UL, 1938238113UL, 213430250UL, 222469320UL, 609726517UL, 3581538106UL, 492802663UL, 120480843UL, 1720004062UL, 1132674507UL, 911082758UL, +2909148131UL, 566658805UL, 3964114445UL, 3483602509UL, 1793438750UL, 165562604UL, 3641830063UL, 2394205521UL, 3404874822UL, 1672998096UL, 916151953UL, 1141264477UL, 3171661340UL, 3803396219UL, 3018337382UL, 1863902683UL, 2474641928UL, 3250365071UL, 3897886220UL, 1219701051UL, 51332576UL, 1358614881UL, 1707407492UL, 3670647816UL, 923357625UL, 343687395UL, 3991339686UL, 3913575403UL, 1267727936UL, 4001357856UL, 3820224848UL, 2942896724UL, +3505936742UL, 1403285299UL, 1992762049UL, 567748449UL, 2202721585UL, 2781324216UL, 1724850068UL, 2408314541UL, 3073975813UL, 3992810029UL, 2475242354UL, 540562053UL, 2185198943UL, 3759352041UL, 3373885614UL, 1132999410UL, 1097554565UL, 4089342358UL, 3239542922UL, 2451748646UL, 407290679UL, 3188103200UL, 1708016248UL, 26848241UL, 2796711130UL, 3090711568UL, 4068389322UL, 3420916085UL, 3137567033UL, 2877819818UL, 22133454UL, 4629160UL, +3703695249UL, 1920151708UL, 1175452162UL, 130015299UL, 3331834713UL, 1099225384UL, 689254331UL, 1851083761UL, 2654970209UL, 3259297936UL, 3742819314UL, 3524284766UL, 2291819083UL, 3494031861UL, 16242889UL, 3545082774UL, 1997878108UL, 777447699UL, 4244916543UL, 3508640253UL, 3782278393UL, 2107258964UL, 2139074576UL, 1383217899UL, 2337934322UL, 3181899620UL, 1285955765UL, 2989610020UL, 3326862146UL, 1168587380UL, 801203532UL, 3020809957UL, +}, +{ +3810471203UL, 1017064446UL, 1595207573UL, 441087832UL, 3326746890UL, 3294064431UL, 167972517UL, 3625210015UL, 1011845006UL, 2980240819UL, 1778354660UL, 3041730987UL, 1598611350UL, 2015169745UL, 2321724978UL, 3390812967UL, 2432904511UL, 113261909UL, 3957193232UL, 3806115908UL, 2965828929UL, 2035392295UL, 3500116619UL, 2881232416UL, 1672212265UL, 1607201428UL, 425148945UL, 1262591961UL, 2221781268UL, 4215047456UL, 2148245850UL, 2787488981UL, +1077262192UL, 2085467561UL, 3053954888UL, 3584435116UL, 3013084787UL, 287099941UL, 1290407232UL, 4078552287UL, 2658945475UL, 4251530898UL, 2403086478UL, 2884923598UL, 3545110453UL, 4105390090UL, 343200643UL, 3189888821UL, 4086304363UL, 3466483195UL, 259435633UL, 2846377387UL, 497258846UL, 272775541UL, 985737911UL, 2957688879UL, 2180784344UL, 3434619542UL, 3643384838UL, 2228652440UL, 3107480718UL, 2208729807UL, 596436263UL, 3255120711UL, +3248886970UL, 519242965UL, 602979109UL, 1619614UL, 1391563565UL, 56262588UL, 1584463910UL, 1849038201UL, 728022295UL, 848624947UL, 1813827408UL, 428214945UL, 1246345586UL, 4213351865UL, 168985863UL, 456608054UL, 4277869380UL, 3886828599UL, 2264054549UL, 3110967170UL, 3138175314UL, 2649164828UL, 3369378320UL, 3648350039UL, 3524848759UL, 1468470706UL, 3558859222UL, 2669673235UL, 831851874UL, 4285651092UL, 4224147373UL, 1088456706UL, +231954609UL, 3118005852UL, 225508069UL, 883105389UL, 856371341UL, 2001356578UL, 639336670UL, 2363501707UL, 3622399552UL, 4024065226UL, 1093546838UL, 4263608561UL, 1852072422UL, 425195042UL, 2441102396UL, 296426333UL, 384641750UL, 3559334435UL, 1757327033UL, 1016016207UL, 3595686646UL, 24777793UL, 623926105UL, 2169195923UL, 1779396793UL, 646997837UL, 1459728476UL, 2644865980UL, 1994581089UL, 3956278544UL, 919592580UL, 2153558858UL, +2029633394UL, 3837501009UL, 4016560170UL, 484838096UL, 3652199054UL, 1971790561UL, 605295089UL, 637470291UL, 278970544UL, 3574824693UL, 295866521UL, 1755035156UL, 2542341803UL, 1588716357UL, 1502596918UL, 4124554133UL, 3547049843UL, 1768033045UL, 1531734630UL, 101448323UL, 3233017580UL, 1793222944UL, 3187853500UL, 186000900UL, 803444571UL, 2820254958UL, 2009384608UL, 2384668855UL, 2222812920UL, 633608665UL, 2028480056UL, 1258028235UL, +545095949UL, 3810471203UL, 1017064446UL, 1595207573UL, 441087832UL, 899068662UL, 3294064431UL, 167972517UL, 3625210015UL, 1011845006UL, 3951305793UL, 1778354660UL, 3041730987UL, 1598611350UL, 2015169745UL, 1885149424UL, 3390812967UL, 2432904511UL, 113261909UL, 3957193232UL, 3953443155UL, 2965828929UL, 2035392295UL, 3500116619UL, 2881232416UL, 329153573UL, 1607201428UL, 425148945UL, 1262591961UL, 2221781268UL, 78028761UL, 2148245850UL, +2787488981UL, 1077262192UL, 2085467561UL, 647235899UL, 3584435116UL, 3013084787UL, 287099941UL, 1290407232UL, 1467385694UL, 2658945475UL, 4251530898UL, 2403086478UL, 2884923598UL, 3489351040UL, 4105390090UL, 343200643UL, 3189888821UL, 4086304363UL, 3521512280UL, 259435633UL, 2846377387UL, 497258846UL, 272775541UL, 1367093111UL, 2957688879UL, 2180784344UL, 3434619542UL, 3643384838UL, 411877686UL, 3107480718UL, 2208729807UL, 596436263UL, +3255120711UL, 584605030UL, 519242965UL, 602979109UL, 1619614UL, 1391563565UL, 3902518209UL, 1584463910UL, 1849038201UL, 728022295UL, 848624947UL, 1932969318UL, 428214945UL, 1246345586UL, 4213351865UL, 168985863UL, 2770345237UL, 4277869380UL, 3886828599UL, 2264054549UL, 3110967170UL, 2953581033UL, 2649164828UL, 3369378320UL, 3648350039UL, 3524848759UL, 2380353977UL, 3558859222UL, 2669673235UL, 831851874UL, 4285651092UL, 1214052447UL, +1088456706UL, 231954609UL, 3118005852UL, 225508069UL, 1766983646UL, 856371341UL, 2001356578UL, 639336670UL, 2363501707UL, 1782816591UL, 4024065226UL, 1093546838UL, 4263608561UL, 1852072422UL, 1149716600UL, 2441102396UL, 296426333UL, 384641750UL, 3559334435UL, 2391309970UL, 1016016207UL, 3595686646UL, 24777793UL, 623926105UL, 362098678UL, 1779396793UL, 646997837UL, 1459728476UL, 2644865980UL, 3238673748UL, 3956278544UL, 919592580UL, +2153558858UL, 2029633394UL, 115778559UL, 4016560170UL, 484838096UL, 3652199054UL, 1971790561UL, 737357475UL, 637470291UL, 278970544UL, 3574824693UL, 295866521UL, 3989745853UL, 2542341803UL, 1588716357UL, 1502596918UL, 4124554133UL, 3016849744UL, 1768033045UL, 1531734630UL, 101448323UL, 3233017580UL, 4157527581UL, 3187853500UL, 186000900UL, 803444571UL, 2820254958UL, 1980528062UL, 2384668855UL, 2222812920UL, 633608665UL, 2028480056UL, +3166710281UL, 545095949UL, 3810471203UL, 1017064446UL, 1595207573UL, 693962828UL, 899068662UL, 3294064431UL, 167972517UL, 3625210015UL, 1486040398UL, 3951305793UL, 1778354660UL, 3041730987UL, 1598611350UL, 2859363132UL, 1885149424UL, 3390812967UL, 2432904511UL, 113261909UL, 664880478UL, 3953443155UL, 2965828929UL, 2035392295UL, 3500116619UL, 558081801UL, 329153573UL, 1607201428UL, 425148945UL, 1262591961UL, 3716247699UL, 78028761UL, +2148245850UL, 2787488981UL, 1077262192UL, 4206362947UL, 647235899UL, 3584435116UL, 3013084787UL, 287099941UL, 2536781098UL, 1467385694UL, 2658945475UL, 4251530898UL, 2403086478UL, 3075072413UL, 3489351040UL, 4105390090UL, 343200643UL, 3189888821UL, 2540485172UL, 3521512280UL, 259435633UL, 2846377387UL, 497258846UL, 2442427327UL, 1367093111UL, 2957688879UL, 2180784344UL, 3434619542UL, 1593967423UL, 411877686UL, 3107480718UL, 2208729807UL, +596436263UL, 1048686529UL, 584605030UL, 519242965UL, 602979109UL, 1619614UL, 2072745381UL, 3902518209UL, 1584463910UL, 1849038201UL, 728022295UL, 846033949UL, 1932969318UL, 428214945UL, 1246345586UL, 4213351865UL, 1066373275UL, 2770345237UL, 4277869380UL, 3886828599UL, 2264054549UL, 1877859690UL, 2953581033UL, 2649164828UL, 3369378320UL, 3648350039UL, 2537763389UL, 2380353977UL, 3558859222UL, 2669673235UL, 831851874UL, 522748140UL, +1214052447UL, 1088456706UL, 231954609UL, 3118005852UL, 1381269315UL, 1766983646UL, 856371341UL, 2001356578UL, 639336670UL, 667275675UL, 1782816591UL, 4024065226UL, 1093546838UL, 4263608561UL, 2057337961UL, 1149716600UL, 2441102396UL, 296426333UL, 384641750UL, 340523210UL, 2391309970UL, 1016016207UL, 3595686646UL, 24777793UL, 3094832341UL, 362098678UL, 1779396793UL, 646997837UL, 1459728476UL, 1169681568UL, 3238673748UL, 3956278544UL, +919592580UL, 2153558858UL, 388335108UL, 115778559UL, 4016560170UL, 484838096UL, 3652199054UL, 1764858181UL, 737357475UL, 637470291UL, 278970544UL, 3574824693UL, 3671458900UL, 3989745853UL, 2542341803UL, 1588716357UL, 1502596918UL, 2102871406UL, 3016849744UL, 1768033045UL, 1531734630UL, 101448323UL, 3964942332UL, 4157527581UL, 3187853500UL, 186000900UL, 803444571UL, 3425652083UL, 1980528062UL, 2384668855UL, 2222812920UL, 633608665UL, +3035373876UL, 3166710281UL, 545095949UL, 3810471203UL, 1017064446UL, 669282349UL, 693962828UL, 899068662UL, 3294064431UL, 167972517UL, 2007256988UL, 1486040398UL, 3951305793UL, 1778354660UL, 3041730987UL, 2827768941UL, 2859363132UL, 1885149424UL, 3390812967UL, 2432904511UL, 3700915653UL, 664880478UL, 3953443155UL, 2965828929UL, 2035392295UL, 1461208330UL, 558081801UL, 329153573UL, 1607201428UL, 425148945UL, 1700881129UL, 3716247699UL, +78028761UL, 2148245850UL, 2787488981UL, 2706775080UL, 4206362947UL, 647235899UL, 3584435116UL, 3013084787UL, 2958545221UL, 2536781098UL, 1467385694UL, 2658945475UL, 4251530898UL, 2241012567UL, 3075072413UL, 3489351040UL, 4105390090UL, 343200643UL, 490164649UL, 2540485172UL, 3521512280UL, 259435633UL, 2846377387UL, 4073611831UL, 2442427327UL, 1367093111UL, 2957688879UL, 2180784344UL, 1835510773UL, 1593967423UL, 411877686UL, 3107480718UL, +2208729807UL, 3306732468UL, 1048686529UL, 584605030UL, 519242965UL, 602979109UL, 2978864605UL, 2072745381UL, 3902518209UL, 1584463910UL, 1849038201UL, 3284115169UL, 846033949UL, 1932969318UL, 428214945UL, 1246345586UL, 194166002UL, 1066373275UL, 2770345237UL, 4277869380UL, 3886828599UL, 1874087886UL, 1877859690UL, 2953581033UL, 2649164828UL, 3369378320UL, 4145454028UL, 2537763389UL, 2380353977UL, 3558859222UL, 2669673235UL, 739345884UL, +522748140UL, 1214052447UL, 1088456706UL, 231954609UL, 3605603781UL, 1381269315UL, 1766983646UL, 856371341UL, 2001356578UL, 2049940324UL, 667275675UL, 1782816591UL, 4024065226UL, 1093546838UL, 152524382UL, 2057337961UL, 1149716600UL, 2441102396UL, 296426333UL, 3195130788UL, 340523210UL, 2391309970UL, 1016016207UL, 3595686646UL, 180492441UL, 3094832341UL, 362098678UL, 1779396793UL, 646997837UL, 2458167607UL, 1169681568UL, 3238673748UL, +3956278544UL, 919592580UL, 3421005218UL, 388335108UL, 115778559UL, 4016560170UL, 484838096UL, 2649676374UL, 1764858181UL, 737357475UL, 637470291UL, 278970544UL, 2236401278UL, 3671458900UL, 3989745853UL, 2542341803UL, 1588716357UL, 1241570134UL, 2102871406UL, 3016849744UL, 1768033045UL, 1531734630UL, 1765654724UL, 3964942332UL, 4157527581UL, 3187853500UL, 186000900UL, 2189716659UL, 3425652083UL, 1980528062UL, 2384668855UL, 2222812920UL, +3955466207UL, 2426547616UL, 3846752458UL, 3015538636UL, 2342593365UL, 3613176865UL, 3484860981UL, 4278370194UL, 1979143878UL, 1159739458UL, 3714038404UL, 396530346UL, 3276617756UL, 3293940597UL, 4050183149UL, 1418571985UL, 402563753UL, 2702853013UL, 2289900621UL, 2267058511UL, 3482161995UL, 3375026019UL, 1988640267UL, 3674438074UL, 4124612310UL, 1057883705UL, 434730475UL, 3210959778UL, 4102029739UL, 2140938750UL, 3176753074UL, 2356971512UL, +3969685288UL, 1556275580UL, 2648433428UL, 3959375381UL, 478841344UL, 1496991528UL, 3309714981UL, 569990368UL, 3660587501UL, 2550379574UL, 1177519842UL, 2652707373UL, 543943404UL, 1912551128UL, 2278132032UL, 1484596780UL, 3570913985UL, 2982401320UL, 1413776035UL, 3177275459UL, 3036211597UL, 1091740466UL, 3448424311UL, 1445187645UL, 3205024875UL, 3135795254UL, 823738729UL, 3742134467UL, 4066657438UL, 1226311678UL, 2403605393UL, 537573634UL, +3457409768UL, 1940233423UL, 1761431281UL, 1129427309UL, 2443661283UL, 3200814257UL, 4094866249UL, 2666869754UL, 604785127UL, 2213464116UL, 3002782918UL, 468024929UL, 2490681314UL, 3666681384UL, 1583346053UL, 3049668798UL, 3592153237UL, 2573082448UL, 3082970021UL, 1461796708UL, 832526980UL, 3728763274UL, 355291229UL, 4029588456UL, 832358279UL, 2125298737UL, 3681181038UL, 3245535160UL, 1333342738UL, 1868897492UL, 446790068UL, 1278093154UL, +2090118615UL, 4158925515UL, 4062165914UL, 822726809UL, 1154960183UL, 286518382UL, 1170424276UL, 2554691236UL, 3674133415UL, 2765714969UL, 2330865375UL, 1908307334UL, 3537287082UL, 410252600UL, 3977128218UL, 424210327UL, 2919071615UL, 2715518134UL, 64568844UL, 480972649UL, 2488797168UL, 1302817038UL, 2213995265UL, 4229997295UL, 2200797852UL, 109368057UL, 3033807022UL, 1907400078UL, 645977948UL, 1410909090UL, 3700787906UL, 3375062371UL, +629087832UL, 1344281719UL, 4249981139UL, 3457543297UL, 1218556849UL, 864222854UL, 1458445945UL, 914545469UL, 3451164212UL, 1088025757UL, 1129933985UL, 953788883UL, 2406172924UL, 170364546UL, 3505490646UL, 1027553899UL, 2864067776UL, 436854871UL, 1342782209UL, 761167471UL, 2660173631UL, 4159507498UL, 4172028400UL, 2442254644UL, 2110123720UL, 2315991253UL, 873066601UL, 1725470559UL, 3831299052UL, 678672031UL, 1585431329UL, 3495750550UL, +}, +{ +1998393432UL, 2665389278UL, 3989307699UL, 3267631636UL, 3861682977UL, 3243522970UL, 1243992413UL, 2200497260UL, 3821883021UL, 4187123083UL, 3451270040UL, 3044132745UL, 2101287249UL, 2340839784UL, 227040990UL, 1724350416UL, 3228881240UL, 3123386528UL, 4279362126UL, 3098224464UL, 2635534069UL, 3622906431UL, 206207480UL, 1894245533UL, 2152374527UL, 1011223653UL, 7271757UL, 2972858087UL, 207942127UL, 3355362797UL, 2593296740UL, 174093751UL, +3713822176UL, 4212355586UL, 3335605224UL, 1171716408UL, 2867257989UL, 1522213957UL, 2016192462UL, 4229688395UL, 2174928148UL, 1468226225UL, 3938290338UL, 493240317UL, 3229423344UL, 2585475729UL, 3112454413UL, 1881171707UL, 2555908056UL, 1997546352UL, 380428329UL, 3341885423UL, 3307510279UL, 3519476676UL, 3613100811UL, 2555826262UL, 109341943UL, 2382715395UL, 3883409616UL, 1593551879UL, 2163678014UL, 3379783137UL, 2810374300UL, 1516064864UL, +561144874UL, 316017838UL, 1899237567UL, 70857401UL, 3435185465UL, 4234661323UL, 2580352177UL, 32879620UL, 4171670150UL, 1986234067UL, 3589478191UL, 2073132526UL, 2603712175UL, 377997975UL, 2474419397UL, 3110698341UL, 812664089UL, 1778922726UL, 1686111212UL, 972784138UL, 3936486236UL, 2711468739UL, 423435866UL, 1661961159UL, 802312780UL, 1868728136UL, 1760295704UL, 3357409828UL, 215039860UL, 683184627UL, 4019111064UL, 3609261689UL, +2167554309UL, 1831085281UL, 3389357802UL, 4193421575UL, 628277197UL, 2900207619UL, 993609502UL, 3429627083UL, 2636466084UL, 3652352199UL, 1780133580UL, 1670387713UL, 4086070210UL, 4004540729UL, 783029246UL, 2165667566UL, 1739001057UL, 377639972UL, 1102689625UL, 1945278055UL, 3941185940UL, 3685368326UL, 1881761572UL, 2201338934UL, 801752UL, 2729497735UL, 492844690UL, 2998826141UL, 3844964457UL, 3679088359UL, 2196391660UL, 4222269404UL, +357321611UL, 3727170055UL, 1819614072UL, 2348798457UL, 4294366646UL, 1952884323UL, 3574345216UL, 2040734807UL, 232392443UL, 4183498179UL, 2614866055UL, 112120292UL, 3624018350UL, 3340709877UL, 3097507723UL, 1268833488UL, 3570501956UL, 3338260086UL, 293812421UL, 3683058169UL, 1147960351UL, 283731890UL, 2171233479UL, 1830154455UL, 4036602681UL, 1996981699UL, 132803834UL, 40256165UL, 2158110401UL, 3575159090UL, 3196553513UL, 3559872992UL, +3402884675UL, 1998393432UL, 2665389278UL, 3989307699UL, 3267631636UL, 3617519767UL, 3243522970UL, 1243992413UL, 2200497260UL, 3821883021UL, 3715729085UL, 3451270040UL, 3044132745UL, 2101287249UL, 2340839784UL, 3173635549UL, 1724350416UL, 3228881240UL, 3123386528UL, 4279362126UL, 2287520039UL, 2635534069UL, 3622906431UL, 206207480UL, 1894245533UL, 96723416UL, 1011223653UL, 7271757UL, 2972858087UL, 207942127UL, 1668335352UL, 2593296740UL, +174093751UL, 3713822176UL, 4212355586UL, 49226793UL, 1171716408UL, 2867257989UL, 1522213957UL, 2016192462UL, 118712412UL, 2174928148UL, 1468226225UL, 3938290338UL, 493240317UL, 3788174304UL, 2585475729UL, 3112454413UL, 1881171707UL, 2555908056UL, 3351139844UL, 380428329UL, 3341885423UL, 3307510279UL, 3519476676UL, 1368994724UL, 2555826262UL, 109341943UL, 2382715395UL, 3883409616UL, 1561509458UL, 2163678014UL, 3379783137UL, 2810374300UL, +1516064864UL, 2313252274UL, 316017838UL, 1899237567UL, 70857401UL, 3435185465UL, 2585770746UL, 2580352177UL, 32879620UL, 4171670150UL, 1986234067UL, 3317983509UL, 2073132526UL, 2603712175UL, 377997975UL, 2474419397UL, 908728599UL, 812664089UL, 1778922726UL, 1686111212UL, 972784138UL, 1992540005UL, 2711468739UL, 423435866UL, 1661961159UL, 802312780UL, 907108769UL, 1760295704UL, 3357409828UL, 215039860UL, 683184627UL, 2806826652UL, +3609261689UL, 2167554309UL, 1831085281UL, 3389357802UL, 2755692689UL, 628277197UL, 2900207619UL, 993609502UL, 3429627083UL, 3605915742UL, 3652352199UL, 1780133580UL, 1670387713UL, 4086070210UL, 3717326627UL, 783029246UL, 2165667566UL, 1739001057UL, 377639972UL, 2355216626UL, 1945278055UL, 3941185940UL, 3685368326UL, 1881761572UL, 4024097818UL, 801752UL, 2729497735UL, 492844690UL, 2998826141UL, 2719601647UL, 3679088359UL, 2196391660UL, +4222269404UL, 357321611UL, 1319821972UL, 1819614072UL, 2348798457UL, 4294366646UL, 1952884323UL, 3573866689UL, 2040734807UL, 232392443UL, 4183498179UL, 2614866055UL, 440744432UL, 3624018350UL, 3340709877UL, 3097507723UL, 1268833488UL, 224895395UL, 3338260086UL, 293812421UL, 3683058169UL, 1147960351UL, 3433425235UL, 2171233479UL, 1830154455UL, 4036602681UL, 1996981699UL, 2875889721UL, 40256165UL, 2158110401UL, 3575159090UL, 3196553513UL, +1094082574UL, 3402884675UL, 1998393432UL, 2665389278UL, 3989307699UL, 4068940467UL, 3617519767UL, 3243522970UL, 1243992413UL, 2200497260UL, 441678457UL, 3715729085UL, 3451270040UL, 3044132745UL, 2101287249UL, 2181502237UL, 3173635549UL, 1724350416UL, 3228881240UL, 3123386528UL, 1968352124UL, 2287520039UL, 2635534069UL, 3622906431UL, 206207480UL, 2065093599UL, 96723416UL, 1011223653UL, 7271757UL, 2972858087UL, 1094044749UL, 1668335352UL, +2593296740UL, 174093751UL, 3713822176UL, 2887397643UL, 49226793UL, 1171716408UL, 2867257989UL, 1522213957UL, 984348433UL, 118712412UL, 2174928148UL, 1468226225UL, 3938290338UL, 2279430036UL, 3788174304UL, 2585475729UL, 3112454413UL, 1881171707UL, 4247636500UL, 3351139844UL, 380428329UL, 3341885423UL, 3307510279UL, 2887754196UL, 1368994724UL, 2555826262UL, 109341943UL, 2382715395UL, 2836761616UL, 1561509458UL, 2163678014UL, 3379783137UL, +2810374300UL, 1635278016UL, 2313252274UL, 316017838UL, 1899237567UL, 70857401UL, 3481535811UL, 2585770746UL, 2580352177UL, 32879620UL, 4171670150UL, 2248003250UL, 3317983509UL, 2073132526UL, 2603712175UL, 377997975UL, 3286162818UL, 908728599UL, 812664089UL, 1778922726UL, 1686111212UL, 4024815755UL, 1992540005UL, 2711468739UL, 423435866UL, 1661961159UL, 2257259057UL, 907108769UL, 1760295704UL, 3357409828UL, 215039860UL, 3917391198UL, +2806826652UL, 3609261689UL, 2167554309UL, 1831085281UL, 4238043113UL, 2755692689UL, 628277197UL, 2900207619UL, 993609502UL, 2036092353UL, 3605915742UL, 3652352199UL, 1780133580UL, 1670387713UL, 118446953UL, 3717326627UL, 783029246UL, 2165667566UL, 1739001057UL, 203160626UL, 2355216626UL, 1945278055UL, 3941185940UL, 3685368326UL, 546361979UL, 4024097818UL, 801752UL, 2729497735UL, 492844690UL, 1023017124UL, 2719601647UL, 3679088359UL, +2196391660UL, 4222269404UL, 621859651UL, 1319821972UL, 1819614072UL, 2348798457UL, 4294366646UL, 1114888560UL, 3573866689UL, 2040734807UL, 232392443UL, 4183498179UL, 3959504609UL, 440744432UL, 3624018350UL, 3340709877UL, 3097507723UL, 3613295037UL, 224895395UL, 3338260086UL, 293812421UL, 3683058169UL, 1655305863UL, 3433425235UL, 2171233479UL, 1830154455UL, 4036602681UL, 3731384097UL, 2875889721UL, 40256165UL, 2158110401UL, 3575159090UL, +1847744924UL, 1094082574UL, 3402884675UL, 1998393432UL, 2665389278UL, 3781866777UL, 4068940467UL, 3617519767UL, 3243522970UL, 1243992413UL, 2723708256UL, 441678457UL, 3715729085UL, 3451270040UL, 3044132745UL, 4013832842UL, 2181502237UL, 3173635549UL, 1724350416UL, 3228881240UL, 2092292494UL, 1968352124UL, 2287520039UL, 2635534069UL, 3622906431UL, 3186333458UL, 2065093599UL, 96723416UL, 1011223653UL, 7271757UL, 649658033UL, 1094044749UL, +1668335352UL, 2593296740UL, 174093751UL, 4159420309UL, 2887397643UL, 49226793UL, 1171716408UL, 2867257989UL, 2590077953UL, 984348433UL, 118712412UL, 2174928148UL, 1468226225UL, 1065322711UL, 2279430036UL, 3788174304UL, 2585475729UL, 3112454413UL, 3932517386UL, 4247636500UL, 3351139844UL, 380428329UL, 3341885423UL, 1285273904UL, 2887754196UL, 1368994724UL, 2555826262UL, 109341943UL, 2318470582UL, 2836761616UL, 1561509458UL, 2163678014UL, +3379783137UL, 674658583UL, 1635278016UL, 2313252274UL, 316017838UL, 1899237567UL, 2192372173UL, 3481535811UL, 2585770746UL, 2580352177UL, 32879620UL, 300323274UL, 2248003250UL, 3317983509UL, 2073132526UL, 2603712175UL, 3086543917UL, 3286162818UL, 908728599UL, 812664089UL, 1778922726UL, 2263290659UL, 4024815755UL, 1992540005UL, 2711468739UL, 423435866UL, 819027349UL, 2257259057UL, 907108769UL, 1760295704UL, 3357409828UL, 1142221093UL, +3917391198UL, 2806826652UL, 3609261689UL, 2167554309UL, 4108155875UL, 4238043113UL, 2755692689UL, 628277197UL, 2900207619UL, 3041719497UL, 2036092353UL, 3605915742UL, 3652352199UL, 1780133580UL, 2397410862UL, 118446953UL, 3717326627UL, 783029246UL, 2165667566UL, 2721690354UL, 203160626UL, 2355216626UL, 1945278055UL, 3941185940UL, 2768842108UL, 546361979UL, 4024097818UL, 801752UL, 2729497735UL, 4045063232UL, 1023017124UL, 2719601647UL, +3679088359UL, 2196391660UL, 2666107451UL, 621859651UL, 1319821972UL, 1819614072UL, 2348798457UL, 3555102623UL, 1114888560UL, 3573866689UL, 2040734807UL, 232392443UL, 3359040541UL, 3959504609UL, 440744432UL, 3624018350UL, 3340709877UL, 1477919696UL, 3613295037UL, 224895395UL, 3338260086UL, 293812421UL, 4210187101UL, 1655305863UL, 3433425235UL, 2171233479UL, 1830154455UL, 4150241150UL, 3731384097UL, 2875889721UL, 40256165UL, 2158110401UL, +3350246687UL, 455561037UL, 2250400255UL, 3192153445UL, 3258870230UL, 1500391873UL, 4142878334UL, 1155955691UL, 1483275844UL, 4189436981UL, 323745948UL, 1976017426UL, 2804626790UL, 2717553615UL, 2315409034UL, 954508235UL, 3845175920UL, 3999878682UL, 1247696432UL, 1743319509UL, 2998248398UL, 3694350012UL, 4072006361UL, 191306987UL, 2816321878UL, 1324077734UL, 1083060006UL, 3406855480UL, 1619622379UL, 2160350UL, 3302238190UL, 3368021261UL, +3685228564UL, 3863934685UL, 771728612UL, 854205233UL, 2304696695UL, 421449207UL, 1265752117UL, 3852292419UL, 305345788UL, 1540622105UL, 1904883477UL, 833469256UL, 134406680UL, 3012455058UL, 4035477953UL, 2925192459UL, 1559200592UL, 3851612860UL, 718484562UL, 1377960276UL, 1586892849UL, 1361298269UL, 3417917896UL, 1281324499UL, 1012538763UL, 1350578667UL, 3946475598UL, 2982283954UL, 3548792804UL, 284542749UL, 1194648577UL, 3087899716UL, +3966595444UL, 2088330116UL, 3641652062UL, 327128507UL, 593906557UL, 1092448919UL, 2459189516UL, 4053392241UL, 3356198248UL, 2352376508UL, 470648997UL, 1017041256UL, 3234172340UL, 3928191489UL, 3266226858UL, 4219289150UL, 1229098319UL, 4275351308UL, 2720777751UL, 3566728718UL, 638322822UL, 2369792461UL, 2869492261UL, 3120083828UL, 1890399556UL, 3309991008UL, 3785452464UL, 4128660314UL, 3726791982UL, 167177896UL, 461294981UL, 3988638998UL, +2937794823UL, 3981029822UL, 1111681402UL, 2015965721UL, 7261806UL, 2669786265UL, 1083582734UL, 3270228881UL, 3892235938UL, 2695872715UL, 4246051290UL, 3214293333UL, 343604199UL, 3215604888UL, 661024127UL, 2931754053UL, 3787840039UL, 2053363765UL, 363432336UL, 112334132UL, 2871797223UL, 138911320UL, 3981126938UL, 2027332192UL, 1804730644UL, 590150270UL, 641538574UL, 6802174UL, 3551446076UL, 3908480472UL, 1004531022UL, 2097228524UL, +1919074232UL, 154482247UL, 121437972UL, 1215661323UL, 1178068273UL, 1097220699UL, 2823681422UL, 262636065UL, 2943371149UL, 1768780720UL, 3866040605UL, 1855991583UL, 3988248086UL, 629223947UL, 3380612330UL, 3552916762UL, 197596340UL, 573801686UL, 2049230598UL, 2910471867UL, 2686314264UL, 1726228846UL, 3516983332UL, 726840185UL, 1241204222UL, 2237574317UL, 70568042UL, 1932610099UL, 2221862221UL, 1510378092UL, 4050391637UL, 4077539568UL, +}, +{ +3872117793UL, 803220151UL, 70843412UL, 1661103032UL, 1976811457UL, 2186373604UL, 564259972UL, 1475436923UL, 2260980893UL, 4245534505UL, 1075107552UL, 3692990573UL, 370098873UL, 4045905424UL, 2420395420UL, 2332395402UL, 207483321UL, 622317750UL, 3004242500UL, 833623111UL, 3151161301UL, 1629139881UL, 352228793UL, 2439953368UL, 3183333619UL, 2703537080UL, 3218957129UL, 3164695888UL, 1741641842UL, 963394141UL, 4241612717UL, 1034476784UL, +2035880432UL, 3977821313UL, 1543311495UL, 3010014356UL, 1638490901UL, 2364265378UL, 3420329129UL, 333361555UL, 1133565821UL, 1450937015UL, 616059115UL, 3216393887UL, 3041978455UL, 3990855695UL, 1238628750UL, 512746184UL, 3256670217UL, 1616316512UL, 2791405051UL, 93474487UL, 2865892488UL, 1901471398UL, 2930857966UL, 2178431077UL, 2325598341UL, 3189256113UL, 1302432091UL, 808592927UL, 2945846737UL, 3487931071UL, 2018175258UL, 752981057UL, +1097082589UL, 1307115286UL, 175147508UL, 3611190164UL, 850238914UL, 3318706185UL, 199743319UL, 328621708UL, 3183670050UL, 3609998315UL, 4075306371UL, 3554549067UL, 2119566187UL, 1498503842UL, 1261870696UL, 2216745780UL, 950288337UL, 1117344941UL, 2150569143UL, 2899286760UL, 1594966374UL, 888858617UL, 35840654UL, 2829539211UL, 2511395669UL, 3607190544UL, 3278412778UL, 2249895907UL, 1320858068UL, 3576889788UL, 266766189UL, 1522426851UL, +1903494122UL, 1928370573UL, 2628132591UL, 3322025904UL, 220280169UL, 433606853UL, 1428961479UL, 986074592UL, 2128892987UL, 467697583UL, 1616913929UL, 325674890UL, 444442578UL, 649166208UL, 1689709565UL, 1493452467UL, 2222122038UL, 121114616UL, 2134348225UL, 3512035688UL, 1283058921UL, 4230441398UL, 3701238559UL, 337534132UL, 1418548715UL, 1190006478UL, 500654385UL, 1766924757UL, 1944680746UL, 940574010UL, 922744002UL, 186142284UL, +3131162902UL, 1693891092UL, 3031823448UL, 2143051534UL, 1429025284UL, 1487843160UL, 3606456133UL, 2079235652UL, 2447285474UL, 2669283767UL, 3232117829UL, 2490054343UL, 3225501736UL, 2911340385UL, 382319031UL, 1516937595UL, 622543191UL, 1388990570UL, 1749179860UL, 1924483707UL, 2593474505UL, 472539197UL, 122872799UL, 2586347240UL, 880588515UL, 4046335279UL, 1712182607UL, 4270737941UL, 1336703451UL, 3390078162UL, 382216945UL, 3733326081UL, +460422073UL, 3872117793UL, 803220151UL, 70843412UL, 1661103032UL, 250339760UL, 2186373604UL, 564259972UL, 1475436923UL, 2260980893UL, 657986735UL, 1075107552UL, 3692990573UL, 370098873UL, 4045905424UL, 3201950123UL, 2332395402UL, 207483321UL, 622317750UL, 3004242500UL, 3732213278UL, 3151161301UL, 1629139881UL, 352228793UL, 2439953368UL, 3572618926UL, 2703537080UL, 3218957129UL, 3164695888UL, 1741641842UL, 685933373UL, 4241612717UL, +1034476784UL, 2035880432UL, 3977821313UL, 3855995181UL, 3010014356UL, 1638490901UL, 2364265378UL, 3420329129UL, 2355603679UL, 1133565821UL, 1450937015UL, 616059115UL, 3216393887UL, 1733804102UL, 3990855695UL, 1238628750UL, 512746184UL, 3256670217UL, 2651059231UL, 2791405051UL, 93474487UL, 2865892488UL, 1901471398UL, 2113461797UL, 2178431077UL, 2325598341UL, 3189256113UL, 1302432091UL, 2986990416UL, 2945846737UL, 3487931071UL, 2018175258UL, +752981057UL, 2428033310UL, 1307115286UL, 175147508UL, 3611190164UL, 850238914UL, 1033628405UL, 199743319UL, 328621708UL, 3183670050UL, 3609998315UL, 4024297327UL, 3554549067UL, 2119566187UL, 1498503842UL, 1261870696UL, 290361143UL, 950288337UL, 1117344941UL, 2150569143UL, 2899286760UL, 168826051UL, 888858617UL, 35840654UL, 2829539211UL, 2511395669UL, 2890882060UL, 3278412778UL, 2249895907UL, 1320858068UL, 3576889788UL, 1794920145UL, +1522426851UL, 1903494122UL, 1928370573UL, 2628132591UL, 1251697758UL, 220280169UL, 433606853UL, 1428961479UL, 986074592UL, 2707115661UL, 467697583UL, 1616913929UL, 325674890UL, 444442578UL, 122781510UL, 1689709565UL, 1493452467UL, 2222122038UL, 121114616UL, 3425723636UL, 3512035688UL, 1283058921UL, 4230441398UL, 3701238559UL, 1646155473UL, 1418548715UL, 1190006478UL, 500654385UL, 1766924757UL, 3920475367UL, 940574010UL, 922744002UL, +186142284UL, 3131162902UL, 54639113UL, 3031823448UL, 2143051534UL, 1429025284UL, 1487843160UL, 4152687885UL, 2079235652UL, 2447285474UL, 2669283767UL, 3232117829UL, 1601035152UL, 3225501736UL, 2911340385UL, 382319031UL, 1516937595UL, 3508441679UL, 1388990570UL, 1749179860UL, 1924483707UL, 2593474505UL, 2835403456UL, 122872799UL, 2586347240UL, 880588515UL, 4046335279UL, 2958058367UL, 4270737941UL, 1336703451UL, 3390078162UL, 382216945UL, +450517882UL, 460422073UL, 3872117793UL, 803220151UL, 70843412UL, 2066343874UL, 250339760UL, 2186373604UL, 564259972UL, 1475436923UL, 1683787449UL, 657986735UL, 1075107552UL, 3692990573UL, 370098873UL, 2615082840UL, 3201950123UL, 2332395402UL, 207483321UL, 622317750UL, 2655424371UL, 3732213278UL, 3151161301UL, 1629139881UL, 352228793UL, 3236724760UL, 3572618926UL, 2703537080UL, 3218957129UL, 3164695888UL, 9775065UL, 685933373UL, +4241612717UL, 1034476784UL, 2035880432UL, 1621920075UL, 3855995181UL, 3010014356UL, 1638490901UL, 2364265378UL, 1509475888UL, 2355603679UL, 1133565821UL, 1450937015UL, 616059115UL, 3666188236UL, 1733804102UL, 3990855695UL, 1238628750UL, 512746184UL, 3900473826UL, 2651059231UL, 2791405051UL, 93474487UL, 2865892488UL, 222759186UL, 2113461797UL, 2178431077UL, 2325598341UL, 3189256113UL, 2505499508UL, 2986990416UL, 2945846737UL, 3487931071UL, +2018175258UL, 2766733928UL, 2428033310UL, 1307115286UL, 175147508UL, 3611190164UL, 1909211603UL, 1033628405UL, 199743319UL, 328621708UL, 3183670050UL, 1680331218UL, 4024297327UL, 3554549067UL, 2119566187UL, 1498503842UL, 3516256046UL, 290361143UL, 950288337UL, 1117344941UL, 2150569143UL, 3182619063UL, 168826051UL, 888858617UL, 35840654UL, 2829539211UL, 645798943UL, 2890882060UL, 3278412778UL, 2249895907UL, 1320858068UL, 1436708568UL, +1794920145UL, 1522426851UL, 1903494122UL, 1928370573UL, 3693049252UL, 1251697758UL, 220280169UL, 433606853UL, 1428961479UL, 3724415861UL, 2707115661UL, 467697583UL, 1616913929UL, 325674890UL, 1448052253UL, 122781510UL, 1689709565UL, 1493452467UL, 2222122038UL, 2177448198UL, 3425723636UL, 3512035688UL, 1283058921UL, 4230441398UL, 3050940272UL, 1646155473UL, 1418548715UL, 1190006478UL, 500654385UL, 1106232UL, 3920475367UL, 940574010UL, +922744002UL, 186142284UL, 4144806511UL, 54639113UL, 3031823448UL, 2143051534UL, 1429025284UL, 2067453848UL, 4152687885UL, 2079235652UL, 2447285474UL, 2669283767UL, 428527087UL, 1601035152UL, 3225501736UL, 2911340385UL, 382319031UL, 2565464472UL, 3508441679UL, 1388990570UL, 1749179860UL, 1924483707UL, 1737735237UL, 2835403456UL, 122872799UL, 2586347240UL, 880588515UL, 597822462UL, 2958058367UL, 4270737941UL, 1336703451UL, 3390078162UL, +2532634475UL, 450517882UL, 460422073UL, 3872117793UL, 803220151UL, 801648827UL, 2066343874UL, 250339760UL, 2186373604UL, 564259972UL, 3417948976UL, 1683787449UL, 657986735UL, 1075107552UL, 3692990573UL, 2235306692UL, 2615082840UL, 3201950123UL, 2332395402UL, 207483321UL, 699310933UL, 2655424371UL, 3732213278UL, 3151161301UL, 1629139881UL, 1152704006UL, 3236724760UL, 3572618926UL, 2703537080UL, 3218957129UL, 2726926336UL, 9775065UL, +685933373UL, 4241612717UL, 1034476784UL, 2398119652UL, 1621920075UL, 3855995181UL, 3010014356UL, 1638490901UL, 252854480UL, 1509475888UL, 2355603679UL, 1133565821UL, 1450937015UL, 2655911639UL, 3666188236UL, 1733804102UL, 3990855695UL, 1238628750UL, 1115900497UL, 3900473826UL, 2651059231UL, 2791405051UL, 93474487UL, 1862985957UL, 222759186UL, 2113461797UL, 2178431077UL, 2325598341UL, 4179075132UL, 2505499508UL, 2986990416UL, 2945846737UL, +3487931071UL, 564667776UL, 2766733928UL, 2428033310UL, 1307115286UL, 175147508UL, 1759077815UL, 1909211603UL, 1033628405UL, 199743319UL, 328621708UL, 2552816198UL, 1680331218UL, 4024297327UL, 3554549067UL, 2119566187UL, 2267805778UL, 3516256046UL, 290361143UL, 950288337UL, 1117344941UL, 2897506172UL, 3182619063UL, 168826051UL, 888858617UL, 35840654UL, 2035476068UL, 645798943UL, 2890882060UL, 3278412778UL, 2249895907UL, 3278449102UL, +1436708568UL, 1794920145UL, 1522426851UL, 1903494122UL, 1500763736UL, 3693049252UL, 1251697758UL, 220280169UL, 433606853UL, 3914497854UL, 3724415861UL, 2707115661UL, 467697583UL, 1616913929UL, 918435305UL, 1448052253UL, 122781510UL, 1689709565UL, 1493452467UL, 609575172UL, 2177448198UL, 3425723636UL, 3512035688UL, 1283058921UL, 3661181550UL, 3050940272UL, 1646155473UL, 1418548715UL, 1190006478UL, 1047301661UL, 1106232UL, 3920475367UL, +940574010UL, 922744002UL, 2510633517UL, 4144806511UL, 54639113UL, 3031823448UL, 2143051534UL, 3242814908UL, 2067453848UL, 4152687885UL, 2079235652UL, 2447285474UL, 736638210UL, 428527087UL, 1601035152UL, 3225501736UL, 2911340385UL, 1849570436UL, 2565464472UL, 3508441679UL, 1388990570UL, 1749179860UL, 84517579UL, 1737735237UL, 2835403456UL, 122872799UL, 2586347240UL, 4002124614UL, 597822462UL, 2958058367UL, 4270737941UL, 1336703451UL, +3078170472UL, 1186434751UL, 700631413UL, 1497890797UL, 1195347450UL, 2560167391UL, 1116697259UL, 1254138573UL, 747913260UL, 240954704UL, 3107512667UL, 360584144UL, 3422778960UL, 3516528389UL, 3301260366UL, 1254513537UL, 122269053UL, 1579582456UL, 873334104UL, 3918835024UL, 1731872444UL, 1974410416UL, 1811172641UL, 4172523062UL, 4092675777UL, 4124987343UL, 1936078756UL, 1757348689UL, 2694415512UL, 128641660UL, 1744777659UL, 3173116729UL, +983733754UL, 1430789547UL, 701906842UL, 3367232568UL, 3266433501UL, 3572590347UL, 1453272962UL, 2106553114UL, 993786201UL, 2149441250UL, 1295181065UL, 2962229026UL, 3709052556UL, 3255608941UL, 3677730029UL, 483873127UL, 102227292UL, 2626265293UL, 2018984578UL, 2266388762UL, 1191709548UL, 2152725916UL, 583672623UL, 2230473473UL, 1995194269UL, 1740347812UL, 2558095372UL, 3070195183UL, 3023333227UL, 2497183195UL, 1908755188UL, 773027539UL, +3646876518UL, 2272586839UL, 493318726UL, 2107067517UL, 2000805278UL, 2530829636UL, 3183628745UL, 677565332UL, 1497629423UL, 82094920UL, 2214054433UL, 2635367545UL, 470855467UL, 2184853389UL, 2942188934UL, 188335670UL, 3656661644UL, 1883526235UL, 3990873975UL, 1490784356UL, 4047548172UL, 3149642641UL, 3289988179UL, 2590918909UL, 2893039564UL, 2350687346UL, 4252624874UL, 15372456UL, 1614496594UL, 2364847678UL, 2604511825UL, 422365460UL, +4195174772UL, 3266964836UL, 2008671995UL, 54038434UL, 781948549UL, 1276017666UL, 2756376612UL, 2436825273UL, 1711863836UL, 3541493950UL, 3821378841UL, 1007557618UL, 345375815UL, 2081905201UL, 2227278118UL, 1185927141UL, 1082173792UL, 3567361925UL, 1940465859UL, 541632942UL, 1830210248UL, 3757851982UL, 775883450UL, 1666577465UL, 1004944607UL, 878440834UL, 2146344131UL, 4195798476UL, 370164841UL, 3649112729UL, 37066142UL, 2311278904UL, +1935745497UL, 2304799402UL, 4107299626UL, 1348526232UL, 2473609635UL, 3284032699UL, 2374292786UL, 1762329186UL, 857978496UL, 1039346432UL, 2621413355UL, 29961014UL, 3582263091UL, 4268542513UL, 3890612190UL, 3096173646UL, 2026544230UL, 3856142618UL, 2347115934UL, 319800326UL, 3255916105UL, 2430273059UL, 823505311UL, 874255188UL, 1401925393UL, 4203707857UL, 4259159566UL, 2606881118UL, 1978288664UL, 1447576038UL, 3860341401UL, 412510348UL, +}, +{ +4052471963UL, 683640040UL, 3043876021UL, 3466644483UL, 4222418025UL, 3035140128UL, 1466027937UL, 18198088UL, 3410320851UL, 3040963721UL, 488404231UL, 3157371815UL, 769336092UL, 3240417718UL, 808582581UL, 2075839263UL, 835026995UL, 3123726486UL, 3284240985UL, 1898453053UL, 3606056482UL, 512836002UL, 2715428547UL, 4182302879UL, 1644882480UL, 3160187826UL, 390292489UL, 980889545UL, 2776206633UL, 2482799995UL, 617042280UL, 3501667414UL, +689451808UL, 497018701UL, 238525753UL, 3890163301UL, 896679896UL, 1544533015UL, 3412477225UL, 3116575138UL, 4250402651UL, 3990990746UL, 819056741UL, 1459334146UL, 158377590UL, 3444755752UL, 8230450UL, 1378706455UL, 684191332UL, 3217423797UL, 2842520097UL, 1631477948UL, 2591254230UL, 959644473UL, 1020694107UL, 1748401915UL, 3452514983UL, 3892766171UL, 1227786994UL, 2086180800UL, 2394613217UL, 2091953150UL, 870094953UL, 2306851481UL, +571550601UL, 488878212UL, 873197214UL, 2630100528UL, 2067476907UL, 2162307009UL, 2026119728UL, 115875280UL, 2905867426UL, 248774881UL, 3110900450UL, 2236032812UL, 1888510348UL, 708001855UL, 996960491UL, 3514196956UL, 1407967546UL, 1826568876UL, 3659618284UL, 2614104317UL, 2230066308UL, 1055135881UL, 2537437343UL, 1858044413UL, 2608594891UL, 2750681169UL, 3241939420UL, 3966440877UL, 2375002886UL, 2417753441UL, 1405878685UL, 1081133199UL, +1496940727UL, 382467042UL, 2745477587UL, 1209424459UL, 811187075UL, 1385604734UL, 2623887355UL, 3443875720UL, 394141555UL, 4142998949UL, 4195414618UL, 1489846841UL, 2253433808UL, 1171450286UL, 84131191UL, 4387588UL, 2641405140UL, 3525405389UL, 3273000909UL, 423660319UL, 2366546732UL, 3698878607UL, 2161119729UL, 4263629085UL, 3029102089UL, 2692507376UL, 3266869596UL, 1658012061UL, 1960169440UL, 1002311379UL, 3724446882UL, 2004188516UL, +999513506UL, 2200093802UL, 4141037460UL, 351865836UL, 412875013UL, 1535823315UL, 3880657632UL, 3109944987UL, 3207577548UL, 3462087941UL, 584875517UL, 2635241084UL, 3834145971UL, 1693380373UL, 3524443732UL, 934775214UL, 1960588847UL, 2226778032UL, 1044609478UL, 12199016UL, 1120582000UL, 226430296UL, 665553142UL, 2570993348UL, 1685535237UL, 3325420136UL, 3925248326UL, 2855346376UL, 1205558328UL, 808835317UL, 3295908896UL, 4170076136UL, +2438272365UL, 4052471963UL, 683640040UL, 3043876021UL, 3466644483UL, 1385549869UL, 3035140128UL, 1466027937UL, 18198088UL, 3410320851UL, 2171386836UL, 488404231UL, 3157371815UL, 769336092UL, 3240417718UL, 2921774554UL, 2075839263UL, 835026995UL, 3123726486UL, 3284240985UL, 72352110UL, 3606056482UL, 512836002UL, 2715428547UL, 4182302879UL, 3869483469UL, 3160187826UL, 390292489UL, 980889545UL, 2776206633UL, 1385691983UL, 617042280UL, +3501667414UL, 689451808UL, 497018701UL, 2600411809UL, 3890163301UL, 896679896UL, 1544533015UL, 3412477225UL, 356556378UL, 4250402651UL, 3990990746UL, 819056741UL, 1459334146UL, 199003993UL, 3444755752UL, 8230450UL, 1378706455UL, 684191332UL, 1750733272UL, 2842520097UL, 1631477948UL, 2591254230UL, 959644473UL, 2113375576UL, 1748401915UL, 3452514983UL, 3892766171UL, 1227786994UL, 275473920UL, 2394613217UL, 2091953150UL, 870094953UL, +2306851481UL, 897057645UL, 488878212UL, 873197214UL, 2630100528UL, 2067476907UL, 944114068UL, 2026119728UL, 115875280UL, 2905867426UL, 248774881UL, 989201307UL, 2236032812UL, 1888510348UL, 708001855UL, 996960491UL, 2121706374UL, 1407967546UL, 1826568876UL, 3659618284UL, 2614104317UL, 2931815032UL, 1055135881UL, 2537437343UL, 1858044413UL, 2608594891UL, 1423973935UL, 3241939420UL, 3966440877UL, 2375002886UL, 2417753441UL, 2514473440UL, +1081133199UL, 1496940727UL, 382467042UL, 2745477587UL, 81977310UL, 811187075UL, 1385604734UL, 2623887355UL, 3443875720UL, 2100629879UL, 4142998949UL, 4195414618UL, 1489846841UL, 2253433808UL, 337182869UL, 84131191UL, 4387588UL, 2641405140UL, 3525405389UL, 661876463UL, 423660319UL, 2366546732UL, 3698878607UL, 2161119729UL, 309510684UL, 3029102089UL, 2692507376UL, 3266869596UL, 1658012061UL, 11119541UL, 1002311379UL, 3724446882UL, +2004188516UL, 999513506UL, 3486722046UL, 4141037460UL, 351865836UL, 412875013UL, 1535823315UL, 2818130700UL, 3109944987UL, 3207577548UL, 3462087941UL, 584875517UL, 322875622UL, 3834145971UL, 1693380373UL, 3524443732UL, 934775214UL, 3879414752UL, 2226778032UL, 1044609478UL, 12199016UL, 1120582000UL, 4207259464UL, 665553142UL, 2570993348UL, 1685535237UL, 3325420136UL, 553869152UL, 2855346376UL, 1205558328UL, 808835317UL, 3295908896UL, +470585896UL, 2438272365UL, 4052471963UL, 683640040UL, 3043876021UL, 1588419572UL, 1385549869UL, 3035140128UL, 1466027937UL, 18198088UL, 363815288UL, 2171386836UL, 488404231UL, 3157371815UL, 769336092UL, 2464768302UL, 2921774554UL, 2075839263UL, 835026995UL, 3123726486UL, 4229246330UL, 72352110UL, 3606056482UL, 512836002UL, 2715428547UL, 319830805UL, 3869483469UL, 3160187826UL, 390292489UL, 980889545UL, 2966401462UL, 1385691983UL, +617042280UL, 3501667414UL, 689451808UL, 4047377762UL, 2600411809UL, 3890163301UL, 896679896UL, 1544533015UL, 764316452UL, 356556378UL, 4250402651UL, 3990990746UL, 819056741UL, 965331966UL, 199003993UL, 3444755752UL, 8230450UL, 1378706455UL, 51902971UL, 1750733272UL, 2842520097UL, 1631477948UL, 2591254230UL, 426039404UL, 2113375576UL, 1748401915UL, 3452514983UL, 3892766171UL, 2833368447UL, 275473920UL, 2394613217UL, 2091953150UL, +870094953UL, 3524323828UL, 897057645UL, 488878212UL, 873197214UL, 2630100528UL, 3939852929UL, 944114068UL, 2026119728UL, 115875280UL, 2905867426UL, 3192643919UL, 989201307UL, 2236032812UL, 1888510348UL, 708001855UL, 2166012172UL, 2121706374UL, 1407967546UL, 1826568876UL, 3659618284UL, 135277096UL, 2931815032UL, 1055135881UL, 2537437343UL, 1858044413UL, 2588429924UL, 1423973935UL, 3241939420UL, 3966440877UL, 2375002886UL, 2477142003UL, +2514473440UL, 1081133199UL, 1496940727UL, 382467042UL, 1760129281UL, 81977310UL, 811187075UL, 1385604734UL, 2623887355UL, 4070531513UL, 2100629879UL, 4142998949UL, 4195414618UL, 1489846841UL, 2688068550UL, 337182869UL, 84131191UL, 4387588UL, 2641405140UL, 1837403234UL, 661876463UL, 423660319UL, 2366546732UL, 3698878607UL, 2916121190UL, 309510684UL, 3029102089UL, 2692507376UL, 3266869596UL, 303422295UL, 11119541UL, 1002311379UL, +3724446882UL, 2004188516UL, 2652711421UL, 3486722046UL, 4141037460UL, 351865836UL, 412875013UL, 113149471UL, 2818130700UL, 3109944987UL, 3207577548UL, 3462087941UL, 1443140792UL, 322875622UL, 3834145971UL, 1693380373UL, 3524443732UL, 901891935UL, 3879414752UL, 2226778032UL, 1044609478UL, 12199016UL, 2213168758UL, 4207259464UL, 665553142UL, 2570993348UL, 1685535237UL, 1114492412UL, 553869152UL, 2855346376UL, 1205558328UL, 808835317UL, +3266626294UL, 470585896UL, 2438272365UL, 4052471963UL, 683640040UL, 3581539398UL, 1588419572UL, 1385549869UL, 3035140128UL, 1466027937UL, 4075470388UL, 363815288UL, 2171386836UL, 488404231UL, 3157371815UL, 2759472233UL, 2464768302UL, 2921774554UL, 2075839263UL, 835026995UL, 1030654310UL, 4229246330UL, 72352110UL, 3606056482UL, 512836002UL, 961858496UL, 319830805UL, 3869483469UL, 3160187826UL, 390292489UL, 2366221117UL, 2966401462UL, +1385691983UL, 617042280UL, 3501667414UL, 295865937UL, 4047377762UL, 2600411809UL, 3890163301UL, 896679896UL, 21714884UL, 764316452UL, 356556378UL, 4250402651UL, 3990990746UL, 1012967081UL, 965331966UL, 199003993UL, 3444755752UL, 8230450UL, 1255302023UL, 51902971UL, 1750733272UL, 2842520097UL, 1631477948UL, 2321320272UL, 426039404UL, 2113375576UL, 1748401915UL, 3452514983UL, 2847013518UL, 2833368447UL, 275473920UL, 2394613217UL, +2091953150UL, 1250695522UL, 3524323828UL, 897057645UL, 488878212UL, 873197214UL, 1452317325UL, 3939852929UL, 944114068UL, 2026119728UL, 115875280UL, 4061820350UL, 3192643919UL, 989201307UL, 2236032812UL, 1888510348UL, 3986446165UL, 2166012172UL, 2121706374UL, 1407967546UL, 1826568876UL, 2910745432UL, 135277096UL, 2931815032UL, 1055135881UL, 2537437343UL, 2976455307UL, 2588429924UL, 1423973935UL, 3241939420UL, 3966440877UL, 2418897705UL, +2477142003UL, 2514473440UL, 1081133199UL, 1496940727UL, 1321648771UL, 1760129281UL, 81977310UL, 811187075UL, 1385604734UL, 17644628UL, 4070531513UL, 2100629879UL, 4142998949UL, 4195414618UL, 2697310527UL, 2688068550UL, 337182869UL, 84131191UL, 4387588UL, 1724191700UL, 1837403234UL, 661876463UL, 423660319UL, 2366546732UL, 693430992UL, 2916121190UL, 309510684UL, 3029102089UL, 2692507376UL, 3917396098UL, 303422295UL, 11119541UL, +1002311379UL, 3724446882UL, 841468294UL, 2652711421UL, 3486722046UL, 4141037460UL, 351865836UL, 1733384185UL, 113149471UL, 2818130700UL, 3109944987UL, 3207577548UL, 2326233100UL, 1443140792UL, 322875622UL, 3834145971UL, 1693380373UL, 1580706359UL, 901891935UL, 3879414752UL, 2226778032UL, 1044609478UL, 3805470822UL, 2213168758UL, 4207259464UL, 665553142UL, 2570993348UL, 3406548636UL, 1114492412UL, 553869152UL, 2855346376UL, 1205558328UL, +4287831475UL, 1329654114UL, 2347235746UL, 2477803138UL, 2962371859UL, 3610024283UL, 4197266903UL, 1162294689UL, 1746713323UL, 2815058477UL, 2152552186UL, 4214791071UL, 2382522482UL, 3713914466UL, 3974765132UL, 348354997UL, 1670276150UL, 2173074887UL, 381736894UL, 3866219357UL, 1919366695UL, 3635118824UL, 2298653261UL, 3534332682UL, 1627699897UL, 4168636618UL, 3787938690UL, 2144231271UL, 2067679462UL, 217001062UL, 2308928337UL, 1620415125UL, +3526559172UL, 749451561UL, 2456947371UL, 3543607786UL, 1893824735UL, 962598819UL, 2332807164UL, 1691114891UL, 2543992233UL, 2914780639UL, 1610287145UL, 1700599697UL, 3185174208UL, 552323208UL, 2367242224UL, 3797136972UL, 3415066418UL, 2468049249UL, 1677937401UL, 40445671UL, 2886682530UL, 2585715434UL, 194932329UL, 2994003812UL, 3099556382UL, 680852222UL, 135838738UL, 1371063256UL, 995454898UL, 3754526418UL, 803635682UL, 634588682UL, +3869250783UL, 2442285521UL, 1455637058UL, 570621479UL, 2512681851UL, 1220136924UL, 750260121UL, 2909903038UL, 1582019728UL, 955115170UL, 1608265445UL, 2157390890UL, 2303678604UL, 1568394164UL, 831914289UL, 1971271392UL, 1294799854UL, 1489945167UL, 442427880UL, 1305083700UL, 1211218668UL, 2380073713UL, 2798736785UL, 2193524273UL, 3227386915UL, 1636588977UL, 3612937642UL, 435113647UL, 1591761830UL, 536210039UL, 2475747073UL, 4223795480UL, +1786737271UL, 1444661534UL, 3249410301UL, 3333695212UL, 4169107188UL, 3280638635UL, 702659930UL, 1444127970UL, 225340755UL, 2255629368UL, 746584456UL, 3965677674UL, 2671132955UL, 2080717656UL, 2145343886UL, 3712441197UL, 368422910UL, 1297685674UL, 4076123901UL, 26214470UL, 2948764826UL, 40503299UL, 1198194334UL, 2100063637UL, 1966331612UL, 2189582064UL, 2064696934UL, 1797550642UL, 3469793941UL, 2868963812UL, 851437659UL, 240918534UL, +365060070UL, 3530600064UL, 39695324UL, 1753898837UL, 1286976449UL, 3131971360UL, 2406485219UL, 3365373704UL, 3224113403UL, 1651742834UL, 587601940UL, 1574206085UL, 3739575036UL, 1413669616UL, 38172232UL, 293127854UL, 4126190109UL, 1891744061UL, 787878666UL, 456643669UL, 4228710325UL, 2025132037UL, 1492133135UL, 3122840937UL, 969442079UL, 3272420439UL, 3836126369UL, 1877655562UL, 2766212758UL, 3867984746UL, 3348077578UL, 1841216706UL, +}, +{ +1676507466UL, 1017841240UL, 2992644565UL, 476936158UL, 2468072723UL, 3113105154UL, 1154120402UL, 460889625UL, 1942263502UL, 1761593999UL, 3020908939UL, 3078194866UL, 310971889UL, 1644896012UL, 3756044556UL, 3549937583UL, 3710822994UL, 3554313733UL, 2174654326UL, 4251063242UL, 2340485150UL, 950951909UL, 4288936895UL, 3744348848UL, 706644559UL, 1085927825UL, 1595992020UL, 3288724966UL, 1367247946UL, 2950094970UL, 3925419886UL, 2628739022UL, +2528254629UL, 3582224789UL, 3907345559UL, 3373329273UL, 4255542251UL, 1185418446UL, 4018656113UL, 2854344020UL, 1381160022UL, 3642438773UL, 4284399225UL, 935780030UL, 4142412144UL, 1263328494UL, 1154237693UL, 2684443667UL, 3067549398UL, 4253090033UL, 1251034970UL, 1874233020UL, 3222830495UL, 3866931656UL, 286048055UL, 3146635362UL, 1436483376UL, 2821876495UL, 3927829532UL, 2648886905UL, 2142862852UL, 1368937545UL, 2647327844UL, 1072219385UL, +2621337706UL, 3543274652UL, 911792564UL, 1204178178UL, 4127214323UL, 2821691380UL, 3101998294UL, 730811902UL, 1989156224UL, 2872353003UL, 278290276UL, 1390223786UL, 2657819643UL, 552729795UL, 1736270535UL, 2759207116UL, 1897013739UL, 3657020278UL, 1387364861UL, 1966588302UL, 1049203087UL, 486446521UL, 3675999281UL, 714737345UL, 686837530UL, 85509025UL, 3609089773UL, 2117061768UL, 3935682560UL, 3859508784UL, 4105287041UL, 1808988481UL, +83680601UL, 1464326680UL, 1657693523UL, 3318062731UL, 1391154023UL, 234460119UL, 3551348221UL, 2245244809UL, 3635923821UL, 2814385745UL, 3497626257UL, 916790795UL, 245338628UL, 2514528380UL, 3711787525UL, 2239286063UL, 1054058916UL, 3963706010UL, 3176203796UL, 2230543409UL, 2173597546UL, 3786733892UL, 1396036965UL, 1038764273UL, 2032556038UL, 3216540537UL, 3298170974UL, 1008892557UL, 141155464UL, 1863766055UL, 3931110690UL, 191299053UL, +2019139711UL, 2409528317UL, 739418419UL, 1377144055UL, 2876702705UL, 3911939673UL, 1197696462UL, 2814009721UL, 600813233UL, 1535885024UL, 1486280357UL, 3084650548UL, 2324695947UL, 2293284974UL, 2036339249UL, 3465600153UL, 1624446108UL, 327866771UL, 3356772175UL, 1826625240UL, 1947102360UL, 3661848193UL, 1421374867UL, 3228945021UL, 1358646008UL, 1067180174UL, 2190741258UL, 643362354UL, 109899594UL, 2064362635UL, 3249674888UL, 2165543887UL, +4180291913UL, 1676507466UL, 1017841240UL, 2992644565UL, 476936158UL, 3608467942UL, 3113105154UL, 1154120402UL, 460889625UL, 1942263502UL, 1862994005UL, 3020908939UL, 3078194866UL, 310971889UL, 1644896012UL, 693774191UL, 3549937583UL, 3710822994UL, 3554313733UL, 2174654326UL, 37658897UL, 2340485150UL, 950951909UL, 4288936895UL, 3744348848UL, 2258231402UL, 1085927825UL, 1595992020UL, 3288724966UL, 1367247946UL, 3850509554UL, 3925419886UL, +2628739022UL, 2528254629UL, 3582224789UL, 3124287811UL, 3373329273UL, 4255542251UL, 1185418446UL, 4018656113UL, 1989726178UL, 1381160022UL, 3642438773UL, 4284399225UL, 935780030UL, 3622052196UL, 1263328494UL, 1154237693UL, 2684443667UL, 3067549398UL, 2786224913UL, 1251034970UL, 1874233020UL, 3222830495UL, 3866931656UL, 1529490307UL, 3146635362UL, 1436483376UL, 2821876495UL, 3927829532UL, 979247444UL, 2142862852UL, 1368937545UL, 2647327844UL, +1072219385UL, 294065371UL, 3543274652UL, 911792564UL, 1204178178UL, 4127214323UL, 103582737UL, 3101998294UL, 730811902UL, 1989156224UL, 2872353003UL, 1885087777UL, 1390223786UL, 2657819643UL, 552729795UL, 1736270535UL, 3325206451UL, 1897013739UL, 3657020278UL, 1387364861UL, 1966588302UL, 2117065739UL, 486446521UL, 3675999281UL, 714737345UL, 686837530UL, 3946214694UL, 3609089773UL, 2117061768UL, 3935682560UL, 3859508784UL, 2916136885UL, +1808988481UL, 83680601UL, 1464326680UL, 1657693523UL, 3438751781UL, 1391154023UL, 234460119UL, 3551348221UL, 2245244809UL, 3948410079UL, 2814385745UL, 3497626257UL, 916790795UL, 245338628UL, 1767303496UL, 3711787525UL, 2239286063UL, 1054058916UL, 3963706010UL, 4140631909UL, 2230543409UL, 2173597546UL, 3786733892UL, 1396036965UL, 1116033475UL, 2032556038UL, 3216540537UL, 3298170974UL, 1008892557UL, 667272562UL, 1863766055UL, 3931110690UL, +191299053UL, 2019139711UL, 272901326UL, 739418419UL, 1377144055UL, 2876702705UL, 3911939673UL, 3839312742UL, 2814009721UL, 600813233UL, 1535885024UL, 1486280357UL, 4256065219UL, 2324695947UL, 2293284974UL, 2036339249UL, 3465600153UL, 1215859603UL, 327866771UL, 3356772175UL, 1826625240UL, 1947102360UL, 4240407984UL, 1421374867UL, 3228945021UL, 1358646008UL, 1067180174UL, 4100357988UL, 643362354UL, 109899594UL, 2064362635UL, 3249674888UL, +2898852084UL, 4180291913UL, 1676507466UL, 1017841240UL, 2992644565UL, 1569683812UL, 3608467942UL, 3113105154UL, 1154120402UL, 460889625UL, 966040649UL, 1862994005UL, 3020908939UL, 3078194866UL, 310971889UL, 786634113UL, 693774191UL, 3549937583UL, 3710822994UL, 3554313733UL, 1578429713UL, 37658897UL, 2340485150UL, 950951909UL, 4288936895UL, 2528123823UL, 2258231402UL, 1085927825UL, 1595992020UL, 3288724966UL, 3544041088UL, 3850509554UL, +3925419886UL, 2628739022UL, 2528254629UL, 2562145937UL, 3124287811UL, 3373329273UL, 4255542251UL, 1185418446UL, 3693565710UL, 1989726178UL, 1381160022UL, 3642438773UL, 4284399225UL, 3271478204UL, 3622052196UL, 1263328494UL, 1154237693UL, 2684443667UL, 3615401444UL, 2786224913UL, 1251034970UL, 1874233020UL, 3222830495UL, 2572413057UL, 1529490307UL, 3146635362UL, 1436483376UL, 2821876495UL, 3993894153UL, 979247444UL, 2142862852UL, 1368937545UL, +2647327844UL, 1353904396UL, 294065371UL, 3543274652UL, 911792564UL, 1204178178UL, 3165709748UL, 103582737UL, 3101998294UL, 730811902UL, 1989156224UL, 893293786UL, 1885087777UL, 1390223786UL, 2657819643UL, 552729795UL, 3388458110UL, 3325206451UL, 1897013739UL, 3657020278UL, 1387364861UL, 3025318046UL, 2117065739UL, 486446521UL, 3675999281UL, 714737345UL, 2085926890UL, 3946214694UL, 3609089773UL, 2117061768UL, 3935682560UL, 868009118UL, +2916136885UL, 1808988481UL, 83680601UL, 1464326680UL, 797410789UL, 3438751781UL, 1391154023UL, 234460119UL, 3551348221UL, 4068940987UL, 3948410079UL, 2814385745UL, 3497626257UL, 916790795UL, 3722456098UL, 1767303496UL, 3711787525UL, 2239286063UL, 1054058916UL, 2030352819UL, 4140631909UL, 2230543409UL, 2173597546UL, 3786733892UL, 3211336683UL, 1116033475UL, 2032556038UL, 3216540537UL, 3298170974UL, 2589589144UL, 667272562UL, 1863766055UL, +3931110690UL, 191299053UL, 1139480458UL, 272901326UL, 739418419UL, 1377144055UL, 2876702705UL, 1954361769UL, 3839312742UL, 2814009721UL, 600813233UL, 1535885024UL, 3587775605UL, 4256065219UL, 2324695947UL, 2293284974UL, 2036339249UL, 1534849280UL, 1215859603UL, 327866771UL, 3356772175UL, 1826625240UL, 720372669UL, 4240407984UL, 1421374867UL, 3228945021UL, 1358646008UL, 3409069246UL, 4100357988UL, 643362354UL, 109899594UL, 2064362635UL, +4243434294UL, 2898852084UL, 4180291913UL, 1676507466UL, 1017841240UL, 3243922356UL, 1569683812UL, 3608467942UL, 3113105154UL, 1154120402UL, 1479311403UL, 966040649UL, 1862994005UL, 3020908939UL, 3078194866UL, 1556392996UL, 786634113UL, 693774191UL, 3549937583UL, 3710822994UL, 920664071UL, 1578429713UL, 37658897UL, 2340485150UL, 950951909UL, 740197415UL, 2528123823UL, 2258231402UL, 1085927825UL, 1595992020UL, 2580760267UL, 3544041088UL, +3850509554UL, 3925419886UL, 2628739022UL, 3867556156UL, 2562145937UL, 3124287811UL, 3373329273UL, 4255542251UL, 3185271749UL, 3693565710UL, 1989726178UL, 1381160022UL, 3642438773UL, 3042165367UL, 3271478204UL, 3622052196UL, 1263328494UL, 1154237693UL, 1016814036UL, 3615401444UL, 2786224913UL, 1251034970UL, 1874233020UL, 2956086971UL, 2572413057UL, 1529490307UL, 3146635362UL, 1436483376UL, 1513970396UL, 3993894153UL, 979247444UL, 2142862852UL, +1368937545UL, 3275665128UL, 1353904396UL, 294065371UL, 3543274652UL, 911792564UL, 2209636872UL, 3165709748UL, 103582737UL, 3101998294UL, 730811902UL, 965151434UL, 893293786UL, 1885087777UL, 1390223786UL, 2657819643UL, 3278634059UL, 3388458110UL, 3325206451UL, 1897013739UL, 3657020278UL, 4293473749UL, 3025318046UL, 2117065739UL, 486446521UL, 3675999281UL, 620561205UL, 2085926890UL, 3946214694UL, 3609089773UL, 2117061768UL, 163384588UL, +868009118UL, 2916136885UL, 1808988481UL, 83680601UL, 10243015UL, 797410789UL, 3438751781UL, 1391154023UL, 234460119UL, 1278218413UL, 4068940987UL, 3948410079UL, 2814385745UL, 3497626257UL, 1233272798UL, 3722456098UL, 1767303496UL, 3711787525UL, 2239286063UL, 3968895688UL, 2030352819UL, 4140631909UL, 2230543409UL, 2173597546UL, 2866251044UL, 3211336683UL, 1116033475UL, 2032556038UL, 3216540537UL, 4233849723UL, 2589589144UL, 667272562UL, +1863766055UL, 3931110690UL, 2468422423UL, 1139480458UL, 272901326UL, 739418419UL, 1377144055UL, 4240143411UL, 1954361769UL, 3839312742UL, 2814009721UL, 600813233UL, 3976840004UL, 3587775605UL, 4256065219UL, 2324695947UL, 2293284974UL, 437604123UL, 1534849280UL, 1215859603UL, 327866771UL, 3356772175UL, 2757237699UL, 720372669UL, 4240407984UL, 1421374867UL, 3228945021UL, 3284801305UL, 3409069246UL, 4100357988UL, 643362354UL, 109899594UL, +1301585321UL, 2528806870UL, 1838904064UL, 448772403UL, 1097849740UL, 1899994097UL, 618309123UL, 1911948510UL, 2309256224UL, 1861398151UL, 905306403UL, 1067595802UL, 36868624UL, 3780886191UL, 835126206UL, 3190251977UL, 2672497726UL, 2085944002UL, 2912993968UL, 2493776706UL, 667136329UL, 1474890786UL, 2383346554UL, 943528949UL, 3376706013UL, 2495573574UL, 144956345UL, 793159960UL, 1591274917UL, 477107637UL, 1383815442UL, 67384899UL, +2355242218UL, 1687409818UL, 3801093871UL, 2108217811UL, 3455908733UL, 4172160797UL, 3935534685UL, 631067839UL, 1187677548UL, 2280856137UL, 3020767646UL, 2063176246UL, 3736904984UL, 2952933848UL, 2975164686UL, 4144473303UL, 34670977UL, 1250976509UL, 3484166554UL, 1532744745UL, 225700994UL, 1878713627UL, 2122358980UL, 1456610194UL, 2917522161UL, 2818947075UL, 102678939UL, 53743858UL, 2095250656UL, 4023979225UL, 3094092874UL, 4128760696UL, +3411610028UL, 3020200609UL, 2225866341UL, 586320946UL, 63813522UL, 1238216159UL, 2825692263UL, 2169937231UL, 3298517640UL, 1542128261UL, 2205544184UL, 1258655704UL, 2629012083UL, 4113650203UL, 3198617867UL, 2742310794UL, 3372657381UL, 3115904410UL, 1948638822UL, 1123521744UL, 1080429281UL, 4086706732UL, 4142693211UL, 817377147UL, 2570194641UL, 26001503UL, 2861456160UL, 4185725555UL, 2573003804UL, 1618628779UL, 2588489212UL, 3996192609UL, +1555844274UL, 1003123505UL, 1326350123UL, 1130583849UL, 3017128756UL, 74119042UL, 4041266437UL, 1938014170UL, 3528465794UL, 4203969698UL, 1913054398UL, 3617979809UL, 2218810167UL, 2453899816UL, 1997423206UL, 477446533UL, 303090065UL, 757937082UL, 1523238256UL, 3140505311UL, 1422588701UL, 3642014639UL, 1740624195UL, 1276017154UL, 3072526193UL, 3675105122UL, 1335122682UL, 4080595263UL, 2308519420UL, 3299182769UL, 1461978532UL, 3098694217UL, +2982399822UL, 3088698511UL, 586759229UL, 3548750902UL, 1449857891UL, 2866451663UL, 2525162286UL, 57294602UL, 4107991297UL, 1214672265UL, 2940391280UL, 4285346034UL, 3338216759UL, 737207923UL, 4264163846UL, 59219141UL, 2300024654UL, 1876616814UL, 1976543605UL, 783571061UL, 1724699622UL, 1967524469UL, 1650309916UL, 3322257631UL, 3975521122UL, 273342162UL, 1156754241UL, 185315896UL, 3368133921UL, 66314655UL, 4153777915UL, 3519901897UL, +}, +{ +3672467167UL, 68684525UL, 1738833632UL, 3081329135UL, 2583806115UL, 2291130512UL, 503032614UL, 3658059597UL, 571493931UL, 685537959UL, 3498787788UL, 422428426UL, 3879256913UL, 1173158320UL, 4000800121UL, 298972869UL, 1718342816UL, 2541691685UL, 2490502642UL, 2321452806UL, 4223212804UL, 1812334632UL, 3717655725UL, 4238191852UL, 3001307165UL, 2621896355UL, 2572404999UL, 3590094954UL, 760765206UL, 2293618001UL, 1392353032UL, 1733137169UL, +2674005018UL, 4067961151UL, 1505710487UL, 451078217UL, 2591688848UL, 12635611UL, 507045428UL, 694822241UL, 1789383090UL, 1140183890UL, 1720695967UL, 1994318191UL, 3340349873UL, 2793804971UL, 1054433135UL, 2345087879UL, 3179939285UL, 1651968615UL, 1793223686UL, 1055357758UL, 914271617UL, 483007580UL, 2127727816UL, 2754998083UL, 3179053982UL, 598442002UL, 1950227301UL, 213053613UL, 3566888111UL, 2832258993UL, 4260365359UL, 443662829UL, +1706542890UL, 3852730296UL, 3643260763UL, 2163607277UL, 1812905006UL, 171529637UL, 215187467UL, 2369406909UL, 1929000706UL, 2572441025UL, 2133955541UL, 810692262UL, 1337974799UL, 4030350704UL, 2159178715UL, 3769451556UL, 1026825278UL, 593628480UL, 1817383139UL, 878832429UL, 2253876350UL, 203612980UL, 2102950440UL, 3407143936UL, 1912362251UL, 1595387637UL, 2827580539UL, 305467658UL, 3292706746UL, 44135525UL, 4001933553UL, 3697343089UL, +760470915UL, 587414402UL, 1419378814UL, 2852774010UL, 3891626781UL, 2757016765UL, 1090707384UL, 3997074427UL, 1047182100UL, 2855539022UL, 36229159UL, 1591415533UL, 3471572739UL, 1237952140UL, 2614469314UL, 213338525UL, 886212578UL, 2620301943UL, 713590207UL, 2430496777UL, 1198164420UL, 2644841698UL, 3654164701UL, 36283572UL, 1461695896UL, 1770331341UL, 1641501876UL, 3470919184UL, 3181021559UL, 3053795110UL, 3533531372UL, 3134337355UL, +668308383UL, 388340999UL, 3221275220UL, 1589659138UL, 294382235UL, 1447443579UL, 690177534UL, 1799726917UL, 2838977761UL, 4172949119UL, 2360858031UL, 159385920UL, 2248389027UL, 1790015671UL, 3925738275UL, 1049918544UL, 4107349511UL, 1619955951UL, 4188275966UL, 1672572975UL, 2672697497UL, 1863413666UL, 747724021UL, 4037561738UL, 1605940213UL, 445253292UL, 3362434828UL, 610898209UL, 1473244091UL, 735444769UL, 1540599852UL, 2449351720UL, +1032410949UL, 3672467167UL, 68684525UL, 1738833632UL, 3081329135UL, 519684794UL, 2291130512UL, 503032614UL, 3658059597UL, 571493931UL, 2400186105UL, 3498787788UL, 422428426UL, 3879256913UL, 1173158320UL, 4120704752UL, 298972869UL, 1718342816UL, 2541691685UL, 2490502642UL, 1686027891UL, 4223212804UL, 1812334632UL, 3717655725UL, 4238191852UL, 642431972UL, 2621896355UL, 2572404999UL, 3590094954UL, 760765206UL, 2949609717UL, 1392353032UL, +1733137169UL, 2674005018UL, 4067961151UL, 1526077846UL, 451078217UL, 2591688848UL, 12635611UL, 507045428UL, 2417951415UL, 1789383090UL, 1140183890UL, 1720695967UL, 1994318191UL, 3465605863UL, 2793804971UL, 1054433135UL, 2345087879UL, 3179939285UL, 3079297626UL, 1793223686UL, 1055357758UL, 914271617UL, 483007580UL, 306802527UL, 2754998083UL, 3179053982UL, 598442002UL, 1950227301UL, 2473418737UL, 3566888111UL, 2832258993UL, 4260365359UL, +443662829UL, 2097776414UL, 3852730296UL, 3643260763UL, 2163607277UL, 1812905006UL, 3957721904UL, 215187467UL, 2369406909UL, 1929000706UL, 2572441025UL, 3779486126UL, 810692262UL, 1337974799UL, 4030350704UL, 2159178715UL, 1127012865UL, 1026825278UL, 593628480UL, 1817383139UL, 878832429UL, 361018423UL, 203612980UL, 2102950440UL, 3407143936UL, 1912362251UL, 1475218277UL, 2827580539UL, 305467658UL, 3292706746UL, 44135525UL, 1900092336UL, +3697343089UL, 760470915UL, 587414402UL, 1419378814UL, 343303227UL, 3891626781UL, 2757016765UL, 1090707384UL, 3997074427UL, 745490961UL, 2855539022UL, 36229159UL, 1591415533UL, 3471572739UL, 3920625546UL, 2614469314UL, 213338525UL, 886212578UL, 2620301943UL, 827771411UL, 2430496777UL, 1198164420UL, 2644841698UL, 3654164701UL, 2747674190UL, 1461695896UL, 1770331341UL, 1641501876UL, 3470919184UL, 919857376UL, 3053795110UL, 3533531372UL, +3134337355UL, 668308383UL, 201138876UL, 3221275220UL, 1589659138UL, 294382235UL, 1447443579UL, 4211579707UL, 1799726917UL, 2838977761UL, 4172949119UL, 2360858031UL, 416103844UL, 2248389027UL, 1790015671UL, 3925738275UL, 1049918544UL, 3481887924UL, 1619955951UL, 4188275966UL, 1672572975UL, 2672697497UL, 564854400UL, 747724021UL, 4037561738UL, 1605940213UL, 445253292UL, 604900912UL, 610898209UL, 1473244091UL, 735444769UL, 1540599852UL, +3036173307UL, 1032410949UL, 3672467167UL, 68684525UL, 1738833632UL, 973022696UL, 519684794UL, 2291130512UL, 503032614UL, 3658059597UL, 1500301452UL, 2400186105UL, 3498787788UL, 422428426UL, 3879256913UL, 3923611748UL, 4120704752UL, 298972869UL, 1718342816UL, 2541691685UL, 2323881484UL, 1686027891UL, 4223212804UL, 1812334632UL, 3717655725UL, 2109094458UL, 642431972UL, 2621896355UL, 2572404999UL, 3590094954UL, 1837882537UL, 2949609717UL, +1392353032UL, 1733137169UL, 2674005018UL, 3252348987UL, 1526077846UL, 451078217UL, 2591688848UL, 12635611UL, 3971261781UL, 2417951415UL, 1789383090UL, 1140183890UL, 1720695967UL, 2906966040UL, 3465605863UL, 2793804971UL, 1054433135UL, 2345087879UL, 915518921UL, 3079297626UL, 1793223686UL, 1055357758UL, 914271617UL, 791633499UL, 306802527UL, 2754998083UL, 3179053982UL, 598442002UL, 324402573UL, 2473418737UL, 3566888111UL, 2832258993UL, +4260365359UL, 2168046398UL, 2097776414UL, 3852730296UL, 3643260763UL, 2163607277UL, 2595175979UL, 3957721904UL, 215187467UL, 2369406909UL, 1929000706UL, 657446369UL, 3779486126UL, 810692262UL, 1337974799UL, 4030350704UL, 1865557469UL, 1127012865UL, 1026825278UL, 593628480UL, 1817383139UL, 3414354529UL, 361018423UL, 203612980UL, 2102950440UL, 3407143936UL, 1739372987UL, 1475218277UL, 2827580539UL, 305467658UL, 3292706746UL, 825045562UL, +1900092336UL, 3697343089UL, 760470915UL, 587414402UL, 2000637694UL, 343303227UL, 3891626781UL, 2757016765UL, 1090707384UL, 4015377800UL, 745490961UL, 2855539022UL, 36229159UL, 1591415533UL, 2208656873UL, 3920625546UL, 2614469314UL, 213338525UL, 886212578UL, 2729976209UL, 827771411UL, 2430496777UL, 1198164420UL, 2644841698UL, 1922667440UL, 2747674190UL, 1461695896UL, 1770331341UL, 1641501876UL, 357535311UL, 919857376UL, 3053795110UL, +3533531372UL, 3134337355UL, 1004072597UL, 201138876UL, 3221275220UL, 1589659138UL, 294382235UL, 1148950143UL, 4211579707UL, 1799726917UL, 2838977761UL, 4172949119UL, 892664404UL, 416103844UL, 2248389027UL, 1790015671UL, 3925738275UL, 2612357890UL, 3481887924UL, 1619955951UL, 4188275966UL, 1672572975UL, 2005534713UL, 564854400UL, 747724021UL, 4037561738UL, 1605940213UL, 2620990454UL, 604900912UL, 610898209UL, 1473244091UL, 735444769UL, +3571225334UL, 3036173307UL, 1032410949UL, 3672467167UL, 68684525UL, 3327351604UL, 973022696UL, 519684794UL, 2291130512UL, 503032614UL, 3814902238UL, 1500301452UL, 2400186105UL, 3498787788UL, 422428426UL, 1756753750UL, 3923611748UL, 4120704752UL, 298972869UL, 1718342816UL, 652903081UL, 2323881484UL, 1686027891UL, 4223212804UL, 1812334632UL, 1599640566UL, 2109094458UL, 642431972UL, 2621896355UL, 2572404999UL, 1668409355UL, 1837882537UL, +2949609717UL, 1392353032UL, 1733137169UL, 3691709793UL, 3252348987UL, 1526077846UL, 451078217UL, 2591688848UL, 3353622601UL, 3971261781UL, 2417951415UL, 1789383090UL, 1140183890UL, 4113853791UL, 2906966040UL, 3465605863UL, 2793804971UL, 1054433135UL, 2195882948UL, 915518921UL, 3079297626UL, 1793223686UL, 1055357758UL, 898713552UL, 791633499UL, 306802527UL, 2754998083UL, 3179053982UL, 2469350088UL, 324402573UL, 2473418737UL, 3566888111UL, +2832258993UL, 1377718274UL, 2168046398UL, 2097776414UL, 3852730296UL, 3643260763UL, 3492388484UL, 2595175979UL, 3957721904UL, 215187467UL, 2369406909UL, 4243449339UL, 657446369UL, 3779486126UL, 810692262UL, 1337974799UL, 3960230785UL, 1865557469UL, 1127012865UL, 1026825278UL, 593628480UL, 732793312UL, 3414354529UL, 361018423UL, 203612980UL, 2102950440UL, 2401792405UL, 1739372987UL, 1475218277UL, 2827580539UL, 305467658UL, 2454275289UL, +825045562UL, 1900092336UL, 3697343089UL, 760470915UL, 2146882409UL, 2000637694UL, 343303227UL, 3891626781UL, 2757016765UL, 3997473261UL, 4015377800UL, 745490961UL, 2855539022UL, 36229159UL, 2375394427UL, 2208656873UL, 3920625546UL, 2614469314UL, 213338525UL, 2055366274UL, 2729976209UL, 827771411UL, 2430496777UL, 1198164420UL, 1789631187UL, 1922667440UL, 2747674190UL, 1461695896UL, 1770331341UL, 4284442852UL, 357535311UL, 919857376UL, +3053795110UL, 3533531372UL, 2124270060UL, 1004072597UL, 201138876UL, 3221275220UL, 1589659138UL, 1418386120UL, 1148950143UL, 4211579707UL, 1799726917UL, 2838977761UL, 3540708069UL, 892664404UL, 416103844UL, 2248389027UL, 1790015671UL, 3936883UL, 2612357890UL, 3481887924UL, 1619955951UL, 4188275966UL, 2963623483UL, 2005534713UL, 564854400UL, 747724021UL, 4037561738UL, 3431155922UL, 2620990454UL, 604900912UL, 610898209UL, 1473244091UL, +3880001339UL, 2879060316UL, 3300897679UL, 3960972039UL, 3201086624UL, 3814462934UL, 3426650044UL, 1930881632UL, 1981178788UL, 2956279691UL, 4272406256UL, 372705521UL, 1359389771UL, 1590302979UL, 3940206208UL, 3817999127UL, 2527835456UL, 2739078164UL, 716997849UL, 3235607043UL, 2550297745UL, 3688700200UL, 354502605UL, 2285793656UL, 2339138034UL, 3912354142UL, 2262255668UL, 469322622UL, 1319943359UL, 1916101235UL, 200441823UL, 509436982UL, +2160284593UL, 1687919695UL, 4153615582UL, 495735041UL, 3694469424UL, 2086893117UL, 4223008799UL, 105344742UL, 1698033424UL, 1149223145UL, 4183918790UL, 4176151950UL, 415739351UL, 817762972UL, 3768072560UL, 1931430949UL, 2698979439UL, 3481477932UL, 1994322914UL, 4078299950UL, 1268233995UL, 3254069145UL, 91029129UL, 498234704UL, 1636613942UL, 3710087092UL, 3876816560UL, 3510446387UL, 3870169008UL, 1370156410UL, 2442498047UL, 2324396523UL, +1258730334UL, 621954739UL, 1053015373UL, 491820717UL, 3386515432UL, 2203703266UL, 120167176UL, 2383669740UL, 1038666440UL, 2927342870UL, 3583197824UL, 1236241846UL, 2474675929UL, 679052891UL, 2451259584UL, 2177706146UL, 606842882UL, 3546980104UL, 2289281509UL, 353873434UL, 2041926837UL, 1238346748UL, 2729109726UL, 2843938395UL, 2938124210UL, 2554443866UL, 1494477920UL, 693378319UL, 2020963566UL, 2000385949UL, 3744098787UL, 650307220UL, +2631327075UL, 1529128757UL, 595871428UL, 3206666562UL, 458062987UL, 875238192UL, 3729317374UL, 1368843921UL, 3478430230UL, 3234384578UL, 3232435428UL, 321359326UL, 994274524UL, 361184397UL, 4285497594UL, 915263578UL, 1486882838UL, 9988613UL, 829077170UL, 677216046UL, 4141828204UL, 165804609UL, 1086678519UL, 2933434608UL, 1351662802UL, 2640085040UL, 2611502932UL, 2033698714UL, 2008873254UL, 3995557835UL, 1020873906UL, 67873555UL, +2230337823UL, 1263800417UL, 1148712155UL, 3985159589UL, 2979503513UL, 2854714997UL, 1539343345UL, 2751484352UL, 1569100732UL, 2020758949UL, 2126757134UL, 3426641899UL, 2808587825UL, 1953320148UL, 1096398464UL, 1502907172UL, 3751230087UL, 765557661UL, 765290990UL, 3056075500UL, 2040620632UL, 422573751UL, 3613558930UL, 1741145769UL, 273531216UL, 837238736UL, 494297893UL, 2903251124UL, 1636782182UL, 4256592784UL, 3652746656UL, 4258393217UL, +}, +{ +2657510202UL, 270297201UL, 2970166904UL, 3151626326UL, 973127447UL, 1523852613UL, 598650578UL, 10289043UL, 1138773500UL, 1379558769UL, 2202575480UL, 1622690708UL, 181345079UL, 228706650UL, 2807760507UL, 3061024281UL, 2310359315UL, 3094465578UL, 4062753882UL, 2744510393UL, 3844622451UL, 1759718963UL, 2393602744UL, 977540509UL, 870449791UL, 1484134272UL, 2838962253UL, 3079492430UL, 2617141201UL, 3744868057UL, 994295425UL, 1302594555UL, +277777192UL, 1793039043UL, 1620482692UL, 2518563014UL, 1163760339UL, 2709515777UL, 4220588138UL, 531143270UL, 2528377633UL, 931694828UL, 1472659070UL, 900489303UL, 3538137811UL, 3849822545UL, 1304182427UL, 2423451948UL, 587259647UL, 296795227UL, 3843393378UL, 100570026UL, 1824916038UL, 3155192628UL, 1205830295UL, 2205840913UL, 2598785234UL, 2138099222UL, 1585588098UL, 1304106911UL, 2443465671UL, 3007665864UL, 3350433156UL, 3623458138UL, +629407548UL, 3209244941UL, 2102270358UL, 952701496UL, 2715374730UL, 2142960491UL, 2566649458UL, 2386659994UL, 4201648072UL, 367516884UL, 211986877UL, 3970312395UL, 4153651951UL, 3794120671UL, 614826776UL, 769672874UL, 2218713182UL, 236114529UL, 1614697510UL, 2420862368UL, 3471485219UL, 3080341429UL, 2394724619UL, 3585194114UL, 1394678495UL, 2137969611UL, 3955498999UL, 2765569351UL, 3084915757UL, 765232390UL, 1406483345UL, 2796499268UL, +2491128017UL, 1052428931UL, 1713430644UL, 3921576513UL, 3753414774UL, 973530327UL, 2545412294UL, 1841110931UL, 1174406073UL, 1104865218UL, 1586606252UL, 2612244473UL, 1407875673UL, 1823397519UL, 2613642581UL, 3163449384UL, 3129975397UL, 2059184961UL, 818092118UL, 3182607992UL, 1658516909UL, 2467681581UL, 1065789733UL, 799857247UL, 2492902195UL, 168866110UL, 2251316716UL, 1607684829UL, 2347941418UL, 2382781983UL, 3298500129UL, 3609200925UL, +3060374324UL, 2602420483UL, 2357812057UL, 3739699403UL, 3260652552UL, 205015857UL, 1936033273UL, 3955997259UL, 821264237UL, 1882720491UL, 159294165UL, 3197657094UL, 528058988UL, 2768830342UL, 805087358UL, 896645931UL, 1360375456UL, 3417488932UL, 3863200799UL, 4033907887UL, 983658874UL, 1828706965UL, 875027318UL, 1310362653UL, 3711487613UL, 4148261033UL, 3145162047UL, 485182003UL, 2633647498UL, 1369395018UL, 4163384029UL, 1827719274UL, +270658892UL, 2657510202UL, 270297201UL, 2970166904UL, 3151626326UL, 499420828UL, 1523852613UL, 598650578UL, 10289043UL, 1138773500UL, 640170086UL, 2202575480UL, 1622690708UL, 181345079UL, 228706650UL, 3957853780UL, 3061024281UL, 2310359315UL, 3094465578UL, 4062753882UL, 2049506087UL, 3844622451UL, 1759718963UL, 2393602744UL, 977540509UL, 2346891936UL, 1484134272UL, 2838962253UL, 3079492430UL, 2617141201UL, 2112540708UL, 994295425UL, +1302594555UL, 277777192UL, 1793039043UL, 981072592UL, 2518563014UL, 1163760339UL, 2709515777UL, 4220588138UL, 1992965594UL, 2528377633UL, 931694828UL, 1472659070UL, 900489303UL, 32461040UL, 3849822545UL, 1304182427UL, 2423451948UL, 587259647UL, 3728056788UL, 3843393378UL, 100570026UL, 1824916038UL, 3155192628UL, 1194916233UL, 2205840913UL, 2598785234UL, 2138099222UL, 1585588098UL, 2944318376UL, 2443465671UL, 3007665864UL, 3350433156UL, +3623458138UL, 1413669939UL, 3209244941UL, 2102270358UL, 952701496UL, 2715374730UL, 826676012UL, 2566649458UL, 2386659994UL, 4201648072UL, 367516884UL, 4272143576UL, 3970312395UL, 4153651951UL, 3794120671UL, 614826776UL, 4106382849UL, 2218713182UL, 236114529UL, 1614697510UL, 2420862368UL, 138091237UL, 3080341429UL, 2394724619UL, 3585194114UL, 1394678495UL, 2113895281UL, 3955498999UL, 2765569351UL, 3084915757UL, 765232390UL, 2247301699UL, +2796499268UL, 2491128017UL, 1052428931UL, 1713430644UL, 1076867271UL, 3753414774UL, 973530327UL, 2545412294UL, 1841110931UL, 3427639042UL, 1104865218UL, 1586606252UL, 2612244473UL, 1407875673UL, 2159805028UL, 2613642581UL, 3163449384UL, 3129975397UL, 2059184961UL, 1251595655UL, 3182607992UL, 1658516909UL, 2467681581UL, 1065789733UL, 524065102UL, 2492902195UL, 168866110UL, 2251316716UL, 1607684829UL, 877205873UL, 2382781983UL, 3298500129UL, +3609200925UL, 3060374324UL, 1983477493UL, 2357812057UL, 3739699403UL, 3260652552UL, 205015857UL, 3578808491UL, 3955997259UL, 821264237UL, 1882720491UL, 159294165UL, 3639531297UL, 528058988UL, 2768830342UL, 805087358UL, 896645931UL, 2309781073UL, 3417488932UL, 3863200799UL, 4033907887UL, 983658874UL, 3756437847UL, 875027318UL, 1310362653UL, 3711487613UL, 4148261033UL, 3264363953UL, 485182003UL, 2633647498UL, 1369395018UL, 4163384029UL, +184614728UL, 270658892UL, 2657510202UL, 270297201UL, 2970166904UL, 884907665UL, 499420828UL, 1523852613UL, 598650578UL, 10289043UL, 2023902217UL, 640170086UL, 2202575480UL, 1622690708UL, 181345079UL, 1358722197UL, 3957853780UL, 3061024281UL, 2310359315UL, 3094465578UL, 4156960892UL, 2049506087UL, 3844622451UL, 1759718963UL, 2393602744UL, 1018272187UL, 2346891936UL, 1484134272UL, 2838962253UL, 3079492430UL, 663361761UL, 2112540708UL, +994295425UL, 1302594555UL, 277777192UL, 4201292427UL, 981072592UL, 2518563014UL, 1163760339UL, 2709515777UL, 3301905324UL, 1992965594UL, 2528377633UL, 931694828UL, 1472659070UL, 3170286187UL, 32461040UL, 3849822545UL, 1304182427UL, 2423451948UL, 166213287UL, 3728056788UL, 3843393378UL, 100570026UL, 1824916038UL, 1534589402UL, 1194916233UL, 2205840913UL, 2598785234UL, 2138099222UL, 767439709UL, 2944318376UL, 2443465671UL, 3007665864UL, +3350433156UL, 257274072UL, 1413669939UL, 3209244941UL, 2102270358UL, 952701496UL, 893224047UL, 826676012UL, 2566649458UL, 2386659994UL, 4201648072UL, 1336000731UL, 4272143576UL, 3970312395UL, 4153651951UL, 3794120671UL, 2381517352UL, 4106382849UL, 2218713182UL, 236114529UL, 1614697510UL, 2427291612UL, 138091237UL, 3080341429UL, 2394724619UL, 3585194114UL, 1339840651UL, 2113895281UL, 3955498999UL, 2765569351UL, 3084915757UL, 1920073265UL, +2247301699UL, 2796499268UL, 2491128017UL, 1052428931UL, 1720704700UL, 1076867271UL, 3753414774UL, 973530327UL, 2545412294UL, 655938239UL, 3427639042UL, 1104865218UL, 1586606252UL, 2612244473UL, 748629647UL, 2159805028UL, 2613642581UL, 3163449384UL, 3129975397UL, 1868740512UL, 1251595655UL, 3182607992UL, 1658516909UL, 2467681581UL, 3092135795UL, 524065102UL, 2492902195UL, 168866110UL, 2251316716UL, 229376275UL, 877205873UL, 2382781983UL, +3298500129UL, 3609200925UL, 1270454086UL, 1983477493UL, 2357812057UL, 3739699403UL, 3260652552UL, 3976376418UL, 3578808491UL, 3955997259UL, 821264237UL, 1882720491UL, 2211365699UL, 3639531297UL, 528058988UL, 2768830342UL, 805087358UL, 1351870678UL, 2309781073UL, 3417488932UL, 3863200799UL, 4033907887UL, 2317721807UL, 3756437847UL, 875027318UL, 1310362653UL, 3711487613UL, 1929459086UL, 3264363953UL, 485182003UL, 2633647498UL, 1369395018UL, +2141675718UL, 184614728UL, 270658892UL, 2657510202UL, 270297201UL, 3337954073UL, 884907665UL, 499420828UL, 1523852613UL, 598650578UL, 3874207188UL, 2023902217UL, 640170086UL, 2202575480UL, 1622690708UL, 2020255059UL, 1358722197UL, 3957853780UL, 3061024281UL, 2310359315UL, 753738868UL, 4156960892UL, 2049506087UL, 3844622451UL, 1759718963UL, 1672276116UL, 1018272187UL, 2346891936UL, 1484134272UL, 2838962253UL, 1680679979UL, 663361761UL, +2112540708UL, 994295425UL, 1302594555UL, 1941500850UL, 4201292427UL, 981072592UL, 2518563014UL, 1163760339UL, 184357645UL, 3301905324UL, 1992965594UL, 2528377633UL, 931694828UL, 3462653134UL, 3170286187UL, 32461040UL, 3849822545UL, 1304182427UL, 396808784UL, 166213287UL, 3728056788UL, 3843393378UL, 100570026UL, 876691173UL, 1534589402UL, 1194916233UL, 2205840913UL, 2598785234UL, 4286653520UL, 767439709UL, 2944318376UL, 2443465671UL, +3007665864UL, 2793587144UL, 257274072UL, 1413669939UL, 3209244941UL, 2102270358UL, 2792966616UL, 893224047UL, 826676012UL, 2566649458UL, 2386659994UL, 798757973UL, 1336000731UL, 4272143576UL, 3970312395UL, 4153651951UL, 2930383268UL, 2381517352UL, 4106382849UL, 2218713182UL, 236114529UL, 1936008889UL, 2427291612UL, 138091237UL, 3080341429UL, 2394724619UL, 4157586029UL, 1339840651UL, 2113895281UL, 3955498999UL, 2765569351UL, 2243544114UL, +1920073265UL, 2247301699UL, 2796499268UL, 2491128017UL, 3372810009UL, 1720704700UL, 1076867271UL, 3753414774UL, 973530327UL, 484392041UL, 655938239UL, 3427639042UL, 1104865218UL, 1586606252UL, 1373046326UL, 748629647UL, 2159805028UL, 2613642581UL, 3163449384UL, 1558595520UL, 1868740512UL, 1251595655UL, 3182607992UL, 1658516909UL, 3503432306UL, 3092135795UL, 524065102UL, 2492902195UL, 168866110UL, 4106973392UL, 229376275UL, 877205873UL, +2382781983UL, 3298500129UL, 2366096961UL, 1270454086UL, 1983477493UL, 2357812057UL, 3739699403UL, 4223323197UL, 3976376418UL, 3578808491UL, 3955997259UL, 821264237UL, 1581729952UL, 2211365699UL, 3639531297UL, 528058988UL, 2768830342UL, 3946263978UL, 1351870678UL, 2309781073UL, 3417488932UL, 3863200799UL, 3948072426UL, 2317721807UL, 3756437847UL, 875027318UL, 1310362653UL, 3439391360UL, 1929459086UL, 3264363953UL, 485182003UL, 2633647498UL, +3576868480UL, 2527748673UL, 3116247125UL, 4020801612UL, 2594734840UL, 3308177137UL, 665011257UL, 40118275UL, 3584569179UL, 3399729283UL, 3867174947UL, 658488234UL, 1099195903UL, 2274511402UL, 1872529118UL, 2518961094UL, 2633598693UL, 4160728307UL, 449442630UL, 164837956UL, 1010805767UL, 605336924UL, 1178031445UL, 3949359502UL, 2585151633UL, 611885521UL, 293204651UL, 3389557188UL, 1172294301UL, 2503819061UL, 659842653UL, 504992348UL, +3762165683UL, 1799777932UL, 4161843209UL, 1924622448UL, 1006263939UL, 115233249UL, 2775142171UL, 3228632586UL, 885407023UL, 2514866293UL, 3615088636UL, 2488824172UL, 2631364137UL, 1454226414UL, 3888177876UL, 70646265UL, 2291458600UL, 2370783730UL, 1566625834UL, 3652033806UL, 4136806683UL, 2819973124UL, 3207365429UL, 989185345UL, 3343822313UL, 2580472874UL, 4077285847UL, 4032963783UL, 2883518039UL, 2253593637UL, 904631114UL, 2654790756UL, +2967911632UL, 2131672564UL, 1594073414UL, 2370718497UL, 3769371275UL, 1547951748UL, 2473303924UL, 651625138UL, 2159175883UL, 4062995539UL, 696224922UL, 3388626509UL, 100118553UL, 770731124UL, 2149458689UL, 3223175313UL, 3524052514UL, 2651241522UL, 78236806UL, 3212708723UL, 1045780878UL, 2257575290UL, 3709360831UL, 966829465UL, 61269250UL, 405063245UL, 331731998UL, 2472078870UL, 1138237364UL, 1135091387UL, 3245001409UL, 3817992705UL, +1738939574UL, 1397617581UL, 2896546651UL, 4207083421UL, 3802162100UL, 391930524UL, 1326819828UL, 85308067UL, 3235336831UL, 686989692UL, 1947564282UL, 842881662UL, 2887279866UL, 3850666935UL, 2001895525UL, 2673649961UL, 2106555006UL, 1762053005UL, 2334552700UL, 26094213UL, 1184502058UL, 2048598709UL, 4039640450UL, 1439363714UL, 1022688817UL, 1053169108UL, 170896272UL, 444231850UL, 1500204748UL, 1077470703UL, 1630597179UL, 1382588806UL, +138805391UL, 1636536505UL, 3118018426UL, 3461152216UL, 2486547351UL, 2045361316UL, 2976067436UL, 468876399UL, 1407419455UL, 3226137264UL, 414206328UL, 1011039713UL, 3537947031UL, 2359787831UL, 258556532UL, 3615987029UL, 3372097337UL, 3586352388UL, 1056198830UL, 1852291192UL, 3888893481UL, 746156045UL, 4203877603UL, 297851145UL, 2615507398UL, 1141098641UL, 1881412583UL, 3014341741UL, 2125186797UL, 229307235UL, 3476606674UL, 3553854689UL, +}, +{ +3768542219UL, 2777948797UL, 3328832678UL, 3488502819UL, 2708053041UL, 2217907094UL, 2133505056UL, 2218961277UL, 2148551748UL, 1420045625UL, 1709182366UL, 1816409641UL, 3791695288UL, 4207813971UL, 22588497UL, 2211317602UL, 616238454UL, 2394270012UL, 3212896041UL, 213408768UL, 2199328374UL, 3188624050UL, 811443809UL, 2818548979UL, 3150758902UL, 2022548260UL, 2462701924UL, 3793704672UL, 2358080321UL, 483288372UL, 450033142UL, 772942770UL, +2224873625UL, 241543410UL, 312552314UL, 1268067149UL, 915918620UL, 3906238422UL, 132545832UL, 3486041298UL, 2414090506UL, 3798383292UL, 2257004699UL, 130309284UL, 1158673651UL, 152325583UL, 3499865580UL, 4094273597UL, 1029041593UL, 93538481UL, 3963199522UL, 4215066819UL, 2851084137UL, 950351173UL, 2758084052UL, 3408506640UL, 2468905351UL, 3982226741UL, 3591899344UL, 2972879639UL, 3321078070UL, 252381865UL, 409397320UL, 741653003UL, +1936712854UL, 1198684021UL, 922916691UL, 10413506UL, 3546896248UL, 1704703870UL, 1479762464UL, 104399432UL, 4144557684UL, 68239720UL, 2666028745UL, 362625839UL, 2591539911UL, 2837165752UL, 2180226515UL, 4076543943UL, 2956460273UL, 312410753UL, 2566731139UL, 2532653524UL, 2399030172UL, 207904356UL, 354574195UL, 485696336UL, 3816686234UL, 3016971115UL, 4272692603UL, 2352732136UL, 33493163UL, 780255811UL, 4092242980UL, 4121521600UL, +2119254314UL, 42767673UL, 1081488778UL, 2757446871UL, 2267513620UL, 3472164720UL, 2750308207UL, 1707164045UL, 3125591821UL, 3236687597UL, 299194858UL, 537384087UL, 1695155491UL, 2078250102UL, 1705861659UL, 2416322096UL, 1692335914UL, 1178915980UL, 3405431297UL, 4059323309UL, 2014660182UL, 3847682866UL, 4037583683UL, 2629253995UL, 867809161UL, 2167953720UL, 2290558548UL, 417635396UL, 53496289UL, 1890906570UL, 2842247580UL, 807266805UL, +1226139132UL, 2067929784UL, 1697038549UL, 3312131466UL, 1234311530UL, 3199840935UL, 4185078776UL, 1807030355UL, 215385887UL, 845421530UL, 1350380353UL, 4209181096UL, 2576197887UL, 1275262872UL, 2806513944UL, 2718623701UL, 2779287384UL, 71403197UL, 219220133UL, 2181111477UL, 2000396844UL, 3595837555UL, 1232425455UL, 2630647391UL, 3280867676UL, 2622740782UL, 1578938469UL, 3624564545UL, 992324522UL, 3056113148UL, 3473635768UL, 3664935418UL, +1786902552UL, 3768542219UL, 2777948797UL, 3328832678UL, 3488502819UL, 2530862473UL, 2217907094UL, 2133505056UL, 2218961277UL, 2148551748UL, 4050672856UL, 1709182366UL, 1816409641UL, 3791695288UL, 4207813971UL, 4175126713UL, 2211317602UL, 616238454UL, 2394270012UL, 3212896041UL, 732700649UL, 2199328374UL, 3188624050UL, 811443809UL, 2818548979UL, 972036137UL, 2022548260UL, 2462701924UL, 3793704672UL, 2358080321UL, 1200725173UL, 450033142UL, +772942770UL, 2224873625UL, 241543410UL, 1907109304UL, 1268067149UL, 915918620UL, 3906238422UL, 132545832UL, 301668366UL, 2414090506UL, 3798383292UL, 2257004699UL, 130309284UL, 1228520287UL, 152325583UL, 3499865580UL, 4094273597UL, 1029041593UL, 3267460249UL, 3963199522UL, 4215066819UL, 2851084137UL, 950351173UL, 47361585UL, 3408506640UL, 2468905351UL, 3982226741UL, 3591899344UL, 1878226915UL, 3321078070UL, 252381865UL, 409397320UL, +741653003UL, 1716437506UL, 1198684021UL, 922916691UL, 10413506UL, 3546896248UL, 1591998796UL, 1479762464UL, 104399432UL, 4144557684UL, 68239720UL, 3810955599UL, 362625839UL, 2591539911UL, 2837165752UL, 2180226515UL, 3908378015UL, 2956460273UL, 312410753UL, 2566731139UL, 2532653524UL, 687490649UL, 207904356UL, 354574195UL, 485696336UL, 3816686234UL, 378445403UL, 4272692603UL, 2352732136UL, 33493163UL, 780255811UL, 1303281526UL, +4121521600UL, 2119254314UL, 42767673UL, 1081488778UL, 1734311274UL, 2267513620UL, 3472164720UL, 2750308207UL, 1707164045UL, 4212588163UL, 3236687597UL, 299194858UL, 537384087UL, 1695155491UL, 2250704950UL, 1705861659UL, 2416322096UL, 1692335914UL, 1178915980UL, 677982197UL, 4059323309UL, 2014660182UL, 3847682866UL, 4037583683UL, 1765435945UL, 867809161UL, 2167953720UL, 2290558548UL, 417635396UL, 2125103002UL, 1890906570UL, 2842247580UL, +807266805UL, 1226139132UL, 2056644398UL, 1697038549UL, 3312131466UL, 1234311530UL, 3199840935UL, 3063718636UL, 1807030355UL, 215385887UL, 845421530UL, 1350380353UL, 3610667273UL, 2576197887UL, 1275262872UL, 2806513944UL, 2718623701UL, 2492912955UL, 71403197UL, 219220133UL, 2181111477UL, 2000396844UL, 3465351710UL, 1232425455UL, 2630647391UL, 3280867676UL, 2622740782UL, 1331873639UL, 3624564545UL, 992324522UL, 3056113148UL, 3473635768UL, +782257020UL, 1786902552UL, 3768542219UL, 2777948797UL, 3328832678UL, 856888454UL, 2530862473UL, 2217907094UL, 2133505056UL, 2218961277UL, 3752437534UL, 4050672856UL, 1709182366UL, 1816409641UL, 3791695288UL, 1581813910UL, 4175126713UL, 2211317602UL, 616238454UL, 2394270012UL, 1796414157UL, 732700649UL, 2199328374UL, 3188624050UL, 811443809UL, 4225173324UL, 972036137UL, 2022548260UL, 2462701924UL, 3793704672UL, 1410793611UL, 1200725173UL, +450033142UL, 772942770UL, 2224873625UL, 3889840648UL, 1907109304UL, 1268067149UL, 915918620UL, 3906238422UL, 1249098244UL, 301668366UL, 2414090506UL, 3798383292UL, 2257004699UL, 1620796656UL, 1228520287UL, 152325583UL, 3499865580UL, 4094273597UL, 82853050UL, 3267460249UL, 3963199522UL, 4215066819UL, 2851084137UL, 1212493334UL, 47361585UL, 3408506640UL, 2468905351UL, 3982226741UL, 3195419905UL, 1878226915UL, 3321078070UL, 252381865UL, +409397320UL, 1584154733UL, 1716437506UL, 1198684021UL, 922916691UL, 10413506UL, 1734068880UL, 1591998796UL, 1479762464UL, 104399432UL, 4144557684UL, 1973878859UL, 3810955599UL, 362625839UL, 2591539911UL, 2837165752UL, 1727282404UL, 3908378015UL, 2956460273UL, 312410753UL, 2566731139UL, 3656295687UL, 687490649UL, 207904356UL, 354574195UL, 485696336UL, 355953909UL, 378445403UL, 4272692603UL, 2352732136UL, 33493163UL, 3784169684UL, +1303281526UL, 4121521600UL, 2119254314UL, 42767673UL, 2331527847UL, 1734311274UL, 2267513620UL, 3472164720UL, 2750308207UL, 820692528UL, 4212588163UL, 3236687597UL, 299194858UL, 537384087UL, 781151234UL, 2250704950UL, 1705861659UL, 2416322096UL, 1692335914UL, 4288008793UL, 677982197UL, 4059323309UL, 2014660182UL, 3847682866UL, 3328850880UL, 1765435945UL, 867809161UL, 2167953720UL, 2290558548UL, 542850707UL, 2125103002UL, 1890906570UL, +2842247580UL, 807266805UL, 3803006390UL, 2056644398UL, 1697038549UL, 3312131466UL, 1234311530UL, 809106036UL, 3063718636UL, 1807030355UL, 215385887UL, 845421530UL, 654189622UL, 3610667273UL, 2576197887UL, 1275262872UL, 2806513944UL, 1517875462UL, 2492912955UL, 71403197UL, 219220133UL, 2181111477UL, 3826277490UL, 3465351710UL, 1232425455UL, 2630647391UL, 3280867676UL, 3343597872UL, 1331873639UL, 3624564545UL, 992324522UL, 3056113148UL, +3725661598UL, 782257020UL, 1786902552UL, 3768542219UL, 2777948797UL, 3392298403UL, 856888454UL, 2530862473UL, 2217907094UL, 2133505056UL, 4160889036UL, 3752437534UL, 4050672856UL, 1709182366UL, 1816409641UL, 1282922706UL, 1581813910UL, 4175126713UL, 2211317602UL, 616238454UL, 3806252779UL, 1796414157UL, 732700649UL, 2199328374UL, 3188624050UL, 983474330UL, 4225173324UL, 972036137UL, 2022548260UL, 2462701924UL, 880446667UL, 1410793611UL, +1200725173UL, 450033142UL, 772942770UL, 3179870546UL, 3889840648UL, 1907109304UL, 1268067149UL, 915918620UL, 4261932110UL, 1249098244UL, 301668366UL, 2414090506UL, 3798383292UL, 471794009UL, 1620796656UL, 1228520287UL, 152325583UL, 3499865580UL, 1275109063UL, 82853050UL, 3267460249UL, 3963199522UL, 4215066819UL, 4209882674UL, 1212493334UL, 47361585UL, 3408506640UL, 2468905351UL, 1324785625UL, 3195419905UL, 1878226915UL, 3321078070UL, +252381865UL, 4259927884UL, 1584154733UL, 1716437506UL, 1198684021UL, 922916691UL, 1800164165UL, 1734068880UL, 1591998796UL, 1479762464UL, 104399432UL, 2774114308UL, 1973878859UL, 3810955599UL, 362625839UL, 2591539911UL, 2126614872UL, 1727282404UL, 3908378015UL, 2956460273UL, 312410753UL, 4098052715UL, 3656295687UL, 687490649UL, 207904356UL, 354574195UL, 937379582UL, 355953909UL, 378445403UL, 4272692603UL, 2352732136UL, 2694800574UL, +3784169684UL, 1303281526UL, 4121521600UL, 2119254314UL, 1741415022UL, 2331527847UL, 1734311274UL, 2267513620UL, 3472164720UL, 480821513UL, 820692528UL, 4212588163UL, 3236687597UL, 299194858UL, 1128762168UL, 781151234UL, 2250704950UL, 1705861659UL, 2416322096UL, 160918735UL, 4288008793UL, 677982197UL, 4059323309UL, 2014660182UL, 3354205317UL, 3328850880UL, 1765435945UL, 867809161UL, 2167953720UL, 3363861382UL, 542850707UL, 2125103002UL, +1890906570UL, 2842247580UL, 2459935488UL, 3803006390UL, 2056644398UL, 1697038549UL, 3312131466UL, 2378675900UL, 809106036UL, 3063718636UL, 1807030355UL, 215385887UL, 3528413525UL, 654189622UL, 3610667273UL, 2576197887UL, 1275262872UL, 993221887UL, 1517875462UL, 2492912955UL, 71403197UL, 219220133UL, 1805256638UL, 3826277490UL, 3465351710UL, 1232425455UL, 2630647391UL, 3718538519UL, 3343597872UL, 1331873639UL, 3624564545UL, 992324522UL, +3490576382UL, 2532191937UL, 1108692984UL, 802110050UL, 3984561242UL, 1973015939UL, 1351080551UL, 2382044123UL, 2393286227UL, 860228704UL, 179528099UL, 3569709850UL, 233527199UL, 3657599850UL, 3269634908UL, 3278075383UL, 4037814788UL, 952837871UL, 2050210570UL, 2376157484UL, 2566048929UL, 4200278597UL, 123440514UL, 573557299UL, 1585379806UL, 4012659271UL, 4000306490UL, 2508478465UL, 970078629UL, 4064973573UL, 645149301UL, 109544347UL, +647594029UL, 2097163688UL, 1515080116UL, 2142799649UL, 2519702653UL, 3122920796UL, 1952249156UL, 3932382760UL, 2155292687UL, 2517875978UL, 249059416UL, 4282787227UL, 2595461065UL, 1004349415UL, 2151451255UL, 2510715277UL, 3004500356UL, 3410567758UL, 344538405UL, 1946747709UL, 470298928UL, 1033671146UL, 4207801290UL, 1411375630UL, 3419808553UL, 3218285984UL, 3584735265UL, 811222695UL, 3898833227UL, 3535298390UL, 3764741581UL, 3927026520UL, +2850086968UL, 2818485449UL, 1963038474UL, 1871366998UL, 1900570117UL, 997663534UL, 746627295UL, 1827737271UL, 3814054979UL, 728285698UL, 1696496343UL, 1696888597UL, 1010837663UL, 1756050352UL, 785994134UL, 1436861536UL, 1949153732UL, 2360018842UL, 1703393654UL, 2248338006UL, 3884572674UL, 789998735UL, 1155994673UL, 2022469457UL, 223162974UL, 309571006UL, 725482797UL, 3909032036UL, 2531190541UL, 373676789UL, 1061107200UL, 4231921550UL, +558635876UL, 2773807977UL, 1860218585UL, 1150041015UL, 2252812038UL, 2413330952UL, 191909567UL, 3518171813UL, 3513416318UL, 2679253717UL, 3850755687UL, 1564154710UL, 324714884UL, 1600953447UL, 4095583159UL, 1796641692UL, 2518000547UL, 3621187982UL, 501166402UL, 2112782420UL, 1704276185UL, 2249859782UL, 3754293422UL, 1942321901UL, 1851019104UL, 240158224UL, 3181132144UL, 2281632719UL, 808029657UL, 1721710011UL, 2287207169UL, 3044484177UL, +2363339534UL, 805273402UL, 3696016147UL, 3549191229UL, 3353631259UL, 2946802391UL, 383414270UL, 300735554UL, 471515206UL, 1907815837UL, 1576327662UL, 3825043525UL, 2817119733UL, 1973847200UL, 1398317206UL, 2221853087UL, 501440864UL, 642467132UL, 494410179UL, 1191241925UL, 3549838846UL, 3621239619UL, 2640266286UL, 4140123024UL, 315957218UL, 3696758268UL, 2502777875UL, 2150738616UL, 1570099119UL, 2598276767UL, 3585886712UL, 230047417UL, +}, +{ +220882755UL, 630187688UL, 2600079656UL, 3103815531UL, 4259457395UL, 306940008UL, 760977254UL, 558299017UL, 73879495UL, 2342545344UL, 572800511UL, 3922797738UL, 3754011306UL, 698257357UL, 1274843132UL, 1455757442UL, 1014649591UL, 3205662508UL, 2997738251UL, 613949432UL, 2267018388UL, 2925762681UL, 3702061213UL, 299380602UL, 1711070497UL, 4140032336UL, 4134705925UL, 2836703879UL, 3776863395UL, 507121465UL, 3480792188UL, 1862887216UL, +247780795UL, 2528677869UL, 2881446422UL, 271754977UL, 833498724UL, 1489102731UL, 3636156177UL, 1839744487UL, 2011839858UL, 2353400914UL, 510437606UL, 561141583UL, 2979592314UL, 3844268262UL, 3011027242UL, 3113817193UL, 3491178377UL, 1448376742UL, 2478683391UL, 2597550150UL, 699310968UL, 1979488062UL, 277591964UL, 1312002175UL, 168047351UL, 1826859926UL, 2030631355UL, 3097860388UL, 1950614326UL, 4070838751UL, 4454933UL, 1890661188UL, +3929835227UL, 1008498572UL, 3301557438UL, 3906313590UL, 1240635175UL, 280935563UL, 113509402UL, 226900299UL, 1246395851UL, 1220916742UL, 2651515540UL, 2058590162UL, 1983114332UL, 2040467861UL, 780818345UL, 544262576UL, 2826997265UL, 349354812UL, 2360120613UL, 1181324247UL, 2380347783UL, 3938729706UL, 1610628643UL, 2008635822UL, 2937909233UL, 1583978206UL, 3589167073UL, 1942470196UL, 402177406UL, 2636510744UL, 3709747478UL, 2428569572UL, +4071828137UL, 2880315633UL, 1433558231UL, 1137076031UL, 3833202201UL, 2378168250UL, 1412413704UL, 3349323744UL, 1740721660UL, 3155643175UL, 2580327273UL, 3020661883UL, 1658910832UL, 2065649368UL, 3277572880UL, 3795585437UL, 1266185861UL, 2925935368UL, 4147230645UL, 203577834UL, 2230529041UL, 2864778434UL, 270386174UL, 2867122465UL, 2676624544UL, 2035972330UL, 500973884UL, 2983028740UL, 117131866UL, 1456450936UL, 429171245UL, 3921563262UL, +342800398UL, 255116920UL, 1219580025UL, 1549741331UL, 3832317567UL, 3750096895UL, 4036554472UL, 4099775516UL, 1451717480UL, 149159438UL, 3593827664UL, 1406572509UL, 27774796UL, 1138983585UL, 1577536190UL, 978350835UL, 2704344602UL, 95204061UL, 1507155668UL, 304760810UL, 1981315657UL, 3139306913UL, 3908131532UL, 3767856445UL, 3851422551UL, 2018732047UL, 2474676116UL, 2745551516UL, 1585868430UL, 1125303733UL, 3147584753UL, 2368921260UL, +1524991519UL, 220882755UL, 630187688UL, 2600079656UL, 3103815531UL, 2671841243UL, 306940008UL, 760977254UL, 558299017UL, 73879495UL, 1196617651UL, 572800511UL, 3922797738UL, 3754011306UL, 698257357UL, 1982654891UL, 1455757442UL, 1014649591UL, 3205662508UL, 2997738251UL, 3769735713UL, 2267018388UL, 2925762681UL, 3702061213UL, 299380602UL, 2224634157UL, 4140032336UL, 4134705925UL, 2836703879UL, 3776863395UL, 1027030708UL, 3480792188UL, +1862887216UL, 247780795UL, 2528677869UL, 300214141UL, 271754977UL, 833498724UL, 1489102731UL, 3636156177UL, 1683033001UL, 2011839858UL, 2353400914UL, 510437606UL, 561141583UL, 2832813585UL, 3844268262UL, 3011027242UL, 3113817193UL, 3491178377UL, 316500941UL, 2478683391UL, 2597550150UL, 699310968UL, 1979488062UL, 4092049617UL, 1312002175UL, 168047351UL, 1826859926UL, 2030631355UL, 2797906491UL, 1950614326UL, 4070838751UL, 4454933UL, +1890661188UL, 2602196847UL, 1008498572UL, 3301557438UL, 3906313590UL, 1240635175UL, 946440664UL, 113509402UL, 226900299UL, 1246395851UL, 1220916742UL, 1314772486UL, 2058590162UL, 1983114332UL, 2040467861UL, 780818345UL, 3064382079UL, 2826997265UL, 349354812UL, 2360120613UL, 1181324247UL, 3434653713UL, 3938729706UL, 1610628643UL, 2008635822UL, 2937909233UL, 2815835447UL, 3589167073UL, 1942470196UL, 402177406UL, 2636510744UL, 865459039UL, +2428569572UL, 4071828137UL, 2880315633UL, 1433558231UL, 1582478959UL, 3833202201UL, 2378168250UL, 1412413704UL, 3349323744UL, 3686787615UL, 3155643175UL, 2580327273UL, 3020661883UL, 1658910832UL, 3152644489UL, 3277572880UL, 3795585437UL, 1266185861UL, 2925935368UL, 3101079227UL, 203577834UL, 2230529041UL, 2864778434UL, 270386174UL, 3024925346UL, 2676624544UL, 2035972330UL, 500973884UL, 2983028740UL, 974511421UL, 1456450936UL, 429171245UL, +3921563262UL, 342800398UL, 1540218139UL, 1219580025UL, 1549741331UL, 3832317567UL, 3750096895UL, 2195381148UL, 4099775516UL, 1451717480UL, 149159438UL, 3593827664UL, 3715984838UL, 27774796UL, 1138983585UL, 1577536190UL, 978350835UL, 2060213898UL, 95204061UL, 1507155668UL, 304760810UL, 1981315657UL, 774471092UL, 3908131532UL, 3767856445UL, 3851422551UL, 2018732047UL, 1649125731UL, 2745551516UL, 1585868430UL, 1125303733UL, 3147584753UL, +1661721342UL, 1524991519UL, 220882755UL, 630187688UL, 2600079656UL, 3647143842UL, 2671841243UL, 306940008UL, 760977254UL, 558299017UL, 3406011854UL, 1196617651UL, 572800511UL, 3922797738UL, 3754011306UL, 2314291278UL, 1982654891UL, 1455757442UL, 1014649591UL, 3205662508UL, 3471741326UL, 3769735713UL, 2267018388UL, 2925762681UL, 3702061213UL, 1593850639UL, 2224634157UL, 4140032336UL, 4134705925UL, 2836703879UL, 3918266498UL, 1027030708UL, +3480792188UL, 1862887216UL, 247780795UL, 3383776045UL, 300214141UL, 271754977UL, 833498724UL, 1489102731UL, 2477093804UL, 1683033001UL, 2011839858UL, 2353400914UL, 510437606UL, 2361664959UL, 2832813585UL, 3844268262UL, 3011027242UL, 3113817193UL, 1468705704UL, 316500941UL, 2478683391UL, 2597550150UL, 699310968UL, 1593029686UL, 4092049617UL, 1312002175UL, 168047351UL, 1826859926UL, 3922295193UL, 2797906491UL, 1950614326UL, 4070838751UL, +4454933UL, 485374579UL, 2602196847UL, 1008498572UL, 3301557438UL, 3906313590UL, 2102043683UL, 946440664UL, 113509402UL, 226900299UL, 1246395851UL, 2635764090UL, 1314772486UL, 2058590162UL, 1983114332UL, 2040467861UL, 354791UL, 3064382079UL, 2826997265UL, 349354812UL, 2360120613UL, 2126504772UL, 3434653713UL, 3938729706UL, 1610628643UL, 2008635822UL, 2400061949UL, 2815835447UL, 3589167073UL, 1942470196UL, 402177406UL, 806469309UL, +865459039UL, 2428569572UL, 4071828137UL, 2880315633UL, 2512200928UL, 1582478959UL, 3833202201UL, 2378168250UL, 1412413704UL, 2767451252UL, 3686787615UL, 3155643175UL, 2580327273UL, 3020661883UL, 1040874588UL, 3152644489UL, 3277572880UL, 3795585437UL, 1266185861UL, 238446394UL, 3101079227UL, 203577834UL, 2230529041UL, 2864778434UL, 653319712UL, 3024925346UL, 2676624544UL, 2035972330UL, 500973884UL, 3839534784UL, 974511421UL, 1456450936UL, +429171245UL, 3921563262UL, 602320448UL, 1540218139UL, 1219580025UL, 1549741331UL, 3832317567UL, 1068872823UL, 2195381148UL, 4099775516UL, 1451717480UL, 149159438UL, 1699607068UL, 3715984838UL, 27774796UL, 1138983585UL, 1577536190UL, 837921790UL, 2060213898UL, 95204061UL, 1507155668UL, 304760810UL, 1446133066UL, 774471092UL, 3908131532UL, 3767856445UL, 3851422551UL, 2672625648UL, 1649125731UL, 2745551516UL, 1585868430UL, 1125303733UL, +2181520384UL, 1661721342UL, 1524991519UL, 220882755UL, 630187688UL, 1599074811UL, 3647143842UL, 2671841243UL, 306940008UL, 760977254UL, 3020017536UL, 3406011854UL, 1196617651UL, 572800511UL, 3922797738UL, 810584907UL, 2314291278UL, 1982654891UL, 1455757442UL, 1014649591UL, 1775783567UL, 3471741326UL, 3769735713UL, 2267018388UL, 2925762681UL, 319055602UL, 1593850639UL, 2224634157UL, 4140032336UL, 4134705925UL, 2794599326UL, 3918266498UL, +1027030708UL, 3480792188UL, 1862887216UL, 659607854UL, 3383776045UL, 300214141UL, 271754977UL, 833498724UL, 4054679386UL, 2477093804UL, 1683033001UL, 2011839858UL, 2353400914UL, 283191425UL, 2361664959UL, 2832813585UL, 3844268262UL, 3011027242UL, 137688840UL, 1468705704UL, 316500941UL, 2478683391UL, 2597550150UL, 1468220070UL, 1593029686UL, 4092049617UL, 1312002175UL, 168047351UL, 1602414610UL, 3922295193UL, 2797906491UL, 1950614326UL, +4070838751UL, 3858763082UL, 485374579UL, 2602196847UL, 1008498572UL, 3301557438UL, 2719858709UL, 2102043683UL, 946440664UL, 113509402UL, 226900299UL, 798285817UL, 2635764090UL, 1314772486UL, 2058590162UL, 1983114332UL, 2526463430UL, 354791UL, 3064382079UL, 2826997265UL, 349354812UL, 249430921UL, 2126504772UL, 3434653713UL, 3938729706UL, 1610628643UL, 967431506UL, 2400061949UL, 2815835447UL, 3589167073UL, 1942470196UL, 669129162UL, +806469309UL, 865459039UL, 2428569572UL, 4071828137UL, 3447449944UL, 2512200928UL, 1582478959UL, 3833202201UL, 2378168250UL, 1945768856UL, 2767451252UL, 3686787615UL, 3155643175UL, 2580327273UL, 2905624117UL, 1040874588UL, 3152644489UL, 3277572880UL, 3795585437UL, 3869959934UL, 238446394UL, 3101079227UL, 203577834UL, 2230529041UL, 1087760616UL, 653319712UL, 3024925346UL, 2676624544UL, 2035972330UL, 741014356UL, 3839534784UL, 974511421UL, +1456450936UL, 429171245UL, 598362053UL, 602320448UL, 1540218139UL, 1219580025UL, 1549741331UL, 401740328UL, 1068872823UL, 2195381148UL, 4099775516UL, 1451717480UL, 412110161UL, 1699607068UL, 3715984838UL, 27774796UL, 1138983585UL, 1531670562UL, 837921790UL, 2060213898UL, 95204061UL, 1507155668UL, 90279751UL, 1446133066UL, 774471092UL, 3908131532UL, 3767856445UL, 1136546910UL, 2672625648UL, 1649125731UL, 2745551516UL, 1585868430UL, +857721974UL, 1470900829UL, 64550776UL, 3252081369UL, 1649342279UL, 378546910UL, 3444980597UL, 3134750739UL, 1010105258UL, 1395608241UL, 1003208120UL, 3960524028UL, 3200241620UL, 3079969898UL, 1508044775UL, 4153769914UL, 2838198142UL, 773928818UL, 25836261UL, 3812652461UL, 3870603819UL, 931071963UL, 2565579710UL, 2930918109UL, 1091097445UL, 2223628368UL, 2934719684UL, 430797922UL, 2102409587UL, 720592077UL, 1675280068UL, 2578226918UL, +1316600845UL, 3427946098UL, 682896800UL, 1861125007UL, 251332674UL, 1502078012UL, 3020904394UL, 1458399451UL, 3088315263UL, 1635399147UL, 3605560130UL, 1755669804UL, 3754169290UL, 962708070UL, 3896576937UL, 3764679740UL, 2707457262UL, 3082551065UL, 1558451132UL, 1046028905UL, 3206335691UL, 731828142UL, 1765772975UL, 1195727587UL, 2664218451UL, 4234957963UL, 4073757168UL, 3230123616UL, 683981262UL, 607599877UL, 3659273671UL, 3230354324UL, +3393069074UL, 3250708814UL, 2229361194UL, 3923623619UL, 4093221649UL, 2441971643UL, 1787414237UL, 3603907850UL, 2254399656UL, 3508336126UL, 3578571587UL, 2383062806UL, 1012097006UL, 4250629546UL, 2086981615UL, 4190388250UL, 1399942361UL, 400707931UL, 3159618664UL, 2129750192UL, 911779896UL, 2736829998UL, 1909644954UL, 2168355517UL, 1583901478UL, 3468891177UL, 509297602UL, 769296769UL, 1865028750UL, 43276967UL, 3375387845UL, 2647467777UL, +1544731454UL, 3479333955UL, 4279441447UL, 485490313UL, 3523606596UL, 2880752852UL, 1946443431UL, 3760803481UL, 3115278477UL, 3693898557UL, 2387822435UL, 334412170UL, 2054111717UL, 269013084UL, 170401553UL, 3456013554UL, 3395842846UL, 508189059UL, 3398715186UL, 3862791669UL, 2741070272UL, 65318715UL, 1933435210UL, 4086198650UL, 3033193928UL, 1242412691UL, 3397363281UL, 3187419149UL, 1019508117UL, 562380742UL, 961415837UL, 2990412400UL, +3597720222UL, 2754100415UL, 1793508822UL, 966564784UL, 1875616532UL, 394646945UL, 1386107842UL, 2750810827UL, 2931007937UL, 3356489930UL, 2358364634UL, 3703772713UL, 3188884403UL, 2793590498UL, 3285138686UL, 515002680UL, 521510516UL, 887213583UL, 1873460781UL, 1583027667UL, 613895001UL, 557578628UL, 1892686243UL, 1974572772UL, 595831726UL, 229299738UL, 3847982294UL, 448248098UL, 1493822844UL, 3326405260UL, 2752463855UL, 128616819UL, +}, +{ +2014765631UL, 3938779303UL, 1811986049UL, 2101875601UL, 887194972UL, 3966228860UL, 3450775746UL, 4026039255UL, 4082308025UL, 432404123UL, 3181099213UL, 1228097256UL, 2368258457UL, 2953933351UL, 2582232464UL, 1657799516UL, 3525421629UL, 3927364159UL, 978138132UL, 3603597064UL, 342571522UL, 2100072168UL, 676229632UL, 2062864895UL, 3713317279UL, 4255773013UL, 1179492389UL, 3501226604UL, 1641801113UL, 2066614519UL, 3303232023UL, 1717768923UL, +2333501450UL, 4246883128UL, 1655087824UL, 1547897374UL, 754215285UL, 2832638094UL, 1365153701UL, 3309513970UL, 765738141UL, 1177808869UL, 324127419UL, 1171195868UL, 3494966448UL, 1714410667UL, 3645762436UL, 603810292UL, 489970006UL, 3126166124UL, 1616642501UL, 2646836239UL, 734727001UL, 118064420UL, 1164195304UL, 3692353914UL, 2267623847UL, 405457397UL, 2510437259UL, 3245015882UL, 2110859730UL, 967046702UL, 265790493UL, 3007163818UL, +3178475505UL, 1784447992UL, 3662964942UL, 1509963062UL, 1867864652UL, 1377871790UL, 4185567242UL, 657897796UL, 1762205546UL, 3895944199UL, 693988565UL, 2359023506UL, 1667660316UL, 478341078UL, 1898651054UL, 2352226314UL, 202416031UL, 855532642UL, 2290137962UL, 1573485803UL, 3675269487UL, 2346740592UL, 3111005795UL, 1741227661UL, 1222572879UL, 2176146608UL, 1595608675UL, 197451178UL, 1729118168UL, 876472937UL, 3201705210UL, 2315408645UL, +699968623UL, 2185639066UL, 3960900430UL, 539499973UL, 4226318752UL, 266371152UL, 2714506838UL, 945022093UL, 1378798863UL, 1925020181UL, 574417318UL, 1341455098UL, 3664225722UL, 3020780778UL, 3256613994UL, 2081255019UL, 3082744844UL, 3572803922UL, 1726854692UL, 1167777002UL, 557257486UL, 3577067012UL, 3806913480UL, 1578577194UL, 2631896730UL, 3937479909UL, 826138924UL, 670145071UL, 832017019UL, 715875283UL, 2008704579UL, 804955545UL, +4184114494UL, 867004874UL, 3586861289UL, 1190193155UL, 3288754776UL, 2271906590UL, 2007547109UL, 2206084232UL, 1621944575UL, 973990634UL, 3981493346UL, 1972746975UL, 1040348653UL, 2895228417UL, 691038334UL, 775610724UL, 3837025597UL, 714850057UL, 2912426839UL, 774555258UL, 3553866253UL, 2096154755UL, 1645117543UL, 3401470072UL, 2056183169UL, 2029528044UL, 3145728013UL, 1090530001UL, 49523828UL, 2228313334UL, 4013648604UL, 4289025873UL, +2749397923UL, 2014765631UL, 3938779303UL, 1811986049UL, 2101875601UL, 1575247143UL, 3966228860UL, 3450775746UL, 4026039255UL, 4082308025UL, 532118065UL, 3181099213UL, 1228097256UL, 2368258457UL, 2953933351UL, 896129082UL, 1657799516UL, 3525421629UL, 3927364159UL, 978138132UL, 3403930517UL, 342571522UL, 2100072168UL, 676229632UL, 2062864895UL, 38934050UL, 4255773013UL, 1179492389UL, 3501226604UL, 1641801113UL, 4195983797UL, 3303232023UL, +1717768923UL, 2333501450UL, 4246883128UL, 2854551758UL, 1547897374UL, 754215285UL, 2832638094UL, 1365153701UL, 1406220165UL, 765738141UL, 1177808869UL, 324127419UL, 1171195868UL, 625985592UL, 1714410667UL, 3645762436UL, 603810292UL, 489970006UL, 344948229UL, 1616642501UL, 2646836239UL, 734727001UL, 118064420UL, 3360380275UL, 3692353914UL, 2267623847UL, 405457397UL, 2510437259UL, 3697919521UL, 2110859730UL, 967046702UL, 265790493UL, +3007163818UL, 1395299303UL, 1784447992UL, 3662964942UL, 1509963062UL, 1867864652UL, 849544728UL, 4185567242UL, 657897796UL, 1762205546UL, 3895944199UL, 1219998053UL, 2359023506UL, 1667660316UL, 478341078UL, 1898651054UL, 943166064UL, 202416031UL, 855532642UL, 2290137962UL, 1573485803UL, 4238971908UL, 2346740592UL, 3111005795UL, 1741227661UL, 1222572879UL, 2670048596UL, 1595608675UL, 197451178UL, 1729118168UL, 876472937UL, 94688481UL, +2315408645UL, 699968623UL, 2185639066UL, 3960900430UL, 1224638706UL, 4226318752UL, 266371152UL, 2714506838UL, 945022093UL, 2683523818UL, 1925020181UL, 574417318UL, 1341455098UL, 3664225722UL, 1168593559UL, 3256613994UL, 2081255019UL, 3082744844UL, 3572803922UL, 2816021735UL, 1167777002UL, 557257486UL, 3577067012UL, 3806913480UL, 740433434UL, 2631896730UL, 3937479909UL, 826138924UL, 670145071UL, 4127240538UL, 715875283UL, 2008704579UL, +804955545UL, 4184114494UL, 1692532062UL, 3586861289UL, 1190193155UL, 3288754776UL, 2271906590UL, 922306057UL, 2206084232UL, 1621944575UL, 973990634UL, 3981493346UL, 3555073644UL, 1040348653UL, 2895228417UL, 691038334UL, 775610724UL, 1798939042UL, 714850057UL, 2912426839UL, 774555258UL, 3553866253UL, 4209859609UL, 1645117543UL, 3401470072UL, 2056183169UL, 2029528044UL, 2169159734UL, 1090530001UL, 49523828UL, 2228313334UL, 4013648604UL, +1499948031UL, 2749397923UL, 2014765631UL, 3938779303UL, 1811986049UL, 2169095159UL, 1575247143UL, 3966228860UL, 3450775746UL, 4026039255UL, 1220311069UL, 532118065UL, 3181099213UL, 1228097256UL, 2368258457UL, 649921441UL, 896129082UL, 1657799516UL, 3525421629UL, 3927364159UL, 2546335470UL, 3403930517UL, 342571522UL, 2100072168UL, 676229632UL, 3090148374UL, 38934050UL, 4255773013UL, 1179492389UL, 3501226604UL, 2613176152UL, 4195983797UL, +3303232023UL, 1717768923UL, 2333501450UL, 3923041739UL, 2854551758UL, 1547897374UL, 754215285UL, 2832638094UL, 731392091UL, 1406220165UL, 765738141UL, 1177808869UL, 324127419UL, 12876722UL, 625985592UL, 1714410667UL, 3645762436UL, 603810292UL, 2789313462UL, 344948229UL, 1616642501UL, 2646836239UL, 734727001UL, 3369486664UL, 3360380275UL, 3692353914UL, 2267623847UL, 405457397UL, 4284067044UL, 3697919521UL, 2110859730UL, 967046702UL, +265790493UL, 2779045063UL, 1395299303UL, 1784447992UL, 3662964942UL, 1509963062UL, 3233239196UL, 849544728UL, 4185567242UL, 657897796UL, 1762205546UL, 2086953994UL, 1219998053UL, 2359023506UL, 1667660316UL, 478341078UL, 4137166515UL, 943166064UL, 202416031UL, 855532642UL, 2290137962UL, 1053737970UL, 4238971908UL, 2346740592UL, 3111005795UL, 1741227661UL, 3570501235UL, 2670048596UL, 1595608675UL, 197451178UL, 1729118168UL, 4162077327UL, +94688481UL, 2315408645UL, 699968623UL, 2185639066UL, 2842562270UL, 1224638706UL, 4226318752UL, 266371152UL, 2714506838UL, 755620309UL, 2683523818UL, 1925020181UL, 574417318UL, 1341455098UL, 3323621213UL, 1168593559UL, 3256613994UL, 2081255019UL, 3082744844UL, 3845230416UL, 2816021735UL, 1167777002UL, 557257486UL, 3577067012UL, 66225918UL, 740433434UL, 2631896730UL, 3937479909UL, 826138924UL, 522548622UL, 4127240538UL, 715875283UL, +2008704579UL, 804955545UL, 22190845UL, 1692532062UL, 3586861289UL, 1190193155UL, 3288754776UL, 610751818UL, 922306057UL, 2206084232UL, 1621944575UL, 973990634UL, 1771882567UL, 3555073644UL, 1040348653UL, 2895228417UL, 691038334UL, 149995790UL, 1798939042UL, 714850057UL, 2912426839UL, 774555258UL, 2020442761UL, 4209859609UL, 1645117543UL, 3401470072UL, 2056183169UL, 460813741UL, 2169159734UL, 1090530001UL, 49523828UL, 2228313334UL, +504317288UL, 1499948031UL, 2749397923UL, 2014765631UL, 3938779303UL, 1175469033UL, 2169095159UL, 1575247143UL, 3966228860UL, 3450775746UL, 1032079910UL, 1220311069UL, 532118065UL, 3181099213UL, 1228097256UL, 3353583885UL, 649921441UL, 896129082UL, 1657799516UL, 3525421629UL, 2830418357UL, 2546335470UL, 3403930517UL, 342571522UL, 2100072168UL, 1099053459UL, 3090148374UL, 38934050UL, 4255773013UL, 1179492389UL, 1634035942UL, 2613176152UL, +4195983797UL, 3303232023UL, 1717768923UL, 4175785502UL, 3923041739UL, 2854551758UL, 1547897374UL, 754215285UL, 3674851127UL, 731392091UL, 1406220165UL, 765738141UL, 1177808869UL, 776475327UL, 12876722UL, 625985592UL, 1714410667UL, 3645762436UL, 759189800UL, 2789313462UL, 344948229UL, 1616642501UL, 2646836239UL, 1228911282UL, 3369486664UL, 3360380275UL, 3692353914UL, 2267623847UL, 3058856811UL, 4284067044UL, 3697919521UL, 2110859730UL, +967046702UL, 3601311392UL, 2779045063UL, 1395299303UL, 1784447992UL, 3662964942UL, 284169442UL, 3233239196UL, 849544728UL, 4185567242UL, 657897796UL, 905886381UL, 2086953994UL, 1219998053UL, 2359023506UL, 1667660316UL, 2784311626UL, 4137166515UL, 943166064UL, 202416031UL, 855532642UL, 895862877UL, 1053737970UL, 4238971908UL, 2346740592UL, 3111005795UL, 1509264114UL, 3570501235UL, 2670048596UL, 1595608675UL, 197451178UL, 3653040124UL, +4162077327UL, 94688481UL, 2315408645UL, 699968623UL, 1071988392UL, 2842562270UL, 1224638706UL, 4226318752UL, 266371152UL, 4214356293UL, 755620309UL, 2683523818UL, 1925020181UL, 574417318UL, 119162126UL, 3323621213UL, 1168593559UL, 3256613994UL, 2081255019UL, 1317924999UL, 3845230416UL, 2816021735UL, 1167777002UL, 557257486UL, 638058809UL, 66225918UL, 740433434UL, 2631896730UL, 3937479909UL, 411228024UL, 522548622UL, 4127240538UL, +715875283UL, 2008704579UL, 2246049355UL, 22190845UL, 1692532062UL, 3586861289UL, 1190193155UL, 4078828073UL, 610751818UL, 922306057UL, 2206084232UL, 1621944575UL, 907181435UL, 1771882567UL, 3555073644UL, 1040348653UL, 2895228417UL, 940846326UL, 149995790UL, 1798939042UL, 714850057UL, 2912426839UL, 3345560812UL, 2020442761UL, 4209859609UL, 1645117543UL, 3401470072UL, 2036328600UL, 460813741UL, 2169159734UL, 1090530001UL, 49523828UL, +510136795UL, 2233313725UL, 1046048857UL, 700202384UL, 926275751UL, 4104982908UL, 3910999868UL, 1125213128UL, 492681420UL, 3891914731UL, 956545470UL, 115696875UL, 2957144177UL, 77090391UL, 467732901UL, 2599813105UL, 3888976883UL, 2098926023UL, 2844817051UL, 2069408123UL, 2239429902UL, 3793992219UL, 3020240490UL, 1721698056UL, 3012473888UL, 1537226153UL, 725991171UL, 61376035UL, 381912667UL, 3904514327UL, 40015731UL, 4263210119UL, +2876064791UL, 2732785471UL, 2934318283UL, 3134934287UL, 3161129365UL, 3789733734UL, 2954419388UL, 2742205850UL, 3488450208UL, 3252908703UL, 410643191UL, 3246033194UL, 2846558783UL, 828879673UL, 2428687670UL, 389617242UL, 63987225UL, 439842832UL, 2635895570UL, 3468152776UL, 4086700701UL, 3370617315UL, 2400127386UL, 4266992260UL, 3026019128UL, 4225721108UL, 1328114488UL, 2808680961UL, 3574018824UL, 4060262451UL, 2329039960UL, 1165344648UL, +3635963149UL, 2414703792UL, 2269100254UL, 832995451UL, 2143875746UL, 1031309981UL, 2129333746UL, 2606784227UL, 805236091UL, 666141116UL, 2749351381UL, 53998350UL, 2270447972UL, 2092784991UL, 877961283UL, 3019419608UL, 2438459472UL, 2273921167UL, 332279281UL, 3759993687UL, 2465113760UL, 3732237006UL, 322823266UL, 491053374UL, 686619591UL, 4192648122UL, 4118497267UL, 1948902148UL, 988375775UL, 2098328675UL, 3107501958UL, 2979856583UL, +2274193457UL, 6179961UL, 188209161UL, 1491245003UL, 3005972885UL, 1658799053UL, 3420802262UL, 2128792168UL, 3272743598UL, 4163716849UL, 817350318UL, 3372322557UL, 1525295885UL, 490587460UL, 3634834949UL, 2584809384UL, 3638373352UL, 2603765126UL, 3223396315UL, 4021061386UL, 2143780551UL, 248332433UL, 3654752967UL, 27201989UL, 3994156272UL, 5505477UL, 4260955724UL, 1175998822UL, 2665646240UL, 866875674UL, 3569324422UL, 202962714UL, +896177244UL, 3146417201UL, 1168925859UL, 2228636445UL, 105395449UL, 2567482935UL, 1301265751UL, 3739617610UL, 2486939910UL, 1891847857UL, 2647840744UL, 1141826566UL, 3360553996UL, 4267671927UL, 2546157872UL, 1143297884UL, 2049385137UL, 4288036836UL, 3347190546UL, 3480408604UL, 2756408254UL, 2396048567UL, 1151717877UL, 2211243289UL, 4221659024UL, 21773193UL, 1665317870UL, 3116384869UL, 3231689469UL, 3689471824UL, 1520574310UL, 463615415UL, +}, +{ +2647200400UL, 1592194261UL, 1289872755UL, 2079982087UL, 3431487085UL, 1101851783UL, 3373292799UL, 2148994262UL, 2785319928UL, 3206527339UL, 2731839331UL, 1280366172UL, 1146205735UL, 2930495205UL, 2876978398UL, 3885758458UL, 2062812458UL, 2448488486UL, 192141900UL, 3861696664UL, 2677929258UL, 3606729729UL, 2920965773UL, 1156521508UL, 3168665640UL, 298794036UL, 957896625UL, 2606719899UL, 3699219026UL, 3120096333UL, 2531109351UL, 1920936462UL, +2848868175UL, 1406404729UL, 2956672675UL, 1376226240UL, 3667482110UL, 2551426756UL, 3433640449UL, 2603906744UL, 4217864690UL, 47671552UL, 2993859190UL, 1269153270UL, 3463588775UL, 1655126430UL, 3453916724UL, 2157890969UL, 252769449UL, 1583335064UL, 2560819344UL, 52639671UL, 39618615UL, 313192112UL, 2625914283UL, 2964928555UL, 4226359627UL, 4141969666UL, 183405146UL, 1455378225UL, 2994063945UL, 3146629795UL, 2992956289UL, 368634554UL, +4110058153UL, 1156556441UL, 3690317172UL, 906928962UL, 3773042217UL, 948650679UL, 4134172918UL, 2922802573UL, 1417921660UL, 291400676UL, 3120733115UL, 3225369425UL, 3200455006UL, 2207799613UL, 1766261260UL, 914727455UL, 1927023103UL, 572959294UL, 3447057855UL, 4042691162UL, 840021910UL, 4187195325UL, 3627831667UL, 1671506539UL, 242673485UL, 3330397756UL, 776552069UL, 684550924UL, 261597601UL, 1857936262UL, 1022869402UL, 4209077103UL, +14248159UL, 2366156245UL, 1910356465UL, 2020463550UL, 873419743UL, 4290775093UL, 3670978210UL, 1726974037UL, 784115717UL, 3574834402UL, 357805142UL, 3820795621UL, 1854247318UL, 1161642656UL, 3977404318UL, 2054677775UL, 1737374322UL, 2852015019UL, 4277252452UL, 1392810771UL, 3742661504UL, 1900815804UL, 1965911170UL, 3540183220UL, 2106191537UL, 3606954134UL, 2108636204UL, 2981827052UL, 2506861567UL, 184003599UL, 3319252632UL, 1370913077UL, +940955681UL, 2244100002UL, 3683661822UL, 3215832318UL, 3463899341UL, 134577035UL, 3404365179UL, 2262494389UL, 88039196UL, 114405083UL, 1071449574UL, 4008494055UL, 765981248UL, 758357266UL, 2564125377UL, 901977407UL, 955156196UL, 3900980822UL, 134031448UL, 2566915950UL, 3445833537UL, 3138903399UL, 2113076217UL, 713587277UL, 3396078039UL, 3987657193UL, 3004104774UL, 800324742UL, 652529813UL, 3999083342UL, 486108562UL, 2103591900UL, +104743736UL, 2647200400UL, 1592194261UL, 1289872755UL, 2079982087UL, 552781204UL, 1101851783UL, 3373292799UL, 2148994262UL, 2785319928UL, 1222851809UL, 2731839331UL, 1280366172UL, 1146205735UL, 2930495205UL, 942360591UL, 3885758458UL, 2062812458UL, 2448488486UL, 192141900UL, 1909229999UL, 2677929258UL, 3606729729UL, 2920965773UL, 1156521508UL, 2995805883UL, 298794036UL, 957896625UL, 2606719899UL, 3699219026UL, 2447513005UL, 2531109351UL, +1920936462UL, 2848868175UL, 1406404729UL, 2751142611UL, 1376226240UL, 3667482110UL, 2551426756UL, 3433640449UL, 3724189478UL, 4217864690UL, 47671552UL, 2993859190UL, 1269153270UL, 2144136371UL, 1655126430UL, 3453916724UL, 2157890969UL, 252769449UL, 2959496542UL, 2560819344UL, 52639671UL, 39618615UL, 313192112UL, 2367743540UL, 2964928555UL, 4226359627UL, 4141969666UL, 183405146UL, 2006751422UL, 2994063945UL, 3146629795UL, 2992956289UL, +368634554UL, 1529794973UL, 1156556441UL, 3690317172UL, 906928962UL, 3773042217UL, 2005599428UL, 4134172918UL, 2922802573UL, 1417921660UL, 291400676UL, 2664982078UL, 3225369425UL, 3200455006UL, 2207799613UL, 1766261260UL, 2623711877UL, 1927023103UL, 572959294UL, 3447057855UL, 4042691162UL, 3510199782UL, 4187195325UL, 3627831667UL, 1671506539UL, 242673485UL, 1978730938UL, 776552069UL, 684550924UL, 261597601UL, 1857936262UL, 3273582958UL, +4209077103UL, 14248159UL, 2366156245UL, 1910356465UL, 457933823UL, 873419743UL, 4290775093UL, 3670978210UL, 1726974037UL, 1414288023UL, 3574834402UL, 357805142UL, 3820795621UL, 1854247318UL, 2679386897UL, 3977404318UL, 2054677775UL, 1737374322UL, 2852015019UL, 2411291453UL, 1392810771UL, 3742661504UL, 1900815804UL, 1965911170UL, 3719529323UL, 2106191537UL, 3606954134UL, 2108636204UL, 2981827052UL, 3702357099UL, 184003599UL, 3319252632UL, +1370913077UL, 940955681UL, 4262675711UL, 3683661822UL, 3215832318UL, 3463899341UL, 134577035UL, 3494669542UL, 2262494389UL, 88039196UL, 114405083UL, 1071449574UL, 1060831201UL, 765981248UL, 758357266UL, 2564125377UL, 901977407UL, 3003279383UL, 3900980822UL, 134031448UL, 2566915950UL, 3445833537UL, 2846863035UL, 2113076217UL, 713587277UL, 3396078039UL, 3987657193UL, 2067196130UL, 800324742UL, 652529813UL, 3999083342UL, 486108562UL, +2321935002UL, 104743736UL, 2647200400UL, 1592194261UL, 1289872755UL, 466892855UL, 552781204UL, 1101851783UL, 3373292799UL, 2148994262UL, 3078568050UL, 1222851809UL, 2731839331UL, 1280366172UL, 1146205735UL, 1710937426UL, 942360591UL, 3885758458UL, 2062812458UL, 2448488486UL, 3418446265UL, 1909229999UL, 2677929258UL, 3606729729UL, 2920965773UL, 1103324742UL, 2995805883UL, 298794036UL, 957896625UL, 2606719899UL, 675602173UL, 2447513005UL, +2531109351UL, 1920936462UL, 2848868175UL, 1509959171UL, 2751142611UL, 1376226240UL, 3667482110UL, 2551426756UL, 2447143807UL, 3724189478UL, 4217864690UL, 47671552UL, 2993859190UL, 2821422976UL, 2144136371UL, 1655126430UL, 3453916724UL, 2157890969UL, 3665277070UL, 2959496542UL, 2560819344UL, 52639671UL, 39618615UL, 2817859210UL, 2367743540UL, 2964928555UL, 4226359627UL, 4141969666UL, 2856219617UL, 2006751422UL, 2994063945UL, 3146629795UL, +2992956289UL, 3176479073UL, 1529794973UL, 1156556441UL, 3690317172UL, 906928962UL, 97899274UL, 2005599428UL, 4134172918UL, 2922802573UL, 1417921660UL, 1492426675UL, 2664982078UL, 3225369425UL, 3200455006UL, 2207799613UL, 2275640124UL, 2623711877UL, 1927023103UL, 572959294UL, 3447057855UL, 1036984002UL, 3510199782UL, 4187195325UL, 3627831667UL, 1671506539UL, 1827895694UL, 1978730938UL, 776552069UL, 684550924UL, 261597601UL, 3493571621UL, +3273582958UL, 4209077103UL, 14248159UL, 2366156245UL, 211745521UL, 457933823UL, 873419743UL, 4290775093UL, 3670978210UL, 1909994881UL, 1414288023UL, 3574834402UL, 357805142UL, 3820795621UL, 1911700755UL, 2679386897UL, 3977404318UL, 2054677775UL, 1737374322UL, 213019511UL, 2411291453UL, 1392810771UL, 3742661504UL, 1900815804UL, 237536256UL, 3719529323UL, 2106191537UL, 3606954134UL, 2108636204UL, 665423205UL, 3702357099UL, 184003599UL, +3319252632UL, 1370913077UL, 3583034472UL, 4262675711UL, 3683661822UL, 3215832318UL, 3463899341UL, 4027471772UL, 3494669542UL, 2262494389UL, 88039196UL, 114405083UL, 3580272354UL, 1060831201UL, 765981248UL, 758357266UL, 2564125377UL, 2592170747UL, 3003279383UL, 3900980822UL, 134031448UL, 2566915950UL, 1722483656UL, 2846863035UL, 2113076217UL, 713587277UL, 3396078039UL, 244197359UL, 2067196130UL, 800324742UL, 652529813UL, 3999083342UL, +2310369213UL, 2321935002UL, 104743736UL, 2647200400UL, 1592194261UL, 1610483859UL, 466892855UL, 552781204UL, 1101851783UL, 3373292799UL, 2617595614UL, 3078568050UL, 1222851809UL, 2731839331UL, 1280366172UL, 808483717UL, 1710937426UL, 942360591UL, 3885758458UL, 2062812458UL, 3260452154UL, 3418446265UL, 1909229999UL, 2677929258UL, 3606729729UL, 341113837UL, 1103324742UL, 2995805883UL, 298794036UL, 957896625UL, 2309730124UL, 675602173UL, +2447513005UL, 2531109351UL, 1920936462UL, 2268824429UL, 1509959171UL, 2751142611UL, 1376226240UL, 3667482110UL, 2745634237UL, 2447143807UL, 3724189478UL, 4217864690UL, 47671552UL, 2787057737UL, 2821422976UL, 2144136371UL, 1655126430UL, 3453916724UL, 339095616UL, 3665277070UL, 2959496542UL, 2560819344UL, 52639671UL, 3200765881UL, 2817859210UL, 2367743540UL, 2964928555UL, 4226359627UL, 3206913703UL, 2856219617UL, 2006751422UL, 2994063945UL, +3146629795UL, 1042016834UL, 3176479073UL, 1529794973UL, 1156556441UL, 3690317172UL, 171871257UL, 97899274UL, 2005599428UL, 4134172918UL, 2922802573UL, 1501051393UL, 1492426675UL, 2664982078UL, 3225369425UL, 3200455006UL, 1356823782UL, 2275640124UL, 2623711877UL, 1927023103UL, 572959294UL, 319456586UL, 1036984002UL, 3510199782UL, 4187195325UL, 3627831667UL, 3026392291UL, 1827895694UL, 1978730938UL, 776552069UL, 684550924UL, 2862336749UL, +3493571621UL, 3273582958UL, 4209077103UL, 14248159UL, 1597498830UL, 211745521UL, 457933823UL, 873419743UL, 4290775093UL, 2990300609UL, 1909994881UL, 1414288023UL, 3574834402UL, 357805142UL, 1957211849UL, 1911700755UL, 2679386897UL, 3977404318UL, 2054677775UL, 1006075205UL, 213019511UL, 2411291453UL, 1392810771UL, 3742661504UL, 1443139437UL, 237536256UL, 3719529323UL, 2106191537UL, 3606954134UL, 2671394121UL, 665423205UL, 3702357099UL, +184003599UL, 3319252632UL, 1632983188UL, 3583034472UL, 4262675711UL, 3683661822UL, 3215832318UL, 4080585934UL, 4027471772UL, 3494669542UL, 2262494389UL, 88039196UL, 677218369UL, 3580272354UL, 1060831201UL, 765981248UL, 758357266UL, 1277026792UL, 2592170747UL, 3003279383UL, 3900980822UL, 134031448UL, 4189207981UL, 1722483656UL, 2846863035UL, 2113076217UL, 713587277UL, 2098603934UL, 244197359UL, 2067196130UL, 800324742UL, 652529813UL, +1307843279UL, 3205610699UL, 1606722715UL, 2749781905UL, 3500078806UL, 320007706UL, 4092615096UL, 608085660UL, 1869480444UL, 459160631UL, 3657609957UL, 1944540526UL, 2184854884UL, 3497113751UL, 2817682182UL, 3367276652UL, 2069300794UL, 1466691974UL, 3078806052UL, 3998756116UL, 2068892089UL, 1789981386UL, 4196184114UL, 4004623319UL, 3029515569UL, 3206332209UL, 3424306963UL, 1805804276UL, 899469644UL, 1149853995UL, 903917909UL, 1185042552UL, +447265042UL, 3579272434UL, 116409560UL, 2211704275UL, 1237721838UL, 3636618157UL, 3191931082UL, 2430339315UL, 3551966793UL, 1533877057UL, 1700891210UL, 3317627852UL, 828148584UL, 1733460943UL, 3866870689UL, 3970886915UL, 1624935507UL, 3236099078UL, 4209593953UL, 1951283095UL, 1579020365UL, 1165668813UL, 1423097998UL, 1294879824UL, 3406063424UL, 3313007028UL, 2090501113UL, 842064167UL, 729587893UL, 2949702260UL, 2099637920UL, 260436310UL, +1056109549UL, 657874983UL, 2734575906UL, 4088958435UL, 3265216971UL, 1081848592UL, 2593212854UL, 4028921684UL, 2868974814UL, 2299228627UL, 49944924UL, 955114665UL, 2844328062UL, 885136505UL, 4262681333UL, 977883895UL, 998890598UL, 2026602293UL, 87852872UL, 2197997810UL, 910583259UL, 3151223623UL, 3960726944UL, 1778982325UL, 3322631234UL, 2940402694UL, 1619768059UL, 1592832128UL, 1434542537UL, 2107314297UL, 1170789408UL, 3357335254UL, +3317662644UL, 1409884338UL, 73741139UL, 1093507243UL, 329113525UL, 4199840577UL, 442295615UL, 3348669654UL, 435948047UL, 1154137005UL, 3151357655UL, 2101029905UL, 2430218233UL, 2474305449UL, 2316834456UL, 1736616135UL, 1575712778UL, 370866908UL, 4256943043UL, 2805503887UL, 1099763491UL, 2473785999UL, 3215573143UL, 472701386UL, 3070116154UL, 3969279119UL, 3331310102UL, 3932945670UL, 1502564397UL, 1294139579UL, 3073834823UL, 3115143551UL, +3602082994UL, 3707103500UL, 2570195094UL, 1268510174UL, 3561337287UL, 112422529UL, 1483304061UL, 3712148969UL, 3729628891UL, 2741131557UL, 4035019342UL, 2395091348UL, 208448216UL, 607199897UL, 4049058939UL, 3463267226UL, 3821711834UL, 1697628853UL, 691151709UL, 3014869414UL, 11610545UL, 3895793639UL, 3019679196UL, 1246664817UL, 753245113UL, 2236232962UL, 4172861179UL, 4030183420UL, 2367787106UL, 2209331085UL, 4170801007UL, 3609895913UL, +}, +{ +930278208UL, 223382535UL, 720499309UL, 2613473585UL, 4173439516UL, 2132019243UL, 468054579UL, 1141433627UL, 1328639101UL, 3222455434UL, 4023859457UL, 892124224UL, 2940688706UL, 2894552260UL, 1595432126UL, 2558709596UL, 2057191226UL, 1116728192UL, 3767370344UL, 1457278707UL, 3171850455UL, 3733161247UL, 149922078UL, 3860652874UL, 743952057UL, 1024625539UL, 3982786483UL, 2077838781UL, 3713742913UL, 2790452624UL, 3014482913UL, 2928857967UL, +476371337UL, 611803300UL, 3000092437UL, 57069608UL, 1554852195UL, 1406780525UL, 2288998898UL, 460131340UL, 3945168588UL, 18495216UL, 547882902UL, 1624966119UL, 2229423551UL, 1492565146UL, 706052879UL, 2733955743UL, 1450476708UL, 2565285196UL, 2491601298UL, 850297175UL, 331472128UL, 3275065709UL, 3154247398UL, 1364512871UL, 1193063601UL, 579449294UL, 4097747196UL, 3572372000UL, 2712499116UL, 1172861307UL, 3964137156UL, 1300564854UL, +1057993198UL, 2785733262UL, 3548277076UL, 2572944411UL, 3299232577UL, 2031854568UL, 2468534978UL, 602097973UL, 2068619195UL, 2639336890UL, 1694467033UL, 1581263823UL, 809076686UL, 2892861850UL, 4042078087UL, 3178152001UL, 706023882UL, 3236709493UL, 3603158102UL, 2575690800UL, 2831218686UL, 2492604085UL, 207296828UL, 1561595438UL, 2961967115UL, 3304283504UL, 835276604UL, 3005485731UL, 58946395UL, 3979071161UL, 1560535337UL, 2679058432UL, +1061627241UL, 1142692919UL, 1476802977UL, 1306619165UL, 1297953898UL, 4282928317UL, 3630719944UL, 2305895643UL, 2656730970UL, 916308118UL, 4160016206UL, 3541795573UL, 4222235077UL, 1289754532UL, 1963633184UL, 3595798857UL, 2273299603UL, 1687478595UL, 2249344966UL, 2267127964UL, 2201115693UL, 917609614UL, 3731921025UL, 1634893875UL, 3039440017UL, 1122674005UL, 2906728840UL, 921166852UL, 3525309936UL, 633872502UL, 821930665UL, 3861074060UL, +3309559821UL, 304858441UL, 1530517912UL, 1140212033UL, 3168869568UL, 3223449972UL, 1343718360UL, 2831361172UL, 1723616626UL, 3675867172UL, 2586694335UL, 2374941766UL, 387033391UL, 1528180036UL, 1561421035UL, 2735360720UL, 3952587140UL, 13543969UL, 3987997725UL, 4273177532UL, 2200558169UL, 461920718UL, 459441276UL, 4225054447UL, 2248193798UL, 1103878063UL, 3027778665UL, 1844457031UL, 1364117386UL, 1575430424UL, 2276483962UL, 2665252582UL, +1572038262UL, 930278208UL, 223382535UL, 720499309UL, 2613473585UL, 4025056228UL, 2132019243UL, 468054579UL, 1141433627UL, 1328639101UL, 304940359UL, 4023859457UL, 892124224UL, 2940688706UL, 2894552260UL, 2006939659UL, 2558709596UL, 2057191226UL, 1116728192UL, 3767370344UL, 3026555841UL, 3171850455UL, 3733161247UL, 149922078UL, 3860652874UL, 2068299929UL, 1024625539UL, 3982786483UL, 2077838781UL, 3713742913UL, 2512419366UL, 3014482913UL, +2928857967UL, 476371337UL, 611803300UL, 259065762UL, 57069608UL, 1554852195UL, 1406780525UL, 2288998898UL, 2261401631UL, 3945168588UL, 18495216UL, 547882902UL, 1624966119UL, 3049748661UL, 1492565146UL, 706052879UL, 2733955743UL, 1450476708UL, 910808481UL, 2491601298UL, 850297175UL, 331472128UL, 3275065709UL, 3877736250UL, 1364512871UL, 1193063601UL, 579449294UL, 4097747196UL, 3029512053UL, 2712499116UL, 1172861307UL, 3964137156UL, +1300564854UL, 2398462790UL, 2785733262UL, 3548277076UL, 2572944411UL, 3299232577UL, 3497485227UL, 2468534978UL, 602097973UL, 2068619195UL, 2639336890UL, 4271191874UL, 1581263823UL, 809076686UL, 2892861850UL, 4042078087UL, 3046259144UL, 706023882UL, 3236709493UL, 3603158102UL, 2575690800UL, 591682100UL, 2492604085UL, 207296828UL, 1561595438UL, 2961967115UL, 3885379584UL, 835276604UL, 3005485731UL, 58946395UL, 3979071161UL, 2784795951UL, +2679058432UL, 1061627241UL, 1142692919UL, 1476802977UL, 2864266022UL, 1297953898UL, 4282928317UL, 3630719944UL, 2305895643UL, 3374260620UL, 916308118UL, 4160016206UL, 3541795573UL, 4222235077UL, 3025355241UL, 1963633184UL, 3595798857UL, 2273299603UL, 1687478595UL, 4115795122UL, 2267127964UL, 2201115693UL, 917609614UL, 3731921025UL, 2905712346UL, 3039440017UL, 1122674005UL, 2906728840UL, 921166852UL, 2881663141UL, 633872502UL, 821930665UL, +3861074060UL, 3309559821UL, 2816533968UL, 1530517912UL, 1140212033UL, 3168869568UL, 3223449972UL, 1894667948UL, 2831361172UL, 1723616626UL, 3675867172UL, 2586694335UL, 3974041178UL, 387033391UL, 1528180036UL, 1561421035UL, 2735360720UL, 2014321457UL, 13543969UL, 3987997725UL, 4273177532UL, 2200558169UL, 2259553303UL, 459441276UL, 4225054447UL, 2248193798UL, 1103878063UL, 3889361594UL, 1844457031UL, 1364117386UL, 1575430424UL, 2276483962UL, +3302182736UL, 1572038262UL, 930278208UL, 223382535UL, 720499309UL, 4173186621UL, 4025056228UL, 2132019243UL, 468054579UL, 1141433627UL, 2396654717UL, 304940359UL, 4023859457UL, 892124224UL, 2940688706UL, 2903529759UL, 2006939659UL, 2558709596UL, 2057191226UL, 1116728192UL, 715931354UL, 3026555841UL, 3171850455UL, 3733161247UL, 149922078UL, 3342675578UL, 2068299929UL, 1024625539UL, 3982786483UL, 2077838781UL, 1157097180UL, 2512419366UL, +3014482913UL, 2928857967UL, 476371337UL, 2192872017UL, 259065762UL, 57069608UL, 1554852195UL, 1406780525UL, 4165039782UL, 2261401631UL, 3945168588UL, 18495216UL, 547882902UL, 2453072030UL, 3049748661UL, 1492565146UL, 706052879UL, 2733955743UL, 2233423433UL, 910808481UL, 2491601298UL, 850297175UL, 331472128UL, 1154483111UL, 3877736250UL, 1364512871UL, 1193063601UL, 579449294UL, 690173400UL, 3029512053UL, 2712499116UL, 1172861307UL, +3964137156UL, 2683130322UL, 2398462790UL, 2785733262UL, 3548277076UL, 2572944411UL, 4075824857UL, 3497485227UL, 2468534978UL, 602097973UL, 2068619195UL, 2711665545UL, 4271191874UL, 1581263823UL, 809076686UL, 2892861850UL, 3558962856UL, 3046259144UL, 706023882UL, 3236709493UL, 3603158102UL, 274706518UL, 591682100UL, 2492604085UL, 207296828UL, 1561595438UL, 1532885415UL, 3885379584UL, 835276604UL, 3005485731UL, 58946395UL, 4143205928UL, +2784795951UL, 2679058432UL, 1061627241UL, 1142692919UL, 2539503297UL, 2864266022UL, 1297953898UL, 4282928317UL, 3630719944UL, 3333189589UL, 3374260620UL, 916308118UL, 4160016206UL, 3541795573UL, 1771535488UL, 3025355241UL, 1963633184UL, 3595798857UL, 2273299603UL, 1735171204UL, 4115795122UL, 2267127964UL, 2201115693UL, 917609614UL, 4220503034UL, 2905712346UL, 3039440017UL, 1122674005UL, 2906728840UL, 868453017UL, 2881663141UL, 633872502UL, +821930665UL, 3861074060UL, 1928586970UL, 2816533968UL, 1530517912UL, 1140212033UL, 3168869568UL, 1082127627UL, 1894667948UL, 2831361172UL, 1723616626UL, 3675867172UL, 496773835UL, 3974041178UL, 387033391UL, 1528180036UL, 1561421035UL, 2763161987UL, 2014321457UL, 13543969UL, 3987997725UL, 4273177532UL, 2110570579UL, 2259553303UL, 459441276UL, 4225054447UL, 2248193798UL, 53021618UL, 3889361594UL, 1844457031UL, 1364117386UL, 1575430424UL, +1105247032UL, 3302182736UL, 1572038262UL, 930278208UL, 223382535UL, 2159964170UL, 4173186621UL, 4025056228UL, 2132019243UL, 468054579UL, 1397544344UL, 2396654717UL, 304940359UL, 4023859457UL, 892124224UL, 2800429255UL, 2903529759UL, 2006939659UL, 2558709596UL, 2057191226UL, 296054924UL, 715931354UL, 3026555841UL, 3171850455UL, 3733161247UL, 863280930UL, 3342675578UL, 2068299929UL, 1024625539UL, 3982786483UL, 949122664UL, 1157097180UL, +2512419366UL, 3014482913UL, 2928857967UL, 2585465463UL, 2192872017UL, 259065762UL, 57069608UL, 1554852195UL, 3650462338UL, 4165039782UL, 2261401631UL, 3945168588UL, 18495216UL, 524715648UL, 2453072030UL, 3049748661UL, 1492565146UL, 706052879UL, 123143857UL, 2233423433UL, 910808481UL, 2491601298UL, 850297175UL, 3272095697UL, 1154483111UL, 3877736250UL, 1364512871UL, 1193063601UL, 2394240337UL, 690173400UL, 3029512053UL, 2712499116UL, +1172861307UL, 598335483UL, 2683130322UL, 2398462790UL, 2785733262UL, 3548277076UL, 678275336UL, 4075824857UL, 3497485227UL, 2468534978UL, 602097973UL, 1861912463UL, 2711665545UL, 4271191874UL, 1581263823UL, 809076686UL, 3324887617UL, 3558962856UL, 3046259144UL, 706023882UL, 3236709493UL, 1776103512UL, 274706518UL, 591682100UL, 2492604085UL, 207296828UL, 1739697610UL, 1532885415UL, 3885379584UL, 835276604UL, 3005485731UL, 2931144546UL, +4143205928UL, 2784795951UL, 2679058432UL, 1061627241UL, 1487949699UL, 2539503297UL, 2864266022UL, 1297953898UL, 4282928317UL, 4101955339UL, 3333189589UL, 3374260620UL, 916308118UL, 4160016206UL, 376029432UL, 1771535488UL, 3025355241UL, 1963633184UL, 3595798857UL, 2826786027UL, 1735171204UL, 4115795122UL, 2267127964UL, 2201115693UL, 2572535497UL, 4220503034UL, 2905712346UL, 3039440017UL, 1122674005UL, 2482828099UL, 868453017UL, 2881663141UL, +633872502UL, 821930665UL, 2579406681UL, 1928586970UL, 2816533968UL, 1530517912UL, 1140212033UL, 2547368381UL, 1082127627UL, 1894667948UL, 2831361172UL, 1723616626UL, 1903980411UL, 496773835UL, 3974041178UL, 387033391UL, 1528180036UL, 2681142643UL, 2763161987UL, 2014321457UL, 13543969UL, 3987997725UL, 2583502227UL, 2110570579UL, 2259553303UL, 459441276UL, 4225054447UL, 177868402UL, 53021618UL, 3889361594UL, 1844457031UL, 1364117386UL, +2369166739UL, 240269378UL, 689700242UL, 297384154UL, 1052178701UL, 2154172820UL, 614713903UL, 3000863907UL, 3916962502UL, 94341217UL, 2609111975UL, 1621831476UL, 4260159710UL, 694869580UL, 1708268072UL, 2751452128UL, 3843916827UL, 3400387883UL, 2394104046UL, 2348934617UL, 3263438569UL, 3818556032UL, 1695621950UL, 410888855UL, 347231182UL, 612084657UL, 1858306225UL, 3024940417UL, 2482215564UL, 2728249904UL, 2825132299UL, 329106327UL, +3333110741UL, 2742025573UL, 2947035922UL, 3758718780UL, 2191527983UL, 864130510UL, 2586839659UL, 662702978UL, 817620197UL, 2888275812UL, 3372817000UL, 2982240654UL, 2211025418UL, 2043458594UL, 498221898UL, 1559803796UL, 209509183UL, 3004637012UL, 2204871924UL, 2445352606UL, 4026842262UL, 3211433366UL, 3533095828UL, 4172447076UL, 865408944UL, 2797639687UL, 3201749441UL, 1286664278UL, 1158271235UL, 2641361834UL, 4261559289UL, 3643706696UL, +2017210420UL, 2067296744UL, 3548126272UL, 3846378526UL, 3885857009UL, 3013926193UL, 368948443UL, 3839554625UL, 2032663713UL, 4185819024UL, 4279332940UL, 137321733UL, 3515190288UL, 4281845500UL, 2738024944UL, 3350239126UL, 1456676856UL, 1246688651UL, 2478709188UL, 12570320UL, 989306366UL, 2347610707UL, 2849134988UL, 2351681449UL, 4063448910UL, 1193872626UL, 3645565330UL, 1863134777UL, 1345198234UL, 2504863006UL, 3815974850UL, 3075495578UL, +2400383333UL, 2727346254UL, 985812393UL, 1432182882UL, 3668977714UL, 231840487UL, 647229148UL, 274547428UL, 2856186783UL, 1273158535UL, 900081267UL, 1566366419UL, 562584841UL, 2247144789UL, 3522587233UL, 1686032132UL, 586483076UL, 1207387616UL, 3040778905UL, 2532774045UL, 3681992451UL, 1034866888UL, 4029685195UL, 3307070989UL, 2412903766UL, 3156200186UL, 2625083166UL, 4148004113UL, 1756566287UL, 2319065855UL, 2924909429UL, 3050022486UL, +2464491722UL, 1137782196UL, 2749457821UL, 790410752UL, 3511746957UL, 2277733721UL, 2871407058UL, 3858561909UL, 2176119631UL, 952943025UL, 2987154266UL, 120799539UL, 2862346597UL, 3689389598UL, 3329995989UL, 715438735UL, 1035277216UL, 3079684809UL, 677298106UL, 2364292665UL, 4110165256UL, 4096954153UL, 356732100UL, 2361282903UL, 4050817284UL, 2010946835UL, 1824397679UL, 4087204231UL, 4178036725UL, 4197370951UL, 503070461UL, 1879838906UL, +}, +{ +4117851084UL, 2941903397UL, 1156439261UL, 1922510465UL, 2925632294UL, 2272105738UL, 641404242UL, 3414739418UL, 2602896978UL, 672876430UL, 1998875331UL, 1325970749UL, 1633717408UL, 3567722815UL, 2088144733UL, 95705225UL, 580635702UL, 3543633503UL, 1469889369UL, 239816045UL, 2254984383UL, 1632695776UL, 2033839470UL, 4117902893UL, 509938588UL, 1291002316UL, 3600816069UL, 2962644092UL, 4269959520UL, 3161890066UL, 1908855486UL, 1177948589UL, +473118979UL, 3205649854UL, 2027137481UL, 227656706UL, 1485922673UL, 3380103860UL, 2080286336UL, 2588604114UL, 1727893393UL, 3602757903UL, 3126385963UL, 2101893784UL, 3058515017UL, 833779022UL, 719369683UL, 3768029740UL, 1123855192UL, 2580550821UL, 3694463505UL, 1137588651UL, 1724433728UL, 3847324234UL, 2368689516UL, 1226895255UL, 1126753016UL, 2557024841UL, 3187601018UL, 3790080711UL, 2423256074UL, 2463913828UL, 1753321774UL, 1621519784UL, +3456900204UL, 3550875802UL, 3783120790UL, 2740104077UL, 2010858632UL, 1569277627UL, 1492853575UL, 2182681191UL, 3866043645UL, 2566155095UL, 770150438UL, 2482504045UL, 3916834400UL, 222960658UL, 342285296UL, 3354506276UL, 1371039946UL, 3717269950UL, 3632913684UL, 2557531969UL, 3934379214UL, 1732115898UL, 1598596195UL, 1180866173UL, 3526785234UL, 2740387380UL, 3540138766UL, 338607286UL, 3262593182UL, 2413619772UL, 2248013920UL, 3557851982UL, +2470276596UL, 1549877186UL, 447909575UL, 4010548064UL, 282941857UL, 3418249797UL, 3300699992UL, 1957423733UL, 2615274674UL, 370155667UL, 1109991145UL, 933065597UL, 3947818943UL, 3221736239UL, 402503017UL, 4016454981UL, 3640556350UL, 243947268UL, 1175418215UL, 2752078014UL, 371928981UL, 3354635500UL, 3471578165UL, 2735623932UL, 445067764UL, 2732367763UL, 3225606514UL, 1214718589UL, 2197756425UL, 2134958042UL, 680726116UL, 3098695319UL, +2103463364UL, 4058022972UL, 2428195541UL, 2433504485UL, 4042288512UL, 2383438250UL, 3821638336UL, 2375226348UL, 806148488UL, 197247918UL, 768984129UL, 412771011UL, 4020619856UL, 3030619444UL, 3242554868UL, 282156707UL, 3718880754UL, 2938924979UL, 4189583150UL, 1604586306UL, 1245779881UL, 4006389745UL, 2437150739UL, 1749517801UL, 2903749036UL, 1247308303UL, 2580023735UL, 2457849017UL, 342934950UL, 216040419UL, 3176519601UL, 4151509434UL, +2404801649UL, 4117851084UL, 2941903397UL, 1156439261UL, 1922510465UL, 14864453UL, 2272105738UL, 641404242UL, 3414739418UL, 2602896978UL, 2179417586UL, 1998875331UL, 1325970749UL, 1633717408UL, 3567722815UL, 428880410UL, 95705225UL, 580635702UL, 3543633503UL, 1469889369UL, 3132946201UL, 2254984383UL, 1632695776UL, 2033839470UL, 4117902893UL, 3029657560UL, 1291002316UL, 3600816069UL, 2962644092UL, 4269959520UL, 397442545UL, 1908855486UL, +1177948589UL, 473118979UL, 3205649854UL, 990384909UL, 227656706UL, 1485922673UL, 3380103860UL, 2080286336UL, 3295033100UL, 1727893393UL, 3602757903UL, 3126385963UL, 2101893784UL, 1132286601UL, 833779022UL, 719369683UL, 3768029740UL, 1123855192UL, 283414013UL, 3694463505UL, 1137588651UL, 1724433728UL, 3847324234UL, 1735742473UL, 1226895255UL, 1126753016UL, 2557024841UL, 3187601018UL, 2090644528UL, 2423256074UL, 2463913828UL, 1753321774UL, +1621519784UL, 1037552449UL, 3550875802UL, 3783120790UL, 2740104077UL, 2010858632UL, 3730461081UL, 1492853575UL, 2182681191UL, 3866043645UL, 2566155095UL, 2782805925UL, 2482504045UL, 3916834400UL, 222960658UL, 342285296UL, 2406892654UL, 1371039946UL, 3717269950UL, 3632913684UL, 2557531969UL, 4071148456UL, 1732115898UL, 1598596195UL, 1180866173UL, 3526785234UL, 1110366522UL, 3540138766UL, 338607286UL, 3262593182UL, 2413619772UL, 995824548UL, +3557851982UL, 2470276596UL, 1549877186UL, 447909575UL, 2962194596UL, 282941857UL, 3418249797UL, 3300699992UL, 1957423733UL, 1859612288UL, 370155667UL, 1109991145UL, 933065597UL, 3947818943UL, 3005912276UL, 402503017UL, 4016454981UL, 3640556350UL, 243947268UL, 2884057401UL, 2752078014UL, 371928981UL, 3354635500UL, 3471578165UL, 908942821UL, 445067764UL, 2732367763UL, 3225606514UL, 1214718589UL, 4104754911UL, 2134958042UL, 680726116UL, +3098695319UL, 2103463364UL, 2946640978UL, 2428195541UL, 2433504485UL, 4042288512UL, 2383438250UL, 1252490765UL, 2375226348UL, 806148488UL, 197247918UL, 768984129UL, 2578888115UL, 4020619856UL, 3030619444UL, 3242554868UL, 282156707UL, 3433259466UL, 2938924979UL, 4189583150UL, 1604586306UL, 1245779881UL, 616758943UL, 2437150739UL, 1749517801UL, 2903749036UL, 1247308303UL, 2722580830UL, 2457849017UL, 342934950UL, 216040419UL, 3176519601UL, +545097903UL, 2404801649UL, 4117851084UL, 2941903397UL, 1156439261UL, 1253296096UL, 14864453UL, 2272105738UL, 641404242UL, 3414739418UL, 2989955985UL, 2179417586UL, 1998875331UL, 1325970749UL, 1633717408UL, 1896726594UL, 428880410UL, 95705225UL, 580635702UL, 3543633503UL, 3294258049UL, 3132946201UL, 2254984383UL, 1632695776UL, 2033839470UL, 829668922UL, 3029657560UL, 1291002316UL, 3600816069UL, 2962644092UL, 715635401UL, 397442545UL, +1908855486UL, 1177948589UL, 473118979UL, 443010703UL, 990384909UL, 227656706UL, 1485922673UL, 3380103860UL, 727464961UL, 3295033100UL, 1727893393UL, 3602757903UL, 3126385963UL, 3020775130UL, 1132286601UL, 833779022UL, 719369683UL, 3768029740UL, 2215591597UL, 283414013UL, 3694463505UL, 1137588651UL, 1724433728UL, 2124955521UL, 1735742473UL, 1226895255UL, 1126753016UL, 2557024841UL, 1719121879UL, 2090644528UL, 2423256074UL, 2463913828UL, +1753321774UL, 1283364713UL, 1037552449UL, 3550875802UL, 3783120790UL, 2740104077UL, 3326764615UL, 3730461081UL, 1492853575UL, 2182681191UL, 3866043645UL, 1353658829UL, 2782805925UL, 2482504045UL, 3916834400UL, 222960658UL, 2681616579UL, 2406892654UL, 1371039946UL, 3717269950UL, 3632913684UL, 2373372484UL, 4071148456UL, 1732115898UL, 1598596195UL, 1180866173UL, 3787873944UL, 1110366522UL, 3540138766UL, 338607286UL, 3262593182UL, 1714619779UL, +995824548UL, 3557851982UL, 2470276596UL, 1549877186UL, 2342751414UL, 2962194596UL, 282941857UL, 3418249797UL, 3300699992UL, 2080590834UL, 1859612288UL, 370155667UL, 1109991145UL, 933065597UL, 4126279826UL, 3005912276UL, 402503017UL, 4016454981UL, 3640556350UL, 618040940UL, 2884057401UL, 2752078014UL, 371928981UL, 3354635500UL, 2952377979UL, 908942821UL, 445067764UL, 2732367763UL, 3225606514UL, 935181950UL, 4104754911UL, 2134958042UL, +680726116UL, 3098695319UL, 652514936UL, 2946640978UL, 2428195541UL, 2433504485UL, 4042288512UL, 1834165243UL, 1252490765UL, 2375226348UL, 806148488UL, 197247918UL, 1459523569UL, 2578888115UL, 4020619856UL, 3030619444UL, 3242554868UL, 2222750155UL, 3433259466UL, 2938924979UL, 4189583150UL, 1604586306UL, 400149547UL, 616758943UL, 2437150739UL, 1749517801UL, 2903749036UL, 571531698UL, 2722580830UL, 2457849017UL, 342934950UL, 216040419UL, +3302138698UL, 545097903UL, 2404801649UL, 4117851084UL, 2941903397UL, 2926001994UL, 1253296096UL, 14864453UL, 2272105738UL, 641404242UL, 2446601571UL, 2989955985UL, 2179417586UL, 1998875331UL, 1325970749UL, 2470418771UL, 1896726594UL, 428880410UL, 95705225UL, 580635702UL, 95529058UL, 3294258049UL, 3132946201UL, 2254984383UL, 1632695776UL, 3381575123UL, 829668922UL, 3029657560UL, 1291002316UL, 3600816069UL, 332821128UL, 715635401UL, +397442545UL, 1908855486UL, 1177948589UL, 3324147260UL, 443010703UL, 990384909UL, 227656706UL, 1485922673UL, 3468390490UL, 727464961UL, 3295033100UL, 1727893393UL, 3602757903UL, 3849734062UL, 3020775130UL, 1132286601UL, 833779022UL, 719369683UL, 3336941985UL, 2215591597UL, 283414013UL, 3694463505UL, 1137588651UL, 1245145305UL, 2124955521UL, 1735742473UL, 1226895255UL, 1126753016UL, 1536376839UL, 1719121879UL, 2090644528UL, 2423256074UL, +2463913828UL, 4035794571UL, 1283364713UL, 1037552449UL, 3550875802UL, 3783120790UL, 4233012781UL, 3326764615UL, 3730461081UL, 1492853575UL, 2182681191UL, 654850701UL, 1353658829UL, 2782805925UL, 2482504045UL, 3916834400UL, 1556782509UL, 2681616579UL, 2406892654UL, 1371039946UL, 3717269950UL, 1227526114UL, 2373372484UL, 4071148456UL, 1732115898UL, 1598596195UL, 1777009717UL, 3787873944UL, 1110366522UL, 3540138766UL, 338607286UL, 1161080599UL, +1714619779UL, 995824548UL, 3557851982UL, 2470276596UL, 3162659171UL, 2342751414UL, 2962194596UL, 282941857UL, 3418249797UL, 1032034511UL, 2080590834UL, 1859612288UL, 370155667UL, 1109991145UL, 2568097099UL, 4126279826UL, 3005912276UL, 402503017UL, 4016454981UL, 3196575353UL, 618040940UL, 2884057401UL, 2752078014UL, 371928981UL, 4223799564UL, 2952377979UL, 908942821UL, 445067764UL, 2732367763UL, 174723563UL, 935181950UL, 4104754911UL, +2134958042UL, 680726116UL, 649687363UL, 652514936UL, 2946640978UL, 2428195541UL, 2433504485UL, 3735735592UL, 1834165243UL, 1252490765UL, 2375226348UL, 806148488UL, 3720638976UL, 1459523569UL, 2578888115UL, 4020619856UL, 3030619444UL, 283333114UL, 2222750155UL, 3433259466UL, 2938924979UL, 4189583150UL, 870522428UL, 400149547UL, 616758943UL, 2437150739UL, 1749517801UL, 999295363UL, 571531698UL, 2722580830UL, 2457849017UL, 342934950UL, +3151292467UL, 2839665217UL, 2452261456UL, 208520727UL, 2269948412UL, 344787478UL, 3987474076UL, 3770524881UL, 2718719281UL, 2537804795UL, 850790212UL, 639946566UL, 2073602691UL, 2316769983UL, 3577216077UL, 3538374748UL, 61447995UL, 3718817085UL, 1476398788UL, 3239144530UL, 3595014456UL, 454482110UL, 286330934UL, 2119173159UL, 1693518756UL, 1464218560UL, 1201825197UL, 1112746405UL, 2988579776UL, 1626663767UL, 2236015969UL, 4018896468UL, +1885926862UL, 671386673UL, 1583086162UL, 1114723892UL, 2936863300UL, 2620955107UL, 2628074015UL, 426673611UL, 3370181092UL, 3462245129UL, 3590185736UL, 2630441788UL, 171626554UL, 3647663038UL, 880996914UL, 1155913149UL, 2653278555UL, 508978149UL, 2031872445UL, 3041145171UL, 1339819022UL, 127509725UL, 1336955078UL, 727702092UL, 693349672UL, 999665905UL, 2287631318UL, 961427722UL, 3355851447UL, 821851136UL, 2370998072UL, 4027450519UL, +2054803464UL, 144596514UL, 3295312213UL, 2579322479UL, 2982266864UL, 4275468400UL, 179988815UL, 2123828208UL, 1486957870UL, 2484928010UL, 288096701UL, 1211834301UL, 1819157080UL, 3569000238UL, 4164201803UL, 3042117433UL, 2741571248UL, 3688451311UL, 29376415UL, 437788821UL, 994675658UL, 1014591996UL, 296335443UL, 363551454UL, 2628890394UL, 332401256UL, 2288239762UL, 3766239385UL, 317162173UL, 3721125104UL, 2296650899UL, 56428392UL, +3900411067UL, 2303724992UL, 3735005983UL, 1377320198UL, 612032498UL, 1171213235UL, 2494454628UL, 1894368149UL, 4124860986UL, 1694123597UL, 2306091209UL, 2075278956UL, 3898366152UL, 937522278UL, 32800830UL, 324902076UL, 2365753207UL, 2251160429UL, 1692543836UL, 2920424644UL, 119047416UL, 1821685115UL, 1486296407UL, 3055580738UL, 3711421730UL, 1522703457UL, 1422399573UL, 2515073038UL, 3788816887UL, 3490575947UL, 2395299159UL, 4248373284UL, +3383561277UL, 3128107243UL, 2344292809UL, 1806504793UL, 3087395022UL, 4113720664UL, 2749262038UL, 395148869UL, 1331347439UL, 2682558741UL, 1253966763UL, 4204248490UL, 2083995727UL, 2717069903UL, 4144872894UL, 1857751053UL, 2166276701UL, 1419950839UL, 1145170701UL, 3225260742UL, 211743500UL, 2746391743UL, 3333387219UL, 4115426799UL, 3801457092UL, 3327614811UL, 1460971336UL, 2256342146UL, 3186427137UL, 2684216499UL, 1035644397UL, 2948948308UL, +}, +{ +216975964UL, 4145824263UL, 2147471723UL, 4154469597UL, 161744273UL, 1299764439UL, 3468614543UL, 4190517158UL, 4124232403UL, 754999274UL, 208153182UL, 1442063188UL, 2940825403UL, 729331312UL, 2124186505UL, 1136411459UL, 1083787490UL, 442264548UL, 442338468UL, 464589685UL, 3509461223UL, 4241734851UL, 370778328UL, 4003105058UL, 3163637982UL, 3747133182UL, 1433548371UL, 1876378240UL, 536564977UL, 1171222160UL, 3268902719UL, 2725776746UL, +1547771137UL, 2818791461UL, 4129042013UL, 2677094853UL, 1594765197UL, 1556725424UL, 569252594UL, 2640731848UL, 2947042710UL, 2633188904UL, 1640957370UL, 1806863786UL, 2803403654UL, 2632220187UL, 2740076538UL, 383549855UL, 3211856699UL, 3933793958UL, 1988232112UL, 404006876UL, 1369488120UL, 1963339964UL, 609604643UL, 2488118016UL, 3936354252UL, 1980115609UL, 189069630UL, 860670414UL, 85775513UL, 2447581620UL, 886385122UL, 3047212472UL, +2470718978UL, 4044569663UL, 430717074UL, 1598133481UL, 1905362808UL, 2981511487UL, 1842297666UL, 2992320857UL, 1682119455UL, 1753461544UL, 700013801UL, 3025873251UL, 3413358770UL, 1673092091UL, 113651375UL, 2618875026UL, 1479752146UL, 81598739UL, 1530418117UL, 962911586UL, 778994423UL, 3944331100UL, 4116504755UL, 480712357UL, 1078821437UL, 1091665476UL, 3696871260UL, 2074607518UL, 3226459752UL, 3767432525UL, 768289441UL, 3142741843UL, +2969151790UL, 1814889320UL, 2122849610UL, 451935137UL, 2784993892UL, 1836517944UL, 1565951586UL, 1663606442UL, 1578543925UL, 33407321UL, 1445768530UL, 2156093253UL, 3164165477UL, 3093293932UL, 298945371UL, 2558835427UL, 1386275152UL, 2649603495UL, 893605644UL, 1147537351UL, 1889670166UL, 3203610476UL, 2598985714UL, 966335150UL, 3384227644UL, 2584671737UL, 552770393UL, 2430097209UL, 3085150053UL, 3633667948UL, 1319147485UL, 1999467843UL, +3676133150UL, 2314789604UL, 1443760911UL, 1552954684UL, 2411684219UL, 3708965016UL, 2607719926UL, 484007519UL, 491681421UL, 2498192461UL, 6342020UL, 4226570819UL, 2329860147UL, 1097040622UL, 1270325434UL, 2572535504UL, 918592905UL, 193599782UL, 4223250613UL, 1640082589UL, 1817957216UL, 2937344769UL, 3768793871UL, 2982566292UL, 1607453458UL, 4096207317UL, 696907828UL, 2431936270UL, 627206620UL, 3267100287UL, 1161821973UL, 2322099303UL, +1700245615UL, 216975964UL, 4145824263UL, 2147471723UL, 4154469597UL, 2836499116UL, 1299764439UL, 3468614543UL, 4190517158UL, 4124232403UL, 2176257299UL, 208153182UL, 1442063188UL, 2940825403UL, 729331312UL, 2954254860UL, 1136411459UL, 1083787490UL, 442264548UL, 442338468UL, 3098695824UL, 3509461223UL, 4241734851UL, 370778328UL, 4003105058UL, 2963948505UL, 3747133182UL, 1433548371UL, 1876378240UL, 536564977UL, 1565224991UL, 3268902719UL, +2725776746UL, 1547771137UL, 2818791461UL, 2118790546UL, 2677094853UL, 1594765197UL, 1556725424UL, 569252594UL, 610771792UL, 2947042710UL, 2633188904UL, 1640957370UL, 1806863786UL, 2121022793UL, 2632220187UL, 2740076538UL, 383549855UL, 3211856699UL, 14274926UL, 1988232112UL, 404006876UL, 1369488120UL, 1963339964UL, 1661081792UL, 2488118016UL, 3936354252UL, 1980115609UL, 189069630UL, 595192504UL, 85775513UL, 2447581620UL, 886385122UL, +3047212472UL, 1596069326UL, 4044569663UL, 430717074UL, 1598133481UL, 1905362808UL, 2670961612UL, 1842297666UL, 2992320857UL, 1682119455UL, 1753461544UL, 1121764918UL, 3025873251UL, 3413358770UL, 1673092091UL, 113651375UL, 1721474883UL, 1479752146UL, 81598739UL, 1530418117UL, 962911586UL, 3478535046UL, 3944331100UL, 4116504755UL, 480712357UL, 1078821437UL, 1456786415UL, 3696871260UL, 2074607518UL, 3226459752UL, 3767432525UL, 2947648865UL, +3142741843UL, 2969151790UL, 1814889320UL, 2122849610UL, 3367879697UL, 2784993892UL, 1836517944UL, 1565951586UL, 1663606442UL, 2621366329UL, 33407321UL, 1445768530UL, 2156093253UL, 3164165477UL, 619266142UL, 298945371UL, 2558835427UL, 1386275152UL, 2649603495UL, 97967685UL, 1147537351UL, 1889670166UL, 3203610476UL, 2598985714UL, 504495866UL, 3384227644UL, 2584671737UL, 552770393UL, 2430097209UL, 2168477293UL, 3633667948UL, 1319147485UL, +1999467843UL, 3676133150UL, 2755203144UL, 1443760911UL, 1552954684UL, 2411684219UL, 3708965016UL, 2301846628UL, 484007519UL, 491681421UL, 2498192461UL, 6342020UL, 318325395UL, 2329860147UL, 1097040622UL, 1270325434UL, 2572535504UL, 3458698828UL, 193599782UL, 4223250613UL, 1640082589UL, 1817957216UL, 1861636211UL, 3768793871UL, 2982566292UL, 1607453458UL, 4096207317UL, 1871072589UL, 2431936270UL, 627206620UL, 3267100287UL, 1161821973UL, +3904037207UL, 1700245615UL, 216975964UL, 4145824263UL, 2147471723UL, 2789343849UL, 2836499116UL, 1299764439UL, 3468614543UL, 4190517158UL, 639361502UL, 2176257299UL, 208153182UL, 1442063188UL, 2940825403UL, 2962998954UL, 2954254860UL, 1136411459UL, 1083787490UL, 442264548UL, 1812626669UL, 3098695824UL, 3509461223UL, 4241734851UL, 370778328UL, 1673951193UL, 2963948505UL, 3747133182UL, 1433548371UL, 1876378240UL, 3651623536UL, 1565224991UL, +3268902719UL, 2725776746UL, 1547771137UL, 1938402968UL, 2118790546UL, 2677094853UL, 1594765197UL, 1556725424UL, 3267956202UL, 610771792UL, 2947042710UL, 2633188904UL, 1640957370UL, 1448040688UL, 2121022793UL, 2632220187UL, 2740076538UL, 383549855UL, 300148175UL, 14274926UL, 1988232112UL, 404006876UL, 1369488120UL, 3313508750UL, 1661081792UL, 2488118016UL, 3936354252UL, 1980115609UL, 2631341293UL, 595192504UL, 85775513UL, 2447581620UL, +886385122UL, 2465820467UL, 1596069326UL, 4044569663UL, 430717074UL, 1598133481UL, 4191772516UL, 2670961612UL, 1842297666UL, 2992320857UL, 1682119455UL, 997741285UL, 1121764918UL, 3025873251UL, 3413358770UL, 1673092091UL, 1493832846UL, 1721474883UL, 1479752146UL, 81598739UL, 1530418117UL, 2762019274UL, 3478535046UL, 3944331100UL, 4116504755UL, 480712357UL, 448437372UL, 1456786415UL, 3696871260UL, 2074607518UL, 3226459752UL, 2507199309UL, +2947648865UL, 3142741843UL, 2969151790UL, 1814889320UL, 2268952501UL, 3367879697UL, 2784993892UL, 1836517944UL, 1565951586UL, 377207573UL, 2621366329UL, 33407321UL, 1445768530UL, 2156093253UL, 1325490318UL, 619266142UL, 298945371UL, 2558835427UL, 1386275152UL, 2662699426UL, 97967685UL, 1147537351UL, 1889670166UL, 3203610476UL, 1999783658UL, 504495866UL, 3384227644UL, 2584671737UL, 552770393UL, 1562106652UL, 2168477293UL, 3633667948UL, +1319147485UL, 1999467843UL, 2037219988UL, 2755203144UL, 1443760911UL, 1552954684UL, 2411684219UL, 1579607443UL, 2301846628UL, 484007519UL, 491681421UL, 2498192461UL, 745333677UL, 318325395UL, 2329860147UL, 1097040622UL, 1270325434UL, 208017379UL, 3458698828UL, 193599782UL, 4223250613UL, 1640082589UL, 4049245262UL, 1861636211UL, 3768793871UL, 2982566292UL, 1607453458UL, 2058912455UL, 1871072589UL, 2431936270UL, 627206620UL, 3267100287UL, +1186015034UL, 3904037207UL, 1700245615UL, 216975964UL, 4145824263UL, 2422827462UL, 2789343849UL, 2836499116UL, 1299764439UL, 3468614543UL, 2084839633UL, 639361502UL, 2176257299UL, 208153182UL, 1442063188UL, 4065931048UL, 2962998954UL, 2954254860UL, 1136411459UL, 1083787490UL, 465529524UL, 1812626669UL, 3098695824UL, 3509461223UL, 4241734851UL, 3818602366UL, 1673951193UL, 2963948505UL, 3747133182UL, 1433548371UL, 2475307467UL, 3651623536UL, +1565224991UL, 3268902719UL, 2725776746UL, 2374226870UL, 1938402968UL, 2118790546UL, 2677094853UL, 1594765197UL, 348828658UL, 3267956202UL, 610771792UL, 2947042710UL, 2633188904UL, 1713124265UL, 1448040688UL, 2121022793UL, 2632220187UL, 2740076538UL, 1400362266UL, 300148175UL, 14274926UL, 1988232112UL, 404006876UL, 3662575932UL, 3313508750UL, 1661081792UL, 2488118016UL, 3936354252UL, 3100635752UL, 2631341293UL, 595192504UL, 85775513UL, +2447581620UL, 2417839883UL, 2465820467UL, 1596069326UL, 4044569663UL, 430717074UL, 1093503127UL, 4191772516UL, 2670961612UL, 1842297666UL, 2992320857UL, 3292586028UL, 997741285UL, 1121764918UL, 3025873251UL, 3413358770UL, 222522839UL, 1493832846UL, 1721474883UL, 1479752146UL, 81598739UL, 3132900738UL, 2762019274UL, 3478535046UL, 3944331100UL, 4116504755UL, 3429405501UL, 448437372UL, 1456786415UL, 3696871260UL, 2074607518UL, 1492852861UL, +2507199309UL, 2947648865UL, 3142741843UL, 2969151790UL, 2186889362UL, 2268952501UL, 3367879697UL, 2784993892UL, 1836517944UL, 3169157745UL, 377207573UL, 2621366329UL, 33407321UL, 1445768530UL, 4266168148UL, 1325490318UL, 619266142UL, 298945371UL, 2558835427UL, 1447045944UL, 2662699426UL, 97967685UL, 1147537351UL, 1889670166UL, 3354555370UL, 1999783658UL, 504495866UL, 3384227644UL, 2584671737UL, 2489662408UL, 1562106652UL, 2168477293UL, +3633667948UL, 1319147485UL, 3353555249UL, 2037219988UL, 2755203144UL, 1443760911UL, 1552954684UL, 4137514176UL, 1579607443UL, 2301846628UL, 484007519UL, 491681421UL, 164627749UL, 745333677UL, 318325395UL, 2329860147UL, 1097040622UL, 3587444362UL, 208017379UL, 3458698828UL, 193599782UL, 4223250613UL, 1102471426UL, 4049245262UL, 1861636211UL, 3768793871UL, 2982566292UL, 1941698603UL, 2058912455UL, 1871072589UL, 2431936270UL, 627206620UL, +2511999766UL, 1406946444UL, 1571284360UL, 1416792763UL, 1774410400UL, 1655066897UL, 740531687UL, 2852637013UL, 1574342442UL, 3931672444UL, 2887289502UL, 3588598337UL, 1607795590UL, 1893126336UL, 4113959952UL, 250670029UL, 89330705UL, 2198706475UL, 133060312UL, 4033807246UL, 2161604768UL, 3871950931UL, 1820516188UL, 828316231UL, 3126087794UL, 3740050736UL, 543577819UL, 1589693651UL, 4210480257UL, 3844498352UL, 96010254UL, 2888517657UL, +2931088981UL, 2307454606UL, 2411141663UL, 4193964276UL, 918899600UL, 888509951UL, 3023902229UL, 1371276096UL, 2107726407UL, 3863079906UL, 3849297291UL, 1512401618UL, 3098628219UL, 487705749UL, 492891601UL, 345791371UL, 3230138831UL, 1022138839UL, 974682588UL, 3677932604UL, 2054641860UL, 3303576494UL, 1416653965UL, 1119635666UL, 1907978487UL, 4269977208UL, 2047880336UL, 205698774UL, 2401894999UL, 3253173123UL, 2603439113UL, 1295808319UL, +2965198050UL, 1718424301UL, 1605627562UL, 2860017421UL, 1619060227UL, 1130717786UL, 2992070906UL, 2964091191UL, 3192265220UL, 3860528275UL, 45139953UL, 3914023193UL, 1253834497UL, 3885013544UL, 3793695046UL, 3632364934UL, 4127361980UL, 3323804519UL, 4117285262UL, 4171102020UL, 1863837906UL, 2848174924UL, 1731389076UL, 2514130112UL, 3539384422UL, 2950752200UL, 1138137434UL, 4147328087UL, 3345958235UL, 2305097760UL, 974161669UL, 1739611700UL, +2522036172UL, 1196649816UL, 2395301283UL, 911135539UL, 1029496076UL, 1786766951UL, 1802412425UL, 3485017668UL, 2837835718UL, 1951207514UL, 1447650206UL, 2289702688UL, 2517625074UL, 2408021138UL, 2022522416UL, 719777136UL, 417238676UL, 1865171065UL, 801820378UL, 2836941189UL, 1148226009UL, 1713866138UL, 64608707UL, 1458585813UL, 3581572089UL, 2251042907UL, 1818903516UL, 3278072806UL, 2838874249UL, 2665607605UL, 3360214955UL, 2185961451UL, +410342713UL, 364484774UL, 2887998484UL, 2100888426UL, 1394314931UL, 1362560504UL, 3487221127UL, 3140021092UL, 3168968161UL, 1613267484UL, 290430673UL, 2588210538UL, 2493788232UL, 2641638765UL, 2971195072UL, 2749469779UL, 692014176UL, 3268150742UL, 387451740UL, 461249727UL, 3579417331UL, 3738405845UL, 385445455UL, 1464799053UL, 2786433795UL, 3370371952UL, 675344511UL, 4049011269UL, 2196568686UL, 4166285481UL, 2547135972UL, 119952106UL, +}, +{ +2307933966UL, 145940188UL, 4247815717UL, 2995341855UL, 3245382498UL, 1213200792UL, 232910392UL, 2718014238UL, 918321585UL, 3583102265UL, 3176078796UL, 937696513UL, 266558688UL, 1520650260UL, 3655025189UL, 1653323191UL, 538426778UL, 491545855UL, 4064663509UL, 2788350755UL, 3941259490UL, 3471552693UL, 1851151228UL, 3279627338UL, 845228710UL, 29883500UL, 1503432309UL, 593880175UL, 2488716480UL, 828058076UL, 3287933183UL, 3510981973UL, +3970051135UL, 3803049980UL, 898259836UL, 2890959433UL, 234437380UL, 201835406UL, 1523016285UL, 2419577439UL, 2943482079UL, 4219300984UL, 1490698759UL, 533411805UL, 1644926459UL, 4097374623UL, 265292490UL, 2694560848UL, 285667083UL, 1563945375UL, 3128365011UL, 95277844UL, 2938824634UL, 2717708621UL, 3374928056UL, 3672802273UL, 3445399260UL, 2422205637UL, 1106030557UL, 1269805720UL, 1781057614UL, 3491203689UL, 2454028630UL, 2158698380UL, +2578431870UL, 3540412661UL, 2206372988UL, 3138025266UL, 474100503UL, 3310048546UL, 126856999UL, 3144057206UL, 917199551UL, 3549528813UL, 343855771UL, 391118877UL, 1900257963UL, 1616289477UL, 3663959751UL, 1887891784UL, 697303016UL, 1346369879UL, 3634838543UL, 909311683UL, 3534738830UL, 2676838865UL, 3020679234UL, 1248902118UL, 1517698896UL, 414632197UL, 199589058UL, 2922557451UL, 3915079510UL, 1309075563UL, 3836275459UL, 2549095941UL, +1643088840UL, 1153547003UL, 2254144060UL, 3585420425UL, 915059870UL, 2410951596UL, 1876156254UL, 2384812180UL, 3893647829UL, 4119002503UL, 1535078752UL, 3888310943UL, 1483731374UL, 3915992153UL, 3662664617UL, 1065246672UL, 2307959656UL, 1845927873UL, 2075990232UL, 1346396900UL, 4218283385UL, 3427468026UL, 1518645158UL, 3092538772UL, 3383570452UL, 1317710387UL, 3390054918UL, 4222595168UL, 2468387909UL, 3864538174UL, 2442851586UL, 1858344050UL, +1537617445UL, 1090881039UL, 2055021834UL, 4011332463UL, 2797336692UL, 280272261UL, 3350338577UL, 1682666744UL, 1256176165UL, 2017003515UL, 3666229067UL, 4288064377UL, 3407437449UL, 2957152445UL, 3557139753UL, 4106922773UL, 2612653316UL, 3491950269UL, 1107293753UL, 2926461368UL, 1433860998UL, 1975669351UL, 1680462513UL, 4283282673UL, 168788571UL, 57021447UL, 3888396304UL, 2218068386UL, 2170981202UL, 1587568797UL, 2097820654UL, 1308061343UL, +4096726326UL, 2307933966UL, 145940188UL, 4247815717UL, 2995341855UL, 2894586378UL, 1213200792UL, 232910392UL, 2718014238UL, 918321585UL, 520434726UL, 3176078796UL, 937696513UL, 266558688UL, 1520650260UL, 645408471UL, 1653323191UL, 538426778UL, 491545855UL, 4064663509UL, 2605358672UL, 3941259490UL, 3471552693UL, 1851151228UL, 3279627338UL, 1290188176UL, 29883500UL, 1503432309UL, 593880175UL, 2488716480UL, 1172244224UL, 3287933183UL, +3510981973UL, 3970051135UL, 3803049980UL, 3836242189UL, 2890959433UL, 234437380UL, 201835406UL, 1523016285UL, 1720566850UL, 2943482079UL, 4219300984UL, 1490698759UL, 533411805UL, 982587365UL, 4097374623UL, 265292490UL, 2694560848UL, 285667083UL, 3905392425UL, 3128365011UL, 95277844UL, 2938824634UL, 2717708621UL, 262111126UL, 3672802273UL, 3445399260UL, 2422205637UL, 1106030557UL, 233401560UL, 1781057614UL, 3491203689UL, 2454028630UL, +2158698380UL, 3314008662UL, 3540412661UL, 2206372988UL, 3138025266UL, 474100503UL, 1150191741UL, 126856999UL, 3144057206UL, 917199551UL, 3549528813UL, 84516590UL, 391118877UL, 1900257963UL, 1616289477UL, 3663959751UL, 2831036790UL, 697303016UL, 1346369879UL, 3634838543UL, 909311683UL, 2206291004UL, 2676838865UL, 3020679234UL, 1248902118UL, 1517698896UL, 882506847UL, 199589058UL, 2922557451UL, 3915079510UL, 1309075563UL, 3675129276UL, +2549095941UL, 1643088840UL, 1153547003UL, 2254144060UL, 1702669516UL, 915059870UL, 2410951596UL, 1876156254UL, 2384812180UL, 393602062UL, 4119002503UL, 1535078752UL, 3888310943UL, 1483731374UL, 1135074988UL, 3662664617UL, 1065246672UL, 2307959656UL, 1845927873UL, 883002610UL, 1346396900UL, 4218283385UL, 3427468026UL, 1518645158UL, 1478839081UL, 3383570452UL, 1317710387UL, 3390054918UL, 4222595168UL, 3009846855UL, 3864538174UL, 2442851586UL, +1858344050UL, 1537617445UL, 2419526192UL, 2055021834UL, 4011332463UL, 2797336692UL, 280272261UL, 2937342669UL, 1682666744UL, 1256176165UL, 2017003515UL, 3666229067UL, 3563024742UL, 3407437449UL, 2957152445UL, 3557139753UL, 4106922773UL, 610182860UL, 3491950269UL, 1107293753UL, 2926461368UL, 1433860998UL, 2493047579UL, 1680462513UL, 4283282673UL, 168788571UL, 57021447UL, 2151356582UL, 2218068386UL, 2170981202UL, 1587568797UL, 2097820654UL, +2738927570UL, 4096726326UL, 2307933966UL, 145940188UL, 4247815717UL, 1887236689UL, 2894586378UL, 1213200792UL, 232910392UL, 2718014238UL, 2028538736UL, 520434726UL, 3176078796UL, 937696513UL, 266558688UL, 305624632UL, 645408471UL, 1653323191UL, 538426778UL, 491545855UL, 4188864445UL, 2605358672UL, 3941259490UL, 3471552693UL, 1851151228UL, 1720039364UL, 1290188176UL, 29883500UL, 1503432309UL, 593880175UL, 2595662526UL, 1172244224UL, +3287933183UL, 3510981973UL, 3970051135UL, 2763703998UL, 3836242189UL, 2890959433UL, 234437380UL, 201835406UL, 2652280530UL, 1720566850UL, 2943482079UL, 4219300984UL, 1490698759UL, 1968049758UL, 982587365UL, 4097374623UL, 265292490UL, 2694560848UL, 1165326939UL, 3905392425UL, 3128365011UL, 95277844UL, 2938824634UL, 2521869983UL, 262111126UL, 3672802273UL, 3445399260UL, 2422205637UL, 395183943UL, 233401560UL, 1781057614UL, 3491203689UL, +2454028630UL, 249721174UL, 3314008662UL, 3540412661UL, 2206372988UL, 3138025266UL, 1644439373UL, 1150191741UL, 126856999UL, 3144057206UL, 917199551UL, 1997133400UL, 84516590UL, 391118877UL, 1900257963UL, 1616289477UL, 3843764922UL, 2831036790UL, 697303016UL, 1346369879UL, 3634838543UL, 1901125181UL, 2206291004UL, 2676838865UL, 3020679234UL, 1248902118UL, 344347894UL, 882506847UL, 199589058UL, 2922557451UL, 3915079510UL, 2919277604UL, +3675129276UL, 2549095941UL, 1643088840UL, 1153547003UL, 3305575634UL, 1702669516UL, 915059870UL, 2410951596UL, 1876156254UL, 1416053196UL, 393602062UL, 4119002503UL, 1535078752UL, 3888310943UL, 3993632377UL, 1135074988UL, 3662664617UL, 1065246672UL, 2307959656UL, 1044670394UL, 883002610UL, 1346396900UL, 4218283385UL, 3427468026UL, 1792832168UL, 1478839081UL, 3383570452UL, 1317710387UL, 3390054918UL, 1596709924UL, 3009846855UL, 3864538174UL, +2442851586UL, 1858344050UL, 2428482265UL, 2419526192UL, 2055021834UL, 4011332463UL, 2797336692UL, 424213503UL, 2937342669UL, 1682666744UL, 1256176165UL, 2017003515UL, 717473071UL, 3563024742UL, 3407437449UL, 2957152445UL, 3557139753UL, 3319575432UL, 610182860UL, 3491950269UL, 1107293753UL, 2926461368UL, 3052637648UL, 2493047579UL, 1680462513UL, 4283282673UL, 168788571UL, 1401253163UL, 2151356582UL, 2218068386UL, 2170981202UL, 1587568797UL, +3994937670UL, 2738927570UL, 4096726326UL, 2307933966UL, 145940188UL, 3928146647UL, 1887236689UL, 2894586378UL, 1213200792UL, 232910392UL, 833120806UL, 2028538736UL, 520434726UL, 3176078796UL, 937696513UL, 3704968451UL, 305624632UL, 645408471UL, 1653323191UL, 538426778UL, 939335571UL, 4188864445UL, 2605358672UL, 3941259490UL, 3471552693UL, 2168499975UL, 1720039364UL, 1290188176UL, 29883500UL, 1503432309UL, 524387655UL, 2595662526UL, +1172244224UL, 3287933183UL, 3510981973UL, 2444664749UL, 2763703998UL, 3836242189UL, 2890959433UL, 234437380UL, 3272987579UL, 2652280530UL, 1720566850UL, 2943482079UL, 4219300984UL, 1045589319UL, 1968049758UL, 982587365UL, 4097374623UL, 265292490UL, 1077412791UL, 1165326939UL, 3905392425UL, 3128365011UL, 95277844UL, 2896038035UL, 2521869983UL, 262111126UL, 3672802273UL, 3445399260UL, 4273256145UL, 395183943UL, 233401560UL, 1781057614UL, +3491203689UL, 8343453UL, 249721174UL, 3314008662UL, 3540412661UL, 2206372988UL, 3738630867UL, 1644439373UL, 1150191741UL, 126856999UL, 3144057206UL, 65169501UL, 1997133400UL, 84516590UL, 391118877UL, 1900257963UL, 2914085557UL, 3843764922UL, 2831036790UL, 697303016UL, 1346369879UL, 2007568079UL, 1901125181UL, 2206291004UL, 2676838865UL, 3020679234UL, 2097032931UL, 344347894UL, 882506847UL, 199589058UL, 2922557451UL, 3740400148UL, +2919277604UL, 3675129276UL, 2549095941UL, 1643088840UL, 199560818UL, 3305575634UL, 1702669516UL, 915059870UL, 2410951596UL, 117939268UL, 1416053196UL, 393602062UL, 4119002503UL, 1535078752UL, 4281599711UL, 3993632377UL, 1135074988UL, 3662664617UL, 1065246672UL, 2854253374UL, 1044670394UL, 883002610UL, 1346396900UL, 4218283385UL, 803910659UL, 1792832168UL, 1478839081UL, 3383570452UL, 1317710387UL, 1311168874UL, 1596709924UL, 3009846855UL, +3864538174UL, 2442851586UL, 1967982878UL, 2428482265UL, 2419526192UL, 2055021834UL, 4011332463UL, 2725198749UL, 424213503UL, 2937342669UL, 1682666744UL, 1256176165UL, 713350501UL, 717473071UL, 3563024742UL, 3407437449UL, 2957152445UL, 2363682828UL, 3319575432UL, 610182860UL, 3491950269UL, 1107293753UL, 3429638328UL, 3052637648UL, 2493047579UL, 1680462513UL, 4283282673UL, 2672311163UL, 1401253163UL, 2151356582UL, 2218068386UL, 2170981202UL, +431601500UL, 4193143261UL, 2985267149UL, 1556712183UL, 4135181832UL, 285960576UL, 81711096UL, 57066962UL, 2646151573UL, 3692824605UL, 485132216UL, 2799654118UL, 903527523UL, 1210637484UL, 3195346614UL, 599540837UL, 1410108963UL, 3723542120UL, 1350764011UL, 1717225239UL, 239736775UL, 3946934722UL, 420024332UL, 589304817UL, 1331122625UL, 4294403247UL, 2009397371UL, 844641869UL, 166387728UL, 4093361096UL, 2342369656UL, 3958170613UL, +1660376297UL, 1259528150UL, 4240809115UL, 2875563845UL, 2613790323UL, 2869665108UL, 1414690635UL, 944649070UL, 3539368342UL, 199532147UL, 2707660205UL, 2258475730UL, 771169023UL, 158544851UL, 588872178UL, 2002019277UL, 4225148852UL, 641266809UL, 2133909450UL, 330112418UL, 1815776319UL, 1949213618UL, 3868452239UL, 2702722715UL, 2491030937UL, 468812562UL, 3226259052UL, 199165016UL, 436679774UL, 881956108UL, 1098105661UL, 68909298UL, +248572829UL, 339224422UL, 553849953UL, 3054752668UL, 701934162UL, 1898925107UL, 749060575UL, 987950022UL, 4040401060UL, 684345838UL, 3449205676UL, 2583450513UL, 433795092UL, 3559011048UL, 293161429UL, 3947766299UL, 3491895171UL, 1651265910UL, 1216468759UL, 1625512737UL, 412235874UL, 893680794UL, 2582820523UL, 1514322840UL, 2348781204UL, 2720801933UL, 3364999370UL, 2822073391UL, 2627166519UL, 3805500773UL, 177760590UL, 2210728920UL, +3136345252UL, 3226658259UL, 3982978003UL, 86264452UL, 536816704UL, 3489051867UL, 2161950016UL, 1375640747UL, 4116957650UL, 3676292350UL, 3001078542UL, 1379688752UL, 3059678152UL, 3740664918UL, 475697670UL, 539253230UL, 1256048653UL, 3819847913UL, 141216227UL, 3888391528UL, 3567424851UL, 4131097532UL, 2142453586UL, 3606575354UL, 3689715433UL, 2318212425UL, 3026095399UL, 2451038695UL, 4052322172UL, 1861782452UL, 3032216562UL, 4078403318UL, +2636775961UL, 2188864067UL, 3276459319UL, 2230349722UL, 3939784264UL, 831216291UL, 2483460713UL, 2571551493UL, 484276565UL, 3173595164UL, 4177831244UL, 4132249231UL, 2116763555UL, 1420812998UL, 2121017321UL, 2855491215UL, 1630144518UL, 2489688364UL, 411521312UL, 3713786536UL, 4177871972UL, 690465497UL, 855092147UL, 4271606539UL, 1265108699UL, 3757106624UL, 3151574897UL, 670335437UL, 3099376310UL, 3946436509UL, 1795346235UL, 4013409945UL, +}, +{ +650684252UL, 2220445579UL, 537394374UL, 571322423UL, 2781663439UL, 899394682UL, 364129622UL, 328438826UL, 1219862153UL, 830435885UL, 3278649457UL, 3072225531UL, 2838645991UL, 3150905380UL, 1251952499UL, 1751415553UL, 2034088483UL, 1437197870UL, 1907624878UL, 1786974150UL, 4207811086UL, 768131803UL, 2713210999UL, 4004509777UL, 3510764535UL, 2740991637UL, 3000313526UL, 1355959320UL, 938244439UL, 4093313692UL, 2476002145UL, 835527260UL, +2084758949UL, 4223775017UL, 91645393UL, 2251723899UL, 3159477758UL, 2008655575UL, 912220875UL, 1525327655UL, 2067948386UL, 2006141522UL, 450235614UL, 3945671083UL, 2852189452UL, 3804118704UL, 3302604345UL, 1712745267UL, 349281154UL, 19331179UL, 3423301791UL, 416995358UL, 2049170698UL, 684574142UL, 3271042138UL, 3438668017UL, 1645378852UL, 1995123150UL, 1835887948UL, 2347182898UL, 3828432892UL, 3710259931UL, 713144773UL, 3246285450UL, +2196135622UL, 1611287338UL, 2845388948UL, 3690657633UL, 2403178686UL, 2946296994UL, 2180908599UL, 3072014497UL, 3436535724UL, 2948908116UL, 3080353236UL, 1669938872UL, 3572731079UL, 1100892983UL, 308060688UL, 3092946261UL, 2725115972UL, 887278263UL, 991869336UL, 3597899723UL, 3454505181UL, 1108269267UL, 851855066UL, 1940998002UL, 3539084542UL, 3102161424UL, 965450940UL, 1942363226UL, 1430246588UL, 1368971075UL, 4251556311UL, 642683738UL, +3035789355UL, 1829444044UL, 4234626091UL, 671403403UL, 2809844786UL, 2251172733UL, 970188857UL, 3910072565UL, 1131847479UL, 3397535176UL, 3290884849UL, 861868157UL, 2811422184UL, 3280310458UL, 3502085520UL, 1499698865UL, 2446269873UL, 236680785UL, 1896103604UL, 1179896471UL, 83960622UL, 3303129336UL, 1191373247UL, 177898275UL, 3077388457UL, 1022975703UL, 2535144448UL, 8680269UL, 3602435630UL, 1810825915UL, 2293529378UL, 2307085218UL, +483894148UL, 2872435038UL, 2043868156UL, 3038491874UL, 3786518530UL, 3606440668UL, 3336713377UL, 120183042UL, 86901386UL, 2233164457UL, 2881782972UL, 3135264768UL, 2294460421UL, 2996668315UL, 658184098UL, 3558825846UL, 2386173040UL, 1950463910UL, 551627788UL, 2464303444UL, 893474565UL, 3277869222UL, 2852725906UL, 1191310725UL, 2398932683UL, 4164956002UL, 1689291769UL, 2619288187UL, 3429362702UL, 3205668166UL, 1668126623UL, 955771270UL, +2106753333UL, 650684252UL, 2220445579UL, 537394374UL, 571322423UL, 2369694095UL, 899394682UL, 364129622UL, 328438826UL, 1219862153UL, 4195985755UL, 3278649457UL, 3072225531UL, 2838645991UL, 3150905380UL, 2389919UL, 1751415553UL, 2034088483UL, 1437197870UL, 1907624878UL, 1516966376UL, 4207811086UL, 768131803UL, 2713210999UL, 4004509777UL, 1955929377UL, 2740991637UL, 3000313526UL, 1355959320UL, 938244439UL, 4263287583UL, 2476002145UL, +835527260UL, 2084758949UL, 4223775017UL, 110659216UL, 2251723899UL, 3159477758UL, 2008655575UL, 912220875UL, 2378803214UL, 2067948386UL, 2006141522UL, 450235614UL, 3945671083UL, 4112321452UL, 3804118704UL, 3302604345UL, 1712745267UL, 349281154UL, 3834044005UL, 3423301791UL, 416995358UL, 2049170698UL, 684574142UL, 3651360887UL, 3438668017UL, 1645378852UL, 1995123150UL, 1835887948UL, 1022257616UL, 3828432892UL, 3710259931UL, 713144773UL, +3246285450UL, 2485142597UL, 1611287338UL, 2845388948UL, 3690657633UL, 2403178686UL, 2201888000UL, 2180908599UL, 3072014497UL, 3436535724UL, 2948908116UL, 1647734358UL, 1669938872UL, 3572731079UL, 1100892983UL, 308060688UL, 592016509UL, 2725115972UL, 887278263UL, 991869336UL, 3597899723UL, 819708104UL, 1108269267UL, 851855066UL, 1940998002UL, 3539084542UL, 3156419045UL, 965450940UL, 1942363226UL, 1430246588UL, 1368971075UL, 224112021UL, +642683738UL, 3035789355UL, 1829444044UL, 4234626091UL, 314715303UL, 2809844786UL, 2251172733UL, 970188857UL, 3910072565UL, 155628632UL, 3397535176UL, 3290884849UL, 861868157UL, 2811422184UL, 1847583676UL, 3502085520UL, 1499698865UL, 2446269873UL, 236680785UL, 3698448762UL, 1179896471UL, 83960622UL, 3303129336UL, 1191373247UL, 1567908030UL, 3077388457UL, 1022975703UL, 2535144448UL, 8680269UL, 3979982957UL, 1810825915UL, 2293529378UL, +2307085218UL, 483894148UL, 4003402870UL, 2043868156UL, 3038491874UL, 3786518530UL, 3606440668UL, 3062185402UL, 120183042UL, 86901386UL, 2233164457UL, 2881782972UL, 3345668738UL, 2294460421UL, 2996668315UL, 658184098UL, 3558825846UL, 2121278529UL, 1950463910UL, 551627788UL, 2464303444UL, 893474565UL, 183176481UL, 2852725906UL, 1191310725UL, 2398932683UL, 4164956002UL, 788617081UL, 2619288187UL, 3429362702UL, 3205668166UL, 1668126623UL, +29124108UL, 2106753333UL, 650684252UL, 2220445579UL, 537394374UL, 725338795UL, 2369694095UL, 899394682UL, 364129622UL, 328438826UL, 1727397396UL, 4195985755UL, 3278649457UL, 3072225531UL, 2838645991UL, 583924693UL, 2389919UL, 1751415553UL, 2034088483UL, 1437197870UL, 1017611325UL, 1516966376UL, 4207811086UL, 768131803UL, 2713210999UL, 761144580UL, 1955929377UL, 2740991637UL, 3000313526UL, 1355959320UL, 840696976UL, 4263287583UL, +2476002145UL, 835527260UL, 2084758949UL, 3729075247UL, 110659216UL, 2251723899UL, 3159477758UL, 2008655575UL, 4127907945UL, 2378803214UL, 2067948386UL, 2006141522UL, 450235614UL, 3240776806UL, 4112321452UL, 3804118704UL, 3302604345UL, 1712745267UL, 1079549936UL, 3834044005UL, 3423301791UL, 416995358UL, 2049170698UL, 3913510119UL, 3651360887UL, 3438668017UL, 1645378852UL, 1995123150UL, 841590980UL, 1022257616UL, 3828432892UL, 3710259931UL, +713144773UL, 1272133892UL, 2485142597UL, 1611287338UL, 2845388948UL, 3690657633UL, 3083851146UL, 2201888000UL, 2180908599UL, 3072014497UL, 3436535724UL, 4162521870UL, 1647734358UL, 1669938872UL, 3572731079UL, 1100892983UL, 986584939UL, 592016509UL, 2725115972UL, 887278263UL, 991869336UL, 2711883653UL, 819708104UL, 1108269267UL, 851855066UL, 1940998002UL, 4050477073UL, 3156419045UL, 965450940UL, 1942363226UL, 1430246588UL, 4285490865UL, +224112021UL, 642683738UL, 3035789355UL, 1829444044UL, 4197159994UL, 314715303UL, 2809844786UL, 2251172733UL, 970188857UL, 3018833494UL, 155628632UL, 3397535176UL, 3290884849UL, 861868157UL, 2883971818UL, 1847583676UL, 3502085520UL, 1499698865UL, 2446269873UL, 2621709156UL, 3698448762UL, 1179896471UL, 83960622UL, 3303129336UL, 2192966710UL, 1567908030UL, 3077388457UL, 1022975703UL, 2535144448UL, 95661399UL, 3979982957UL, 1810825915UL, +2293529378UL, 2307085218UL, 485952375UL, 4003402870UL, 2043868156UL, 3038491874UL, 3786518530UL, 575288835UL, 3062185402UL, 120183042UL, 86901386UL, 2233164457UL, 2864966512UL, 3345668738UL, 2294460421UL, 2996668315UL, 658184098UL, 2892259673UL, 2121278529UL, 1950463910UL, 551627788UL, 2464303444UL, 2699734841UL, 183176481UL, 2852725906UL, 1191310725UL, 2398932683UL, 3505505465UL, 788617081UL, 2619288187UL, 3429362702UL, 3205668166UL, +2157859363UL, 29124108UL, 2106753333UL, 650684252UL, 2220445579UL, 978263237UL, 725338795UL, 2369694095UL, 899394682UL, 364129622UL, 3795063930UL, 1727397396UL, 4195985755UL, 3278649457UL, 3072225531UL, 1996768476UL, 583924693UL, 2389919UL, 1751415553UL, 2034088483UL, 1069211024UL, 1017611325UL, 1516966376UL, 4207811086UL, 768131803UL, 1365857736UL, 761144580UL, 1955929377UL, 2740991637UL, 3000313526UL, 1057560595UL, 840696976UL, +4263287583UL, 2476002145UL, 835527260UL, 76517292UL, 3729075247UL, 110659216UL, 2251723899UL, 3159477758UL, 3272987770UL, 4127907945UL, 2378803214UL, 2067948386UL, 2006141522UL, 1223694226UL, 3240776806UL, 4112321452UL, 3804118704UL, 3302604345UL, 2218568154UL, 1079549936UL, 3834044005UL, 3423301791UL, 416995358UL, 3661322119UL, 3913510119UL, 3651360887UL, 3438668017UL, 1645378852UL, 3606917602UL, 841590980UL, 1022257616UL, 3828432892UL, +3710259931UL, 1270853142UL, 1272133892UL, 2485142597UL, 1611287338UL, 2845388948UL, 131877212UL, 3083851146UL, 2201888000UL, 2180908599UL, 3072014497UL, 2459348479UL, 4162521870UL, 1647734358UL, 1669938872UL, 3572731079UL, 4285199726UL, 986584939UL, 592016509UL, 2725115972UL, 887278263UL, 3824306591UL, 2711883653UL, 819708104UL, 1108269267UL, 851855066UL, 190839383UL, 4050477073UL, 3156419045UL, 965450940UL, 1942363226UL, 1750931697UL, +4285490865UL, 224112021UL, 642683738UL, 3035789355UL, 1544088048UL, 4197159994UL, 314715303UL, 2809844786UL, 2251172733UL, 3155072709UL, 3018833494UL, 155628632UL, 3397535176UL, 3290884849UL, 4153861738UL, 2883971818UL, 1847583676UL, 3502085520UL, 1499698865UL, 1780983485UL, 2621709156UL, 3698448762UL, 1179896471UL, 83960622UL, 3849402190UL, 2192966710UL, 1567908030UL, 3077388457UL, 1022975703UL, 1639944917UL, 95661399UL, 3979982957UL, +1810825915UL, 2293529378UL, 3477014442UL, 485952375UL, 4003402870UL, 2043868156UL, 3038491874UL, 1482314580UL, 575288835UL, 3062185402UL, 120183042UL, 86901386UL, 3129494022UL, 2864966512UL, 3345668738UL, 2294460421UL, 2996668315UL, 1986664970UL, 2892259673UL, 2121278529UL, 1950463910UL, 551627788UL, 3105369079UL, 2699734841UL, 183176481UL, 2852725906UL, 1191310725UL, 3154591925UL, 3505505465UL, 788617081UL, 2619288187UL, 3429362702UL, +4204415531UL, 1321048315UL, 4247243973UL, 3085535935UL, 114618345UL, 2126710176UL, 1857709117UL, 3744103666UL, 304437872UL, 2388303947UL, 1802971382UL, 2099900439UL, 2543837819UL, 593111133UL, 3788847386UL, 1479546758UL, 4095492150UL, 240996968UL, 3423191009UL, 2666077260UL, 884572403UL, 2988847666UL, 928827215UL, 2549465610UL, 2773670136UL, 708214104UL, 2594951780UL, 1076989709UL, 2850313793UL, 1401578686UL, 4100639899UL, 2353261688UL, +1323066237UL, 31664438UL, 951240198UL, 3676836716UL, 3633113483UL, 3262159382UL, 981784748UL, 1172850762UL, 3106238289UL, 3118297408UL, 4207023277UL, 3362324732UL, 844983306UL, 3790928628UL, 4156848237UL, 2638267501UL, 1494090858UL, 3955182404UL, 1193294064UL, 4035152789UL, 2971914580UL, 2865046609UL, 3782329083UL, 120288587UL, 3300482994UL, 4268540970UL, 4183426205UL, 3572724103UL, 3287140971UL, 3038086532UL, 3210919007UL, 2171998100UL, +3958495101UL, 1589679371UL, 2880366694UL, 827575211UL, 1343189406UL, 364332706UL, 866065087UL, 33080625UL, 4284492640UL, 2277479989UL, 4110331130UL, 430538110UL, 3549886335UL, 3734345920UL, 3780943339UL, 638033279UL, 2684714509UL, 945721631UL, 49994267UL, 2394351381UL, 1996532760UL, 3201422203UL, 3509459657UL, 4118609520UL, 632454166UL, 696027759UL, 901486290UL, 1230453723UL, 4225865813UL, 4072619256UL, 3111686961UL, 1487480830UL, +4112016561UL, 1577020285UL, 2765241900UL, 2496609620UL, 1731271292UL, 6970479UL, 2936359283UL, 1541124937UL, 3705956773UL, 2349695021UL, 2247551804UL, 3759489710UL, 1321217706UL, 379586757UL, 2008242014UL, 1138475935UL, 3044902216UL, 1917596533UL, 2905651936UL, 3320601534UL, 1468557693UL, 4101437636UL, 374575138UL, 730079080UL, 995340259UL, 1430552870UL, 3860649629UL, 541396702UL, 3413070856UL, 3052797396UL, 3591116740UL, 2811484252UL, +2464310183UL, 1597327051UL, 3288232619UL, 1564716093UL, 2838386049UL, 264313861UL, 881377066UL, 4165178494UL, 1069189853UL, 1045737884UL, 2072266205UL, 2700673629UL, 2338724235UL, 837702541UL, 2603464957UL, 1548182143UL, 3565539962UL, 38172869UL, 1949065935UL, 3628598166UL, 2788698071UL, 3531182193UL, 1367529788UL, 3902468811UL, 1215323634UL, 1117475027UL, 3901912129UL, 2678279671UL, 597953858UL, 4082485755UL, 3696533122UL, 1078703353UL, +}, +{ +590004384UL, 3025338414UL, 1764374188UL, 20686172UL, 932343559UL, 1798441768UL, 1013577341UL, 4275903797UL, 853441141UL, 1065980978UL, 3665193407UL, 1555165047UL, 2962781443UL, 1822487181UL, 3329200135UL, 1527094489UL, 3805115799UL, 2252376033UL, 2137546519UL, 3632426270UL, 2439842864UL, 2525211849UL, 602876448UL, 1488163727UL, 3169015136UL, 832084039UL, 81097112UL, 994974428UL, 1945411347UL, 1020609213UL, 2863240894UL, 1639194881UL, +3078842449UL, 1885382385UL, 2595105518UL, 3857547190UL, 3654577058UL, 3853111480UL, 2237941224UL, 625422255UL, 3292783340UL, 750206381UL, 1002246874UL, 900879607UL, 820635221UL, 3318328110UL, 3980484559UL, 3924790669UL, 4260574943UL, 3658381114UL, 3673068643UL, 1319175627UL, 3620071157UL, 3914274380UL, 3310864044UL, 1529070914UL, 1760958838UL, 818806045UL, 3056976418UL, 2337737150UL, 2061530784UL, 1036243443UL, 2058675708UL, 1932546035UL, +1604709219UL, 1317296740UL, 2505350414UL, 624826181UL, 2710208816UL, 2208469912UL, 1930700024UL, 3769953790UL, 2092911082UL, 520309780UL, 3787727278UL, 684095804UL, 3697683979UL, 111440289UL, 4043494885UL, 1571375993UL, 1828801775UL, 3589061974UL, 3016563679UL, 2026002784UL, 3810490061UL, 2634997537UL, 2715287551UL, 1973545003UL, 3407971274UL, 3239387641UL, 2479429785UL, 324785401UL, 2622755198UL, 1525605325UL, 3280412074UL, 2453630352UL, +726090704UL, 4170024046UL, 248003549UL, 3319518538UL, 1331224401UL, 1203416669UL, 3497395173UL, 2465693133UL, 15303334UL, 267163358UL, 627307819UL, 294350450UL, 3691559013UL, 2491765952UL, 839609873UL, 1598505629UL, 3905396753UL, 583168080UL, 281403302UL, 1658629464UL, 1498139453UL, 2860737994UL, 148007837UL, 1439496901UL, 3226624586UL, 1708925351UL, 195473107UL, 1150552649UL, 2856922985UL, 1853471286UL, 1286593394UL, 2025932254UL, +1300583198UL, 3169702837UL, 1255226060UL, 3482666699UL, 1515557266UL, 1964035766UL, 1604627993UL, 641427670UL, 450188959UL, 1095230428UL, 293179001UL, 1293554079UL, 3022335608UL, 610535626UL, 1329467104UL, 3717935497UL, 1252385485UL, 441595535UL, 2937045243UL, 2846877561UL, 668719121UL, 3604154741UL, 1150714166UL, 1689640190UL, 2219487087UL, 2445975095UL, 3492083575UL, 377195836UL, 2727989292UL, 2460040634UL, 2910322481UL, 399050881UL, +3601292788UL, 590004384UL, 3025338414UL, 1764374188UL, 20686172UL, 3576058865UL, 1798441768UL, 1013577341UL, 4275903797UL, 853441141UL, 3862104007UL, 3665193407UL, 1555165047UL, 2962781443UL, 1822487181UL, 1058917817UL, 1527094489UL, 3805115799UL, 2252376033UL, 2137546519UL, 780594798UL, 2439842864UL, 2525211849UL, 602876448UL, 1488163727UL, 642430472UL, 832084039UL, 81097112UL, 994974428UL, 1945411347UL, 2231598766UL, 2863240894UL, +1639194881UL, 3078842449UL, 1885382385UL, 2387524763UL, 3857547190UL, 3654577058UL, 3853111480UL, 2237941224UL, 991026264UL, 3292783340UL, 750206381UL, 1002246874UL, 900879607UL, 1178067772UL, 3318328110UL, 3980484559UL, 3924790669UL, 4260574943UL, 1964983082UL, 3673068643UL, 1319175627UL, 3620071157UL, 3914274380UL, 992141498UL, 1529070914UL, 1760958838UL, 818806045UL, 3056976418UL, 3295305429UL, 2061530784UL, 1036243443UL, 2058675708UL, +1932546035UL, 3724542133UL, 1317296740UL, 2505350414UL, 624826181UL, 2710208816UL, 3359715256UL, 1930700024UL, 3769953790UL, 2092911082UL, 520309780UL, 1979908015UL, 684095804UL, 3697683979UL, 111440289UL, 4043494885UL, 3256907235UL, 1828801775UL, 3589061974UL, 3016563679UL, 2026002784UL, 1967781780UL, 2634997537UL, 2715287551UL, 1973545003UL, 3407971274UL, 391604110UL, 2479429785UL, 324785401UL, 2622755198UL, 1525605325UL, 462777294UL, +2453630352UL, 726090704UL, 4170024046UL, 248003549UL, 3125444318UL, 1331224401UL, 1203416669UL, 3497395173UL, 2465693133UL, 1610778556UL, 267163358UL, 627307819UL, 294350450UL, 3691559013UL, 3302305047UL, 839609873UL, 1598505629UL, 3905396753UL, 583168080UL, 1502262581UL, 1658629464UL, 1498139453UL, 2860737994UL, 148007837UL, 2973368511UL, 3226624586UL, 1708925351UL, 195473107UL, 1150552649UL, 522423348UL, 1853471286UL, 1286593394UL, +2025932254UL, 1300583198UL, 555770116UL, 1255226060UL, 3482666699UL, 1515557266UL, 1964035766UL, 877073175UL, 641427670UL, 450188959UL, 1095230428UL, 293179001UL, 4216364784UL, 3022335608UL, 610535626UL, 1329467104UL, 3717935497UL, 1665384485UL, 441595535UL, 2937045243UL, 2846877561UL, 668719121UL, 978801343UL, 1150714166UL, 1689640190UL, 2219487087UL, 2445975095UL, 3819595050UL, 377195836UL, 2727989292UL, 2460040634UL, 2910322481UL, +1200428010UL, 3601292788UL, 590004384UL, 3025338414UL, 1764374188UL, 3586255253UL, 3576058865UL, 1798441768UL, 1013577341UL, 4275903797UL, 1511067357UL, 3862104007UL, 3665193407UL, 1555165047UL, 2962781443UL, 2749766525UL, 1058917817UL, 1527094489UL, 3805115799UL, 2252376033UL, 817362043UL, 780594798UL, 2439842864UL, 2525211849UL, 602876448UL, 2309049006UL, 642430472UL, 832084039UL, 81097112UL, 994974428UL, 3148197354UL, 2231598766UL, +2863240894UL, 1639194881UL, 3078842449UL, 311769962UL, 2387524763UL, 3857547190UL, 3654577058UL, 3853111480UL, 1888597091UL, 991026264UL, 3292783340UL, 750206381UL, 1002246874UL, 2904195378UL, 1178067772UL, 3318328110UL, 3980484559UL, 3924790669UL, 4265386540UL, 1964983082UL, 3673068643UL, 1319175627UL, 3620071157UL, 1635921454UL, 992141498UL, 1529070914UL, 1760958838UL, 818806045UL, 3002614702UL, 3295305429UL, 2061530784UL, 1036243443UL, +2058675708UL, 2534375036UL, 3724542133UL, 1317296740UL, 2505350414UL, 624826181UL, 3042995618UL, 3359715256UL, 1930700024UL, 3769953790UL, 2092911082UL, 1870611696UL, 1979908015UL, 684095804UL, 3697683979UL, 111440289UL, 1111193348UL, 3256907235UL, 1828801775UL, 3589061974UL, 3016563679UL, 2203918092UL, 1967781780UL, 2634997537UL, 2715287551UL, 1973545003UL, 17967467UL, 391604110UL, 2479429785UL, 324785401UL, 2622755198UL, 3993572289UL, +462777294UL, 2453630352UL, 726090704UL, 4170024046UL, 813760479UL, 3125444318UL, 1331224401UL, 1203416669UL, 3497395173UL, 2528908686UL, 1610778556UL, 267163358UL, 627307819UL, 294350450UL, 4252461657UL, 3302305047UL, 839609873UL, 1598505629UL, 3905396753UL, 3407593947UL, 1502262581UL, 1658629464UL, 1498139453UL, 2860737994UL, 1137070983UL, 2973368511UL, 3226624586UL, 1708925351UL, 195473107UL, 1973834367UL, 522423348UL, 1853471286UL, +1286593394UL, 2025932254UL, 1636839834UL, 555770116UL, 1255226060UL, 3482666699UL, 1515557266UL, 4244619305UL, 877073175UL, 641427670UL, 450188959UL, 1095230428UL, 710341587UL, 4216364784UL, 3022335608UL, 610535626UL, 1329467104UL, 262034293UL, 1665384485UL, 441595535UL, 2937045243UL, 2846877561UL, 1059914271UL, 978801343UL, 1150714166UL, 1689640190UL, 2219487087UL, 258315233UL, 3819595050UL, 377195836UL, 2727989292UL, 2460040634UL, +1828274968UL, 1200428010UL, 3601292788UL, 590004384UL, 3025338414UL, 3487643146UL, 3586255253UL, 3576058865UL, 1798441768UL, 1013577341UL, 3609472816UL, 1511067357UL, 3862104007UL, 3665193407UL, 1555165047UL, 4188135767UL, 2749766525UL, 1058917817UL, 1527094489UL, 3805115799UL, 1547526585UL, 817362043UL, 780594798UL, 2439842864UL, 2525211849UL, 3949139098UL, 2309049006UL, 642430472UL, 832084039UL, 81097112UL, 2619711743UL, 3148197354UL, +2231598766UL, 2863240894UL, 1639194881UL, 3018692935UL, 311769962UL, 2387524763UL, 3857547190UL, 3654577058UL, 2418052942UL, 1888597091UL, 991026264UL, 3292783340UL, 750206381UL, 2501986418UL, 2904195378UL, 1178067772UL, 3318328110UL, 3980484559UL, 655757623UL, 4265386540UL, 1964983082UL, 3673068643UL, 1319175627UL, 1539823819UL, 1635921454UL, 992141498UL, 1529070914UL, 1760958838UL, 1840073710UL, 3002614702UL, 3295305429UL, 2061530784UL, +1036243443UL, 2212957003UL, 2534375036UL, 3724542133UL, 1317296740UL, 2505350414UL, 2754670042UL, 3042995618UL, 3359715256UL, 1930700024UL, 3769953790UL, 3307920786UL, 1870611696UL, 1979908015UL, 684095804UL, 3697683979UL, 326641529UL, 1111193348UL, 3256907235UL, 1828801775UL, 3589061974UL, 1408835557UL, 2203918092UL, 1967781780UL, 2634997537UL, 2715287551UL, 1958610929UL, 17967467UL, 391604110UL, 2479429785UL, 324785401UL, 3833051255UL, +3993572289UL, 462777294UL, 2453630352UL, 726090704UL, 1236380896UL, 813760479UL, 3125444318UL, 1331224401UL, 1203416669UL, 728276857UL, 2528908686UL, 1610778556UL, 267163358UL, 627307819UL, 4276734917UL, 4252461657UL, 3302305047UL, 839609873UL, 1598505629UL, 3827653659UL, 3407593947UL, 1502262581UL, 1658629464UL, 1498139453UL, 3636064463UL, 1137070983UL, 2973368511UL, 3226624586UL, 1708925351UL, 2288771247UL, 1973834367UL, 522423348UL, +1853471286UL, 1286593394UL, 798364204UL, 1636839834UL, 555770116UL, 1255226060UL, 3482666699UL, 2385578475UL, 4244619305UL, 877073175UL, 641427670UL, 450188959UL, 3502743047UL, 710341587UL, 4216364784UL, 3022335608UL, 610535626UL, 2388448039UL, 262034293UL, 1665384485UL, 441595535UL, 2937045243UL, 3028160550UL, 1059914271UL, 978801343UL, 1150714166UL, 1689640190UL, 169488023UL, 258315233UL, 3819595050UL, 377195836UL, 2727989292UL, +837094660UL, 3531987448UL, 1901453576UL, 3312447598UL, 1036467641UL, 2243300650UL, 3148869460UL, 1886274644UL, 4076707689UL, 257110870UL, 3118463831UL, 1165161057UL, 1118846497UL, 3446934363UL, 1514176098UL, 1362957326UL, 2629874126UL, 791374320UL, 1015673947UL, 4252955786UL, 2409207780UL, 3831311130UL, 1654475922UL, 3682733431UL, 780405105UL, 4059616372UL, 503333525UL, 1471514828UL, 2526848791UL, 607539645UL, 730408454UL, 1574159005UL, +1777808061UL, 1296178310UL, 1078855633UL, 878462103UL, 269337411UL, 750735378UL, 2599590920UL, 4206153248UL, 939121991UL, 3061289971UL, 2543431563UL, 1684736054UL, 2319658494UL, 77300347UL, 3222569207UL, 3882064339UL, 2201120493UL, 289098227UL, 3934209124UL, 2407620042UL, 2713079957UL, 2812644841UL, 115993752UL, 2545688211UL, 774350907UL, 939749505UL, 2242588062UL, 960853876UL, 296665594UL, 1367312411UL, 3370351589UL, 711706404UL, +3331136631UL, 1370376958UL, 2322438166UL, 577115138UL, 1472236592UL, 4029835216UL, 1122502809UL, 3490426739UL, 1930206806UL, 2074277138UL, 1360950220UL, 3797708387UL, 2007430804UL, 2257239461UL, 3889012648UL, 710165871UL, 763101711UL, 728019024UL, 652403220UL, 2517020147UL, 1801290767UL, 1478810019UL, 1057288808UL, 2879821959UL, 3916870020UL, 1480362189UL, 919816752UL, 375872647UL, 3236906236UL, 1504223782UL, 128306943UL, 1355826533UL, +2656243649UL, 390454690UL, 3848250363UL, 377480950UL, 358651174UL, 1337795904UL, 1925462532UL, 2421843219UL, 173144626UL, 886649902UL, 402617827UL, 932830871UL, 742712936UL, 4033430386UL, 1409945926UL, 3617206544UL, 2383446356UL, 3452204096UL, 615486157UL, 720696019UL, 1730134434UL, 3918468503UL, 1629431965UL, 2174079220UL, 325852294UL, 234479771UL, 1490297289UL, 3579002992UL, 3538738636UL, 139386548UL, 3067789050UL, 2078261059UL, +3552654276UL, 1774602596UL, 2105142163UL, 2768099869UL, 2265044995UL, 3680536732UL, 3601322356UL, 2848878442UL, 1166743022UL, 3508176959UL, 2186695985UL, 550278868UL, 3324775634UL, 384537301UL, 1019044102UL, 3354263542UL, 1942540686UL, 922714337UL, 3097711558UL, 3074228403UL, 3565076630UL, 3459053081UL, 4128383906UL, 1114387332UL, 2101424539UL, 1192649508UL, 58778130UL, 1651798895UL, 1752063480UL, 1728826905UL, 2225187635UL, 2463770127UL, +}, +{ +1978406995UL, 576106282UL, 2238958298UL, 2073551095UL, 624788087UL, 4231569260UL, 1853272808UL, 238274694UL, 2389334758UL, 410188028UL, 2293786099UL, 4243662908UL, 2317700970UL, 4050493361UL, 2348206908UL, 485250660UL, 1212732903UL, 169414736UL, 292623762UL, 1602229231UL, 2466348869UL, 3063669700UL, 1872890881UL, 1887188929UL, 3447638989UL, 162521682UL, 1470651713UL, 4036975255UL, 3423782623UL, 4043724693UL, 1686690883UL, 2610958712UL, +35940353UL, 78593759UL, 1565950713UL, 1304303952UL, 2004267248UL, 1417268036UL, 3328228522UL, 789915977UL, 2567452041UL, 3564175714UL, 1838409932UL, 1455795236UL, 22377452UL, 455201131UL, 3340286965UL, 184599544UL, 4102076073UL, 4007870762UL, 1470247063UL, 1579231003UL, 3544385556UL, 3408973464UL, 3759098465UL, 3243598964UL, 532452279UL, 1172265732UL, 3520978258UL, 2880513876UL, 41188252UL, 1663974668UL, 3444236420UL, 338981290UL, +2140558860UL, 3310465688UL, 552673362UL, 3277110106UL, 948036400UL, 1346056406UL, 3257468427UL, 4008294878UL, 3788890535UL, 2414511414UL, 3539325895UL, 3025695322UL, 3727849930UL, 3922840362UL, 535899902UL, 665898223UL, 1456499692UL, 354208792UL, 247894771UL, 2093316680UL, 2945209002UL, 1029298544UL, 976007759UL, 394966955UL, 1843302845UL, 3689202777UL, 1999949614UL, 1070472810UL, 4233404701UL, 667526747UL, 2313963966UL, 3519400667UL, +1548274317UL, 3272402139UL, 2570038689UL, 892260481UL, 3547254358UL, 1540409404UL, 3687395534UL, 3751445920UL, 546406228UL, 2167638865UL, 4234783150UL, 806401261UL, 1351195286UL, 1085913868UL, 3109267901UL, 1882610112UL, 1568734773UL, 239430641UL, 3971361190UL, 383932711UL, 149541490UL, 196701535UL, 108079452UL, 888590964UL, 1708559652UL, 3196290573UL, 2115587458UL, 3198525248UL, 3580113911UL, 3098818120UL, 4271558926UL, 3208851696UL, +3354604918UL, 3536923694UL, 1087345822UL, 2292802521UL, 3500230819UL, 411564772UL, 2408049547UL, 1215342690UL, 1707182109UL, 774540619UL, 1613606757UL, 836141085UL, 1061962136UL, 348765795UL, 2852610966UL, 3526215991UL, 2708801073UL, 3467537935UL, 472234793UL, 3944263763UL, 1782219410UL, 502724699UL, 3525703395UL, 1756411033UL, 1358811278UL, 3938603279UL, 3701976555UL, 3259537961UL, 628617330UL, 1553932236UL, 1974037630UL, 2090519666UL, +2185028543UL, 1978406995UL, 576106282UL, 2238958298UL, 2073551095UL, 638634424UL, 4231569260UL, 1853272808UL, 238274694UL, 2389334758UL, 3808551433UL, 2293786099UL, 4243662908UL, 2317700970UL, 4050493361UL, 957981276UL, 485250660UL, 1212732903UL, 169414736UL, 292623762UL, 1956197178UL, 2466348869UL, 3063669700UL, 1872890881UL, 1887188929UL, 1162224455UL, 162521682UL, 1470651713UL, 4036975255UL, 3423782623UL, 3243414978UL, 1686690883UL, +2610958712UL, 35940353UL, 78593759UL, 1648686849UL, 1304303952UL, 2004267248UL, 1417268036UL, 3328228522UL, 3740797237UL, 2567452041UL, 3564175714UL, 1838409932UL, 1455795236UL, 1045087636UL, 455201131UL, 3340286965UL, 184599544UL, 4102076073UL, 2685677331UL, 1470247063UL, 1579231003UL, 3544385556UL, 3408973464UL, 3832799869UL, 3243598964UL, 532452279UL, 1172265732UL, 3520978258UL, 531684354UL, 41188252UL, 1663974668UL, 3444236420UL, +338981290UL, 1286622338UL, 3310465688UL, 552673362UL, 3277110106UL, 948036400UL, 2987864230UL, 3257468427UL, 4008294878UL, 3788890535UL, 2414511414UL, 2613137548UL, 3025695322UL, 3727849930UL, 3922840362UL, 535899902UL, 3288883992UL, 1456499692UL, 354208792UL, 247894771UL, 2093316680UL, 3775770224UL, 1029298544UL, 976007759UL, 394966955UL, 1843302845UL, 1484214934UL, 1999949614UL, 1070472810UL, 4233404701UL, 667526747UL, 3708951530UL, +3519400667UL, 1548274317UL, 3272402139UL, 2570038689UL, 3457725296UL, 3547254358UL, 1540409404UL, 3687395534UL, 3751445920UL, 181641144UL, 2167638865UL, 4234783150UL, 806401261UL, 1351195286UL, 3457819598UL, 3109267901UL, 1882610112UL, 1568734773UL, 239430641UL, 4037392309UL, 383932711UL, 149541490UL, 196701535UL, 108079452UL, 1724276622UL, 1708559652UL, 3196290573UL, 2115587458UL, 3198525248UL, 3784683125UL, 3098818120UL, 4271558926UL, +3208851696UL, 3354604918UL, 149872004UL, 1087345822UL, 2292802521UL, 3500230819UL, 411564772UL, 4068437023UL, 1215342690UL, 1707182109UL, 774540619UL, 1613606757UL, 1062624488UL, 1061962136UL, 348765795UL, 2852610966UL, 3526215991UL, 1518538195UL, 3467537935UL, 472234793UL, 3944263763UL, 1782219410UL, 1835413488UL, 3525703395UL, 1756411033UL, 1358811278UL, 3938603279UL, 1054245423UL, 3259537961UL, 628617330UL, 1553932236UL, 1974037630UL, +2030751433UL, 2185028543UL, 1978406995UL, 576106282UL, 2238958298UL, 3877268821UL, 638634424UL, 4231569260UL, 1853272808UL, 238274694UL, 2482404724UL, 3808551433UL, 2293786099UL, 4243662908UL, 2317700970UL, 1955227186UL, 957981276UL, 485250660UL, 1212732903UL, 169414736UL, 1333246101UL, 1956197178UL, 2466348869UL, 3063669700UL, 1872890881UL, 3662049503UL, 1162224455UL, 162521682UL, 1470651713UL, 4036975255UL, 3593925064UL, 3243414978UL, +1686690883UL, 2610958712UL, 35940353UL, 2530174792UL, 1648686849UL, 1304303952UL, 2004267248UL, 1417268036UL, 1299827381UL, 3740797237UL, 2567452041UL, 3564175714UL, 1838409932UL, 4221368409UL, 1045087636UL, 455201131UL, 3340286965UL, 184599544UL, 486448047UL, 2685677331UL, 1470247063UL, 1579231003UL, 3544385556UL, 1404931688UL, 3832799869UL, 3243598964UL, 532452279UL, 1172265732UL, 3373048034UL, 531684354UL, 41188252UL, 1663974668UL, +3444236420UL, 1375188728UL, 1286622338UL, 3310465688UL, 552673362UL, 3277110106UL, 655980467UL, 2987864230UL, 3257468427UL, 4008294878UL, 3788890535UL, 763995173UL, 2613137548UL, 3025695322UL, 3727849930UL, 3922840362UL, 1850434657UL, 3288883992UL, 1456499692UL, 354208792UL, 247894771UL, 3440471938UL, 3775770224UL, 1029298544UL, 976007759UL, 394966955UL, 3298245949UL, 1484214934UL, 1999949614UL, 1070472810UL, 4233404701UL, 3788558253UL, +3708951530UL, 3519400667UL, 1548274317UL, 3272402139UL, 3117201719UL, 3457725296UL, 3547254358UL, 1540409404UL, 3687395534UL, 3871454027UL, 181641144UL, 2167638865UL, 4234783150UL, 806401261UL, 1627904858UL, 3457819598UL, 3109267901UL, 1882610112UL, 1568734773UL, 3178105921UL, 4037392309UL, 383932711UL, 149541490UL, 196701535UL, 424324376UL, 1724276622UL, 1708559652UL, 3196290573UL, 2115587458UL, 2946026327UL, 3784683125UL, 3098818120UL, +4271558926UL, 3208851696UL, 2551504859UL, 149872004UL, 1087345822UL, 2292802521UL, 3500230819UL, 3055410013UL, 4068437023UL, 1215342690UL, 1707182109UL, 774540619UL, 2466902579UL, 1062624488UL, 1061962136UL, 348765795UL, 2852610966UL, 355211123UL, 1518538195UL, 3467537935UL, 472234793UL, 3944263763UL, 3159176627UL, 1835413488UL, 3525703395UL, 1756411033UL, 1358811278UL, 2153206130UL, 1054245423UL, 3259537961UL, 628617330UL, 1553932236UL, +1741202495UL, 2030751433UL, 2185028543UL, 1978406995UL, 576106282UL, 2832311581UL, 3877268821UL, 638634424UL, 4231569260UL, 1853272808UL, 3103974717UL, 2482404724UL, 3808551433UL, 2293786099UL, 4243662908UL, 2607780401UL, 1955227186UL, 957981276UL, 485250660UL, 1212732903UL, 3214649174UL, 1333246101UL, 1956197178UL, 2466348869UL, 3063669700UL, 2428387069UL, 3662049503UL, 1162224455UL, 162521682UL, 1470651713UL, 3563435961UL, 3593925064UL, +3243414978UL, 1686690883UL, 2610958712UL, 1021669488UL, 2530174792UL, 1648686849UL, 1304303952UL, 2004267248UL, 1150095671UL, 1299827381UL, 3740797237UL, 2567452041UL, 3564175714UL, 1992360540UL, 4221368409UL, 1045087636UL, 455201131UL, 3340286965UL, 3795860292UL, 486448047UL, 2685677331UL, 1470247063UL, 1579231003UL, 3012017918UL, 1404931688UL, 3832799869UL, 3243598964UL, 532452279UL, 2740401823UL, 3373048034UL, 531684354UL, 41188252UL, +1663974668UL, 1239982773UL, 1375188728UL, 1286622338UL, 3310465688UL, 552673362UL, 2159084435UL, 655980467UL, 2987864230UL, 3257468427UL, 4008294878UL, 1526518186UL, 763995173UL, 2613137548UL, 3025695322UL, 3727849930UL, 4161669345UL, 1850434657UL, 3288883992UL, 1456499692UL, 354208792UL, 1648970767UL, 3440471938UL, 3775770224UL, 1029298544UL, 976007759UL, 292829454UL, 3298245949UL, 1484214934UL, 1999949614UL, 1070472810UL, 949984087UL, +3788558253UL, 3708951530UL, 3519400667UL, 1548274317UL, 3691975282UL, 3117201719UL, 3457725296UL, 3547254358UL, 1540409404UL, 3414085332UL, 3871454027UL, 181641144UL, 2167638865UL, 4234783150UL, 487427004UL, 1627904858UL, 3457819598UL, 3109267901UL, 1882610112UL, 2942538550UL, 3178105921UL, 4037392309UL, 383932711UL, 149541490UL, 528605550UL, 424324376UL, 1724276622UL, 1708559652UL, 3196290573UL, 2042399752UL, 2946026327UL, 3784683125UL, +3098818120UL, 4271558926UL, 2493686919UL, 2551504859UL, 149872004UL, 1087345822UL, 2292802521UL, 3257357826UL, 3055410013UL, 4068437023UL, 1215342690UL, 1707182109UL, 1101368233UL, 2466902579UL, 1062624488UL, 1061962136UL, 348765795UL, 377675640UL, 355211123UL, 1518538195UL, 3467537935UL, 472234793UL, 1918362523UL, 3159176627UL, 1835413488UL, 3525703395UL, 1756411033UL, 490591069UL, 2153206130UL, 1054245423UL, 3259537961UL, 628617330UL, +2464143505UL, 3547421156UL, 4181103091UL, 1646291356UL, 2711273600UL, 2961799099UL, 1443009342UL, 2191618308UL, 1193143275UL, 1858488142UL, 3741304147UL, 1479629752UL, 214641634UL, 1601114903UL, 3032545707UL, 5784133UL, 1466424840UL, 2251379876UL, 4054080092UL, 2965144328UL, 644228426UL, 1397556958UL, 422190032UL, 3059134799UL, 3779253493UL, 1314537880UL, 867798895UL, 3819721559UL, 3588436937UL, 670021879UL, 1070365654UL, 3339455790UL, +2963659516UL, 1662488399UL, 2336157317UL, 3427798652UL, 2782719134UL, 1317842084UL, 1576308528UL, 1129452059UL, 3400565954UL, 84977051UL, 3689257381UL, 3289717503UL, 3535165628UL, 3982356490UL, 173255911UL, 1929987033UL, 4221790572UL, 3473317939UL, 749060417UL, 2711561754UL, 316719217UL, 2359410057UL, 2014271053UL, 1432982162UL, 2107582322UL, 1899811989UL, 1394115707UL, 1134266213UL, 2334994542UL, 2475488907UL, 3238562415UL, 2410379210UL, +4147209396UL, 2446286513UL, 2194020199UL, 3068194593UL, 797186100UL, 1299000541UL, 1870322719UL, 2944499140UL, 1045779179UL, 2735528787UL, 3057750264UL, 2607876894UL, 1595833743UL, 3327636115UL, 3520489322UL, 3864068029UL, 3153522810UL, 2609437702UL, 1360208295UL, 2062444770UL, 3927110355UL, 1524755299UL, 1708215998UL, 3587488663UL, 2813888113UL, 686192293UL, 1078633032UL, 3066910876UL, 793688350UL, 3613674912UL, 387713910UL, 2660476731UL, +3032509241UL, 2353038709UL, 2212424333UL, 2110412913UL, 3631228061UL, 2765134272UL, 4025821789UL, 3324834269UL, 187577732UL, 1568270802UL, 2098502315UL, 2472645526UL, 2986813860UL, 1621191378UL, 3891512282UL, 1561648319UL, 2690491944UL, 3075246584UL, 3202791012UL, 315381589UL, 3645907425UL, 3532420114UL, 802256935UL, 1270128258UL, 2695868207UL, 4075358890UL, 3888212208UL, 510396943UL, 3683116722UL, 3943939501UL, 146061942UL, 733291914UL, +1402325031UL, 672641124UL, 2817168601UL, 2622398925UL, 3641379870UL, 2969146913UL, 4232866548UL, 1694492034UL, 3065141682UL, 234404736UL, 1921499010UL, 2300706258UL, 1304904939UL, 207802178UL, 2674605425UL, 2688377241UL, 2674991105UL, 2585496531UL, 2358858923UL, 2578793432UL, 3275116043UL, 228073476UL, 2936443283UL, 3713102344UL, 1629243323UL, 209348683UL, 3730808488UL, 275442226UL, 223820143UL, 2365614109UL, 3017206322UL, 1906208795UL, +}, +{ +1545504510UL, 1985586093UL, 2005504076UL, 2487099791UL, 2348737867UL, 2254755902UL, 3789154730UL, 3268946922UL, 99552511UL, 1369361877UL, 1888041043UL, 3105269579UL, 4044127396UL, 2380045264UL, 2970234287UL, 293292961UL, 1811276320UL, 1083136897UL, 3016497500UL, 950611584UL, 2165628367UL, 4140133899UL, 2402926185UL, 990501164UL, 2185997143UL, 1769871204UL, 721625457UL, 567446962UL, 1695515231UL, 1848699963UL, 4163520111UL, 2316975723UL, +4268269680UL, 1021066723UL, 517434635UL, 3827063239UL, 3483118065UL, 760366769UL, 3072996795UL, 3548263896UL, 2131401627UL, 4167855065UL, 410255606UL, 1992500865UL, 1322267629UL, 1599293552UL, 2389387938UL, 3721625360UL, 216375429UL, 2002236178UL, 1834631738UL, 1585275126UL, 3879559071UL, 2517667239UL, 1397456303UL, 4095227658UL, 589002062UL, 137665950UL, 3933018338UL, 1519132173UL, 3566494128UL, 3914066872UL, 3233332246UL, 855336825UL, +1882502420UL, 1081015168UL, 4148374722UL, 1683880703UL, 1161266344UL, 99374978UL, 733926790UL, 3520260556UL, 3643143173UL, 927318029UL, 398003191UL, 3472026294UL, 3518018860UL, 2319507998UL, 2650129369UL, 3781620600UL, 1294634949UL, 3977318486UL, 3068540117UL, 3732334866UL, 740308004UL, 1988900647UL, 2936479173UL, 2348744493UL, 1357856242UL, 3842428732UL, 3746094733UL, 214260739UL, 3493892012UL, 2358001919UL, 1775614809UL, 952871363UL, +1216985499UL, 2706067772UL, 1008517818UL, 4189424856UL, 1260334069UL, 2420035836UL, 311831945UL, 3409272605UL, 4266242510UL, 3590716427UL, 537257045UL, 3153762469UL, 1620749663UL, 3338743851UL, 3644831936UL, 3243426619UL, 783551642UL, 1305153827UL, 2026979662UL, 3164955857UL, 4082645339UL, 1633544228UL, 3389303153UL, 440623817UL, 204979344UL, 1674764841UL, 633231391UL, 4180702701UL, 1953210184UL, 2534954734UL, 4252100558UL, 2993632630UL, +4050264705UL, 678445398UL, 1502035091UL, 302442688UL, 493504779UL, 2321459487UL, 1141171231UL, 1507727159UL, 672678623UL, 4046722895UL, 65675127UL, 2936731189UL, 441159654UL, 832039862UL, 2252252769UL, 3090962795UL, 2839688755UL, 645344032UL, 2921087914UL, 2264738834UL, 2341060101UL, 778789539UL, 737962654UL, 2859693559UL, 2784310535UL, 493247978UL, 185832691UL, 3321631011UL, 641506549UL, 2652806878UL, 480335604UL, 2908694258UL, +984807024UL, 1545504510UL, 1985586093UL, 2005504076UL, 2487099791UL, 127488455UL, 2254755902UL, 3789154730UL, 3268946922UL, 99552511UL, 2160330513UL, 1888041043UL, 3105269579UL, 4044127396UL, 2380045264UL, 3185912634UL, 293292961UL, 1811276320UL, 1083136897UL, 3016497500UL, 116883339UL, 2165628367UL, 4140133899UL, 2402926185UL, 990501164UL, 4099344218UL, 1769871204UL, 721625457UL, 567446962UL, 1695515231UL, 1218419978UL, 4163520111UL, +2316975723UL, 4268269680UL, 1021066723UL, 237254804UL, 3827063239UL, 3483118065UL, 760366769UL, 3072996795UL, 1020639813UL, 2131401627UL, 4167855065UL, 410255606UL, 1992500865UL, 1887858126UL, 1599293552UL, 2389387938UL, 3721625360UL, 216375429UL, 2096265248UL, 1834631738UL, 1585275126UL, 3879559071UL, 2517667239UL, 3267338158UL, 4095227658UL, 589002062UL, 137665950UL, 3933018338UL, 3823062902UL, 3566494128UL, 3914066872UL, 3233332246UL, +855336825UL, 3240858503UL, 1081015168UL, 4148374722UL, 1683880703UL, 1161266344UL, 4034899335UL, 733926790UL, 3520260556UL, 3643143173UL, 927318029UL, 2130442867UL, 3472026294UL, 3518018860UL, 2319507998UL, 2650129369UL, 253769320UL, 1294634949UL, 3977318486UL, 3068540117UL, 3732334866UL, 3100107703UL, 1988900647UL, 2936479173UL, 2348744493UL, 1357856242UL, 477065277UL, 3746094733UL, 214260739UL, 3493892012UL, 2358001919UL, 52055911UL, +952871363UL, 1216985499UL, 2706067772UL, 1008517818UL, 2820619262UL, 1260334069UL, 2420035836UL, 311831945UL, 3409272605UL, 2066128794UL, 3590716427UL, 537257045UL, 3153762469UL, 1620749663UL, 2261931254UL, 3644831936UL, 3243426619UL, 783551642UL, 1305153827UL, 3937339872UL, 3164955857UL, 4082645339UL, 1633544228UL, 3389303153UL, 3304461891UL, 204979344UL, 1674764841UL, 633231391UL, 4180702701UL, 2649553051UL, 2534954734UL, 4252100558UL, +2993632630UL, 4050264705UL, 3777379050UL, 1502035091UL, 302442688UL, 493504779UL, 2321459487UL, 1795212504UL, 1507727159UL, 672678623UL, 4046722895UL, 65675127UL, 2810951967UL, 441159654UL, 832039862UL, 2252252769UL, 3090962795UL, 3317253399UL, 645344032UL, 2921087914UL, 2264738834UL, 2341060101UL, 1431934790UL, 737962654UL, 2859693559UL, 2784310535UL, 493247978UL, 555655767UL, 3321631011UL, 641506549UL, 2652806878UL, 480335604UL, +1837415425UL, 984807024UL, 1545504510UL, 1985586093UL, 2005504076UL, 2274320195UL, 127488455UL, 2254755902UL, 3789154730UL, 3268946922UL, 3812459919UL, 2160330513UL, 1888041043UL, 3105269579UL, 4044127396UL, 2341347785UL, 3185912634UL, 293292961UL, 1811276320UL, 1083136897UL, 825098089UL, 116883339UL, 2165628367UL, 4140133899UL, 2402926185UL, 4124720284UL, 4099344218UL, 1769871204UL, 721625457UL, 567446962UL, 3598160577UL, 1218419978UL, +4163520111UL, 2316975723UL, 4268269680UL, 923374392UL, 237254804UL, 3827063239UL, 3483118065UL, 760366769UL, 2263405553UL, 1020639813UL, 2131401627UL, 4167855065UL, 410255606UL, 3382265961UL, 1887858126UL, 1599293552UL, 2389387938UL, 3721625360UL, 3440586186UL, 2096265248UL, 1834631738UL, 1585275126UL, 3879559071UL, 711626863UL, 3267338158UL, 4095227658UL, 589002062UL, 137665950UL, 1190761134UL, 3823062902UL, 3566494128UL, 3914066872UL, +3233332246UL, 3844456625UL, 3240858503UL, 1081015168UL, 4148374722UL, 1683880703UL, 589447946UL, 4034899335UL, 733926790UL, 3520260556UL, 3643143173UL, 3202263729UL, 2130442867UL, 3472026294UL, 3518018860UL, 2319507998UL, 3458685425UL, 253769320UL, 1294634949UL, 3977318486UL, 3068540117UL, 702365700UL, 3100107703UL, 1988900647UL, 2936479173UL, 2348744493UL, 969926974UL, 477065277UL, 3746094733UL, 214260739UL, 3493892012UL, 2890740482UL, +52055911UL, 952871363UL, 1216985499UL, 2706067772UL, 1079370138UL, 2820619262UL, 1260334069UL, 2420035836UL, 311831945UL, 701108525UL, 2066128794UL, 3590716427UL, 537257045UL, 3153762469UL, 2900214585UL, 2261931254UL, 3644831936UL, 3243426619UL, 783551642UL, 3143067452UL, 3937339872UL, 3164955857UL, 4082645339UL, 1633544228UL, 1680728882UL, 3304461891UL, 204979344UL, 1674764841UL, 633231391UL, 689425572UL, 2649553051UL, 2534954734UL, +4252100558UL, 2993632630UL, 865432399UL, 3777379050UL, 1502035091UL, 302442688UL, 493504779UL, 1282312650UL, 1795212504UL, 1507727159UL, 672678623UL, 4046722895UL, 976003271UL, 2810951967UL, 441159654UL, 832039862UL, 2252252769UL, 726554843UL, 3317253399UL, 645344032UL, 2921087914UL, 2264738834UL, 1325395107UL, 1431934790UL, 737962654UL, 2859693559UL, 2784310535UL, 3876486226UL, 555655767UL, 3321631011UL, 641506549UL, 2652806878UL, +3848380198UL, 1837415425UL, 984807024UL, 1545504510UL, 1985586093UL, 3711682090UL, 2274320195UL, 127488455UL, 2254755902UL, 3789154730UL, 1595223697UL, 3812459919UL, 2160330513UL, 1888041043UL, 3105269579UL, 2773455385UL, 2341347785UL, 3185912634UL, 293292961UL, 1811276320UL, 3280464626UL, 825098089UL, 116883339UL, 2165628367UL, 4140133899UL, 3092114881UL, 4124720284UL, 4099344218UL, 1769871204UL, 721625457UL, 1514083147UL, 3598160577UL, +1218419978UL, 4163520111UL, 2316975723UL, 200993429UL, 923374392UL, 237254804UL, 3827063239UL, 3483118065UL, 677187089UL, 2263405553UL, 1020639813UL, 2131401627UL, 4167855065UL, 1892382552UL, 3382265961UL, 1887858126UL, 1599293552UL, 2389387938UL, 4153928364UL, 3440586186UL, 2096265248UL, 1834631738UL, 1585275126UL, 3348317504UL, 711626863UL, 3267338158UL, 4095227658UL, 589002062UL, 3125839176UL, 1190761134UL, 3823062902UL, 3566494128UL, +3914066872UL, 1320578396UL, 3844456625UL, 3240858503UL, 1081015168UL, 4148374722UL, 258762412UL, 589447946UL, 4034899335UL, 733926790UL, 3520260556UL, 4290301810UL, 3202263729UL, 2130442867UL, 3472026294UL, 3518018860UL, 2904238635UL, 3458685425UL, 253769320UL, 1294634949UL, 3977318486UL, 2517006218UL, 702365700UL, 3100107703UL, 1988900647UL, 2936479173UL, 3227096174UL, 969926974UL, 477065277UL, 3746094733UL, 214260739UL, 3868449115UL, +2890740482UL, 52055911UL, 952871363UL, 1216985499UL, 2857823043UL, 1079370138UL, 2820619262UL, 1260334069UL, 2420035836UL, 1843837226UL, 701108525UL, 2066128794UL, 3590716427UL, 537257045UL, 1202524172UL, 2900214585UL, 2261931254UL, 3644831936UL, 3243426619UL, 2113758468UL, 3143067452UL, 3937339872UL, 3164955857UL, 4082645339UL, 3987431298UL, 1680728882UL, 3304461891UL, 204979344UL, 1674764841UL, 2684386058UL, 689425572UL, 2649553051UL, +2534954734UL, 4252100558UL, 3511996574UL, 865432399UL, 3777379050UL, 1502035091UL, 302442688UL, 970989610UL, 1282312650UL, 1795212504UL, 1507727159UL, 672678623UL, 3080995547UL, 976003271UL, 2810951967UL, 441159654UL, 832039862UL, 2670291295UL, 726554843UL, 3317253399UL, 645344032UL, 2921087914UL, 3039207936UL, 1325395107UL, 1431934790UL, 737962654UL, 2859693559UL, 2452474228UL, 3876486226UL, 555655767UL, 3321631011UL, 641506549UL, +712394572UL, 931322445UL, 3691485988UL, 77755644UL, 3585967569UL, 1546642657UL, 1074481665UL, 1211742891UL, 2405208503UL, 1015438825UL, 3187019083UL, 2194891243UL, 1305917012UL, 3737279586UL, 2633137983UL, 1924729261UL, 72781059UL, 1412697099UL, 3828782214UL, 1637665425UL, 4170514983UL, 2248277352UL, 3793164712UL, 2365683667UL, 1287488796UL, 3240061130UL, 2411573225UL, 3237771995UL, 901649504UL, 4107276625UL, 1613775409UL, 741888560UL, +332459303UL, 850991886UL, 3249391248UL, 3550484151UL, 3689717953UL, 233288631UL, 2496730550UL, 3221264250UL, 3172144573UL, 1429937065UL, 1776357872UL, 1084763904UL, 1993209913UL, 4142869218UL, 3130780078UL, 18180577UL, 2819625557UL, 1978393449UL, 372704074UL, 3919523286UL, 1777756963UL, 188652529UL, 411213996UL, 62282979UL, 3775037518UL, 2534579861UL, 2966280971UL, 3863833471UL, 3228893189UL, 3123894696UL, 362579125UL, 1232030882UL, +575379775UL, 1019196436UL, 1914161190UL, 3649246842UL, 2192095564UL, 2368224476UL, 138396720UL, 1299868479UL, 507152626UL, 2129033575UL, 3801624222UL, 623352301UL, 1551535796UL, 3848329776UL, 2727905150UL, 1109499603UL, 3222756581UL, 3914846131UL, 3207366497UL, 3216028717UL, 3712661572UL, 1970542UL, 1320230637UL, 2583706801UL, 1341029904UL, 1903168049UL, 1244252579UL, 1885511879UL, 2426625042UL, 3082846847UL, 3858784104UL, 2263210027UL, +130350645UL, 956540733UL, 776729371UL, 2266749094UL, 2220603773UL, 2556170531UL, 263980324UL, 802194348UL, 697108594UL, 3634984969UL, 4251738712UL, 1831444758UL, 1209156358UL, 3089957258UL, 4195548426UL, 3641578987UL, 990686800UL, 2391278490UL, 2233755358UL, 1739784005UL, 2458544650UL, 340925249UL, 2442887806UL, 3503407512UL, 3058778909UL, 3619026333UL, 2289286518UL, 1296212011UL, 3879317178UL, 1210295163UL, 3113210467UL, 1578990986UL, +641384071UL, 2437977832UL, 1689385197UL, 1323268226UL, 861337916UL, 3532905860UL, 3735971843UL, 2294673483UL, 1032787575UL, 1868992735UL, 4260308791UL, 2091311463UL, 2354047234UL, 1005300697UL, 29821726UL, 2790044161UL, 3154591207UL, 1370229266UL, 3464848205UL, 3855301526UL, 544374401UL, 101012897UL, 4214903025UL, 1310520049UL, 14884434UL, 1438288148UL, 2118574986UL, 2360002070UL, 512167778UL, 4186534704UL, 3633828199UL, 493600836UL, +}, +{ +2932801042UL, 4101748508UL, 3363559072UL, 1213475638UL, 2400369070UL, 1726749444UL, 3175844814UL, 2600020277UL, 3779799804UL, 1886667522UL, 1228105891UL, 589138388UL, 3960459504UL, 450669757UL, 3773736740UL, 2107201112UL, 1437834675UL, 3618095315UL, 3662453347UL, 968349971UL, 1891706458UL, 2333451375UL, 4242907074UL, 3265111057UL, 3648168902UL, 4137035018UL, 105573058UL, 2075999861UL, 1053920954UL, 3768713177UL, 1836088599UL, 2015103258UL, +2649187541UL, 2717894301UL, 534937136UL, 3492326400UL, 2406499346UL, 617315838UL, 1384748442UL, 519804615UL, 524657043UL, 832148261UL, 156272480UL, 394759604UL, 2428809631UL, 3401589884UL, 2588359262UL, 3826333418UL, 2427993050UL, 3254067543UL, 2570694144UL, 2876613091UL, 2883884893UL, 613070434UL, 1599903665UL, 3476967713UL, 1729385632UL, 207879231UL, 1256308247UL, 2538975486UL, 2550001448UL, 1820975095UL, 915640692UL, 1633749116UL, +1294669585UL, 3257901643UL, 3193347552UL, 3369630539UL, 285165240UL, 2337727802UL, 1854640523UL, 1034379307UL, 1206304638UL, 889104297UL, 3084078942UL, 3485609519UL, 3903898589UL, 4274630316UL, 3290195566UL, 2071163950UL, 775170461UL, 551343738UL, 164916146UL, 1678786363UL, 123960948UL, 2721608023UL, 3463122611UL, 1525791510UL, 1531697627UL, 1457848578UL, 665433501UL, 1784274031UL, 3436850186UL, 3976095421UL, 383031580UL, 2146948399UL, +3137780800UL, 410458873UL, 381977170UL, 4264728702UL, 1515223147UL, 3358033956UL, 139804933UL, 438534588UL, 901342240UL, 1536972976UL, 184570377UL, 681864510UL, 844333847UL, 2515362910UL, 917461167UL, 2538721219UL, 4268394152UL, 680292330UL, 3420438710UL, 3784725677UL, 1983802086UL, 4165891809UL, 2369490764UL, 3808530114UL, 3391499460UL, 2509287180UL, 970129219UL, 2492785859UL, 3611863290UL, 1303524794UL, 2991964551UL, 1828774928UL, +3950385781UL, 3251583775UL, 14901408UL, 1890180396UL, 1306701779UL, 3161784071UL, 637842485UL, 2830070006UL, 3867491336UL, 1594948357UL, 2579795132UL, 479188700UL, 806498245UL, 3905876458UL, 3499065005UL, 3168076042UL, 769094339UL, 3769363696UL, 1241457026UL, 1073618847UL, 251335726UL, 2574341631UL, 2534047421UL, 3151952274UL, 534046859UL, 3264754113UL, 1325368288UL, 2131927230UL, 3229420672UL, 336348290UL, 3768781638UL, 2593952436UL, +849969290UL, 2932801042UL, 4101748508UL, 3363559072UL, 1213475638UL, 1710895496UL, 1726749444UL, 3175844814UL, 2600020277UL, 3779799804UL, 4044580435UL, 1228105891UL, 589138388UL, 3960459504UL, 450669757UL, 4253882965UL, 2107201112UL, 1437834675UL, 3618095315UL, 3662453347UL, 3625360228UL, 1891706458UL, 2333451375UL, 4242907074UL, 3265111057UL, 3638586625UL, 4137035018UL, 105573058UL, 2075999861UL, 1053920954UL, 3014895241UL, 1836088599UL, +2015103258UL, 2649187541UL, 2717894301UL, 701652515UL, 3492326400UL, 2406499346UL, 617315838UL, 1384748442UL, 1142040801UL, 524657043UL, 832148261UL, 156272480UL, 394759604UL, 944890908UL, 3401589884UL, 2588359262UL, 3826333418UL, 2427993050UL, 337891051UL, 2570694144UL, 2876613091UL, 2883884893UL, 613070434UL, 659063916UL, 3476967713UL, 1729385632UL, 207879231UL, 1256308247UL, 311608860UL, 2550001448UL, 1820975095UL, 915640692UL, +1633749116UL, 1772334285UL, 3257901643UL, 3193347552UL, 3369630539UL, 285165240UL, 2627441892UL, 1854640523UL, 1034379307UL, 1206304638UL, 889104297UL, 2289660031UL, 3485609519UL, 3903898589UL, 4274630316UL, 3290195566UL, 3572160580UL, 775170461UL, 551343738UL, 164916146UL, 1678786363UL, 3109616684UL, 2721608023UL, 3463122611UL, 1525791510UL, 1531697627UL, 3660976089UL, 665433501UL, 1784274031UL, 3436850186UL, 3976095421UL, 1696775162UL, +2146948399UL, 3137780800UL, 410458873UL, 381977170UL, 1669455215UL, 1515223147UL, 3358033956UL, 139804933UL, 438534588UL, 1738237971UL, 1536972976UL, 184570377UL, 681864510UL, 844333847UL, 770765754UL, 917461167UL, 2538721219UL, 4268394152UL, 680292330UL, 1993152157UL, 3784725677UL, 1983802086UL, 4165891809UL, 2369490764UL, 3411542022UL, 3391499460UL, 2509287180UL, 970129219UL, 2492785859UL, 1869391890UL, 1303524794UL, 2991964551UL, +1828774928UL, 3950385781UL, 4139486157UL, 14901408UL, 1890180396UL, 1306701779UL, 3161784071UL, 174545194UL, 2830070006UL, 3867491336UL, 1594948357UL, 2579795132UL, 4132973523UL, 806498245UL, 3905876458UL, 3499065005UL, 3168076042UL, 538076966UL, 3769363696UL, 1241457026UL, 1073618847UL, 251335726UL, 2085586137UL, 2534047421UL, 3151952274UL, 534046859UL, 3264754113UL, 643987981UL, 2131927230UL, 3229420672UL, 336348290UL, 3768781638UL, +3468816701UL, 849969290UL, 2932801042UL, 4101748508UL, 3363559072UL, 2524943673UL, 1710895496UL, 1726749444UL, 3175844814UL, 2600020277UL, 3677241699UL, 4044580435UL, 1228105891UL, 589138388UL, 3960459504UL, 3903077887UL, 4253882965UL, 2107201112UL, 1437834675UL, 3618095315UL, 2362822379UL, 3625360228UL, 1891706458UL, 2333451375UL, 4242907074UL, 2289503940UL, 3638586625UL, 4137035018UL, 105573058UL, 2075999861UL, 1299938293UL, 3014895241UL, +1836088599UL, 2015103258UL, 2649187541UL, 3727003343UL, 701652515UL, 3492326400UL, 2406499346UL, 617315838UL, 1627975589UL, 1142040801UL, 524657043UL, 832148261UL, 156272480UL, 3658645823UL, 944890908UL, 3401589884UL, 2588359262UL, 3826333418UL, 3645806126UL, 337891051UL, 2570694144UL, 2876613091UL, 2883884893UL, 2866570997UL, 659063916UL, 3476967713UL, 1729385632UL, 207879231UL, 298556768UL, 311608860UL, 2550001448UL, 1820975095UL, +915640692UL, 1014996737UL, 1772334285UL, 3257901643UL, 3193347552UL, 3369630539UL, 96395889UL, 2627441892UL, 1854640523UL, 1034379307UL, 1206304638UL, 2546521293UL, 2289660031UL, 3485609519UL, 3903898589UL, 4274630316UL, 2360048518UL, 3572160580UL, 775170461UL, 551343738UL, 164916146UL, 2068601014UL, 3109616684UL, 2721608023UL, 3463122611UL, 1525791510UL, 1228011534UL, 3660976089UL, 665433501UL, 1784274031UL, 3436850186UL, 1620580129UL, +1696775162UL, 2146948399UL, 3137780800UL, 410458873UL, 2753059283UL, 1669455215UL, 1515223147UL, 3358033956UL, 139804933UL, 2786429190UL, 1738237971UL, 1536972976UL, 184570377UL, 681864510UL, 358796749UL, 770765754UL, 917461167UL, 2538721219UL, 4268394152UL, 2355846025UL, 1993152157UL, 3784725677UL, 1983802086UL, 4165891809UL, 360259050UL, 3411542022UL, 3391499460UL, 2509287180UL, 970129219UL, 4055494275UL, 1869391890UL, 1303524794UL, +2991964551UL, 1828774928UL, 3508750618UL, 4139486157UL, 14901408UL, 1890180396UL, 1306701779UL, 3684762156UL, 174545194UL, 2830070006UL, 3867491336UL, 1594948357UL, 702781070UL, 4132973523UL, 806498245UL, 3905876458UL, 3499065005UL, 1372989388UL, 538076966UL, 3769363696UL, 1241457026UL, 1073618847UL, 3579114424UL, 2085586137UL, 2534047421UL, 3151952274UL, 534046859UL, 1882037168UL, 643987981UL, 2131927230UL, 3229420672UL, 336348290UL, +555833786UL, 3468816701UL, 849969290UL, 2932801042UL, 4101748508UL, 1095934625UL, 2524943673UL, 1710895496UL, 1726749444UL, 3175844814UL, 2287140069UL, 3677241699UL, 4044580435UL, 1228105891UL, 589138388UL, 1596938176UL, 3903077887UL, 4253882965UL, 2107201112UL, 1437834675UL, 2605388022UL, 2362822379UL, 3625360228UL, 1891706458UL, 2333451375UL, 174003035UL, 2289503940UL, 3638586625UL, 4137035018UL, 105573058UL, 697023108UL, 1299938293UL, +3014895241UL, 1836088599UL, 2015103258UL, 4128339205UL, 3727003343UL, 701652515UL, 3492326400UL, 2406499346UL, 426422678UL, 1627975589UL, 1142040801UL, 524657043UL, 832148261UL, 2461054373UL, 3658645823UL, 944890908UL, 3401589884UL, 2588359262UL, 3184255074UL, 3645806126UL, 337891051UL, 2570694144UL, 2876613091UL, 187151044UL, 2866570997UL, 659063916UL, 3476967713UL, 1729385632UL, 2811989057UL, 298556768UL, 311608860UL, 2550001448UL, +1820975095UL, 1806779934UL, 1014996737UL, 1772334285UL, 3257901643UL, 3193347552UL, 2145947779UL, 96395889UL, 2627441892UL, 1854640523UL, 1034379307UL, 2748996070UL, 2546521293UL, 2289660031UL, 3485609519UL, 3903898589UL, 452746826UL, 2360048518UL, 3572160580UL, 775170461UL, 551343738UL, 669098691UL, 2068601014UL, 3109616684UL, 2721608023UL, 3463122611UL, 22889155UL, 1228011534UL, 3660976089UL, 665433501UL, 1784274031UL, 227705324UL, +1620580129UL, 1696775162UL, 2146948399UL, 3137780800UL, 4267814323UL, 2753059283UL, 1669455215UL, 1515223147UL, 3358033956UL, 2806778033UL, 2786429190UL, 1738237971UL, 1536972976UL, 184570377UL, 3310279262UL, 358796749UL, 770765754UL, 917461167UL, 2538721219UL, 2247224091UL, 2355846025UL, 1993152157UL, 3784725677UL, 1983802086UL, 2399541755UL, 360259050UL, 3411542022UL, 3391499460UL, 2509287180UL, 2335541531UL, 4055494275UL, 1869391890UL, +1303524794UL, 2991964551UL, 392724462UL, 3508750618UL, 4139486157UL, 14901408UL, 1890180396UL, 2513331299UL, 3684762156UL, 174545194UL, 2830070006UL, 3867491336UL, 1887131931UL, 702781070UL, 4132973523UL, 806498245UL, 3905876458UL, 2263606492UL, 1372989388UL, 538076966UL, 3769363696UL, 1241457026UL, 170472774UL, 3579114424UL, 2085586137UL, 2534047421UL, 3151952274UL, 1488165272UL, 1882037168UL, 643987981UL, 2131927230UL, 3229420672UL, +1158405862UL, 1469009373UL, 4117356830UL, 4063868500UL, 2006417445UL, 2976934394UL, 2683607933UL, 3174943272UL, 2099974138UL, 2250858961UL, 205251124UL, 84783688UL, 1551294676UL, 224349432UL, 1893741756UL, 3680361724UL, 561624088UL, 251553631UL, 1654870642UL, 2195380145UL, 866503297UL, 1814519294UL, 905566144UL, 727763043UL, 1910034093UL, 1876316198UL, 3031876716UL, 2783769690UL, 2649650479UL, 2024342098UL, 2170858649UL, 2186613759UL, +2688207487UL, 881594599UL, 1010953695UL, 2768977700UL, 3341020856UL, 2446339960UL, 2648757147UL, 1317083878UL, 3301541769UL, 3574285525UL, 3331294407UL, 712581268UL, 3612116700UL, 3510601489UL, 2569879282UL, 3772968052UL, 332485239UL, 280920979UL, 716834274UL, 1863623285UL, 654670865UL, 1706917935UL, 1598315563UL, 2486805657UL, 2295746319UL, 635609792UL, 55141757UL, 4089183045UL, 145257162UL, 1921789879UL, 2833550514UL, 3798992859UL, +1532875864UL, 3668053062UL, 2749191097UL, 3412220447UL, 3383752088UL, 3191842833UL, 4167387125UL, 2438940746UL, 1453011669UL, 2747298308UL, 1057877757UL, 399006034UL, 132680506UL, 31671249UL, 1070386969UL, 2415113777UL, 3720335676UL, 3416473189UL, 1476808053UL, 785398955UL, 3335661823UL, 315496929UL, 1421907623UL, 1802371914UL, 3049258946UL, 1773374729UL, 382902076UL, 3262814446UL, 1774244917UL, 4064677234UL, 2281551331UL, 3019541390UL, +2445483046UL, 3059154103UL, 2147309319UL, 566587847UL, 216051987UL, 521013398UL, 2721884570UL, 3325443529UL, 1921922591UL, 1643064709UL, 1155714395UL, 1737031844UL, 2117338012UL, 1876262536UL, 3589621009UL, 3800806613UL, 1102108318UL, 1376914700UL, 539544394UL, 799741508UL, 1192097712UL, 2894663754UL, 567276527UL, 106814343UL, 3985577014UL, 422246623UL, 126568764UL, 4008211389UL, 4037889581UL, 2185357423UL, 2239644921UL, 2116447019UL, +1249715620UL, 2095747493UL, 4063243162UL, 3059330950UL, 1045571624UL, 1150656233UL, 3024439196UL, 3981904623UL, 1743764595UL, 4220253496UL, 3322182853UL, 2132911849UL, 2074342674UL, 198749193UL, 574306951UL, 3563262292UL, 3832626833UL, 2349475213UL, 182567249UL, 1530390173UL, 2066055611UL, 2609802571UL, 1392638962UL, 1495846580UL, 2356952332UL, 4029921749UL, 1731839848UL, 527880959UL, 1204112231UL, 938004695UL, 294300378UL, 1855457892UL, +}, +{ +1438083560UL, 1727969469UL, 703174449UL, 1296281193UL, 1386452240UL, 3304170302UL, 3048300096UL, 277697908UL, 2675939661UL, 3382564518UL, 1639425457UL, 2210719281UL, 3173605115UL, 1685375802UL, 1317820682UL, 1960916541UL, 4230888182UL, 1924357010UL, 3322827982UL, 1663716994UL, 976583570UL, 4146230815UL, 525755678UL, 3608894680UL, 1715438458UL, 1519478303UL, 2845291872UL, 1115405802UL, 2468673244UL, 2289739992UL, 46988928UL, 2559411080UL, +2466723374UL, 2995303634UL, 3871022237UL, 1794652692UL, 2424766096UL, 2849910020UL, 978542234UL, 1667051478UL, 3393290740UL, 1508376445UL, 4090541488UL, 1314139749UL, 1271060027UL, 3272019878UL, 4032394060UL, 757805987UL, 619143288UL, 1165760536UL, 225099797UL, 871754591UL, 2065691940UL, 2016593817UL, 1705071529UL, 2559080067UL, 2048856253UL, 3217759224UL, 2691334730UL, 1576829868UL, 3356759591UL, 1570481357UL, 1097065360UL, 852561431UL, +3559721965UL, 1403648739UL, 1772347635UL, 1196457607UL, 462142253UL, 761176322UL, 2209893444UL, 217724244UL, 3356132814UL, 2838131962UL, 3571552868UL, 1197135963UL, 3239010986UL, 2612283238UL, 2606429155UL, 2194090162UL, 4256137634UL, 935551404UL, 3057660021UL, 866672836UL, 1119670384UL, 1757615349UL, 649402076UL, 2814108193UL, 3312658713UL, 2627947214UL, 2982267121UL, 486762785UL, 2746076238UL, 2134737126UL, 4106010468UL, 3151832629UL, +2419694200UL, 2803791741UL, 2100250718UL, 3171079849UL, 1874606681UL, 1884940331UL, 926257211UL, 1940082331UL, 1024435222UL, 609478334UL, 2501896844UL, 518643063UL, 4285619138UL, 1054300997UL, 4024681853UL, 2287236199UL, 2891891855UL, 1519666047UL, 1919500932UL, 3880316442UL, 1994336737UL, 1025147784UL, 3433493260UL, 1647319600UL, 3298872174UL, 3744513628UL, 2918990402UL, 2649193481UL, 234630674UL, 1963357481UL, 1118148435UL, 2658522312UL, +2563194501UL, 2238556876UL, 1210050812UL, 748709882UL, 3894824022UL, 2575692519UL, 436044710UL, 3465014792UL, 3686094502UL, 2963529475UL, 3251316066UL, 2834750227UL, 789471563UL, 853201732UL, 4119014483UL, 1312738151UL, 2018934495UL, 542908921UL, 732294449UL, 2519981401UL, 1663929229UL, 4041419972UL, 3038382188UL, 3182489020UL, 353453260UL, 4074472601UL, 1187952022UL, 2118553383UL, 1068338764UL, 3699144039UL, 3129056770UL, 1419222328UL, +2666827910UL, 1438083560UL, 1727969469UL, 703174449UL, 1296281193UL, 2134413940UL, 3304170302UL, 3048300096UL, 277697908UL, 2675939661UL, 3817858752UL, 1639425457UL, 2210719281UL, 3173605115UL, 1685375802UL, 2587083472UL, 1960916541UL, 4230888182UL, 1924357010UL, 3322827982UL, 2582901426UL, 976583570UL, 4146230815UL, 525755678UL, 3608894680UL, 524232549UL, 1519478303UL, 2845291872UL, 1115405802UL, 2468673244UL, 591800699UL, 46988928UL, +2559411080UL, 2466723374UL, 2995303634UL, 2307625850UL, 1794652692UL, 2424766096UL, 2849910020UL, 978542234UL, 1284927074UL, 3393290740UL, 1508376445UL, 4090541488UL, 1314139749UL, 3508281898UL, 3272019878UL, 4032394060UL, 757805987UL, 619143288UL, 1846615167UL, 225099797UL, 871754591UL, 2065691940UL, 2016593817UL, 1193455869UL, 2559080067UL, 2048856253UL, 3217759224UL, 2691334730UL, 2665708717UL, 3356759591UL, 1570481357UL, 1097065360UL, +852561431UL, 1652864273UL, 1403648739UL, 1772347635UL, 1196457607UL, 462142253UL, 1222855287UL, 2209893444UL, 217724244UL, 3356132814UL, 2838131962UL, 3060983219UL, 1197135963UL, 3239010986UL, 2612283238UL, 2606429155UL, 4171729370UL, 4256137634UL, 935551404UL, 3057660021UL, 866672836UL, 75618353UL, 1757615349UL, 649402076UL, 2814108193UL, 3312658713UL, 3975515213UL, 2982267121UL, 486762785UL, 2746076238UL, 2134737126UL, 3251020123UL, +3151832629UL, 2419694200UL, 2803791741UL, 2100250718UL, 624531676UL, 1874606681UL, 1884940331UL, 926257211UL, 1940082331UL, 3678479182UL, 609478334UL, 2501896844UL, 518643063UL, 4285619138UL, 1725899979UL, 4024681853UL, 2287236199UL, 2891891855UL, 1519666047UL, 702508101UL, 3880316442UL, 1994336737UL, 1025147784UL, 3433493260UL, 4212959134UL, 3298872174UL, 3744513628UL, 2918990402UL, 2649193481UL, 1782150764UL, 1963357481UL, 1118148435UL, +2658522312UL, 2563194501UL, 3330122355UL, 1210050812UL, 748709882UL, 3894824022UL, 2575692519UL, 637240921UL, 3465014792UL, 3686094502UL, 2963529475UL, 3251316066UL, 1510158901UL, 789471563UL, 853201732UL, 4119014483UL, 1312738151UL, 3018953017UL, 542908921UL, 732294449UL, 2519981401UL, 1663929229UL, 2696317636UL, 3038382188UL, 3182489020UL, 353453260UL, 4074472601UL, 4249950407UL, 2118553383UL, 1068338764UL, 3699144039UL, 3129056770UL, +2334590922UL, 2666827910UL, 1438083560UL, 1727969469UL, 703174449UL, 1679528518UL, 2134413940UL, 3304170302UL, 3048300096UL, 277697908UL, 3417107827UL, 3817858752UL, 1639425457UL, 2210719281UL, 3173605115UL, 1858788112UL, 2587083472UL, 1960916541UL, 4230888182UL, 1924357010UL, 3692988029UL, 2582901426UL, 976583570UL, 4146230815UL, 525755678UL, 1122319464UL, 524232549UL, 1519478303UL, 2845291872UL, 1115405802UL, 205855120UL, 591800699UL, +46988928UL, 2559411080UL, 2466723374UL, 3358512221UL, 2307625850UL, 1794652692UL, 2424766096UL, 2849910020UL, 2865273283UL, 1284927074UL, 3393290740UL, 1508376445UL, 4090541488UL, 2453941323UL, 3508281898UL, 3272019878UL, 4032394060UL, 757805987UL, 3191753865UL, 1846615167UL, 225099797UL, 871754591UL, 2065691940UL, 1301630578UL, 1193455869UL, 2559080067UL, 2048856253UL, 3217759224UL, 3858428004UL, 2665708717UL, 3356759591UL, 1570481357UL, +1097065360UL, 3550687085UL, 1652864273UL, 1403648739UL, 1772347635UL, 1196457607UL, 2158802672UL, 1222855287UL, 2209893444UL, 217724244UL, 3356132814UL, 1954043011UL, 3060983219UL, 1197135963UL, 3239010986UL, 2612283238UL, 2156334822UL, 4171729370UL, 4256137634UL, 935551404UL, 3057660021UL, 3331206175UL, 75618353UL, 1757615349UL, 649402076UL, 2814108193UL, 1313890357UL, 3975515213UL, 2982267121UL, 486762785UL, 2746076238UL, 2023213803UL, +3251020123UL, 3151832629UL, 2419694200UL, 2803791741UL, 392313450UL, 624531676UL, 1874606681UL, 1884940331UL, 926257211UL, 3369012310UL, 3678479182UL, 609478334UL, 2501896844UL, 518643063UL, 3638013610UL, 1725899979UL, 4024681853UL, 2287236199UL, 2891891855UL, 429282096UL, 702508101UL, 3880316442UL, 1994336737UL, 1025147784UL, 1217486411UL, 4212959134UL, 3298872174UL, 3744513628UL, 2918990402UL, 1279832521UL, 1782150764UL, 1963357481UL, +1118148435UL, 2658522312UL, 2379123622UL, 3330122355UL, 1210050812UL, 748709882UL, 3894824022UL, 3987054169UL, 637240921UL, 3465014792UL, 3686094502UL, 2963529475UL, 2167876400UL, 1510158901UL, 789471563UL, 853201732UL, 4119014483UL, 1746447311UL, 3018953017UL, 542908921UL, 732294449UL, 2519981401UL, 1908715414UL, 2696317636UL, 3038382188UL, 3182489020UL, 353453260UL, 2132930364UL, 4249950407UL, 2118553383UL, 1068338764UL, 3699144039UL, +433893434UL, 2334590922UL, 2666827910UL, 1438083560UL, 1727969469UL, 1154725669UL, 1679528518UL, 2134413940UL, 3304170302UL, 3048300096UL, 31944135UL, 3417107827UL, 3817858752UL, 1639425457UL, 2210719281UL, 4203237786UL, 1858788112UL, 2587083472UL, 1960916541UL, 4230888182UL, 2712081548UL, 3692988029UL, 2582901426UL, 976583570UL, 4146230815UL, 3948659885UL, 1122319464UL, 524232549UL, 1519478303UL, 2845291872UL, 2881616509UL, 205855120UL, +591800699UL, 46988928UL, 2559411080UL, 3645011109UL, 3358512221UL, 2307625850UL, 1794652692UL, 2424766096UL, 3667888476UL, 2865273283UL, 1284927074UL, 3393290740UL, 1508376445UL, 1605429636UL, 2453941323UL, 3508281898UL, 3272019878UL, 4032394060UL, 3904681057UL, 3191753865UL, 1846615167UL, 225099797UL, 871754591UL, 696516502UL, 1301630578UL, 1193455869UL, 2559080067UL, 2048856253UL, 2589248412UL, 3858428004UL, 2665708717UL, 3356759591UL, +1570481357UL, 1884333722UL, 3550687085UL, 1652864273UL, 1403648739UL, 1772347635UL, 3418430008UL, 2158802672UL, 1222855287UL, 2209893444UL, 217724244UL, 4164333189UL, 1954043011UL, 3060983219UL, 1197135963UL, 3239010986UL, 2300947859UL, 2156334822UL, 4171729370UL, 4256137634UL, 935551404UL, 1258856668UL, 3331206175UL, 75618353UL, 1757615349UL, 649402076UL, 772455867UL, 1313890357UL, 3975515213UL, 2982267121UL, 486762785UL, 3671941628UL, +2023213803UL, 3251020123UL, 3151832629UL, 2419694200UL, 4264015999UL, 392313450UL, 624531676UL, 1874606681UL, 1884940331UL, 2460787316UL, 3369012310UL, 3678479182UL, 609478334UL, 2501896844UL, 2131090271UL, 3638013610UL, 1725899979UL, 4024681853UL, 2287236199UL, 455349830UL, 429282096UL, 702508101UL, 3880316442UL, 1994336737UL, 1727894434UL, 1217486411UL, 4212959134UL, 3298872174UL, 3744513628UL, 1120563681UL, 1279832521UL, 1782150764UL, +1963357481UL, 1118148435UL, 3362151087UL, 2379123622UL, 3330122355UL, 1210050812UL, 748709882UL, 2506587900UL, 3987054169UL, 637240921UL, 3465014792UL, 3686094502UL, 1265652315UL, 2167876400UL, 1510158901UL, 789471563UL, 853201732UL, 3472479264UL, 1746447311UL, 3018953017UL, 542908921UL, 732294449UL, 659090240UL, 1908715414UL, 2696317636UL, 3038382188UL, 3182489020UL, 174113867UL, 2132930364UL, 4249950407UL, 2118553383UL, 1068338764UL, +4115132848UL, 1714842877UL, 1153237667UL, 1015943026UL, 2014412384UL, 2478393613UL, 1340079052UL, 167685322UL, 1848482402UL, 3252973254UL, 638064461UL, 1599254200UL, 2525050247UL, 2813349060UL, 2415037971UL, 3274852801UL, 3415369586UL, 3216396500UL, 3147792606UL, 438338168UL, 2326605175UL, 2846648724UL, 3871841623UL, 287840506UL, 3218295001UL, 2562000356UL, 574276928UL, 418096348UL, 1798854554UL, 1913561074UL, 2025706546UL, 41907788UL, +3535708035UL, 1240819558UL, 208810147UL, 4062740265UL, 451865782UL, 2652508890UL, 3579720859UL, 1243967909UL, 2191937647UL, 2473947838UL, 1847359263UL, 2496539569UL, 4061942257UL, 1372849161UL, 2016697844UL, 1827460131UL, 1135062647UL, 1255573479UL, 3506657283UL, 3699699807UL, 3087913374UL, 1196140869UL, 4095306490UL, 830793530UL, 1289366065UL, 3268392251UL, 4119035690UL, 1631012325UL, 3410799501UL, 1470209122UL, 3057922764UL, 2895379380UL, +2654121201UL, 1984999545UL, 2258412956UL, 4267137150UL, 3396740662UL, 2480013857UL, 3845856317UL, 3669454152UL, 2438423716UL, 3191341994UL, 1571280634UL, 1423782557UL, 3279999352UL, 1886288620UL, 205278284UL, 793062897UL, 112852083UL, 69164746UL, 2218046933UL, 4206182754UL, 3021072495UL, 2157753215UL, 2875773583UL, 1453706073UL, 168681204UL, 3905840714UL, 4098714445UL, 3410804508UL, 1737239929UL, 1613207828UL, 2987997090UL, 1869303136UL, +3348561687UL, 3391148819UL, 1680062950UL, 4150476788UL, 2340622122UL, 11331065UL, 2250669421UL, 3003852975UL, 2145739501UL, 1627177260UL, 994260425UL, 1479134620UL, 2315299915UL, 1268765340UL, 285960682UL, 3801150032UL, 3948820512UL, 1677682247UL, 1735541155UL, 1914753931UL, 1965156079UL, 1875233710UL, 681418791UL, 2077804400UL, 1963479724UL, 2447942398UL, 269798686UL, 2740088859UL, 1974178779UL, 3373487761UL, 2879779843UL, 157827737UL, +3855390825UL, 2779173093UL, 2359181541UL, 3508102362UL, 4001266348UL, 3949912729UL, 3232414439UL, 472195874UL, 57835121UL, 1854343116UL, 3020785997UL, 2024437594UL, 2182964208UL, 3379376555UL, 1213864603UL, 307833006UL, 1029130725UL, 545051507UL, 4001695571UL, 2258480284UL, 896286117UL, 355474524UL, 2514583184UL, 2997458384UL, 3278715462UL, 1675341954UL, 3603020014UL, 2318410671UL, 2152785892UL, 4285597912UL, 35655711UL, 2087100216UL, +}, +{ +1671155UL, 472949658UL, 148656515UL, 1640075411UL, 930771231UL, 1601854390UL, 471598090UL, 2013359012UL, 3708325970UL, 1688441844UL, 736452516UL, 100585026UL, 1154373750UL, 4029833741UL, 3409420465UL, 192349301UL, 3804215437UL, 909027311UL, 2896874106UL, 3567276364UL, 1319305666UL, 3858990362UL, 3155018279UL, 3756192170UL, 3567813642UL, 228734829UL, 577956164UL, 2078807284UL, 1005987081UL, 1464380935UL, 112604551UL, 3865074232UL, +3776350052UL, 1112767766UL, 2947509331UL, 910887552UL, 4127297396UL, 851240323UL, 3136588838UL, 1639013085UL, 1154068086UL, 639126620UL, 2501600773UL, 3174842042UL, 3456593672UL, 80596481UL, 126970446UL, 2184239961UL, 1448001095UL, 689252599UL, 1087028487UL, 2905348107UL, 2502009404UL, 2156595397UL, 2149975474UL, 2201723284UL, 3908202640UL, 754508313UL, 2321393187UL, 787043244UL, 2575809693UL, 4172462501UL, 2322897687UL, 1899992264UL, +1854136781UL, 3575249683UL, 2939319477UL, 901605762UL, 676398674UL, 2849283587UL, 2992300101UL, 1513271778UL, 2797164148UL, 1914019034UL, 1889341710UL, 2739211008UL, 1954453463UL, 3279391005UL, 2899313529UL, 1412533980UL, 1291505093UL, 2884603001UL, 564097935UL, 3552741248UL, 2809901827UL, 1263126330UL, 860214490UL, 2168366043UL, 2681035029UL, 3226888214UL, 2902522885UL, 554804421UL, 1571065517UL, 3322453053UL, 4144256215UL, 126415290UL, +980853251UL, 1531963815UL, 3237470129UL, 1465444883UL, 2031491001UL, 2205009469UL, 1046577915UL, 828927962UL, 2170245718UL, 1090142292UL, 1667375106UL, 2522840205UL, 4047872402UL, 3862734726UL, 91588630UL, 3122782857UL, 929883614UL, 694999008UL, 1472139068UL, 1246663706UL, 3500613893UL, 4200173807UL, 186199942UL, 3890621040UL, 229752655UL, 1011692880UL, 2791828564UL, 2677625011UL, 791005643UL, 1754509337UL, 2321492983UL, 3512328605UL, +1294405891UL, 2845189858UL, 434175992UL, 3155484007UL, 2306406482UL, 3197931140UL, 22971924UL, 1521633702UL, 2366802562UL, 399245037UL, 2833224222UL, 2507478835UL, 3231711673UL, 3784114896UL, 1927919696UL, 783802899UL, 3408133710UL, 2278711709UL, 3001078924UL, 1223320630UL, 3246830042UL, 943189685UL, 4062534962UL, 1039971013UL, 2342241593UL, 3551623946UL, 322017346UL, 3585779636UL, 81127429UL, 3549929990UL, 2886997195UL, 1746081951UL, +4169018554UL, 1671155UL, 472949658UL, 148656515UL, 1640075411UL, 3772042754UL, 1601854390UL, 471598090UL, 2013359012UL, 3708325970UL, 321630853UL, 736452516UL, 100585026UL, 1154373750UL, 4029833741UL, 1926754199UL, 192349301UL, 3804215437UL, 909027311UL, 2896874106UL, 1138131968UL, 1319305666UL, 3858990362UL, 3155018279UL, 3756192170UL, 2489094664UL, 228734829UL, 577956164UL, 2078807284UL, 1005987081UL, 2678967510UL, 112604551UL, +3865074232UL, 3776350052UL, 1112767766UL, 626049886UL, 910887552UL, 4127297396UL, 851240323UL, 3136588838UL, 2142891352UL, 1154068086UL, 639126620UL, 2501600773UL, 3174842042UL, 3342870442UL, 80596481UL, 126970446UL, 2184239961UL, 1448001095UL, 3399719246UL, 1087028487UL, 2905348107UL, 2502009404UL, 2156595397UL, 14860817UL, 2201723284UL, 3908202640UL, 754508313UL, 2321393187UL, 90540547UL, 2575809693UL, 4172462501UL, 2322897687UL, +1899992264UL, 56239065UL, 3575249683UL, 2939319477UL, 901605762UL, 676398674UL, 412461711UL, 2992300101UL, 1513271778UL, 2797164148UL, 1914019034UL, 3660190396UL, 2739211008UL, 1954453463UL, 3279391005UL, 2899313529UL, 4193503742UL, 1291505093UL, 2884603001UL, 564097935UL, 3552741248UL, 2124229268UL, 1263126330UL, 860214490UL, 2168366043UL, 2681035029UL, 4086980935UL, 2902522885UL, 554804421UL, 1571065517UL, 3322453053UL, 1821678887UL, +126415290UL, 980853251UL, 1531963815UL, 3237470129UL, 2099629264UL, 2031491001UL, 2205009469UL, 1046577915UL, 828927962UL, 3447807375UL, 1090142292UL, 1667375106UL, 2522840205UL, 4047872402UL, 2255362927UL, 91588630UL, 3122782857UL, 929883614UL, 694999008UL, 4135967848UL, 1246663706UL, 3500613893UL, 4200173807UL, 186199942UL, 4182379872UL, 229752655UL, 1011692880UL, 2791828564UL, 2677625011UL, 397062412UL, 1754509337UL, 2321492983UL, +3512328605UL, 1294405891UL, 1028843071UL, 434175992UL, 3155484007UL, 2306406482UL, 3197931140UL, 3217107401UL, 1521633702UL, 2366802562UL, 399245037UL, 2833224222UL, 76017436UL, 3231711673UL, 3784114896UL, 1927919696UL, 783802899UL, 2157090897UL, 2278711709UL, 3001078924UL, 1223320630UL, 3246830042UL, 1197195551UL, 4062534962UL, 1039971013UL, 2342241593UL, 3551623946UL, 63853850UL, 3585779636UL, 81127429UL, 3549929990UL, 2886997195UL, +1335910186UL, 4169018554UL, 1671155UL, 472949658UL, 148656515UL, 3600963048UL, 3772042754UL, 1601854390UL, 471598090UL, 2013359012UL, 1181513377UL, 321630853UL, 736452516UL, 100585026UL, 1154373750UL, 2323956092UL, 1926754199UL, 192349301UL, 3804215437UL, 909027311UL, 2993842723UL, 1138131968UL, 1319305666UL, 3858990362UL, 3155018279UL, 2288945270UL, 2489094664UL, 228734829UL, 577956164UL, 2078807284UL, 1924581773UL, 2678967510UL, +112604551UL, 3865074232UL, 3776350052UL, 2127459222UL, 626049886UL, 910887552UL, 4127297396UL, 851240323UL, 547797457UL, 2142891352UL, 1154068086UL, 639126620UL, 2501600773UL, 2391654498UL, 3342870442UL, 80596481UL, 126970446UL, 2184239961UL, 824575673UL, 3399719246UL, 1087028487UL, 2905348107UL, 2502009404UL, 740197255UL, 14860817UL, 2201723284UL, 3908202640UL, 754508313UL, 4133980283UL, 90540547UL, 2575809693UL, 4172462501UL, +2322897687UL, 831222037UL, 56239065UL, 3575249683UL, 2939319477UL, 901605762UL, 1998632674UL, 412461711UL, 2992300101UL, 1513271778UL, 2797164148UL, 969149327UL, 3660190396UL, 2739211008UL, 1954453463UL, 3279391005UL, 1267183547UL, 4193503742UL, 1291505093UL, 2884603001UL, 564097935UL, 3378471970UL, 2124229268UL, 1263126330UL, 860214490UL, 2168366043UL, 867190357UL, 4086980935UL, 2902522885UL, 554804421UL, 1571065517UL, 497580674UL, +1821678887UL, 126415290UL, 980853251UL, 1531963815UL, 2259090956UL, 2099629264UL, 2031491001UL, 2205009469UL, 1046577915UL, 30458798UL, 3447807375UL, 1090142292UL, 1667375106UL, 2522840205UL, 748518306UL, 2255362927UL, 91588630UL, 3122782857UL, 929883614UL, 1016302700UL, 4135967848UL, 1246663706UL, 3500613893UL, 4200173807UL, 4149573092UL, 4182379872UL, 229752655UL, 1011692880UL, 2791828564UL, 2890696349UL, 397062412UL, 1754509337UL, +2321492983UL, 3512328605UL, 3005148093UL, 1028843071UL, 434175992UL, 3155484007UL, 2306406482UL, 1417194283UL, 3217107401UL, 1521633702UL, 2366802562UL, 399245037UL, 665389310UL, 76017436UL, 3231711673UL, 3784114896UL, 1927919696UL, 37004463UL, 2157090897UL, 2278711709UL, 3001078924UL, 1223320630UL, 1281902891UL, 1197195551UL, 4062534962UL, 1039971013UL, 2342241593UL, 836721481UL, 63853850UL, 3585779636UL, 81127429UL, 3549929990UL, +2541553478UL, 1335910186UL, 4169018554UL, 1671155UL, 472949658UL, 2086411677UL, 3600963048UL, 3772042754UL, 1601854390UL, 471598090UL, 3297781744UL, 1181513377UL, 321630853UL, 736452516UL, 100585026UL, 2296508711UL, 2323956092UL, 1926754199UL, 192349301UL, 3804215437UL, 314399580UL, 2993842723UL, 1138131968UL, 1319305666UL, 3858990362UL, 584746730UL, 2288945270UL, 2489094664UL, 228734829UL, 577956164UL, 3868048239UL, 1924581773UL, +2678967510UL, 112604551UL, 3865074232UL, 2091950990UL, 2127459222UL, 626049886UL, 910887552UL, 4127297396UL, 2494071916UL, 547797457UL, 2142891352UL, 1154068086UL, 639126620UL, 1159991153UL, 2391654498UL, 3342870442UL, 80596481UL, 126970446UL, 2276453681UL, 824575673UL, 3399719246UL, 1087028487UL, 2905348107UL, 874278393UL, 740197255UL, 14860817UL, 2201723284UL, 3908202640UL, 1189317351UL, 4133980283UL, 90540547UL, 2575809693UL, +4172462501UL, 746169572UL, 831222037UL, 56239065UL, 3575249683UL, 2939319477UL, 4148988439UL, 1998632674UL, 412461711UL, 2992300101UL, 1513271778UL, 1078781767UL, 969149327UL, 3660190396UL, 2739211008UL, 1954453463UL, 369522045UL, 1267183547UL, 4193503742UL, 1291505093UL, 2884603001UL, 2820350438UL, 3378471970UL, 2124229268UL, 1263126330UL, 860214490UL, 793306335UL, 867190357UL, 4086980935UL, 2902522885UL, 554804421UL, 1472297125UL, +497580674UL, 1821678887UL, 126415290UL, 980853251UL, 1628231485UL, 2259090956UL, 2099629264UL, 2031491001UL, 2205009469UL, 2562996945UL, 30458798UL, 3447807375UL, 1090142292UL, 1667375106UL, 3513508401UL, 748518306UL, 2255362927UL, 91588630UL, 3122782857UL, 435869165UL, 1016302700UL, 4135967848UL, 1246663706UL, 3500613893UL, 4156110437UL, 4149573092UL, 4182379872UL, 229752655UL, 1011692880UL, 1150278253UL, 2890696349UL, 397062412UL, +1754509337UL, 2321492983UL, 1126835971UL, 3005148093UL, 1028843071UL, 434175992UL, 3155484007UL, 4169948411UL, 1417194283UL, 3217107401UL, 1521633702UL, 2366802562UL, 1629830655UL, 665389310UL, 76017436UL, 3231711673UL, 3784114896UL, 2523153991UL, 37004463UL, 2157090897UL, 2278711709UL, 3001078924UL, 3770048208UL, 1281902891UL, 1197195551UL, 4062534962UL, 1039971013UL, 2710590100UL, 836721481UL, 63853850UL, 3585779636UL, 81127429UL, +3850118466UL, 1883009417UL, 1027645619UL, 2766570701UL, 529436174UL, 4182542040UL, 2027954186UL, 1551970336UL, 2476537298UL, 1601343216UL, 3847258834UL, 14764974UL, 2173280370UL, 4148127270UL, 2818930089UL, 4238274314UL, 1291010651UL, 276452076UL, 192067464UL, 4086351393UL, 37573517UL, 48008720UL, 1641547972UL, 3144774960UL, 2159884108UL, 4260412239UL, 4072883650UL, 801704944UL, 2475958420UL, 2719220408UL, 555871884UL, 3338968445UL, +1704817873UL, 1960791083UL, 3785650808UL, 948722806UL, 3591229899UL, 1776225011UL, 4086658524UL, 2675451845UL, 308053697UL, 3514232055UL, 2575301108UL, 1970226110UL, 3926325352UL, 770275431UL, 1432667716UL, 671201644UL, 1008866625UL, 1151827040UL, 11061406UL, 3492749345UL, 2398090284UL, 2479688660UL, 2275263177UL, 2452696627UL, 3239880878UL, 3206200433UL, 1520851097UL, 1517432473UL, 1468198490UL, 1756343506UL, 2477348626UL, 3684701600UL, +3173720911UL, 1034531154UL, 4092116810UL, 3546516359UL, 2085136160UL, 643024588UL, 1462240654UL, 1877398196UL, 3615581878UL, 1419408410UL, 3581360976UL, 1731324772UL, 1377343320UL, 3848152825UL, 2213533588UL, 2484549569UL, 2043594863UL, 224490427UL, 1298974897UL, 4279011954UL, 3970331393UL, 3795364604UL, 285230552UL, 2893090686UL, 2399312639UL, 2638905215UL, 3481427245UL, 3477537504UL, 2609821731UL, 867675919UL, 3395750357UL, 1969593211UL, +2390932014UL, 3164333009UL, 3032345429UL, 3054196992UL, 1655295657UL, 193598641UL, 1267960637UL, 1599091894UL, 3377410805UL, 1529073346UL, 1949183620UL, 1575927573UL, 1493246650UL, 2285478895UL, 797817618UL, 1736047766UL, 1537439339UL, 1422940895UL, 2210817855UL, 2888194544UL, 800138109UL, 1689425315UL, 87966703UL, 3800446188UL, 137301285UL, 3334431104UL, 1776710491UL, 4010349050UL, 2577018472UL, 3083459223UL, 672158271UL, 3379478560UL, +2445459713UL, 918903140UL, 2577376693UL, 273150303UL, 2300393435UL, 3529750006UL, 3941920515UL, 2590879584UL, 2005940914UL, 2533952036UL, 2918638361UL, 1907638097UL, 959011520UL, 1477207871UL, 2141548481UL, 2065858781UL, 3145892196UL, 3679867589UL, 1295127682UL, 1325838381UL, 3482593404UL, 1212565985UL, 3404887017UL, 709111097UL, 1714185234UL, 561489165UL, 3545430079UL, 359778601UL, 3034684349UL, 2235482356UL, 2263913966UL, 1397371482UL, +}, +{ +170295791UL, 2753410803UL, 2200994594UL, 14686027UL, 3460333923UL, 1523230564UL, 393272614UL, 1632665034UL, 2139771608UL, 2436912103UL, 375335282UL, 667585308UL, 3651645415UL, 1403132103UL, 4146144245UL, 786890392UL, 1349234364UL, 1278024517UL, 84921263UL, 3758850381UL, 4213552796UL, 2355655048UL, 1636349912UL, 172797504UL, 2490691729UL, 1233059003UL, 2593048824UL, 942056581UL, 953415060UL, 4250104075UL, 787552244UL, 1995239637UL, +2482815609UL, 767530774UL, 773778243UL, 841396894UL, 2718419035UL, 3363828032UL, 737774143UL, 4128182656UL, 2335090807UL, 1421795969UL, 2322011430UL, 2808330380UL, 2207840656UL, 1646731611UL, 492284258UL, 2339383764UL, 3439685708UL, 2316859204UL, 4055048437UL, 1700143892UL, 2980557654UL, 1353917552UL, 548777318UL, 1077538998UL, 2650679367UL, 2853583947UL, 2721899692UL, 4253535213UL, 3375043688UL, 3489699354UL, 2401362855UL, 3391605246UL, +914273272UL, 3060460082UL, 1409014396UL, 3313834796UL, 461914731UL, 82334736UL, 3200344474UL, 2743316601UL, 842885927UL, 613943741UL, 96056919UL, 3116963503UL, 305659983UL, 132158360UL, 239064402UL, 849530381UL, 543215927UL, 4250983939UL, 2719881954UL, 1950301886UL, 2760008207UL, 853237881UL, 3875675156UL, 1753566841UL, 1446648300UL, 1663885236UL, 2155720472UL, 1902508987UL, 4246118829UL, 383661834UL, 2420221467UL, 156828838UL, +2919782856UL, 499968148UL, 2538550321UL, 65231340UL, 1589837081UL, 3654438263UL, 467304037UL, 1000159563UL, 622643461UL, 1410713407UL, 491953742UL, 1003597552UL, 1972701846UL, 1534343952UL, 1934888620UL, 4214562113UL, 4154375443UL, 3612899079UL, 2132948514UL, 2599819225UL, 2676649952UL, 3147375990UL, 533258319UL, 3323553423UL, 4203909276UL, 668602384UL, 3979162921UL, 2360530772UL, 162121513UL, 8968884UL, 3647746035UL, 2830313226UL, +1736955603UL, 78142012UL, 1643270604UL, 1571637938UL, 4065571991UL, 2071640825UL, 2715113082UL, 3826814783UL, 1067370024UL, 1810581550UL, 2354204343UL, 3798962263UL, 1664654967UL, 3740539785UL, 3746164996UL, 4280983219UL, 3313400832UL, 3305556349UL, 4226011346UL, 839676594UL, 1785445494UL, 1248107478UL, 904240268UL, 3484988721UL, 2290931247UL, 2109493967UL, 3895901626UL, 1494555863UL, 3251796061UL, 40877237UL, 2914051470UL, 2810210896UL, +1428826975UL, 170295791UL, 2753410803UL, 2200994594UL, 14686027UL, 3263438011UL, 1523230564UL, 393272614UL, 1632665034UL, 2139771608UL, 1847095655UL, 375335282UL, 667585308UL, 3651645415UL, 1403132103UL, 1888152231UL, 786890392UL, 1349234364UL, 1278024517UL, 84921263UL, 317409190UL, 4213552796UL, 2355655048UL, 1636349912UL, 172797504UL, 891435579UL, 1233059003UL, 2593048824UL, 942056581UL, 953415060UL, 1606837225UL, 787552244UL, +1995239637UL, 2482815609UL, 767530774UL, 723338833UL, 841396894UL, 2718419035UL, 3363828032UL, 737774143UL, 1043554448UL, 2335090807UL, 1421795969UL, 2322011430UL, 2808330380UL, 2754923978UL, 1646731611UL, 492284258UL, 2339383764UL, 3439685708UL, 3985616488UL, 4055048437UL, 1700143892UL, 2980557654UL, 1353917552UL, 588678041UL, 1077538998UL, 2650679367UL, 2853583947UL, 2721899692UL, 992549416UL, 3375043688UL, 3489699354UL, 2401362855UL, +3391605246UL, 2111206241UL, 3060460082UL, 1409014396UL, 3313834796UL, 461914731UL, 749987143UL, 3200344474UL, 2743316601UL, 842885927UL, 613943741UL, 1572013294UL, 3116963503UL, 305659983UL, 132158360UL, 239064402UL, 2802105766UL, 543215927UL, 4250983939UL, 2719881954UL, 1950301886UL, 1025784309UL, 853237881UL, 3875675156UL, 1753566841UL, 1446648300UL, 2265992307UL, 2155720472UL, 1902508987UL, 4246118829UL, 383661834UL, 1291267638UL, +156828838UL, 2919782856UL, 499968148UL, 2538550321UL, 2108151330UL, 1589837081UL, 3654438263UL, 467304037UL, 1000159563UL, 611554173UL, 1410713407UL, 491953742UL, 1003597552UL, 1972701846UL, 1548061756UL, 1934888620UL, 4214562113UL, 4154375443UL, 3612899079UL, 3599839935UL, 2599819225UL, 2676649952UL, 3147375990UL, 533258319UL, 4213499273UL, 4203909276UL, 668602384UL, 3979162921UL, 2360530772UL, 197252548UL, 8968884UL, 3647746035UL, +2830313226UL, 1736955603UL, 791687787UL, 1643270604UL, 1571637938UL, 4065571991UL, 2071640825UL, 2026290282UL, 3826814783UL, 1067370024UL, 1810581550UL, 2354204343UL, 2679791787UL, 1664654967UL, 3740539785UL, 3746164996UL, 4280983219UL, 1690075221UL, 3305556349UL, 4226011346UL, 839676594UL, 1785445494UL, 935893161UL, 904240268UL, 3484988721UL, 2290931247UL, 2109493967UL, 1497667362UL, 1494555863UL, 3251796061UL, 40877237UL, 2914051470UL, +1936503212UL, 1428826975UL, 170295791UL, 2753410803UL, 2200994594UL, 3416506072UL, 3263438011UL, 1523230564UL, 393272614UL, 1632665034UL, 3223475136UL, 1847095655UL, 375335282UL, 667585308UL, 3651645415UL, 1628711405UL, 1888152231UL, 786890392UL, 1349234364UL, 1278024517UL, 3955811679UL, 317409190UL, 4213552796UL, 2355655048UL, 1636349912UL, 2875036620UL, 891435579UL, 1233059003UL, 2593048824UL, 942056581UL, 2852399035UL, 1606837225UL, +787552244UL, 1995239637UL, 2482815609UL, 3849697041UL, 723338833UL, 841396894UL, 2718419035UL, 3363828032UL, 2914796626UL, 1043554448UL, 2335090807UL, 1421795969UL, 2322011430UL, 1088985845UL, 2754923978UL, 1646731611UL, 492284258UL, 2339383764UL, 2345741058UL, 3985616488UL, 4055048437UL, 1700143892UL, 2980557654UL, 3047950756UL, 588678041UL, 1077538998UL, 2650679367UL, 2853583947UL, 1902113580UL, 992549416UL, 3375043688UL, 3489699354UL, +2401362855UL, 2822431025UL, 2111206241UL, 3060460082UL, 1409014396UL, 3313834796UL, 3661696135UL, 749987143UL, 3200344474UL, 2743316601UL, 842885927UL, 3902266797UL, 1572013294UL, 3116963503UL, 305659983UL, 132158360UL, 2399116869UL, 2802105766UL, 543215927UL, 4250983939UL, 2719881954UL, 1909593430UL, 1025784309UL, 853237881UL, 3875675156UL, 1753566841UL, 315928539UL, 2265992307UL, 2155720472UL, 1902508987UL, 4246118829UL, 4054781820UL, +1291267638UL, 156828838UL, 2919782856UL, 499968148UL, 2746436642UL, 2108151330UL, 1589837081UL, 3654438263UL, 467304037UL, 2376244866UL, 611554173UL, 1410713407UL, 491953742UL, 1003597552UL, 961109680UL, 1548061756UL, 1934888620UL, 4214562113UL, 4154375443UL, 3318608531UL, 3599839935UL, 2599819225UL, 2676649952UL, 3147375990UL, 3197943734UL, 4213499273UL, 4203909276UL, 668602384UL, 3979162921UL, 4241359084UL, 197252548UL, 8968884UL, +3647746035UL, 2830313226UL, 2057817762UL, 791687787UL, 1643270604UL, 1571637938UL, 4065571991UL, 961587641UL, 2026290282UL, 3826814783UL, 1067370024UL, 1810581550UL, 1525669339UL, 2679791787UL, 1664654967UL, 3740539785UL, 3746164996UL, 3971185743UL, 1690075221UL, 3305556349UL, 4226011346UL, 839676594UL, 4017546432UL, 935893161UL, 904240268UL, 3484988721UL, 2290931247UL, 2887434676UL, 1497667362UL, 1494555863UL, 3251796061UL, 40877237UL, +675451622UL, 1936503212UL, 1428826975UL, 170295791UL, 2753410803UL, 13691728UL, 3416506072UL, 3263438011UL, 1523230564UL, 393272614UL, 2875584734UL, 3223475136UL, 1847095655UL, 375335282UL, 667585308UL, 192306502UL, 1628711405UL, 1888152231UL, 786890392UL, 1349234364UL, 511851370UL, 3955811679UL, 317409190UL, 4213552796UL, 2355655048UL, 131052067UL, 2875036620UL, 891435579UL, 1233059003UL, 2593048824UL, 2915307792UL, 2852399035UL, +1606837225UL, 787552244UL, 1995239637UL, 886016481UL, 3849697041UL, 723338833UL, 841396894UL, 2718419035UL, 1765948302UL, 2914796626UL, 1043554448UL, 2335090807UL, 1421795969UL, 4270899906UL, 1088985845UL, 2754923978UL, 1646731611UL, 492284258UL, 1723935335UL, 2345741058UL, 3985616488UL, 4055048437UL, 1700143892UL, 2254566160UL, 3047950756UL, 588678041UL, 1077538998UL, 2650679367UL, 1004539894UL, 1902113580UL, 992549416UL, 3375043688UL, +3489699354UL, 2030140735UL, 2822431025UL, 2111206241UL, 3060460082UL, 1409014396UL, 3053214877UL, 3661696135UL, 749987143UL, 3200344474UL, 2743316601UL, 398855857UL, 3902266797UL, 1572013294UL, 3116963503UL, 305659983UL, 1626072332UL, 2399116869UL, 2802105766UL, 543215927UL, 4250983939UL, 1149058742UL, 1909593430UL, 1025784309UL, 853237881UL, 3875675156UL, 2709854504UL, 315928539UL, 2265992307UL, 2155720472UL, 1902508987UL, 4065691077UL, +4054781820UL, 1291267638UL, 156828838UL, 2919782856UL, 1004764391UL, 2746436642UL, 2108151330UL, 1589837081UL, 3654438263UL, 2380382984UL, 2376244866UL, 611554173UL, 1410713407UL, 491953742UL, 3149407591UL, 961109680UL, 1548061756UL, 1934888620UL, 4214562113UL, 1555853416UL, 3318608531UL, 3599839935UL, 2599819225UL, 2676649952UL, 1902647993UL, 3197943734UL, 4213499273UL, 4203909276UL, 668602384UL, 2188341510UL, 4241359084UL, 197252548UL, +8968884UL, 3647746035UL, 629654524UL, 2057817762UL, 791687787UL, 1643270604UL, 1571637938UL, 3066487639UL, 961587641UL, 2026290282UL, 3826814783UL, 1067370024UL, 2223613942UL, 1525669339UL, 2679791787UL, 1664654967UL, 3740539785UL, 3902060288UL, 3971185743UL, 1690075221UL, 3305556349UL, 4226011346UL, 3135081672UL, 4017546432UL, 935893161UL, 904240268UL, 3484988721UL, 2448752416UL, 2887434676UL, 1497667362UL, 1494555863UL, 3251796061UL, +1037186927UL, 1608759110UL, 3873834254UL, 59242551UL, 487334743UL, 2580513180UL, 3704829028UL, 3859157573UL, 3452402004UL, 783668920UL, 2394905786UL, 3179497902UL, 2576105629UL, 1552362163UL, 2138613992UL, 224944469UL, 3876873579UL, 3402518289UL, 1709606949UL, 4255868112UL, 1249055439UL, 3395879908UL, 2957760102UL, 346905231UL, 590629983UL, 1171021480UL, 4051081465UL, 3913643946UL, 3115845768UL, 1021908139UL, 2556028362UL, 3828177651UL, +2870156105UL, 899722025UL, 661756192UL, 3775551864UL, 1288569751UL, 3751947667UL, 3064664685UL, 2559273148UL, 2660772417UL, 2448044253UL, 3054357327UL, 3434913868UL, 1444728572UL, 3010819186UL, 3010362527UL, 1709131033UL, 3425689752UL, 2849921358UL, 3518017065UL, 3845809665UL, 3245724553UL, 1008739837UL, 3274032925UL, 2567688974UL, 1981389077UL, 1108638127UL, 470206543UL, 1097339633UL, 1714430226UL, 2321268672UL, 1149373331UL, 294569671UL, +4264586290UL, 4270574127UL, 2522456947UL, 230975563UL, 131504269UL, 541738544UL, 1380704847UL, 2946408074UL, 282744860UL, 246858261UL, 2037373985UL, 1769191691UL, 2174871838UL, 2097427065UL, 492251656UL, 1252290304UL, 3616248100UL, 3213248383UL, 1847973756UL, 647347869UL, 3015847616UL, 299045987UL, 866593289UL, 2009367463UL, 2448831631UL, 337965200UL, 1210654808UL, 1694878225UL, 853507918UL, 3373825966UL, 4262812941UL, 4279525028UL, +338822858UL, 1038097567UL, 3996799911UL, 755960212UL, 149304151UL, 1599868486UL, 4021605447UL, 3040297322UL, 3891899828UL, 1711866076UL, 900840696UL, 3675688669UL, 3070862438UL, 2611308185UL, 2359948129UL, 1158552196UL, 2094484627UL, 3077606843UL, 2119537593UL, 427023787UL, 3632076073UL, 2670551310UL, 3396099733UL, 1066081183UL, 1817788918UL, 324769315UL, 656687887UL, 202117575UL, 3106428593UL, 3730407212UL, 1661316263UL, 1215084998UL, +2025391552UL, 664352483UL, 1914686594UL, 9439399UL, 2548190484UL, 3127972014UL, 4008228378UL, 2645735658UL, 2191361716UL, 2211450148UL, 1863406291UL, 1179298131UL, 241880428UL, 2330159770UL, 3490494273UL, 1337382890UL, 747522461UL, 1060348557UL, 3618051469UL, 991193538UL, 1604905367UL, 2595102954UL, 1460144089UL, 3990194961UL, 44265425UL, 896268152UL, 9333748UL, 2850675977UL, 941433385UL, 2483544989UL, 3443750079UL, 2488690792UL, +}, +{ +824297644UL, 239464654UL, 4133652405UL, 1611614045UL, 102133367UL, 1780659362UL, 114934718UL, 3793050817UL, 3286619856UL, 1323742990UL, 3487325492UL, 468742651UL, 271433491UL, 3474195023UL, 479173886UL, 3282693508UL, 978269731UL, 1826990521UL, 3664994445UL, 1943608646UL, 2356793330UL, 2228748670UL, 4238523810UL, 2467714013UL, 1732683390UL, 2345218001UL, 3371637369UL, 1073602848UL, 844797255UL, 3881048480UL, 509186599UL, 1399427071UL, +3815270778UL, 1505666412UL, 2616384981UL, 2990167853UL, 3716581225UL, 3063486812UL, 1568307898UL, 3262882991UL, 1455926070UL, 3011806226UL, 3803364927UL, 849372289UL, 2382885729UL, 3071102985UL, 3838244574UL, 3219174218UL, 847830757UL, 1414310383UL, 3679389549UL, 1558413907UL, 2211822428UL, 339810803UL, 1051648907UL, 76928699UL, 3174194320UL, 3920525151UL, 2010088097UL, 4111092791UL, 3537133983UL, 1701410561UL, 3036563175UL, 4010986440UL, +1749862952UL, 159833659UL, 3406940095UL, 1041601178UL, 4005001553UL, 1663515026UL, 1728511107UL, 1496728329UL, 2359970426UL, 530862749UL, 3797637507UL, 2550923758UL, 1450321218UL, 21682904UL, 936804838UL, 3832989199UL, 3063256293UL, 3991708711UL, 986539283UL, 3775232150UL, 2867283706UL, 747477232UL, 946349345UL, 1010022077UL, 188204104UL, 2526787171UL, 2816843760UL, 1776005940UL, 2819738500UL, 1155856699UL, 2191793692UL, 3802193350UL, +1163036922UL, 645032560UL, 3122679267UL, 3311719932UL, 3757073707UL, 2464258247UL, 1360425558UL, 387981241UL, 1714916540UL, 411019237UL, 2248466094UL, 2878213113UL, 2742600760UL, 2763650927UL, 2526526309UL, 1093836264UL, 3819986000UL, 3754388150UL, 1731831799UL, 1441137152UL, 1625850961UL, 1182084155UL, 1596226376UL, 2389499892UL, 3923360808UL, 2439159233UL, 1623373213UL, 2513747479UL, 3651587995UL, 1040867254UL, 4208484711UL, 3489019765UL, +2141904813UL, 3666280633UL, 970464748UL, 2970978888UL, 1376163015UL, 1218588624UL, 2721249823UL, 707915046UL, 4262557484UL, 3237019195UL, 744279211UL, 364567144UL, 1997174860UL, 3215512870UL, 2758022574UL, 2677818352UL, 4198422061UL, 3016017869UL, 2243997977UL, 1029293722UL, 1820056287UL, 1090825999UL, 4135403724UL, 299239527UL, 874620372UL, 2995368704UL, 3219627293UL, 2431393692UL, 3470601754UL, 1809177571UL, 37446335UL, 1619184385UL, +675901368UL, 824297644UL, 239464654UL, 4133652405UL, 1611614045UL, 1918718045UL, 1780659362UL, 114934718UL, 3793050817UL, 3286619856UL, 3566342809UL, 3487325492UL, 468742651UL, 271433491UL, 3474195023UL, 77797025UL, 3282693508UL, 978269731UL, 1826990521UL, 3664994445UL, 1455182612UL, 2356793330UL, 2228748670UL, 4238523810UL, 2467714013UL, 1081984526UL, 2345218001UL, 3371637369UL, 1073602848UL, 844797255UL, 4125413817UL, 509186599UL, +1399427071UL, 3815270778UL, 1505666412UL, 891823593UL, 2990167853UL, 3716581225UL, 3063486812UL, 1568307898UL, 1753181930UL, 1455926070UL, 3011806226UL, 3803364927UL, 849372289UL, 4211525266UL, 3071102985UL, 3838244574UL, 3219174218UL, 847830757UL, 774013898UL, 3679389549UL, 1558413907UL, 2211822428UL, 339810803UL, 2282783575UL, 76928699UL, 3174194320UL, 3920525151UL, 2010088097UL, 3894905215UL, 3537133983UL, 1701410561UL, 3036563175UL, +4010986440UL, 676262036UL, 159833659UL, 3406940095UL, 1041601178UL, 4005001553UL, 3470687799UL, 1728511107UL, 1496728329UL, 2359970426UL, 530862749UL, 3081565689UL, 2550923758UL, 1450321218UL, 21682904UL, 936804838UL, 951873872UL, 3063256293UL, 3991708711UL, 986539283UL, 3775232150UL, 487381835UL, 747477232UL, 946349345UL, 1010022077UL, 188204104UL, 2898848241UL, 2816843760UL, 1776005940UL, 2819738500UL, 1155856699UL, 2432683643UL, +3802193350UL, 1163036922UL, 645032560UL, 3122679267UL, 22749078UL, 3757073707UL, 2464258247UL, 1360425558UL, 387981241UL, 3652130062UL, 411019237UL, 2248466094UL, 2878213113UL, 2742600760UL, 811608089UL, 2526526309UL, 1093836264UL, 3819986000UL, 3754388150UL, 415809552UL, 1441137152UL, 1625850961UL, 1182084155UL, 1596226376UL, 202609936UL, 3923360808UL, 2439159233UL, 1623373213UL, 2513747479UL, 4149563237UL, 1040867254UL, 4208484711UL, +3489019765UL, 2141904813UL, 718806958UL, 970464748UL, 2970978888UL, 1376163015UL, 1218588624UL, 2307367700UL, 707915046UL, 4262557484UL, 3237019195UL, 744279211UL, 1876395939UL, 1997174860UL, 3215512870UL, 2758022574UL, 2677818352UL, 2276158677UL, 3016017869UL, 2243997977UL, 1029293722UL, 1820056287UL, 3605618012UL, 4135403724UL, 299239527UL, 874620372UL, 2995368704UL, 872126519UL, 2431393692UL, 3470601754UL, 1809177571UL, 37446335UL, +2365355125UL, 675901368UL, 824297644UL, 239464654UL, 4133652405UL, 8139161UL, 1918718045UL, 1780659362UL, 114934718UL, 3793050817UL, 2424418256UL, 3566342809UL, 3487325492UL, 468742651UL, 271433491UL, 542129690UL, 77797025UL, 3282693508UL, 978269731UL, 1826990521UL, 2963435579UL, 1455182612UL, 2356793330UL, 2228748670UL, 4238523810UL, 2373300657UL, 1081984526UL, 2345218001UL, 3371637369UL, 1073602848UL, 2948610237UL, 4125413817UL, +509186599UL, 1399427071UL, 3815270778UL, 2870251133UL, 891823593UL, 2990167853UL, 3716581225UL, 3063486812UL, 2347504584UL, 1753181930UL, 1455926070UL, 3011806226UL, 3803364927UL, 3956554065UL, 4211525266UL, 3071102985UL, 3838244574UL, 3219174218UL, 2018597841UL, 774013898UL, 3679389549UL, 1558413907UL, 2211822428UL, 56072605UL, 2282783575UL, 76928699UL, 3174194320UL, 3920525151UL, 268031035UL, 3894905215UL, 3537133983UL, 1701410561UL, +3036563175UL, 366935627UL, 676262036UL, 159833659UL, 3406940095UL, 1041601178UL, 4125224603UL, 3470687799UL, 1728511107UL, 1496728329UL, 2359970426UL, 3570997128UL, 3081565689UL, 2550923758UL, 1450321218UL, 21682904UL, 604517910UL, 951873872UL, 3063256293UL, 3991708711UL, 986539283UL, 2414780630UL, 487381835UL, 747477232UL, 946349345UL, 1010022077UL, 3820353604UL, 2898848241UL, 2816843760UL, 1776005940UL, 2819738500UL, 1192624235UL, +2432683643UL, 3802193350UL, 1163036922UL, 645032560UL, 4050277201UL, 22749078UL, 3757073707UL, 2464258247UL, 1360425558UL, 1933406988UL, 3652130062UL, 411019237UL, 2248466094UL, 2878213113UL, 37869698UL, 811608089UL, 2526526309UL, 1093836264UL, 3819986000UL, 3999750910UL, 415809552UL, 1441137152UL, 1625850961UL, 1182084155UL, 1186617400UL, 202609936UL, 3923360808UL, 2439159233UL, 1623373213UL, 4226729056UL, 4149563237UL, 1040867254UL, +4208484711UL, 3489019765UL, 3728140516UL, 718806958UL, 970464748UL, 2970978888UL, 1376163015UL, 1307011711UL, 2307367700UL, 707915046UL, 4262557484UL, 3237019195UL, 4014387080UL, 1876395939UL, 1997174860UL, 3215512870UL, 2758022574UL, 1696763772UL, 2276158677UL, 3016017869UL, 2243997977UL, 1029293722UL, 1444214949UL, 3605618012UL, 4135403724UL, 299239527UL, 874620372UL, 1524158085UL, 872126519UL, 2431393692UL, 3470601754UL, 1809177571UL, +163166369UL, 2365355125UL, 675901368UL, 824297644UL, 239464654UL, 1626558353UL, 8139161UL, 1918718045UL, 1780659362UL, 114934718UL, 1885224714UL, 2424418256UL, 3566342809UL, 3487325492UL, 468742651UL, 1101039917UL, 542129690UL, 77797025UL, 3282693508UL, 978269731UL, 3659653445UL, 2963435579UL, 1455182612UL, 2356793330UL, 2228748670UL, 539062188UL, 2373300657UL, 1081984526UL, 2345218001UL, 3371637369UL, 2825652803UL, 2948610237UL, +4125413817UL, 509186599UL, 1399427071UL, 3197034620UL, 2870251133UL, 891823593UL, 2990167853UL, 3716581225UL, 3773712182UL, 2347504584UL, 1753181930UL, 1455926070UL, 3011806226UL, 3260276773UL, 3956554065UL, 4211525266UL, 3071102985UL, 3838244574UL, 201639236UL, 2018597841UL, 774013898UL, 3679389549UL, 1558413907UL, 2830702673UL, 56072605UL, 2282783575UL, 76928699UL, 3174194320UL, 1677734845UL, 268031035UL, 3894905215UL, 3537133983UL, +1701410561UL, 4240866153UL, 366935627UL, 676262036UL, 159833659UL, 3406940095UL, 4245889153UL, 4125224603UL, 3470687799UL, 1728511107UL, 1496728329UL, 3650277906UL, 3570997128UL, 3081565689UL, 2550923758UL, 1450321218UL, 3392011930UL, 604517910UL, 951873872UL, 3063256293UL, 3991708711UL, 2876003834UL, 2414780630UL, 487381835UL, 747477232UL, 946349345UL, 982266944UL, 3820353604UL, 2898848241UL, 2816843760UL, 1776005940UL, 3677715064UL, +1192624235UL, 2432683643UL, 3802193350UL, 1163036922UL, 1226669337UL, 4050277201UL, 22749078UL, 3757073707UL, 2464258247UL, 4197532785UL, 1933406988UL, 3652130062UL, 411019237UL, 2248466094UL, 3209426720UL, 37869698UL, 811608089UL, 2526526309UL, 1093836264UL, 535856568UL, 3999750910UL, 415809552UL, 1441137152UL, 1625850961UL, 2181491119UL, 1186617400UL, 202609936UL, 3923360808UL, 2439159233UL, 1823827533UL, 4226729056UL, 4149563237UL, +1040867254UL, 4208484711UL, 1101917521UL, 3728140516UL, 718806958UL, 970464748UL, 2970978888UL, 1574663259UL, 1307011711UL, 2307367700UL, 707915046UL, 4262557484UL, 2164217930UL, 4014387080UL, 1876395939UL, 1997174860UL, 3215512870UL, 1335157953UL, 1696763772UL, 2276158677UL, 3016017869UL, 2243997977UL, 324788481UL, 1444214949UL, 3605618012UL, 4135403724UL, 299239527UL, 4190629945UL, 1524158085UL, 872126519UL, 2431393692UL, 3470601754UL, +3701018280UL, 671547257UL, 4029965023UL, 1026428282UL, 1584875796UL, 3537698406UL, 3731126476UL, 2419795330UL, 993551117UL, 2126319514UL, 3557113304UL, 1014047757UL, 1407120210UL, 1977537539UL, 1338958570UL, 3249585389UL, 3661503659UL, 4240815680UL, 1866933898UL, 3205442033UL, 4247144816UL, 1422846419UL, 3847421981UL, 1383632066UL, 3589322376UL, 1816906043UL, 1310944471UL, 3646822098UL, 799529013UL, 3350558751UL, 2552899295UL, 4281235599UL, +4069668296UL, 4123814877UL, 3289565353UL, 1512974699UL, 111908081UL, 2535556715UL, 333570815UL, 3638041929UL, 1942569446UL, 20945397UL, 3784826827UL, 200406456UL, 2640512138UL, 38390336UL, 436784052UL, 3062106345UL, 1675333627UL, 709613078UL, 3479720979UL, 2726065658UL, 4072312748UL, 797389139UL, 3492082903UL, 3792395750UL, 983473383UL, 2984788349UL, 2030282907UL, 2246686378UL, 2451087141UL, 1799640566UL, 2182694041UL, 3226819076UL, +3573153299UL, 3658670545UL, 1197013516UL, 777601408UL, 4271704548UL, 1192713934UL, 1628497069UL, 681025927UL, 4078910773UL, 619496169UL, 1534725146UL, 1881987408UL, 2283881479UL, 1090218673UL, 4169123978UL, 2352195985UL, 2640116078UL, 3869558100UL, 2859177954UL, 3329803656UL, 4048903941UL, 1636589748UL, 2095007175UL, 4169840880UL, 2953611537UL, 2413740464UL, 3029624235UL, 778662441UL, 422412779UL, 412103280UL, 1701569571UL, 564088645UL, +469973310UL, 254302146UL, 3963642101UL, 555781470UL, 2983576224UL, 1757897888UL, 1420763962UL, 2176323176UL, 916790568UL, 3057610889UL, 196828641UL, 1435167402UL, 325046353UL, 1337309066UL, 2691769282UL, 3572566918UL, 2910149226UL, 3659418019UL, 2511762503UL, 3869838339UL, 1413312151UL, 1939339596UL, 801124461UL, 760477862UL, 2416958233UL, 3439465675UL, 3561763524UL, 1760392811UL, 1582406751UL, 1203071257UL, 755811399UL, 2675585013UL, +1150664766UL, 3515765747UL, 3419135844UL, 2076543342UL, 1191918544UL, 3644819073UL, 2195875022UL, 2909071148UL, 3385707813UL, 1151273265UL, 1467337419UL, 3570589492UL, 3742049917UL, 1609858615UL, 2964509119UL, 3747960348UL, 2825858640UL, 101501715UL, 1234710482UL, 750428334UL, 2870070395UL, 416615350UL, 4054039387UL, 3807926874UL, 3035407103UL, 1644560291UL, 2490941295UL, 963796562UL, 3233132139UL, 2590859502UL, 2845243609UL, 964355909UL, +}, +{ +2882980002UL, 2211288683UL, 872766101UL, 3713771728UL, 1429983118UL, 2069599564UL, 827699420UL, 1288565883UL, 2985727214UL, 3873174741UL, 2138389854UL, 3915615927UL, 2759028650UL, 3120611541UL, 385953581UL, 189931252UL, 2044235060UL, 4214733958UL, 1899137741UL, 1973215178UL, 494148492UL, 1550568689UL, 3646957712UL, 3764784141UL, 1114556979UL, 1411407684UL, 1194906295UL, 1718808623UL, 1809627046UL, 1413570172UL, 180837718UL, 2588730975UL, +1481586714UL, 2836300053UL, 1967135375UL, 4010897189UL, 3392273121UL, 3466021198UL, 1182364160UL, 1364130321UL, 1795412556UL, 330320182UL, 1165093128UL, 2125767818UL, 904192995UL, 51833064UL, 232302906UL, 1834422179UL, 476731510UL, 3484170517UL, 2373156680UL, 2610500049UL, 1688364249UL, 463611489UL, 3759685710UL, 62038708UL, 2357334250UL, 1230002441UL, 520303451UL, 3009758047UL, 1882263827UL, 2524779298UL, 1736323157UL, 3883037541UL, +1103650182UL, 1137565179UL, 3112310886UL, 3524287283UL, 3064002681UL, 4106308847UL, 3180534967UL, 2463036338UL, 1859639515UL, 1319061987UL, 354419222UL, 4108171950UL, 601260554UL, 705389180UL, 4081137445UL, 3461353436UL, 399768111UL, 3963945521UL, 2094962544UL, 630762046UL, 369047181UL, 3495709267UL, 3525452874UL, 314919391UL, 2152657907UL, 881476500UL, 3565507827UL, 2594931381UL, 579458905UL, 1767988684UL, 2678728511UL, 3416503939UL, +4150612567UL, 1015748208UL, 2059142720UL, 2725183490UL, 2998421769UL, 1644667445UL, 4221112143UL, 456578131UL, 3881530201UL, 190710543UL, 1721255927UL, 2274887963UL, 187713135UL, 2209254952UL, 2185750138UL, 2992229399UL, 482133467UL, 2758198810UL, 15147949UL, 536333711UL, 2296185346UL, 1103433779UL, 1573407789UL, 1357843567UL, 2927153963UL, 4157295398UL, 533935893UL, 3567030810UL, 1900900411UL, 509578395UL, 3810017456UL, 2134110040UL, +3347323570UL, 3497032747UL, 201278263UL, 3933249682UL, 3849960474UL, 2509123202UL, 3445521167UL, 1355284593UL, 2444811561UL, 2751112324UL, 1116246614UL, 511213077UL, 3412599909UL, 1712118363UL, 54054007UL, 442729047UL, 3077267414UL, 1532701769UL, 181534938UL, 1278069867UL, 3847149992UL, 2305860479UL, 4146252420UL, 2047690303UL, 361856758UL, 452490341UL, 636885000UL, 1733216839UL, 3788548638UL, 1094285639UL, 1349356222UL, 2760444511UL, +976767752UL, 2882980002UL, 2211288683UL, 872766101UL, 3713771728UL, 895830110UL, 2069599564UL, 827699420UL, 1288565883UL, 2985727214UL, 3377496544UL, 2138389854UL, 3915615927UL, 2759028650UL, 3120611541UL, 3254971483UL, 189931252UL, 2044235060UL, 4214733958UL, 1899137741UL, 2095055586UL, 494148492UL, 1550568689UL, 3646957712UL, 3764784141UL, 2869825005UL, 1411407684UL, 1194906295UL, 1718808623UL, 1809627046UL, 907760376UL, 180837718UL, +2588730975UL, 1481586714UL, 2836300053UL, 639229964UL, 4010897189UL, 3392273121UL, 3466021198UL, 1182364160UL, 3006792787UL, 1795412556UL, 330320182UL, 1165093128UL, 2125767818UL, 253264555UL, 51833064UL, 232302906UL, 1834422179UL, 476731510UL, 4284481518UL, 2373156680UL, 2610500049UL, 1688364249UL, 463611489UL, 4133115610UL, 62038708UL, 2357334250UL, 1230002441UL, 520303451UL, 1497001150UL, 1882263827UL, 2524779298UL, 1736323157UL, +3883037541UL, 3541909847UL, 1137565179UL, 3112310886UL, 3524287283UL, 3064002681UL, 3193060438UL, 3180534967UL, 2463036338UL, 1859639515UL, 1319061987UL, 111871878UL, 4108171950UL, 601260554UL, 705389180UL, 4081137445UL, 742999102UL, 399768111UL, 3963945521UL, 2094962544UL, 630762046UL, 3219207950UL, 3495709267UL, 3525452874UL, 314919391UL, 2152657907UL, 720863934UL, 3565507827UL, 2594931381UL, 579458905UL, 1767988684UL, 3958525287UL, +3416503939UL, 4150612567UL, 1015748208UL, 2059142720UL, 4227838648UL, 2998421769UL, 1644667445UL, 4221112143UL, 456578131UL, 302729329UL, 190710543UL, 1721255927UL, 2274887963UL, 187713135UL, 1293706587UL, 2185750138UL, 2992229399UL, 482133467UL, 2758198810UL, 2514965671UL, 536333711UL, 2296185346UL, 1103433779UL, 1573407789UL, 2237639577UL, 2927153963UL, 4157295398UL, 533935893UL, 3567030810UL, 3793156627UL, 509578395UL, 3810017456UL, +2134110040UL, 3347323570UL, 1358364UL, 201278263UL, 3933249682UL, 3849960474UL, 2509123202UL, 628476542UL, 1355284593UL, 2444811561UL, 2751112324UL, 1116246614UL, 3421170828UL, 3412599909UL, 1712118363UL, 54054007UL, 442729047UL, 325825294UL, 1532701769UL, 181534938UL, 1278069867UL, 3847149992UL, 2785457372UL, 4146252420UL, 2047690303UL, 361856758UL, 452490341UL, 1099532083UL, 1733216839UL, 3788548638UL, 1094285639UL, 1349356222UL, +3047068265UL, 976767752UL, 2882980002UL, 2211288683UL, 872766101UL, 366378371UL, 895830110UL, 2069599564UL, 827699420UL, 1288565883UL, 962962884UL, 3377496544UL, 2138389854UL, 3915615927UL, 2759028650UL, 3742489931UL, 3254971483UL, 189931252UL, 2044235060UL, 4214733958UL, 3073407497UL, 2095055586UL, 494148492UL, 1550568689UL, 3646957712UL, 758370067UL, 2869825005UL, 1411407684UL, 1194906295UL, 1718808623UL, 636166267UL, 907760376UL, +180837718UL, 2588730975UL, 1481586714UL, 705382583UL, 639229964UL, 4010897189UL, 3392273121UL, 3466021198UL, 3815622040UL, 3006792787UL, 1795412556UL, 330320182UL, 1165093128UL, 2956382339UL, 253264555UL, 51833064UL, 232302906UL, 1834422179UL, 3665645898UL, 4284481518UL, 2373156680UL, 2610500049UL, 1688364249UL, 2565987890UL, 4133115610UL, 62038708UL, 2357334250UL, 1230002441UL, 2397198293UL, 1497001150UL, 1882263827UL, 2524779298UL, +1736323157UL, 817630445UL, 3541909847UL, 1137565179UL, 3112310886UL, 3524287283UL, 1356492703UL, 3193060438UL, 3180534967UL, 2463036338UL, 1859639515UL, 3963974342UL, 111871878UL, 4108171950UL, 601260554UL, 705389180UL, 1776439965UL, 742999102UL, 399768111UL, 3963945521UL, 2094962544UL, 2007137733UL, 3219207950UL, 3495709267UL, 3525452874UL, 314919391UL, 3877039785UL, 720863934UL, 3565507827UL, 2594931381UL, 579458905UL, 2919403199UL, +3958525287UL, 3416503939UL, 4150612567UL, 1015748208UL, 960765392UL, 4227838648UL, 2998421769UL, 1644667445UL, 4221112143UL, 2402062799UL, 302729329UL, 190710543UL, 1721255927UL, 2274887963UL, 3958481548UL, 1293706587UL, 2185750138UL, 2992229399UL, 482133467UL, 3838280UL, 2514965671UL, 536333711UL, 2296185346UL, 1103433779UL, 3675282065UL, 2237639577UL, 2927153963UL, 4157295398UL, 533935893UL, 4172021805UL, 3793156627UL, 509578395UL, +3810017456UL, 2134110040UL, 3608998517UL, 1358364UL, 201278263UL, 3933249682UL, 3849960474UL, 2445690023UL, 628476542UL, 1355284593UL, 2444811561UL, 2751112324UL, 507378026UL, 3421170828UL, 3412599909UL, 1712118363UL, 54054007UL, 770634305UL, 325825294UL, 1532701769UL, 181534938UL, 1278069867UL, 4055596097UL, 2785457372UL, 4146252420UL, 2047690303UL, 361856758UL, 3439427065UL, 1099532083UL, 1733216839UL, 3788548638UL, 1094285639UL, +1633234274UL, 3047068265UL, 976767752UL, 2882980002UL, 2211288683UL, 3763615153UL, 366378371UL, 895830110UL, 2069599564UL, 827699420UL, 2457443913UL, 962962884UL, 3377496544UL, 2138389854UL, 3915615927UL, 3290989016UL, 3742489931UL, 3254971483UL, 189931252UL, 2044235060UL, 4275822963UL, 3073407497UL, 2095055586UL, 494148492UL, 1550568689UL, 1043420085UL, 758370067UL, 2869825005UL, 1411407684UL, 1194906295UL, 676378812UL, 636166267UL, +907760376UL, 180837718UL, 2588730975UL, 2971715054UL, 705382583UL, 639229964UL, 4010897189UL, 3392273121UL, 795184546UL, 3815622040UL, 3006792787UL, 1795412556UL, 330320182UL, 1990804460UL, 2956382339UL, 253264555UL, 51833064UL, 232302906UL, 836875615UL, 3665645898UL, 4284481518UL, 2373156680UL, 2610500049UL, 98106795UL, 2565987890UL, 4133115610UL, 62038708UL, 2357334250UL, 2761212145UL, 2397198293UL, 1497001150UL, 1882263827UL, +2524779298UL, 2381031747UL, 817630445UL, 3541909847UL, 1137565179UL, 3112310886UL, 2501374726UL, 1356492703UL, 3193060438UL, 3180534967UL, 2463036338UL, 3671733096UL, 3963974342UL, 111871878UL, 4108171950UL, 601260554UL, 1017043724UL, 1776439965UL, 742999102UL, 399768111UL, 3963945521UL, 2177838102UL, 2007137733UL, 3219207950UL, 3495709267UL, 3525452874UL, 3254054416UL, 3877039785UL, 720863934UL, 3565507827UL, 2594931381UL, 1994293489UL, +2919403199UL, 3958525287UL, 3416503939UL, 4150612567UL, 1976960210UL, 960765392UL, 4227838648UL, 2998421769UL, 1644667445UL, 2896792687UL, 2402062799UL, 302729329UL, 190710543UL, 1721255927UL, 2914584080UL, 3958481548UL, 1293706587UL, 2185750138UL, 2992229399UL, 810756083UL, 3838280UL, 2514965671UL, 536333711UL, 2296185346UL, 1776509588UL, 3675282065UL, 2237639577UL, 2927153963UL, 4157295398UL, 2048779551UL, 4172021805UL, 3793156627UL, +509578395UL, 3810017456UL, 3042185034UL, 3608998517UL, 1358364UL, 201278263UL, 3933249682UL, 3551449718UL, 2445690023UL, 628476542UL, 1355284593UL, 2444811561UL, 3480611728UL, 507378026UL, 3421170828UL, 3412599909UL, 1712118363UL, 1268921331UL, 770634305UL, 325825294UL, 1532701769UL, 181534938UL, 2645357587UL, 4055596097UL, 2785457372UL, 4146252420UL, 2047690303UL, 1994855609UL, 3439427065UL, 1099532083UL, 1733216839UL, 3788548638UL, +3516588243UL, 4058132193UL, 3940172101UL, 4043964688UL, 3377150021UL, 1381463736UL, 3320280180UL, 931260821UL, 2754727582UL, 1286176949UL, 1661126244UL, 2301263887UL, 2255977851UL, 1122646603UL, 1767549201UL, 162324152UL, 425506096UL, 3777762686UL, 13687528UL, 710105607UL, 1092739920UL, 2930179533UL, 568855389UL, 2476208631UL, 964360978UL, 2011445117UL, 3887128674UL, 2799005525UL, 2479086439UL, 814368438UL, 2018629666UL, 909662384UL, +231589584UL, 1422241284UL, 4035938208UL, 3570985552UL, 660700421UL, 603857869UL, 567385627UL, 3232044670UL, 291307502UL, 947817625UL, 3466590280UL, 3080261993UL, 947835229UL, 2925888682UL, 1817591844UL, 2652420575UL, 4150903445UL, 4055627313UL, 1715025966UL, 505331227UL, 1863531052UL, 2928506098UL, 947547681UL, 1117344443UL, 781457023UL, 607542746UL, 241559360UL, 3797150797UL, 105381589UL, 361541961UL, 3393121650UL, 3840152184UL, +2873171161UL, 3030026082UL, 1115171192UL, 1718221281UL, 96787532UL, 2556617898UL, 1237726058UL, 2876298621UL, 1052881200UL, 461661595UL, 2632346030UL, 1775614319UL, 2454951319UL, 3691637824UL, 4018448825UL, 1610472965UL, 3076493165UL, 1364200430UL, 2011206580UL, 1066672050UL, 706141458UL, 2064189273UL, 346938484UL, 2964350202UL, 3731612957UL, 2506635528UL, 2007045393UL, 3312126930UL, 2602035453UL, 988876930UL, 2960173442UL, 559685520UL, +2719943441UL, 891699839UL, 1151651090UL, 1223301894UL, 3666960271UL, 1330825927UL, 1681770552UL, 38877327UL, 3803211467UL, 4000053051UL, 3552560459UL, 3510286057UL, 2606732870UL, 721190747UL, 1933504723UL, 3110735238UL, 2333178561UL, 1577381363UL, 595257962UL, 4120745072UL, 960219089UL, 2591080970UL, 3354222743UL, 47827627UL, 3759509914UL, 304815919UL, 2643673615UL, 1381570381UL, 2103367217UL, 2440936991UL, 2376721005UL, 1483630814UL, +3137202706UL, 3075255640UL, 1743649605UL, 3649754571UL, 2550788713UL, 4281983459UL, 904183710UL, 4243944530UL, 2742129811UL, 3363501626UL, 3670239155UL, 4233018118UL, 2615012385UL, 1420298161UL, 1251344091UL, 2172588631UL, 1243035186UL, 1724496237UL, 762022558UL, 8747231UL, 334416849UL, 1219880856UL, 187900356UL, 2527057367UL, 1730455958UL, 3240238410UL, 906024910UL, 2351575735UL, 4207748622UL, 936139767UL, 1984289988UL, 285939331UL, +}, +{ +4246897171UL, 2217508286UL, 4117450683UL, 4110626546UL, 3753823387UL, 3977667932UL, 623718443UL, 2276396692UL, 3772091798UL, 2272323453UL, 710314822UL, 3733316262UL, 1497955597UL, 700242668UL, 3582720207UL, 1247731879UL, 336477088UL, 532374143UL, 1123157198UL, 123828173UL, 272472192UL, 2142741093UL, 2557920990UL, 4209595119UL, 2807266578UL, 1516814248UL, 4250883502UL, 1967663703UL, 215335417UL, 1252724071UL, 4267389372UL, 94668579UL, +1980152960UL, 968677393UL, 1237744359UL, 63833646UL, 2488747616UL, 700459471UL, 744977323UL, 40829823UL, 955400639UL, 37187948UL, 53133706UL, 2014551043UL, 1664982537UL, 3342787122UL, 1549278321UL, 1245110464UL, 3424539081UL, 2180485253UL, 2757636973UL, 3590044052UL, 2712703548UL, 1366894959UL, 1777449151UL, 1538653374UL, 168718075UL, 2435805251UL, 588815465UL, 3166271130UL, 3164200096UL, 417809976UL, 623036767UL, 340121872UL, +1792214783UL, 56330125UL, 3268029211UL, 1117100306UL, 345899179UL, 1547071836UL, 3657965225UL, 4109701299UL, 664937685UL, 2627187961UL, 149301108UL, 1764003230UL, 3177910586UL, 3081492846UL, 2295419724UL, 2553420882UL, 1506534805UL, 971284719UL, 3224921758UL, 3336906843UL, 1507395478UL, 1224379418UL, 4117299702UL, 1973783225UL, 3609783242UL, 4186900040UL, 3715175536UL, 3904547465UL, 459692505UL, 3546328518UL, 3071448159UL, 1300375875UL, +1805392236UL, 3072717072UL, 99113127UL, 4281059076UL, 1658649136UL, 1974081931UL, 3940966682UL, 2092428023UL, 4014384840UL, 1546542514UL, 1130620125UL, 4117533767UL, 3372991735UL, 3537429957UL, 2704347564UL, 2300583688UL, 915286167UL, 1553874575UL, 3466388216UL, 701000054UL, 349103195UL, 1554395274UL, 3140941933UL, 2874072684UL, 2630572105UL, 2794301280UL, 321399291UL, 1158058020UL, 3570908149UL, 122802750UL, 3012686842UL, 2588402967UL, +3420589812UL, 581016671UL, 193235885UL, 1558092297UL, 1233353728UL, 1080743465UL, 3292663441UL, 2188057155UL, 2715412992UL, 4274317234UL, 1657504087UL, 2554269340UL, 1079741964UL, 922252155UL, 569761460UL, 3215661310UL, 2450710288UL, 2491078689UL, 632504591UL, 2169581755UL, 2552457727UL, 2554414735UL, 3347573916UL, 681756629UL, 801451286UL, 3504956478UL, 1308297539UL, 3602650700UL, 3530372129UL, 4117441036UL, 1827438812UL, 2852602217UL, +570161747UL, 4246897171UL, 2217508286UL, 4117450683UL, 4110626546UL, 756072139UL, 3977667932UL, 623718443UL, 2276396692UL, 3772091798UL, 3829898369UL, 710314822UL, 3733316262UL, 1497955597UL, 700242668UL, 757539371UL, 1247731879UL, 336477088UL, 532374143UL, 1123157198UL, 2374238409UL, 272472192UL, 2142741093UL, 2557920990UL, 4209595119UL, 1632439709UL, 1516814248UL, 4250883502UL, 1967663703UL, 215335417UL, 1267642920UL, 4267389372UL, +94668579UL, 1980152960UL, 968677393UL, 2252616933UL, 63833646UL, 2488747616UL, 700459471UL, 744977323UL, 2711054317UL, 955400639UL, 37187948UL, 53133706UL, 2014551043UL, 1664498234UL, 3342787122UL, 1549278321UL, 1245110464UL, 3424539081UL, 496150741UL, 2757636973UL, 3590044052UL, 2712703548UL, 1366894959UL, 2066534443UL, 1538653374UL, 168718075UL, 2435805251UL, 588815465UL, 318307195UL, 3164200096UL, 417809976UL, 623036767UL, +340121872UL, 3426055217UL, 56330125UL, 3268029211UL, 1117100306UL, 345899179UL, 979486044UL, 3657965225UL, 4109701299UL, 664937685UL, 2627187961UL, 2747102301UL, 1764003230UL, 3177910586UL, 3081492846UL, 2295419724UL, 1088606857UL, 1506534805UL, 971284719UL, 3224921758UL, 3336906843UL, 984983218UL, 1224379418UL, 4117299702UL, 1973783225UL, 3609783242UL, 1044785427UL, 3715175536UL, 3904547465UL, 459692505UL, 3546328518UL, 2096978494UL, +1300375875UL, 1805392236UL, 3072717072UL, 99113127UL, 972796497UL, 1658649136UL, 1974081931UL, 3940966682UL, 2092428023UL, 2914458983UL, 1546542514UL, 1130620125UL, 4117533767UL, 3372991735UL, 947968718UL, 2704347564UL, 2300583688UL, 915286167UL, 1553874575UL, 2124709798UL, 701000054UL, 349103195UL, 1554395274UL, 3140941933UL, 2569019225UL, 2630572105UL, 2794301280UL, 321399291UL, 1158058020UL, 4051601694UL, 122802750UL, 3012686842UL, +2588402967UL, 3420589812UL, 1738150581UL, 193235885UL, 1558092297UL, 1233353728UL, 1080743465UL, 1527068788UL, 2188057155UL, 2715412992UL, 4274317234UL, 1657504087UL, 1543089352UL, 1079741964UL, 922252155UL, 569761460UL, 3215661310UL, 2869922986UL, 2491078689UL, 632504591UL, 2169581755UL, 2552457727UL, 2807462748UL, 3347573916UL, 681756629UL, 801451286UL, 3504956478UL, 3400676931UL, 3602650700UL, 3530372129UL, 4117441036UL, 1827438812UL, +4056234054UL, 570161747UL, 4246897171UL, 2217508286UL, 4117450683UL, 3321376103UL, 756072139UL, 3977667932UL, 623718443UL, 2276396692UL, 1340008665UL, 3829898369UL, 710314822UL, 3733316262UL, 1497955597UL, 2098292377UL, 757539371UL, 1247731879UL, 336477088UL, 532374143UL, 2210327641UL, 2374238409UL, 272472192UL, 2142741093UL, 2557920990UL, 3502520226UL, 1632439709UL, 1516814248UL, 4250883502UL, 1967663703UL, 499168780UL, 1267642920UL, +4267389372UL, 94668579UL, 1980152960UL, 2695928666UL, 2252616933UL, 63833646UL, 2488747616UL, 700459471UL, 4181471443UL, 2711054317UL, 955400639UL, 37187948UL, 53133706UL, 441944403UL, 1664498234UL, 3342787122UL, 1549278321UL, 1245110464UL, 2271611585UL, 496150741UL, 2757636973UL, 3590044052UL, 2712703548UL, 3009817799UL, 2066534443UL, 1538653374UL, 168718075UL, 2435805251UL, 734763537UL, 318307195UL, 3164200096UL, 417809976UL, +623036767UL, 4002728646UL, 3426055217UL, 56330125UL, 3268029211UL, 1117100306UL, 1435987728UL, 979486044UL, 3657965225UL, 4109701299UL, 664937685UL, 815527474UL, 2747102301UL, 1764003230UL, 3177910586UL, 3081492846UL, 63383766UL, 1088606857UL, 1506534805UL, 971284719UL, 3224921758UL, 2331024939UL, 984983218UL, 1224379418UL, 4117299702UL, 1973783225UL, 3998070267UL, 1044785427UL, 3715175536UL, 3904547465UL, 459692505UL, 2582830990UL, +2096978494UL, 1300375875UL, 1805392236UL, 3072717072UL, 321154403UL, 972796497UL, 1658649136UL, 1974081931UL, 3940966682UL, 3789726976UL, 2914458983UL, 1546542514UL, 1130620125UL, 4117533767UL, 3440681546UL, 947968718UL, 2704347564UL, 2300583688UL, 915286167UL, 474021937UL, 2124709798UL, 701000054UL, 349103195UL, 1554395274UL, 702752814UL, 2569019225UL, 2630572105UL, 2794301280UL, 321399291UL, 2406346046UL, 4051601694UL, 122802750UL, +3012686842UL, 2588402967UL, 1782259321UL, 1738150581UL, 193235885UL, 1558092297UL, 1233353728UL, 3935919190UL, 1527068788UL, 2188057155UL, 2715412992UL, 4274317234UL, 1722541048UL, 1543089352UL, 1079741964UL, 922252155UL, 569761460UL, 3384000986UL, 2869922986UL, 2491078689UL, 632504591UL, 2169581755UL, 3451609034UL, 2807462748UL, 3347573916UL, 681756629UL, 801451286UL, 2643408064UL, 3400676931UL, 3602650700UL, 3530372129UL, 4117441036UL, +3635077251UL, 4056234054UL, 570161747UL, 4246897171UL, 2217508286UL, 2364796923UL, 3321376103UL, 756072139UL, 3977667932UL, 623718443UL, 3792539489UL, 1340008665UL, 3829898369UL, 710314822UL, 3733316262UL, 876419217UL, 2098292377UL, 757539371UL, 1247731879UL, 336477088UL, 3307300788UL, 2210327641UL, 2374238409UL, 272472192UL, 2142741093UL, 4142392723UL, 3502520226UL, 1632439709UL, 1516814248UL, 4250883502UL, 3551852862UL, 499168780UL, +1267642920UL, 4267389372UL, 94668579UL, 1177286958UL, 2695928666UL, 2252616933UL, 63833646UL, 2488747616UL, 3571573975UL, 4181471443UL, 2711054317UL, 955400639UL, 37187948UL, 1485050393UL, 441944403UL, 1664498234UL, 3342787122UL, 1549278321UL, 518707274UL, 2271611585UL, 496150741UL, 2757636973UL, 3590044052UL, 305206687UL, 3009817799UL, 2066534443UL, 1538653374UL, 168718075UL, 1914032206UL, 734763537UL, 318307195UL, 3164200096UL, +417809976UL, 2062496275UL, 4002728646UL, 3426055217UL, 56330125UL, 3268029211UL, 1878869053UL, 1435987728UL, 979486044UL, 3657965225UL, 4109701299UL, 1558853775UL, 815527474UL, 2747102301UL, 1764003230UL, 3177910586UL, 681877401UL, 63383766UL, 1088606857UL, 1506534805UL, 971284719UL, 2546285777UL, 2331024939UL, 984983218UL, 1224379418UL, 4117299702UL, 539292757UL, 3998070267UL, 1044785427UL, 3715175536UL, 3904547465UL, 3854154565UL, +2582830990UL, 2096978494UL, 1300375875UL, 1805392236UL, 2586804198UL, 321154403UL, 972796497UL, 1658649136UL, 1974081931UL, 1718873863UL, 3789726976UL, 2914458983UL, 1546542514UL, 1130620125UL, 477866180UL, 3440681546UL, 947968718UL, 2704347564UL, 2300583688UL, 56071603UL, 474021937UL, 2124709798UL, 701000054UL, 349103195UL, 2431577249UL, 702752814UL, 2569019225UL, 2630572105UL, 2794301280UL, 211758134UL, 2406346046UL, 4051601694UL, +122802750UL, 3012686842UL, 2470642374UL, 1782259321UL, 1738150581UL, 193235885UL, 1558092297UL, 852353933UL, 3935919190UL, 1527068788UL, 2188057155UL, 2715412992UL, 543290606UL, 1722541048UL, 1543089352UL, 1079741964UL, 922252155UL, 1146820965UL, 3384000986UL, 2869922986UL, 2491078689UL, 632504591UL, 2936494996UL, 3451609034UL, 2807462748UL, 3347573916UL, 681756629UL, 3428474076UL, 2643408064UL, 3400676931UL, 3602650700UL, 3530372129UL, +3558016488UL, 304167301UL, 3073812276UL, 1253385329UL, 801639697UL, 1346336854UL, 3880416830UL, 1110804934UL, 2500585706UL, 1294233475UL, 1964132477UL, 1625651370UL, 2732590160UL, 310054807UL, 3350133555UL, 800839525UL, 3435579932UL, 2120216654UL, 407780291UL, 1228117799UL, 513334510UL, 1423091447UL, 3698882838UL, 2556406643UL, 1536483608UL, 998695315UL, 1619514015UL, 4197375975UL, 892985909UL, 993665758UL, 4160405430UL, 2379977763UL, +1423742790UL, 4286808034UL, 479280944UL, 3611297256UL, 3481820363UL, 1261889958UL, 455298115UL, 3955764756UL, 2406161837UL, 185873336UL, 3382956716UL, 3556168427UL, 3988426650UL, 2917586591UL, 1248672474UL, 2925146191UL, 1416331075UL, 290755159UL, 2845168299UL, 3301422441UL, 3771816588UL, 491352430UL, 2461746382UL, 1591975949UL, 604909111UL, 3595669760UL, 4079314041UL, 258321046UL, 1352583874UL, 999018951UL, 3150079914UL, 113122510UL, +743303046UL, 3205496412UL, 4267738054UL, 2567402806UL, 2181107494UL, 3266354249UL, 1941487496UL, 2742084900UL, 3758785335UL, 732694221UL, 2052988791UL, 1759288229UL, 1094292464UL, 1582835026UL, 2817864273UL, 666443657UL, 419482443UL, 2877435004UL, 2944696351UL, 2523539432UL, 301119182UL, 998264713UL, 2314419254UL, 3610447393UL, 1139414242UL, 1486351830UL, 3207929489UL, 384633091UL, 4056367270UL, 2348418835UL, 3773781885UL, 1963929818UL, +804929680UL, 1511023454UL, 3915948102UL, 1371942526UL, 2586212526UL, 130122933UL, 2030859646UL, 3730011315UL, 118408868UL, 632704878UL, 3559959612UL, 2926361713UL, 1401386286UL, 599210027UL, 2315051975UL, 157809758UL, 1148939942UL, 3060024350UL, 1464284678UL, 3209480975UL, 3961060416UL, 3481639206UL, 4113344379UL, 3475766200UL, 130581501UL, 1844026536UL, 2661594012UL, 3145812007UL, 3233175620UL, 2549419093UL, 2612966733UL, 1348260920UL, +740167863UL, 226231218UL, 2631972701UL, 2148020402UL, 3399479414UL, 1074946996UL, 30872114UL, 1342415612UL, 1071408471UL, 1141719547UL, 332346805UL, 1473336719UL, 4207932404UL, 3668838170UL, 3154502882UL, 3892070442UL, 2812790310UL, 13931822UL, 1150258251UL, 2369539473UL, 640926011UL, 2991135002UL, 2410382633UL, 548200125UL, 3977740663UL, 1245837867UL, 2378569399UL, 1561469990UL, 2437445882UL, 214387770UL, 3329587833UL, 281635893UL, +}, +{ +1720103319UL, 2201367526UL, 1415072072UL, 2446588589UL, 2195586017UL, 3817930623UL, 653121934UL, 2766514657UL, 765921436UL, 630082485UL, 2990883045UL, 3304472999UL, 471385134UL, 4097977544UL, 3749829028UL, 3587534772UL, 1064359851UL, 800061060UL, 2844220510UL, 389838005UL, 3681318140UL, 1515923235UL, 1885079324UL, 713031018UL, 1962734763UL, 2288160004UL, 1983331336UL, 1247350521UL, 4208372034UL, 1444837930UL, 3549494305UL, 4169715512UL, +701313302UL, 1118275019UL, 3118975645UL, 4153969630UL, 3516491181UL, 3601057044UL, 2509222288UL, 223064937UL, 899123842UL, 2574531231UL, 1386928111UL, 3790651401UL, 1300768348UL, 2038833061UL, 3736517792UL, 3850203561UL, 1679542285UL, 3391273474UL, 3862995487UL, 3118056386UL, 47128429UL, 2977525950UL, 3236389548UL, 1937040839UL, 4223233198UL, 2105119262UL, 721111284UL, 331726226UL, 68419013UL, 2575393464UL, 3648293304UL, 1448878851UL, +4186783614UL, 3696899986UL, 1270877069UL, 3351263117UL, 3918639273UL, 1472902162UL, 2767482392UL, 3549853842UL, 2353191576UL, 3353325530UL, 3072485271UL, 2689121900UL, 2335686695UL, 246689858UL, 2946177636UL, 1677728066UL, 1455723263UL, 3447540996UL, 2143976172UL, 1779511280UL, 3667361203UL, 1575502035UL, 849872082UL, 3527265600UL, 1443266215UL, 1320668722UL, 458373857UL, 3862342513UL, 699597603UL, 685707268UL, 948502001UL, 2501058653UL, +2254562046UL, 2210683894UL, 29088679UL, 1456231200UL, 2764392560UL, 4138068372UL, 3094591474UL, 1093749152UL, 1668875176UL, 3133003149UL, 4128702884UL, 652852832UL, 2211671337UL, 2231125160UL, 131729558UL, 3845605816UL, 3769660625UL, 1696592453UL, 728353643UL, 2751201502UL, 3496971733UL, 3349166522UL, 1005919830UL, 3411089601UL, 3754493523UL, 1994945529UL, 1604309774UL, 2083609686UL, 833983349UL, 2600153513UL, 1677348112UL, 207321473UL, +1051990507UL, 2135039620UL, 4239461390UL, 1574144998UL, 1070761856UL, 1990807569UL, 112704720UL, 2506523299UL, 2827487353UL, 4130754901UL, 1943274185UL, 3913701053UL, 1014850621UL, 3662772872UL, 4115124063UL, 1760146762UL, 3254829227UL, 800302547UL, 3602066837UL, 975658158UL, 2880018391UL, 714134831UL, 2696483406UL, 2351365577UL, 2811011071UL, 3505407160UL, 54109504UL, 424967367UL, 3759525737UL, 1726627246UL, 1110539071UL, 2339755764UL, +3356877114UL, 1720103319UL, 2201367526UL, 1415072072UL, 2446588589UL, 2499136377UL, 3817930623UL, 653121934UL, 2766514657UL, 765921436UL, 3794433488UL, 2990883045UL, 3304472999UL, 471385134UL, 4097977544UL, 3618516788UL, 3587534772UL, 1064359851UL, 800061060UL, 2844220510UL, 2319780070UL, 3681318140UL, 1515923235UL, 1885079324UL, 713031018UL, 11705290UL, 2288160004UL, 1983331336UL, 1247350521UL, 4208372034UL, 2508892029UL, 3549494305UL, +4169715512UL, 701313302UL, 1118275019UL, 1430522809UL, 4153969630UL, 3516491181UL, 3601057044UL, 2509222288UL, 1917025539UL, 899123842UL, 2574531231UL, 1386928111UL, 3790651401UL, 1219040401UL, 2038833061UL, 3736517792UL, 3850203561UL, 1679542285UL, 671522957UL, 3862995487UL, 3118056386UL, 47128429UL, 2977525950UL, 2762831063UL, 1937040839UL, 4223233198UL, 2105119262UL, 721111284UL, 1386688457UL, 68419013UL, 2575393464UL, 3648293304UL, +1448878851UL, 466405406UL, 3696899986UL, 1270877069UL, 3351263117UL, 3918639273UL, 94103836UL, 2767482392UL, 3549853842UL, 2353191576UL, 3353325530UL, 349361794UL, 2689121900UL, 2335686695UL, 246689858UL, 2946177636UL, 3232050945UL, 1455723263UL, 3447540996UL, 2143976172UL, 1779511280UL, 542837628UL, 1575502035UL, 849872082UL, 3527265600UL, 1443266215UL, 1867394883UL, 458373857UL, 3862342513UL, 699597603UL, 685707268UL, 4210562190UL, +2501058653UL, 2254562046UL, 2210683894UL, 29088679UL, 3647972960UL, 2764392560UL, 4138068372UL, 3094591474UL, 1093749152UL, 312511475UL, 3133003149UL, 4128702884UL, 652852832UL, 2211671337UL, 145492343UL, 131729558UL, 3845605816UL, 3769660625UL, 1696592453UL, 4223421915UL, 2751201502UL, 3496971733UL, 3349166522UL, 1005919830UL, 1656802049UL, 3754493523UL, 1994945529UL, 1604309774UL, 2083609686UL, 3032348100UL, 2600153513UL, 1677348112UL, +207321473UL, 1051990507UL, 3349078950UL, 4239461390UL, 1574144998UL, 1070761856UL, 1990807569UL, 2970449178UL, 2506523299UL, 2827487353UL, 4130754901UL, 1943274185UL, 445467699UL, 1014850621UL, 3662772872UL, 4115124063UL, 1760146762UL, 3738518624UL, 800302547UL, 3602066837UL, 975658158UL, 2880018391UL, 1553758240UL, 2696483406UL, 2351365577UL, 2811011071UL, 3505407160UL, 1259180427UL, 424967367UL, 3759525737UL, 1726627246UL, 1110539071UL, +2863575420UL, 3356877114UL, 1720103319UL, 2201367526UL, 1415072072UL, 1463388387UL, 2499136377UL, 3817930623UL, 653121934UL, 2766514657UL, 526940162UL, 3794433488UL, 2990883045UL, 3304472999UL, 471385134UL, 594057325UL, 3618516788UL, 3587534772UL, 1064359851UL, 800061060UL, 1001523010UL, 2319780070UL, 3681318140UL, 1515923235UL, 1885079324UL, 255576756UL, 11705290UL, 2288160004UL, 1983331336UL, 1247350521UL, 1108575113UL, 2508892029UL, +3549494305UL, 4169715512UL, 701313302UL, 524281295UL, 1430522809UL, 4153969630UL, 3516491181UL, 3601057044UL, 1816283752UL, 1917025539UL, 899123842UL, 2574531231UL, 1386928111UL, 1530966640UL, 1219040401UL, 2038833061UL, 3736517792UL, 3850203561UL, 1855689726UL, 671522957UL, 3862995487UL, 3118056386UL, 47128429UL, 1718476461UL, 2762831063UL, 1937040839UL, 4223233198UL, 2105119262UL, 176166283UL, 1386688457UL, 68419013UL, 2575393464UL, +3648293304UL, 4069820559UL, 466405406UL, 3696899986UL, 1270877069UL, 3351263117UL, 1645545933UL, 94103836UL, 2767482392UL, 3549853842UL, 2353191576UL, 4163887784UL, 349361794UL, 2689121900UL, 2335686695UL, 246689858UL, 1246040634UL, 3232050945UL, 1455723263UL, 3447540996UL, 2143976172UL, 2111249329UL, 542837628UL, 1575502035UL, 849872082UL, 3527265600UL, 1836050084UL, 1867394883UL, 458373857UL, 3862342513UL, 699597603UL, 3139537113UL, +4210562190UL, 2501058653UL, 2254562046UL, 2210683894UL, 3997617191UL, 3647972960UL, 2764392560UL, 4138068372UL, 3094591474UL, 2664795910UL, 312511475UL, 3133003149UL, 4128702884UL, 652852832UL, 1658020144UL, 145492343UL, 131729558UL, 3845605816UL, 3769660625UL, 2822578949UL, 4223421915UL, 2751201502UL, 3496971733UL, 3349166522UL, 1582873482UL, 1656802049UL, 3754493523UL, 1994945529UL, 1604309774UL, 1113569720UL, 3032348100UL, 2600153513UL, +1677348112UL, 207321473UL, 3169983987UL, 3349078950UL, 4239461390UL, 1574144998UL, 1070761856UL, 1308776367UL, 2970449178UL, 2506523299UL, 2827487353UL, 4130754901UL, 1403493846UL, 445467699UL, 1014850621UL, 3662772872UL, 4115124063UL, 340210579UL, 3738518624UL, 800302547UL, 3602066837UL, 975658158UL, 3367770843UL, 1553758240UL, 2696483406UL, 2351365577UL, 2811011071UL, 4162875353UL, 1259180427UL, 424967367UL, 3759525737UL, 1726627246UL, +1341806135UL, 2863575420UL, 3356877114UL, 1720103319UL, 2201367526UL, 2232383995UL, 1463388387UL, 2499136377UL, 3817930623UL, 653121934UL, 1756183481UL, 526940162UL, 3794433488UL, 2990883045UL, 3304472999UL, 2185125572UL, 594057325UL, 3618516788UL, 3587534772UL, 1064359851UL, 2933544964UL, 1001523010UL, 2319780070UL, 3681318140UL, 1515923235UL, 4147783641UL, 255576756UL, 11705290UL, 2288160004UL, 1983331336UL, 956739400UL, 1108575113UL, +2508892029UL, 3549494305UL, 4169715512UL, 142273913UL, 524281295UL, 1430522809UL, 4153969630UL, 3516491181UL, 986032639UL, 1816283752UL, 1917025539UL, 899123842UL, 2574531231UL, 1508271110UL, 1530966640UL, 1219040401UL, 2038833061UL, 3736517792UL, 458417668UL, 1855689726UL, 671522957UL, 3862995487UL, 3118056386UL, 284266432UL, 1718476461UL, 2762831063UL, 1937040839UL, 4223233198UL, 1605514069UL, 176166283UL, 1386688457UL, 68419013UL, +2575393464UL, 3650747541UL, 4069820559UL, 466405406UL, 3696899986UL, 1270877069UL, 678590674UL, 1645545933UL, 94103836UL, 2767482392UL, 3549853842UL, 398179945UL, 4163887784UL, 349361794UL, 2689121900UL, 2335686695UL, 3853658293UL, 1246040634UL, 3232050945UL, 1455723263UL, 3447540996UL, 2657693810UL, 2111249329UL, 542837628UL, 1575502035UL, 849872082UL, 2061659800UL, 1836050084UL, 1867394883UL, 458373857UL, 3862342513UL, 730568629UL, +3139537113UL, 4210562190UL, 2501058653UL, 2254562046UL, 449510786UL, 3997617191UL, 3647972960UL, 2764392560UL, 4138068372UL, 1939679536UL, 2664795910UL, 312511475UL, 3133003149UL, 4128702884UL, 4057510355UL, 1658020144UL, 145492343UL, 131729558UL, 3845605816UL, 3235632110UL, 2822578949UL, 4223421915UL, 2751201502UL, 3496971733UL, 4258920219UL, 1582873482UL, 1656802049UL, 3754493523UL, 1994945529UL, 1073499993UL, 1113569720UL, 3032348100UL, +2600153513UL, 1677348112UL, 3152835240UL, 3169983987UL, 3349078950UL, 4239461390UL, 1574144998UL, 2548972357UL, 1308776367UL, 2970449178UL, 2506523299UL, 2827487353UL, 2908066033UL, 1403493846UL, 445467699UL, 1014850621UL, 3662772872UL, 1685925089UL, 340210579UL, 3738518624UL, 800302547UL, 3602066837UL, 2264692610UL, 3367770843UL, 1553758240UL, 2696483406UL, 2351365577UL, 1686022564UL, 4162875353UL, 1259180427UL, 424967367UL, 3759525737UL, +70326173UL, 3028074555UL, 2568586198UL, 2513473964UL, 2923109510UL, 2265392251UL, 3760490867UL, 147487099UL, 386755149UL, 2152759137UL, 2716532213UL, 1153507474UL, 627929575UL, 847454712UL, 2426916452UL, 3861548980UL, 209825268UL, 1090299778UL, 1876886461UL, 976019203UL, 4290216337UL, 2278290065UL, 3302814528UL, 1567440061UL, 1874857224UL, 3794588915UL, 3218569451UL, 2335365199UL, 1959651923UL, 3366000689UL, 2374428382UL, 2126784887UL, +4123272655UL, 274837369UL, 1413111935UL, 1754627204UL, 1863684635UL, 4170025739UL, 2150019850UL, 4250751856UL, 3601214212UL, 2024081043UL, 334808859UL, 3921757513UL, 3870643644UL, 2864810945UL, 1004431888UL, 4283279830UL, 873365350UL, 2479791433UL, 3393478881UL, 3373502257UL, 1882140107UL, 2546676519UL, 1208428915UL, 268043238UL, 2292710623UL, 770651064UL, 2330160036UL, 2476488258UL, 2496037992UL, 118721504UL, 2289499985UL, 987994743UL, +3610346256UL, 3371795927UL, 2681434550UL, 2213200417UL, 3729194378UL, 1657623395UL, 402983380UL, 3618058500UL, 3487743585UL, 965523531UL, 819256729UL, 2544660729UL, 3273986506UL, 60894411UL, 1779152929UL, 3598159279UL, 3429317853UL, 2246402362UL, 3761392367UL, 3921798306UL, 947928110UL, 2394097908UL, 4004330264UL, 1180759989UL, 1624349051UL, 1750929499UL, 3889184770UL, 2052097704UL, 4092981046UL, 2913733578UL, 4241980897UL, 1127407450UL, +950788009UL, 2105033320UL, 473205730UL, 981905310UL, 2888856914UL, 798112239UL, 3377889612UL, 2273659507UL, 1157471194UL, 4269212574UL, 3575306012UL, 116024754UL, 1432668659UL, 1079598649UL, 3882002482UL, 3838480186UL, 823643071UL, 1244220618UL, 1227720039UL, 1343395654UL, 4277277976UL, 2612321540UL, 3013674017UL, 3658064522UL, 2573775167UL, 142767236UL, 2545708383UL, 1740478937UL, 809036862UL, 1492188594UL, 1294286248UL, 1093543858UL, +2944418375UL, 2981996479UL, 4067464923UL, 3071157685UL, 1938984450UL, 81707323UL, 337713546UL, 1849381296UL, 3447450393UL, 3551106302UL, 3394545269UL, 3167744716UL, 1815294624UL, 3244728913UL, 2462138247UL, 2286711732UL, 3023116169UL, 707366723UL, 1314169762UL, 1511231537UL, 2227622993UL, 2876600706UL, 4271030726UL, 2020521540UL, 2966596767UL, 3964589247UL, 1291306737UL, 883851756UL, 1355819080UL, 2834319249UL, 3825063450UL, 4205423325UL, +}, +{ +525214560UL, 1972466543UL, 1542775297UL, 3030388145UL, 2623763324UL, 1445252054UL, 2315649878UL, 2940376435UL, 1322155857UL, 2007925719UL, 899111545UL, 3946601974UL, 720416639UL, 566341007UL, 3830971140UL, 2379218430UL, 946001131UL, 324551023UL, 3792134824UL, 2419222364UL, 2507004728UL, 4050415702UL, 2934667964UL, 3435655480UL, 3738151878UL, 340092998UL, 429296098UL, 3804978739UL, 1547120540UL, 976306993UL, 1134820236UL, 288696971UL, +292350374UL, 423348923UL, 4250561112UL, 1380146522UL, 646098313UL, 3081299572UL, 3633231429UL, 2348008746UL, 3250735726UL, 3495239618UL, 1083361876UL, 2660545988UL, 97607299UL, 741626628UL, 2451882102UL, 607936604UL, 1566190301UL, 3752644837UL, 1626575269UL, 2569947980UL, 120166892UL, 1936167922UL, 2964570009UL, 2601765059UL, 2550590348UL, 1491574373UL, 1916644920UL, 2955888714UL, 3900360190UL, 396836243UL, 2417234534UL, 4219822777UL, +3017031315UL, 3848370775UL, 4113753945UL, 1038708316UL, 1227041843UL, 1287656330UL, 594136009UL, 1679465955UL, 1127853612UL, 445673212UL, 2491164616UL, 4234959779UL, 3670094401UL, 2810998507UL, 2091885715UL, 4213376041UL, 3724691332UL, 1428205363UL, 2351471476UL, 1863345709UL, 3172242044UL, 1435176883UL, 925973933UL, 3166951436UL, 2056462416UL, 489417029UL, 4029854347UL, 3002516723UL, 1597712463UL, 1200457469UL, 3909654542UL, 1352519428UL, +13398705UL, 3919269221UL, 371331154UL, 332347636UL, 3726033518UL, 2407091731UL, 2926199215UL, 3054175446UL, 3208807730UL, 584793525UL, 2706493003UL, 561190823UL, 2412132195UL, 2488492462UL, 3149885896UL, 3512276852UL, 2843032269UL, 2485506176UL, 4025325347UL, 4152622551UL, 4022346903UL, 331746013UL, 197533993UL, 3658414685UL, 2670729696UL, 3290854172UL, 2251426444UL, 3569225076UL, 2466203243UL, 658184940UL, 518096293UL, 52156682UL, +2398958685UL, 745491615UL, 3723004242UL, 2847276077UL, 1857504125UL, 633035220UL, 4057593658UL, 2783467746UL, 3122875931UL, 446601186UL, 2786851490UL, 261950076UL, 2843506874UL, 745391893UL, 1404094021UL, 2234513997UL, 315083019UL, 645865358UL, 2862243948UL, 1204315994UL, 3701151065UL, 663411328UL, 1924727700UL, 1905843757UL, 1483930049UL, 449616818UL, 3793968150UL, 1840668755UL, 1671024110UL, 4079375869UL, 4171670660UL, 2585904968UL, +3886777251UL, 525214560UL, 1972466543UL, 1542775297UL, 3030388145UL, 2530126952UL, 1445252054UL, 2315649878UL, 2940376435UL, 1322155857UL, 1599103627UL, 899111545UL, 3946601974UL, 720416639UL, 566341007UL, 4070101360UL, 2379218430UL, 946001131UL, 324551023UL, 3792134824UL, 2445126690UL, 2507004728UL, 4050415702UL, 2934667964UL, 3435655480UL, 2968121571UL, 340092998UL, 429296098UL, 3804978739UL, 1547120540UL, 3901803457UL, 1134820236UL, +288696971UL, 292350374UL, 423348923UL, 1589814289UL, 1380146522UL, 646098313UL, 3081299572UL, 3633231429UL, 670777956UL, 3250735726UL, 3495239618UL, 1083361876UL, 2660545988UL, 4050232394UL, 741626628UL, 2451882102UL, 607936604UL, 1566190301UL, 1132827700UL, 1626575269UL, 2569947980UL, 120166892UL, 1936167922UL, 1280520333UL, 2601765059UL, 2550590348UL, 1491574373UL, 1916644920UL, 1073889810UL, 3900360190UL, 396836243UL, 2417234534UL, +4219822777UL, 1754651820UL, 3848370775UL, 4113753945UL, 1038708316UL, 1227041843UL, 464826842UL, 594136009UL, 1679465955UL, 1127853612UL, 445673212UL, 4198686893UL, 4234959779UL, 3670094401UL, 2810998507UL, 2091885715UL, 416103731UL, 3724691332UL, 1428205363UL, 2351471476UL, 1863345709UL, 2637470915UL, 1435176883UL, 925973933UL, 3166951436UL, 2056462416UL, 2546319147UL, 4029854347UL, 3002516723UL, 1597712463UL, 1200457469UL, 681365672UL, +1352519428UL, 13398705UL, 3919269221UL, 371331154UL, 742849231UL, 3726033518UL, 2407091731UL, 2926199215UL, 3054175446UL, 1323833820UL, 584793525UL, 2706493003UL, 561190823UL, 2412132195UL, 3747238187UL, 3149885896UL, 3512276852UL, 2843032269UL, 2485506176UL, 3817319503UL, 4152622551UL, 4022346903UL, 331746013UL, 197533993UL, 99009902UL, 2670729696UL, 3290854172UL, 2251426444UL, 3569225076UL, 4199909720UL, 658184940UL, 518096293UL, +52156682UL, 2398958685UL, 1648201186UL, 3723004242UL, 2847276077UL, 1857504125UL, 633035220UL, 1394668680UL, 2783467746UL, 3122875931UL, 446601186UL, 2786851490UL, 2590549096UL, 2843506874UL, 745391893UL, 1404094021UL, 2234513997UL, 347299411UL, 645865358UL, 2862243948UL, 1204315994UL, 3701151065UL, 4028305509UL, 1924727700UL, 1905843757UL, 1483930049UL, 449616818UL, 2251238906UL, 1840668755UL, 1671024110UL, 4079375869UL, 4171670660UL, +4080554282UL, 3886777251UL, 525214560UL, 1972466543UL, 1542775297UL, 3280177496UL, 2530126952UL, 1445252054UL, 2315649878UL, 2940376435UL, 2094983509UL, 1599103627UL, 899111545UL, 3946601974UL, 720416639UL, 1446566513UL, 4070101360UL, 2379218430UL, 946001131UL, 324551023UL, 2945613775UL, 2445126690UL, 2507004728UL, 4050415702UL, 2934667964UL, 2815036731UL, 2968121571UL, 340092998UL, 429296098UL, 3804978739UL, 3298867574UL, 3901803457UL, +1134820236UL, 288696971UL, 292350374UL, 3280367987UL, 1589814289UL, 1380146522UL, 646098313UL, 3081299572UL, 2536311658UL, 670777956UL, 3250735726UL, 3495239618UL, 1083361876UL, 3726225049UL, 4050232394UL, 741626628UL, 2451882102UL, 607936604UL, 3460165725UL, 1132827700UL, 1626575269UL, 2569947980UL, 120166892UL, 2961109404UL, 1280520333UL, 2601765059UL, 2550590348UL, 1491574373UL, 755823086UL, 1073889810UL, 3900360190UL, 396836243UL, +2417234534UL, 3036027780UL, 1754651820UL, 3848370775UL, 4113753945UL, 1038708316UL, 3784147349UL, 464826842UL, 594136009UL, 1679465955UL, 1127853612UL, 2128970592UL, 4198686893UL, 4234959779UL, 3670094401UL, 2810998507UL, 421961324UL, 416103731UL, 3724691332UL, 1428205363UL, 2351471476UL, 3407618159UL, 2637470915UL, 1435176883UL, 925973933UL, 3166951436UL, 1274860184UL, 2546319147UL, 4029854347UL, 3002516723UL, 1597712463UL, 671480036UL, +681365672UL, 1352519428UL, 13398705UL, 3919269221UL, 1150967289UL, 742849231UL, 3726033518UL, 2407091731UL, 2926199215UL, 3106945136UL, 1323833820UL, 584793525UL, 2706493003UL, 561190823UL, 2013357219UL, 3747238187UL, 3149885896UL, 3512276852UL, 2843032269UL, 3595347994UL, 3817319503UL, 4152622551UL, 4022346903UL, 331746013UL, 367216863UL, 99009902UL, 2670729696UL, 3290854172UL, 2251426444UL, 3130148315UL, 4199909720UL, 658184940UL, +518096293UL, 52156682UL, 3004378899UL, 1648201186UL, 3723004242UL, 2847276077UL, 1857504125UL, 253542783UL, 1394668680UL, 2783467746UL, 3122875931UL, 446601186UL, 1228837642UL, 2590549096UL, 2843506874UL, 745391893UL, 1404094021UL, 1324404436UL, 347299411UL, 645865358UL, 2862243948UL, 1204315994UL, 1455458347UL, 4028305509UL, 1924727700UL, 1905843757UL, 1483930049UL, 330348422UL, 2251238906UL, 1840668755UL, 1671024110UL, 4079375869UL, +606568968UL, 4080554282UL, 3886777251UL, 525214560UL, 1972466543UL, 1703103913UL, 3280177496UL, 2530126952UL, 1445252054UL, 2315649878UL, 3946153427UL, 2094983509UL, 1599103627UL, 899111545UL, 3946601974UL, 2053673584UL, 1446566513UL, 4070101360UL, 2379218430UL, 946001131UL, 4184236551UL, 2945613775UL, 2445126690UL, 2507004728UL, 4050415702UL, 3890831500UL, 2815036731UL, 2968121571UL, 340092998UL, 429296098UL, 228493148UL, 3298867574UL, +3901803457UL, 1134820236UL, 288696971UL, 2321943990UL, 3280367987UL, 1589814289UL, 1380146522UL, 646098313UL, 1765624343UL, 2536311658UL, 670777956UL, 3250735726UL, 3495239618UL, 1772431608UL, 3726225049UL, 4050232394UL, 741626628UL, 2451882102UL, 3386124330UL, 3460165725UL, 1132827700UL, 1626575269UL, 2569947980UL, 860947846UL, 2961109404UL, 1280520333UL, 2601765059UL, 2550590348UL, 2298495740UL, 755823086UL, 1073889810UL, 3900360190UL, +396836243UL, 2702634902UL, 3036027780UL, 1754651820UL, 3848370775UL, 4113753945UL, 3836550212UL, 3784147349UL, 464826842UL, 594136009UL, 1679465955UL, 1500399122UL, 2128970592UL, 4198686893UL, 4234959779UL, 3670094401UL, 1632934875UL, 421961324UL, 416103731UL, 3724691332UL, 1428205363UL, 2330377177UL, 3407618159UL, 2637470915UL, 1435176883UL, 925973933UL, 2558479866UL, 1274860184UL, 2546319147UL, 4029854347UL, 3002516723UL, 1331271216UL, +671480036UL, 681365672UL, 1352519428UL, 13398705UL, 1532459856UL, 1150967289UL, 742849231UL, 3726033518UL, 2407091731UL, 1766120506UL, 3106945136UL, 1323833820UL, 584793525UL, 2706493003UL, 3817434387UL, 2013357219UL, 3747238187UL, 3149885896UL, 3512276852UL, 203757UL, 3595347994UL, 3817319503UL, 4152622551UL, 4022346903UL, 3438004885UL, 367216863UL, 99009902UL, 2670729696UL, 3290854172UL, 1092092654UL, 3130148315UL, 4199909720UL, +658184940UL, 518096293UL, 982576981UL, 3004378899UL, 1648201186UL, 3723004242UL, 2847276077UL, 33113683UL, 253542783UL, 1394668680UL, 2783467746UL, 3122875931UL, 3109404671UL, 1228837642UL, 2590549096UL, 2843506874UL, 745391893UL, 809710525UL, 1324404436UL, 347299411UL, 645865358UL, 2862243948UL, 3652256751UL, 1455458347UL, 4028305509UL, 1924727700UL, 1905843757UL, 2035132481UL, 330348422UL, 2251238906UL, 1840668755UL, 1671024110UL, +3593348393UL, 4151905045UL, 3398483770UL, 611142788UL, 1798029112UL, 2747225670UL, 2894981396UL, 2117120651UL, 3087941624UL, 416876364UL, 700011792UL, 63929447UL, 822005210UL, 3483417647UL, 3513365134UL, 3071572873UL, 1925919001UL, 2778688996UL, 3079943255UL, 1252316311UL, 91270196UL, 3469862149UL, 156659741UL, 1342755036UL, 3821302858UL, 1790046971UL, 289329863UL, 1357914395UL, 4143182690UL, 2590503919UL, 3242437796UL, 1341085928UL, +2685277054UL, 727602392UL, 2581493226UL, 3216496864UL, 2171373196UL, 3767765187UL, 1895767358UL, 1029452326UL, 851913526UL, 1746266839UL, 3370323171UL, 648118190UL, 3244211645UL, 2623946928UL, 3859087079UL, 384443034UL, 2026989771UL, 802104797UL, 2201121552UL, 725742304UL, 1673563239UL, 4045658814UL, 2682764476UL, 3032306650UL, 2725871420UL, 3467522540UL, 534803010UL, 1135606913UL, 871336950UL, 937160030UL, 3384357161UL, 641566845UL, +2267407903UL, 331847343UL, 787968740UL, 2673012251UL, 2066357778UL, 2740382722UL, 1638377946UL, 2260504282UL, 3513172717UL, 238548903UL, 2203496688UL, 630532448UL, 3702112076UL, 2635952931UL, 3344713216UL, 139406056UL, 2369004628UL, 3547213209UL, 2944858950UL, 1231203228UL, 616949630UL, 2619739101UL, 89360251UL, 2364353701UL, 1025345607UL, 4177965685UL, 62274372UL, 3059207586UL, 3303376016UL, 2919795870UL, 3676526103UL, 2689781822UL, +1062293263UL, 2684605838UL, 863975243UL, 723728777UL, 1057919510UL, 1708017843UL, 4264127977UL, 3013938022UL, 3958746896UL, 328415103UL, 1117948849UL, 751056929UL, 2442147201UL, 1781170563UL, 765377308UL, 961452970UL, 4247303973UL, 2233034754UL, 86997820UL, 3495561473UL, 3075957349UL, 3152032365UL, 1220657606UL, 708134514UL, 26714613UL, 3749542051UL, 1640668224UL, 2252760600UL, 1635050662UL, 947216628UL, 3612773344UL, 4089189500UL, +3647048119UL, 979491227UL, 4149824933UL, 3160885292UL, 2808843788UL, 998859510UL, 3903167193UL, 1728999561UL, 3673946130UL, 279338980UL, 2507635299UL, 1614929524UL, 302060483UL, 2874453052UL, 3798613814UL, 2013436766UL, 3514754020UL, 2923162106UL, 2658720327UL, 3498579091UL, 3292220096UL, 3796129102UL, 1907288796UL, 2820663603UL, 4276052248UL, 247755133UL, 2088596201UL, 3154955976UL, 3309397641UL, 3606171919UL, 1356791029UL, 1030266022UL, +}, +{ +3868946146UL, 1938156793UL, 1877502872UL, 1408917625UL, 1549117911UL, 2465501566UL, 4218547770UL, 2942249332UL, 2731789075UL, 2366036899UL, 1312641799UL, 2243363271UL, 2238839307UL, 384814263UL, 1552361757UL, 3521369641UL, 431721717UL, 3089625732UL, 1023760034UL, 53847139UL, 2240881978UL, 3178046414UL, 145135653UL, 1580878781UL, 3500228040UL, 3360910006UL, 3285542950UL, 3330062556UL, 2870158227UL, 1481496810UL, 4222704363UL, 2973046526UL, +435155769UL, 3234730070UL, 3306545960UL, 2539776908UL, 3991420334UL, 125389349UL, 2397544348UL, 2504790975UL, 886432257UL, 1804136430UL, 1506551086UL, 219847214UL, 890282686UL, 1489840806UL, 2536942497UL, 87527661UL, 1822718904UL, 3984956867UL, 2334419518UL, 4065487054UL, 992104547UL, 1566792845UL, 1068226712UL, 2622731799UL, 921431708UL, 2833392639UL, 640267449UL, 324907409UL, 3911698049UL, 2108189994UL, 1623761598UL, 52771719UL, +467926435UL, 2811768106UL, 3760723083UL, 906402727UL, 3438479463UL, 2064004404UL, 988123982UL, 563076447UL, 2979641383UL, 1366086397UL, 2078608605UL, 3868491514UL, 1077957067UL, 615363273UL, 1388831706UL, 1586480552UL, 4216838311UL, 3587550780UL, 2057048927UL, 2814838921UL, 2454041809UL, 180612020UL, 930406098UL, 4286819113UL, 2756562967UL, 3404265234UL, 3844482428UL, 467484533UL, 4122644954UL, 3517116598UL, 1887163240UL, 4217569180UL, +4191149652UL, 2756931330UL, 3702787956UL, 152166773UL, 146763911UL, 536678737UL, 481385008UL, 3681433244UL, 1194909733UL, 3713568496UL, 3927837202UL, 846842608UL, 687314083UL, 1144793694UL, 1062075916UL, 3017627145UL, 1296695243UL, 981862419UL, 2363304726UL, 3242788356UL, 3359957762UL, 4249190787UL, 1697910336UL, 3286799886UL, 1063822293UL, 3246091430UL, 743808559UL, 2137668568UL, 2812072749UL, 2303791182UL, 3161789548UL, 2911126624UL, +4087873192UL, 1813622227UL, 1272618849UL, 1882292328UL, 3861455677UL, 2921641470UL, 3079812494UL, 2814569163UL, 1975646942UL, 2826176621UL, 1896904368UL, 831552834UL, 2935863403UL, 449217054UL, 3688067832UL, 1048877596UL, 1613227043UL, 553867520UL, 3682575786UL, 3058863948UL, 4200858129UL, 4131625UL, 2434123776UL, 2235627905UL, 2905358693UL, 3429312266UL, 3363231514UL, 1182242507UL, 2792234422UL, 1843330053UL, 4192875151UL, 1088813348UL, +357805687UL, 3868946146UL, 1938156793UL, 1877502872UL, 1408917625UL, 30638250UL, 2465501566UL, 4218547770UL, 2942249332UL, 2731789075UL, 448998968UL, 1312641799UL, 2243363271UL, 2238839307UL, 384814263UL, 2229663001UL, 3521369641UL, 431721717UL, 3089625732UL, 1023760034UL, 790771414UL, 2240881978UL, 3178046414UL, 145135653UL, 1580878781UL, 847577516UL, 3360910006UL, 3285542950UL, 3330062556UL, 2870158227UL, 112738978UL, 4222704363UL, +2973046526UL, 435155769UL, 3234730070UL, 1135073835UL, 2539776908UL, 3991420334UL, 125389349UL, 2397544348UL, 1243128255UL, 886432257UL, 1804136430UL, 1506551086UL, 219847214UL, 875051553UL, 1489840806UL, 2536942497UL, 87527661UL, 1822718904UL, 1883615145UL, 2334419518UL, 4065487054UL, 992104547UL, 1566792845UL, 1037132511UL, 2622731799UL, 921431708UL, 2833392639UL, 640267449UL, 504304037UL, 3911698049UL, 2108189994UL, 1623761598UL, +52771719UL, 3969520254UL, 2811768106UL, 3760723083UL, 906402727UL, 3438479463UL, 3707538496UL, 988123982UL, 563076447UL, 2979641383UL, 1366086397UL, 3577913613UL, 3868491514UL, 1077957067UL, 615363273UL, 1388831706UL, 903353909UL, 4216838311UL, 3587550780UL, 2057048927UL, 2814838921UL, 3532304828UL, 180612020UL, 930406098UL, 4286819113UL, 2756562967UL, 1950528802UL, 3844482428UL, 467484533UL, 4122644954UL, 3517116598UL, 139409766UL, +4217569180UL, 4191149652UL, 2756931330UL, 3702787956UL, 504815033UL, 146763911UL, 536678737UL, 481385008UL, 3681433244UL, 2166865052UL, 3713568496UL, 3927837202UL, 846842608UL, 687314083UL, 135403542UL, 1062075916UL, 3017627145UL, 1296695243UL, 981862419UL, 2405232584UL, 3242788356UL, 3359957762UL, 4249190787UL, 1697910336UL, 3517294012UL, 1063822293UL, 3246091430UL, 743808559UL, 2137668568UL, 2962825355UL, 2303791182UL, 3161789548UL, +2911126624UL, 4087873192UL, 2344237973UL, 1272618849UL, 1882292328UL, 3861455677UL, 2921641470UL, 1062672856UL, 2814569163UL, 1975646942UL, 2826176621UL, 1896904368UL, 3172875195UL, 2935863403UL, 449217054UL, 3688067832UL, 1048877596UL, 983648949UL, 553867520UL, 3682575786UL, 3058863948UL, 4200858129UL, 2552994282UL, 2434123776UL, 2235627905UL, 2905358693UL, 3429312266UL, 461707508UL, 1182242507UL, 2792234422UL, 1843330053UL, 4192875151UL, +2557078297UL, 357805687UL, 3868946146UL, 1938156793UL, 1877502872UL, 1178921294UL, 30638250UL, 2465501566UL, 4218547770UL, 2942249332UL, 2597087237UL, 448998968UL, 1312641799UL, 2243363271UL, 2238839307UL, 3465588695UL, 2229663001UL, 3521369641UL, 431721717UL, 3089625732UL, 2420359327UL, 790771414UL, 2240881978UL, 3178046414UL, 145135653UL, 3411014139UL, 847577516UL, 3360910006UL, 3285542950UL, 3330062556UL, 4257518865UL, 112738978UL, +4222704363UL, 2973046526UL, 435155769UL, 1154160505UL, 1135073835UL, 2539776908UL, 3991420334UL, 125389349UL, 1396475349UL, 1243128255UL, 886432257UL, 1804136430UL, 1506551086UL, 3727497731UL, 875051553UL, 1489840806UL, 2536942497UL, 87527661UL, 2521823325UL, 1883615145UL, 2334419518UL, 4065487054UL, 992104547UL, 3431387970UL, 1037132511UL, 2622731799UL, 921431708UL, 2833392639UL, 780276883UL, 504304037UL, 3911698049UL, 2108189994UL, +1623761598UL, 1832564202UL, 3969520254UL, 2811768106UL, 3760723083UL, 906402727UL, 2319993554UL, 3707538496UL, 988123982UL, 563076447UL, 2979641383UL, 3703509163UL, 3577913613UL, 3868491514UL, 1077957067UL, 615363273UL, 3925135746UL, 903353909UL, 4216838311UL, 3587550780UL, 2057048927UL, 2129250845UL, 3532304828UL, 180612020UL, 930406098UL, 4286819113UL, 571849466UL, 1950528802UL, 3844482428UL, 467484533UL, 4122644954UL, 3696836546UL, +139409766UL, 4217569180UL, 4191149652UL, 2756931330UL, 84389584UL, 504815033UL, 146763911UL, 536678737UL, 481385008UL, 281139563UL, 2166865052UL, 3713568496UL, 3927837202UL, 846842608UL, 2123715146UL, 135403542UL, 1062075916UL, 3017627145UL, 1296695243UL, 4206227732UL, 2405232584UL, 3242788356UL, 3359957762UL, 4249190787UL, 2766470555UL, 3517294012UL, 1063822293UL, 3246091430UL, 743808559UL, 2821229002UL, 2962825355UL, 2303791182UL, +3161789548UL, 2911126624UL, 503886017UL, 2344237973UL, 1272618849UL, 1882292328UL, 3861455677UL, 4158985014UL, 1062672856UL, 2814569163UL, 1975646942UL, 2826176621UL, 4118784229UL, 3172875195UL, 2935863403UL, 449217054UL, 3688067832UL, 3556237148UL, 983648949UL, 553867520UL, 3682575786UL, 3058863948UL, 3200838331UL, 2552994282UL, 2434123776UL, 2235627905UL, 2905358693UL, 4178312045UL, 461707508UL, 1182242507UL, 2792234422UL, 1843330053UL, +3597816691UL, 2557078297UL, 357805687UL, 3868946146UL, 1938156793UL, 2168462050UL, 1178921294UL, 30638250UL, 2465501566UL, 4218547770UL, 4101101381UL, 2597087237UL, 448998968UL, 1312641799UL, 2243363271UL, 313553894UL, 3465588695UL, 2229663001UL, 3521369641UL, 431721717UL, 737541534UL, 2420359327UL, 790771414UL, 2240881978UL, 3178046414UL, 326569272UL, 3411014139UL, 847577516UL, 3360910006UL, 3285542950UL, 3098408987UL, 4257518865UL, +112738978UL, 4222704363UL, 2973046526UL, 3668411828UL, 1154160505UL, 1135073835UL, 2539776908UL, 3991420334UL, 2902976896UL, 1396475349UL, 1243128255UL, 886432257UL, 1804136430UL, 2162242501UL, 3727497731UL, 875051553UL, 1489840806UL, 2536942497UL, 2238214198UL, 2521823325UL, 1883615145UL, 2334419518UL, 4065487054UL, 1081167745UL, 3431387970UL, 1037132511UL, 2622731799UL, 921431708UL, 2612105434UL, 780276883UL, 504304037UL, 3911698049UL, +2108189994UL, 2518535877UL, 1832564202UL, 3969520254UL, 2811768106UL, 3760723083UL, 2894544992UL, 2319993554UL, 3707538496UL, 988123982UL, 563076447UL, 719340658UL, 3703509163UL, 3577913613UL, 3868491514UL, 1077957067UL, 2371417985UL, 3925135746UL, 903353909UL, 4216838311UL, 3587550780UL, 3146473377UL, 2129250845UL, 3532304828UL, 180612020UL, 930406098UL, 1054512059UL, 571849466UL, 1950528802UL, 3844482428UL, 467484533UL, 1437844285UL, +3696836546UL, 139409766UL, 4217569180UL, 4191149652UL, 1161452915UL, 84389584UL, 504815033UL, 146763911UL, 536678737UL, 3965987378UL, 281139563UL, 2166865052UL, 3713568496UL, 3927837202UL, 2566873330UL, 2123715146UL, 135403542UL, 1062075916UL, 3017627145UL, 3204726297UL, 4206227732UL, 2405232584UL, 3242788356UL, 3359957762UL, 2338319494UL, 2766470555UL, 3517294012UL, 1063822293UL, 3246091430UL, 1531757306UL, 2821229002UL, 2962825355UL, +2303791182UL, 3161789548UL, 2778326467UL, 503886017UL, 2344237973UL, 1272618849UL, 1882292328UL, 1725075819UL, 4158985014UL, 1062672856UL, 2814569163UL, 1975646942UL, 3822868823UL, 4118784229UL, 3172875195UL, 2935863403UL, 449217054UL, 2465297154UL, 3556237148UL, 983648949UL, 553867520UL, 3682575786UL, 4023654874UL, 3200838331UL, 2552994282UL, 2434123776UL, 2235627905UL, 3063253867UL, 4178312045UL, 461707508UL, 1182242507UL, 2792234422UL, +3673318927UL, 1249828417UL, 2772427670UL, 1052324962UL, 3106530204UL, 2843183862UL, 630633945UL, 4140139503UL, 1659674037UL, 1096812757UL, 1376150732UL, 2328468653UL, 1410746620UL, 4025107990UL, 3335632421UL, 2754906610UL, 1615859006UL, 285467698UL, 4013475548UL, 1287384555UL, 1191111485UL, 1999165134UL, 2396354947UL, 1628158236UL, 3586708909UL, 228664781UL, 2501369720UL, 2516229872UL, 2977432606UL, 1745869751UL, 750661412UL, 1142144084UL, +2705268946UL, 1728488244UL, 589587862UL, 3604281130UL, 3217245915UL, 2061424631UL, 1918958878UL, 1162850007UL, 438550637UL, 1774088146UL, 3237803593UL, 827476363UL, 404982536UL, 2344744845UL, 3416436851UL, 369597250UL, 287618335UL, 1349740180UL, 3489688427UL, 417859991UL, 3229729092UL, 3214122057UL, 3955335849UL, 3014669381UL, 2178319957UL, 1259991234UL, 2689513541UL, 2628816894UL, 3734652479UL, 4202568782UL, 3149274749UL, 497295490UL, +3427602420UL, 3229774907UL, 59257138UL, 856364156UL, 429586733UL, 1800559699UL, 1300239050UL, 1311125646UL, 257421988UL, 3749074142UL, 1648939149UL, 1914174865UL, 105489877UL, 3599116888UL, 2695725484UL, 1543985792UL, 3210070699UL, 1867126432UL, 3088920410UL, 953084407UL, 2185095866UL, 1427606476UL, 1572442276UL, 3322674991UL, 3578824788UL, 1156246244UL, 2938200612UL, 3409545464UL, 215820858UL, 2279282461UL, 3861049095UL, 1589517366UL, +208707366UL, 2741570297UL, 440313302UL, 864288468UL, 1564945290UL, 1050929272UL, 3037450392UL, 1101323242UL, 1200278943UL, 3005564105UL, 3847988630UL, 3251750599UL, 2608433412UL, 3106720723UL, 1522694503UL, 3857782840UL, 4282681349UL, 2229263718UL, 4106780914UL, 125648941UL, 1933617693UL, 2971178569UL, 3537872030UL, 448962137UL, 652123777UL, 2393871920UL, 3938047691UL, 244410098UL, 3110791961UL, 3122318189UL, 877378106UL, 3683644255UL, +4279094311UL, 3638987055UL, 667681197UL, 1679868535UL, 1938378101UL, 1331340184UL, 734163051UL, 3409564713UL, 955108672UL, 3969637663UL, 156515523UL, 1871394552UL, 590275639UL, 3237133664UL, 898438533UL, 2291347006UL, 644781653UL, 3575493549UL, 1206698159UL, 2484805619UL, 2931447110UL, 2411269190UL, 3866437145UL, 161562563UL, 3077166456UL, 792874130UL, 3193406610UL, 2500233218UL, 596837225UL, 3667458052UL, 3239960816UL, 2271901243UL, +}, +{ +3975736867UL, 2402230281UL, 4092718962UL, 3100052505UL, 3277909563UL, 2827154828UL, 1067483357UL, 3495429909UL, 426635932UL, 2702495453UL, 725679489UL, 3705541400UL, 1308182381UL, 27549785UL, 3000675918UL, 2982141597UL, 1090931027UL, 755020243UL, 3986354189UL, 2529541113UL, 452574019UL, 2384876926UL, 2147764179UL, 1360907484UL, 2072364695UL, 3034185952UL, 2765119653UL, 3279755577UL, 3828140333UL, 582568392UL, 4228353628UL, 701214306UL, +2460043371UL, 3943376509UL, 2443090800UL, 2481277520UL, 859309333UL, 2928621220UL, 1933644685UL, 3803162893UL, 3310629548UL, 2361261213UL, 790233558UL, 2517540072UL, 2823327610UL, 2952921690UL, 3295251862UL, 1089451775UL, 2637751681UL, 1648031370UL, 1343061717UL, 2355026672UL, 67684812UL, 4019593497UL, 2636283634UL, 1051433451UL, 51111285UL, 15338687UL, 3779021741UL, 3987886044UL, 70037785UL, 2009147353UL, 4236701871UL, 928261128UL, +2185183571UL, 2793993680UL, 2975111058UL, 3730415022UL, 3316612678UL, 823585671UL, 4153354125UL, 509071385UL, 2056228251UL, 4034784810UL, 96820040UL, 169863045UL, 932848332UL, 2282651407UL, 747279843UL, 1387211022UL, 2410099142UL, 3394315084UL, 3191572807UL, 4073182500UL, 3768455462UL, 3712420663UL, 3000991259UL, 249137656UL, 2477445202UL, 3952155443UL, 392730170UL, 4208559971UL, 24751401UL, 661761054UL, 1574175475UL, 2715927647UL, +985309803UL, 2570053358UL, 619269634UL, 3890591314UL, 1129119636UL, 3133886450UL, 328788870UL, 3449809720UL, 1380118080UL, 2719792059UL, 691527418UL, 3487733607UL, 3819095050UL, 3367871088UL, 709089170UL, 1057897966UL, 1938975941UL, 4082466714UL, 251564920UL, 3083496965UL, 1040123365UL, 295024253UL, 2788334176UL, 3430095934UL, 3641758945UL, 2029993123UL, 3231254260UL, 150555625UL, 2270671577UL, 2032382533UL, 2088497043UL, 1392075576UL, +644811077UL, 2122632989UL, 3224165725UL, 1571908345UL, 2558692460UL, 1493305706UL, 4064652450UL, 448105905UL, 699188129UL, 2017324335UL, 4286307548UL, 2415725473UL, 3976741021UL, 3526784185UL, 2882973520UL, 3420335125UL, 2034028744UL, 1425242390UL, 982315917UL, 2614735561UL, 2439972944UL, 2518992720UL, 3792239985UL, 3260669732UL, 2586472751UL, 3432756715UL, 1318634102UL, 3722487277UL, 3037304631UL, 433233786UL, 3750002877UL, 2504731459UL, +1111327015UL, 3975736867UL, 2402230281UL, 4092718962UL, 3100052505UL, 3521430425UL, 2827154828UL, 1067483357UL, 3495429909UL, 426635932UL, 2034644068UL, 725679489UL, 3705541400UL, 1308182381UL, 27549785UL, 3001720496UL, 2982141597UL, 1090931027UL, 755020243UL, 3986354189UL, 307638580UL, 452574019UL, 2384876926UL, 2147764179UL, 1360907484UL, 1701580099UL, 3034185952UL, 2765119653UL, 3279755577UL, 3828140333UL, 2659043235UL, 4228353628UL, +701214306UL, 2460043371UL, 3943376509UL, 2084857792UL, 2481277520UL, 859309333UL, 2928621220UL, 1933644685UL, 4152646669UL, 3310629548UL, 2361261213UL, 790233558UL, 2517540072UL, 481283060UL, 2952921690UL, 3295251862UL, 1089451775UL, 2637751681UL, 2915212660UL, 1343061717UL, 2355026672UL, 67684812UL, 4019593497UL, 3290479436UL, 1051433451UL, 51111285UL, 15338687UL, 3779021741UL, 1430944862UL, 70037785UL, 2009147353UL, 4236701871UL, +928261128UL, 2063919641UL, 2793993680UL, 2975111058UL, 3730415022UL, 3316612678UL, 2373806232UL, 4153354125UL, 509071385UL, 2056228251UL, 4034784810UL, 1912268707UL, 169863045UL, 932848332UL, 2282651407UL, 747279843UL, 3712980941UL, 2410099142UL, 3394315084UL, 3191572807UL, 4073182500UL, 4262344652UL, 3712420663UL, 3000991259UL, 249137656UL, 2477445202UL, 3374467273UL, 392730170UL, 4208559971UL, 24751401UL, 661761054UL, 1670592959UL, +2715927647UL, 985309803UL, 2570053358UL, 619269634UL, 830547082UL, 1129119636UL, 3133886450UL, 328788870UL, 3449809720UL, 202644333UL, 2719792059UL, 691527418UL, 3487733607UL, 3819095050UL, 1400269159UL, 709089170UL, 1057897966UL, 1938975941UL, 4082466714UL, 3393893128UL, 3083496965UL, 1040123365UL, 295024253UL, 2788334176UL, 1219456UL, 3641758945UL, 2029993123UL, 3231254260UL, 150555625UL, 3713963210UL, 2032382533UL, 2088497043UL, +1392075576UL, 644811077UL, 3733090890UL, 3224165725UL, 1571908345UL, 2558692460UL, 1493305706UL, 1678929187UL, 448105905UL, 699188129UL, 2017324335UL, 4286307548UL, 3368868963UL, 3976741021UL, 3526784185UL, 2882973520UL, 3420335125UL, 3233347584UL, 1425242390UL, 982315917UL, 2614735561UL, 2439972944UL, 4172908214UL, 3792239985UL, 3260669732UL, 2586472751UL, 3432756715UL, 1926157640UL, 3722487277UL, 3037304631UL, 433233786UL, 3750002877UL, +625648993UL, 1111327015UL, 3975736867UL, 2402230281UL, 4092718962UL, 1349560774UL, 3521430425UL, 2827154828UL, 1067483357UL, 3495429909UL, 2808148912UL, 2034644068UL, 725679489UL, 3705541400UL, 1308182381UL, 212242504UL, 3001720496UL, 2982141597UL, 1090931027UL, 755020243UL, 2510536004UL, 307638580UL, 452574019UL, 2384876926UL, 2147764179UL, 3227931749UL, 1701580099UL, 3034185952UL, 2765119653UL, 3279755577UL, 1054678914UL, 2659043235UL, +4228353628UL, 701214306UL, 2460043371UL, 381309305UL, 2084857792UL, 2481277520UL, 859309333UL, 2928621220UL, 891630344UL, 4152646669UL, 3310629548UL, 2361261213UL, 790233558UL, 1490030690UL, 481283060UL, 2952921690UL, 3295251862UL, 1089451775UL, 2025962691UL, 2915212660UL, 1343061717UL, 2355026672UL, 67684812UL, 2217081575UL, 3290479436UL, 1051433451UL, 51111285UL, 15338687UL, 3455020635UL, 1430944862UL, 70037785UL, 2009147353UL, +4236701871UL, 1155691935UL, 2063919641UL, 2793993680UL, 2975111058UL, 3730415022UL, 403147571UL, 2373806232UL, 4153354125UL, 509071385UL, 2056228251UL, 444685935UL, 1912268707UL, 169863045UL, 932848332UL, 2282651407UL, 2077207745UL, 3712980941UL, 2410099142UL, 3394315084UL, 3191572807UL, 640536184UL, 4262344652UL, 3712420663UL, 3000991259UL, 249137656UL, 368243227UL, 3374467273UL, 392730170UL, 4208559971UL, 24751401UL, 495648080UL, +1670592959UL, 2715927647UL, 985309803UL, 2570053358UL, 2181488546UL, 830547082UL, 1129119636UL, 3133886450UL, 328788870UL, 2497762979UL, 202644333UL, 2719792059UL, 691527418UL, 3487733607UL, 1976943620UL, 1400269159UL, 709089170UL, 1057897966UL, 1938975941UL, 2071351862UL, 3393893128UL, 3083496965UL, 1040123365UL, 295024253UL, 1440317859UL, 1219456UL, 3641758945UL, 2029993123UL, 3231254260UL, 952956380UL, 3713963210UL, 2032382533UL, +2088497043UL, 1392075576UL, 4180475645UL, 3733090890UL, 3224165725UL, 1571908345UL, 2558692460UL, 3482549931UL, 1678929187UL, 448105905UL, 699188129UL, 2017324335UL, 2431113987UL, 3368868963UL, 3976741021UL, 3526784185UL, 2882973520UL, 1900625235UL, 3233347584UL, 1425242390UL, 982315917UL, 2614735561UL, 1128074864UL, 4172908214UL, 3792239985UL, 3260669732UL, 2586472751UL, 4095880420UL, 1926157640UL, 3722487277UL, 3037304631UL, 433233786UL, +2927295412UL, 625648993UL, 1111327015UL, 3975736867UL, 2402230281UL, 259216032UL, 1349560774UL, 3521430425UL, 2827154828UL, 1067483357UL, 989690947UL, 2808148912UL, 2034644068UL, 725679489UL, 3705541400UL, 588787520UL, 212242504UL, 3001720496UL, 2982141597UL, 1090931027UL, 1235811382UL, 2510536004UL, 307638580UL, 452574019UL, 2384876926UL, 3536994565UL, 3227931749UL, 1701580099UL, 3034185952UL, 2765119653UL, 463890041UL, 1054678914UL, +2659043235UL, 4228353628UL, 701214306UL, 3085494195UL, 381309305UL, 2084857792UL, 2481277520UL, 859309333UL, 3760199179UL, 891630344UL, 4152646669UL, 3310629548UL, 2361261213UL, 2550680915UL, 1490030690UL, 481283060UL, 2952921690UL, 3295251862UL, 4195487760UL, 2025962691UL, 2915212660UL, 1343061717UL, 2355026672UL, 339445869UL, 2217081575UL, 3290479436UL, 1051433451UL, 51111285UL, 1113202216UL, 3455020635UL, 1430944862UL, 70037785UL, +2009147353UL, 3982848623UL, 1155691935UL, 2063919641UL, 2793993680UL, 2975111058UL, 1725337613UL, 403147571UL, 2373806232UL, 4153354125UL, 509071385UL, 1474832043UL, 444685935UL, 1912268707UL, 169863045UL, 932848332UL, 1500855137UL, 2077207745UL, 3712980941UL, 2410099142UL, 3394315084UL, 2800379966UL, 640536184UL, 4262344652UL, 3712420663UL, 3000991259UL, 1028021485UL, 368243227UL, 3374467273UL, 392730170UL, 4208559971UL, 108468246UL, +495648080UL, 1670592959UL, 2715927647UL, 985309803UL, 61959589UL, 2181488546UL, 830547082UL, 1129119636UL, 3133886450UL, 3912020361UL, 2497762979UL, 202644333UL, 2719792059UL, 691527418UL, 1984193076UL, 1976943620UL, 1400269159UL, 709089170UL, 1057897966UL, 2381612490UL, 2071351862UL, 3393893128UL, 3083496965UL, 1040123365UL, 391784014UL, 1440317859UL, 1219456UL, 3641758945UL, 2029993123UL, 2260373342UL, 952956380UL, 3713963210UL, +2032382533UL, 2088497043UL, 135943164UL, 4180475645UL, 3733090890UL, 3224165725UL, 1571908345UL, 2660287325UL, 3482549931UL, 1678929187UL, 448105905UL, 699188129UL, 4104693318UL, 2431113987UL, 3368868963UL, 3976741021UL, 3526784185UL, 113762138UL, 1900625235UL, 3233347584UL, 1425242390UL, 982315917UL, 599246177UL, 1128074864UL, 4172908214UL, 3792239985UL, 3260669732UL, 2309689974UL, 4095880420UL, 1926157640UL, 3722487277UL, 3037304631UL, +3765223460UL, 866296319UL, 1169380319UL, 2919436659UL, 3370646420UL, 1866719277UL, 3226685069UL, 4252262342UL, 1835269960UL, 1170376930UL, 1357078768UL, 269175192UL, 3826888026UL, 3430363541UL, 1920758494UL, 51532769UL, 2919489927UL, 1568325914UL, 3184357856UL, 43519013UL, 2108988015UL, 1398495041UL, 2844640139UL, 2317092036UL, 1774750014UL, 2690907136UL, 1834465421UL, 1106469655UL, 2149810726UL, 4265420439UL, 2048218411UL, 1399986034UL, +1361619115UL, 2504769226UL, 913700780UL, 2382994726UL, 4292849877UL, 1381838410UL, 250258264UL, 1828569640UL, 1732718872UL, 1869949326UL, 835188347UL, 4180489913UL, 3049522050UL, 535168392UL, 3972173823UL, 2763844722UL, 3401884753UL, 3750694101UL, 851518496UL, 1015521371UL, 1511969218UL, 1597622074UL, 3810841601UL, 3326003776UL, 3141062630UL, 552856274UL, 4059179808UL, 175647012UL, 3893497501UL, 1805118717UL, 1064213711UL, 2310866839UL, +1397146463UL, 1798096676UL, 279868399UL, 1926726615UL, 2773068510UL, 347721208UL, 4099183723UL, 509136218UL, 2833615756UL, 3960499694UL, 4236258712UL, 1765641675UL, 535748563UL, 354515646UL, 3307314159UL, 3160079941UL, 3252681800UL, 2568363625UL, 3818514182UL, 3738662353UL, 899056999UL, 2531772068UL, 647726503UL, 2895823632UL, 393777910UL, 1759531813UL, 2363148604UL, 2931477989UL, 3381169914UL, 3877595131UL, 2375539210UL, 557544627UL, +273611522UL, 2717517554UL, 1935966767UL, 1738732887UL, 29153600UL, 20993454UL, 3758163226UL, 1692844400UL, 2176938194UL, 378940221UL, 2888599759UL, 1173120554UL, 2732575460UL, 3912766812UL, 522606644UL, 1925230852UL, 3887440328UL, 2111843275UL, 3549473366UL, 922916775UL, 2889744544UL, 2970467682UL, 3039277863UL, 990580154UL, 55435595UL, 1665634070UL, 3043418336UL, 2792050230UL, 2762503138UL, 1402344059UL, 2099263558UL, 3945248675UL, +3925566467UL, 2413979948UL, 463637252UL, 3768636616UL, 3374572388UL, 2217956879UL, 791988933UL, 382210765UL, 1715859444UL, 3462446413UL, 971427992UL, 3255404695UL, 2001750035UL, 2214129237UL, 320812374UL, 3688098101UL, 920365480UL, 2819401059UL, 2932570681UL, 3749857130UL, 523943786UL, 1271514748UL, 4078439472UL, 3501181265UL, 2475869985UL, 1797996951UL, 2300820710UL, 3994893924UL, 1739992082UL, 2475950326UL, 3780826558UL, 1018851411UL, +}, + +}; +#ifndef __CUDACC_RTC__ +CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS unsigned int precalc_xorwow_matrix_host[32][800] = { +{ +850664906UL, 2293210629UL, 1517805917UL, 1215500405UL, 1612415445UL, 645388200UL, 824349799UL, 3517232886UL, 4075591755UL, 3089899292UL, 4249786064UL, 3811424903UL, 1100783479UL, 53649761UL, 2817264826UL, 3159462529UL, 1654848550UL, 950025444UL, 3095510002UL, 4080567211UL, 4111078399UL, 3241719305UL, 2788212779UL, 4256963770UL, 2426893717UL, 4190211142UL, 1420776905UL, 3780537969UL, 1102912875UL, 1657948873UL, 3354905256UL, 2519610308UL, +515777663UL, 3396785394UL, 1832603711UL, 1154211550UL, 1915690212UL, 1933919046UL, 789578337UL, 337961173UL, 1359089498UL, 2249086205UL, 3417955173UL, 862571348UL, 528120760UL, 1265685672UL, 1970052076UL, 3585976752UL, 3645339918UL, 312171257UL, 1360991400UL, 1994321680UL, 2327168468UL, 2540437053UL, 1180483641UL, 2217962701UL, 182726833UL, 590204372UL, 1904496495UL, 2545607041UL, 3697978033UL, 1084030545UL, 3397906968UL, 2192325323UL, +2704204176UL, 1069092002UL, 2364406907UL, 1578647245UL, 3561974633UL, 3437665426UL, 1464127305UL, 1616628807UL, 2243114101UL, 3639967880UL, 1702613633UL, 2437350057UL, 39991274UL, 2024323584UL, 3795072940UL, 3604530798UL, 443099203UL, 643536212UL, 1919517328UL, 3931285769UL, 427935569UL, 276421624UL, 2492081750UL, 262729512UL, 3088549877UL, 2922650665UL, 1816283755UL, 4246096489UL, 842575914UL, 1460435650UL, 3050522190UL, 2640849794UL, +3697925816UL, 3465779075UL, 3856929655UL, 1365559780UL, 2897029415UL, 2747033756UL, 3611830629UL, 1891542518UL, 1897590206UL, 437451803UL, 677924906UL, 123809117UL, 3940574372UL, 687640291UL, 3488484529UL, 470218446UL, 1092571016UL, 1537938503UL, 1073323937UL, 611300083UL, 3809285994UL, 3975678726UL, 925845389UL, 2514775760UL, 2859302390UL, 2761919483UL, 993285307UL, 164095287UL, 3736193671UL, 2078946336UL, 1418537059UL, 1202525920UL, +4234029440UL, 1313593624UL, 2484428922UL, 1833969372UL, 661495122UL, 2217907395UL, 2795045321UL, 2950835531UL, 1402379354UL, 351314168UL, 1902476749UL, 1914974334UL, 2873973176UL, 1321203603UL, 3316118265UL, 3282193947UL, 1342191737UL, 793441242UL, 3281524559UL, 296088733UL, 487851702UL, 712098215UL, 1388727135UL, 1705533557UL, 3557800292UL, 399729516UL, 1355829467UL, 291276309UL, 421164833UL, 1318404599UL, 2064519128UL, 1161612642UL, +2076623594UL, 850664906UL, 2293210629UL, 1517805917UL, 1215500405UL, 3847487204UL, 645388200UL, 824349799UL, 3517232886UL, 4075591755UL, 2755872609UL, 4249786064UL, 3811424903UL, 1100783479UL, 53649761UL, 1417544262UL, 3159462529UL, 1654848550UL, 950025444UL, 3095510002UL, 1908900347UL, 4111078399UL, 3241719305UL, 2788212779UL, 4256963770UL, 3750258343UL, 4190211142UL, 1420776905UL, 3780537969UL, 1102912875UL, 1690550UL, 3354905256UL, +2519610308UL, 515777663UL, 3396785394UL, 2658162202UL, 1154211550UL, 1915690212UL, 1933919046UL, 789578337UL, 189880016UL, 1359089498UL, 2249086205UL, 3417955173UL, 862571348UL, 998719835UL, 1265685672UL, 1970052076UL, 3585976752UL, 3645339918UL, 2973042959UL, 1360991400UL, 1994321680UL, 2327168468UL, 2540437053UL, 2283905032UL, 2217962701UL, 182726833UL, 590204372UL, 1904496495UL, 110719262UL, 3697978033UL, 1084030545UL, 3397906968UL, +2192325323UL, 4133333579UL, 1069092002UL, 2364406907UL, 1578647245UL, 3561974633UL, 3629845331UL, 1464127305UL, 1616628807UL, 2243114101UL, 3639967880UL, 3256744141UL, 2437350057UL, 39991274UL, 2024323584UL, 3795072940UL, 1024703328UL, 443099203UL, 643536212UL, 1919517328UL, 3931285769UL, 2755167056UL, 276421624UL, 2492081750UL, 262729512UL, 3088549877UL, 2817867653UL, 1816283755UL, 4246096489UL, 842575914UL, 1460435650UL, 2276077438UL, +2640849794UL, 3697925816UL, 3465779075UL, 3856929655UL, 130551477UL, 2897029415UL, 2747033756UL, 3611830629UL, 1891542518UL, 804565809UL, 437451803UL, 677924906UL, 123809117UL, 3940574372UL, 2446610749UL, 3488484529UL, 470218446UL, 1092571016UL, 1537938503UL, 1502147484UL, 611300083UL, 3809285994UL, 3975678726UL, 925845389UL, 872826112UL, 2859302390UL, 2761919483UL, 993285307UL, 164095287UL, 3901654538UL, 2078946336UL, 1418537059UL, +1202525920UL, 4234029440UL, 704759480UL, 2484428922UL, 1833969372UL, 661495122UL, 2217907395UL, 3287413716UL, 2950835531UL, 1402379354UL, 351314168UL, 1902476749UL, 2033316109UL, 2873973176UL, 1321203603UL, 3316118265UL, 3282193947UL, 1316780684UL, 793441242UL, 3281524559UL, 296088733UL, 487851702UL, 314311643UL, 1388727135UL, 1705533557UL, 3557800292UL, 399729516UL, 1660074989UL, 291276309UL, 421164833UL, 1318404599UL, 2064519128UL, +3156334112UL, 2076623594UL, 850664906UL, 2293210629UL, 1517805917UL, 335452425UL, 3847487204UL, 645388200UL, 824349799UL, 3517232886UL, 954487767UL, 2755872609UL, 4249786064UL, 3811424903UL, 1100783479UL, 3408594583UL, 1417544262UL, 3159462529UL, 1654848550UL, 950025444UL, 324339737UL, 1908900347UL, 4111078399UL, 3241719305UL, 2788212779UL, 1890540205UL, 3750258343UL, 4190211142UL, 1420776905UL, 3780537969UL, 3716648585UL, 1690550UL, +3354905256UL, 2519610308UL, 515777663UL, 3758156132UL, 2658162202UL, 1154211550UL, 1915690212UL, 1933919046UL, 844149171UL, 189880016UL, 1359089498UL, 2249086205UL, 3417955173UL, 1031812215UL, 998719835UL, 1265685672UL, 1970052076UL, 3585976752UL, 3174204115UL, 2973042959UL, 1360991400UL, 1994321680UL, 2327168468UL, 714016907UL, 2283905032UL, 2217962701UL, 182726833UL, 590204372UL, 2151450260UL, 110719262UL, 3697978033UL, 1084030545UL, +3397906968UL, 767772303UL, 4133333579UL, 1069092002UL, 2364406907UL, 1578647245UL, 42955292UL, 3629845331UL, 1464127305UL, 1616628807UL, 2243114101UL, 3222189776UL, 3256744141UL, 2437350057UL, 39991274UL, 2024323584UL, 3142424684UL, 1024703328UL, 443099203UL, 643536212UL, 1919517328UL, 918511196UL, 2755167056UL, 276421624UL, 2492081750UL, 262729512UL, 4246877536UL, 2817867653UL, 1816283755UL, 4246096489UL, 842575914UL, 1425765936UL, +2276077438UL, 2640849794UL, 3697925816UL, 3465779075UL, 1491702526UL, 130551477UL, 2897029415UL, 2747033756UL, 3611830629UL, 1844578694UL, 804565809UL, 437451803UL, 677924906UL, 123809117UL, 3419189841UL, 2446610749UL, 3488484529UL, 470218446UL, 1092571016UL, 3272535988UL, 1502147484UL, 611300083UL, 3809285994UL, 3975678726UL, 2853681168UL, 872826112UL, 2859302390UL, 2761919483UL, 993285307UL, 1434560128UL, 3901654538UL, 2078946336UL, +1418537059UL, 1202525920UL, 2530097881UL, 704759480UL, 2484428922UL, 1833969372UL, 661495122UL, 503878844UL, 3287413716UL, 2950835531UL, 1402379354UL, 351314168UL, 4131886119UL, 2033316109UL, 2873973176UL, 1321203603UL, 3316118265UL, 237900321UL, 1316780684UL, 793441242UL, 3281524559UL, 296088733UL, 1730738847UL, 314311643UL, 1388727135UL, 1705533557UL, 3557800292UL, 1553835665UL, 1660074989UL, 291276309UL, 421164833UL, 1318404599UL, +964731488UL, 3156334112UL, 2076623594UL, 850664906UL, 2293210629UL, 1105350579UL, 335452425UL, 3847487204UL, 645388200UL, 824349799UL, 2789953706UL, 954487767UL, 2755872609UL, 4249786064UL, 3811424903UL, 3937839949UL, 3408594583UL, 1417544262UL, 3159462529UL, 1654848550UL, 624060530UL, 324339737UL, 1908900347UL, 4111078399UL, 3241719305UL, 2294919498UL, 1890540205UL, 3750258343UL, 4190211142UL, 1420776905UL, 2279133729UL, 3716648585UL, +1690550UL, 3354905256UL, 2519610308UL, 3563975602UL, 3758156132UL, 2658162202UL, 1154211550UL, 1915690212UL, 3505586122UL, 844149171UL, 189880016UL, 1359089498UL, 2249086205UL, 2389487504UL, 1031812215UL, 998719835UL, 1265685672UL, 1970052076UL, 2798611919UL, 3174204115UL, 2973042959UL, 1360991400UL, 1994321680UL, 1684134678UL, 714016907UL, 2283905032UL, 2217962701UL, 182726833UL, 1734988742UL, 2151450260UL, 110719262UL, 3697978033UL, +1084030545UL, 159906818UL, 767772303UL, 4133333579UL, 1069092002UL, 2364406907UL, 1290801202UL, 42955292UL, 3629845331UL, 1464127305UL, 1616628807UL, 987794861UL, 3222189776UL, 3256744141UL, 2437350057UL, 39991274UL, 3644076751UL, 3142424684UL, 1024703328UL, 443099203UL, 643536212UL, 1487589384UL, 918511196UL, 2755167056UL, 276421624UL, 2492081750UL, 137688638UL, 4246877536UL, 2817867653UL, 1816283755UL, 4246096489UL, 1518475380UL, +1425765936UL, 2276077438UL, 2640849794UL, 3697925816UL, 4226506771UL, 1491702526UL, 130551477UL, 2897029415UL, 2747033756UL, 2033599579UL, 1844578694UL, 804565809UL, 437451803UL, 677924906UL, 2749065512UL, 3419189841UL, 2446610749UL, 3488484529UL, 470218446UL, 290444026UL, 3272535988UL, 1502147484UL, 611300083UL, 3809285994UL, 2546040767UL, 2853681168UL, 872826112UL, 2859302390UL, 2761919483UL, 4097961150UL, 1434560128UL, 3901654538UL, +2078946336UL, 1418537059UL, 2725734455UL, 2530097881UL, 704759480UL, 2484428922UL, 1833969372UL, 3999408333UL, 503878844UL, 3287413716UL, 2950835531UL, 1402379354UL, 3861442503UL, 4131886119UL, 2033316109UL, 2873973176UL, 1321203603UL, 1267331405UL, 237900321UL, 1316780684UL, 793441242UL, 3281524559UL, 1273427916UL, 1730738847UL, 314311643UL, 1388727135UL, 1705533557UL, 1474310231UL, 1553835665UL, 1660074989UL, 291276309UL, 421164833UL, +3884815658UL, 3088049345UL, 3307042227UL, 3228948601UL, 1717605083UL, 1864502063UL, 3799516572UL, 2372822470UL, 2691586476UL, 1172840854UL, 1577099080UL, 870101866UL, 2139291021UL, 406996656UL, 255568268UL, 897760202UL, 674745664UL, 885214361UL, 3753233375UL, 3015215223UL, 1711461259UL, 3241363282UL, 2125360928UL, 2493601640UL, 2350228245UL, 3434627328UL, 2095642963UL, 3360932494UL, 3287396242UL, 4070512427UL, 3415702664UL, 1958354224UL, +3280206940UL, 3929504236UL, 3390499817UL, 4144225735UL, 3621750606UL, 3205006592UL, 3495743785UL, 269239326UL, 2181299371UL, 2898796651UL, 2613623219UL, 3988711298UL, 2162437858UL, 949553433UL, 3289670000UL, 3559525307UL, 3366925567UL, 2112148665UL, 955626393UL, 1790865381UL, 699223558UL, 3889584301UL, 1020750250UL, 4105283899UL, 2295851818UL, 4045668915UL, 2224770025UL, 766386910UL, 4265157386UL, 89139307UL, 2099710177UL, 1012450874UL, +1875492446UL, 1927399417UL, 767450812UL, 654474783UL, 4265293038UL, 4041215389UL, 4102336947UL, 4263617328UL, 2135826340UL, 2317231535UL, 3773895729UL, 403151111UL, 1400693138UL, 4255050194UL, 755369466UL, 2325764302UL, 2617301159UL, 4165707294UL, 1206304709UL, 2415645397UL, 4276004841UL, 1457022279UL, 662660652UL, 795140282UL, 828519889UL, 805830562UL, 1179976369UL, 2212548232UL, 755708248UL, 1034682071UL, 899950902UL, 1906046264UL, +1861009040UL, 310711525UL, 920739741UL, 2322414272UL, 3179236470UL, 81822135UL, 4111390320UL, 1800166783UL, 112253014UL, 688771939UL, 1050990794UL, 3124647483UL, 287052171UL, 1363630156UL, 3447798279UL, 1405733552UL, 3075862538UL, 1682808202UL, 1595154222UL, 1173705692UL, 680713285UL, 2748212230UL, 568610527UL, 3434965538UL, 1114942930UL, 2835858745UL, 2575992250UL, 3243355150UL, 2127580225UL, 1855934450UL, 3915941751UL, 2228679809UL, +1514780124UL, 1506688039UL, 1033083295UL, 793807083UL, 1120681149UL, 4105670165UL, 3999570340UL, 2083020131UL, 1213356023UL, 3684882757UL, 3375797774UL, 3577986103UL, 2092046164UL, 2593847443UL, 1826450612UL, 367828409UL, 3198272513UL, 1941316667UL, 943707510UL, 907134807UL, 2020457947UL, 1462193665UL, 2964617539UL, 4216491663UL, 2625270800UL, 2395371467UL, 3691003028UL, 3659016793UL, 2381847054UL, 3513105567UL, 3013019506UL, 2731245927UL, +}, +{ +1680024716UL, 2112340059UL, 3387475367UL, 2080916186UL, 1431532386UL, 3907378472UL, 2636491350UL, 2176128529UL, 2236616671UL, 3736851460UL, 2604001339UL, 3893075234UL, 3495918635UL, 4116370522UL, 1384310379UL, 3660102574UL, 2030233939UL, 2759207091UL, 49347923UL, 97526506UL, 2566932710UL, 1566181275UL, 3127827248UL, 578401670UL, 1499229308UL, 2581732444UL, 279715551UL, 809690877UL, 1438444015UL, 878935323UL, 1495277039UL, 3417305339UL, +2858903785UL, 3074075088UL, 603749086UL, 2370669734UL, 391683868UL, 3933465331UL, 2884128106UL, 1478317876UL, 1864988335UL, 2925823809UL, 4133578805UL, 218104493UL, 368652174UL, 1998600344UL, 1109346044UL, 1716435313UL, 415435111UL, 91393686UL, 2536620737UL, 1440068573UL, 481874870UL, 142128108UL, 988825519UL, 2077118779UL, 2858045339UL, 4068162251UL, 115593872UL, 1364244587UL, 3550167006UL, 3728768059UL, 1772423685UL, 2504624145UL, +248732306UL, 1412607307UL, 4081166331UL, 154438218UL, 1652901877UL, 3932533490UL, 3142799969UL, 3154073676UL, 3112018078UL, 2757873595UL, 2364830126UL, 2855791484UL, 793851407UL, 507785167UL, 263713916UL, 4060700051UL, 3291978358UL, 1584226715UL, 2546417990UL, 450747961UL, 2951067700UL, 2706009093UL, 1788578194UL, 4030171132UL, 2610979903UL, 573420740UL, 4269115622UL, 2180305819UL, 2646894726UL, 716649335UL, 3875715683UL, 853428184UL, +2436760738UL, 4190071217UL, 2754423535UL, 540698101UL, 4082489821UL, 741976046UL, 267559495UL, 1591532642UL, 2500610323UL, 3203248679UL, 147312102UL, 2772368222UL, 1412987047UL, 2295185573UL, 1932341300UL, 898396308UL, 1837129999UL, 3113914292UL, 2613354524UL, 3141601915UL, 276087167UL, 1887389351UL, 757801450UL, 3752353732UL, 2745818074UL, 1442953464UL, 3802648347UL, 223728071UL, 2169947402UL, 1338125300UL, 3642174036UL, 2794462634UL, +2326349851UL, 862746036UL, 3577092599UL, 627103363UL, 552173564UL, 4142604459UL, 2310329406UL, 583522272UL, 189323282UL, 1217612313UL, 73550248UL, 2434692829UL, 2757269706UL, 2392210091UL, 3032922600UL, 3573904125UL, 2897178037UL, 2632631469UL, 3085332665UL, 3775619904UL, 2563291734UL, 1351375865UL, 4043427793UL, 1803743084UL, 3112116579UL, 522940594UL, 2690374983UL, 2613871529UL, 3810037031UL, 1765642390UL, 534554747UL, 1930852049UL, +2264349344UL, 1680024716UL, 2112340059UL, 3387475367UL, 2080916186UL, 75966494UL, 3907378472UL, 2636491350UL, 2176128529UL, 2236616671UL, 2372987046UL, 2604001339UL, 3893075234UL, 3495918635UL, 4116370522UL, 534929913UL, 3660102574UL, 2030233939UL, 2759207091UL, 49347923UL, 987575186UL, 2566932710UL, 1566181275UL, 3127827248UL, 578401670UL, 3731513754UL, 2581732444UL, 279715551UL, 809690877UL, 1438444015UL, 2185866850UL, 1495277039UL, +3417305339UL, 2858903785UL, 3074075088UL, 4198538376UL, 2370669734UL, 391683868UL, 3933465331UL, 2884128106UL, 1400216510UL, 1864988335UL, 2925823809UL, 4133578805UL, 218104493UL, 2798390374UL, 1998600344UL, 1109346044UL, 1716435313UL, 415435111UL, 1892535124UL, 2536620737UL, 1440068573UL, 481874870UL, 142128108UL, 329082740UL, 2077118779UL, 2858045339UL, 4068162251UL, 115593872UL, 2644000449UL, 3550167006UL, 3728768059UL, 1772423685UL, +2504624145UL, 2140118619UL, 1412607307UL, 4081166331UL, 154438218UL, 1652901877UL, 3804911318UL, 3142799969UL, 3154073676UL, 3112018078UL, 2757873595UL, 50297646UL, 2855791484UL, 793851407UL, 507785167UL, 263713916UL, 3324588195UL, 3291978358UL, 1584226715UL, 2546417990UL, 450747961UL, 3455625012UL, 2706009093UL, 1788578194UL, 4030171132UL, 2610979903UL, 3835380965UL, 4269115622UL, 2180305819UL, 2646894726UL, 716649335UL, 2607142354UL, +853428184UL, 2436760738UL, 4190071217UL, 2754423535UL, 456808691UL, 4082489821UL, 741976046UL, 267559495UL, 1591532642UL, 2722205042UL, 3203248679UL, 147312102UL, 2772368222UL, 1412987047UL, 1950543946UL, 1932341300UL, 898396308UL, 1837129999UL, 3113914292UL, 428616392UL, 3141601915UL, 276087167UL, 1887389351UL, 757801450UL, 963534966UL, 2745818074UL, 1442953464UL, 3802648347UL, 223728071UL, 229039300UL, 1338125300UL, 3642174036UL, +2794462634UL, 2326349851UL, 206115203UL, 3577092599UL, 627103363UL, 552173564UL, 4142604459UL, 1492461846UL, 583522272UL, 189323282UL, 1217612313UL, 73550248UL, 3552211807UL, 2757269706UL, 2392210091UL, 3032922600UL, 3573904125UL, 810640644UL, 2632631469UL, 3085332665UL, 3775619904UL, 2563291734UL, 922608790UL, 4043427793UL, 1803743084UL, 3112116579UL, 522940594UL, 1785093944UL, 2613871529UL, 3810037031UL, 1765642390UL, 534554747UL, +3528050076UL, 2264349344UL, 1680024716UL, 2112340059UL, 3387475367UL, 3295682653UL, 75966494UL, 3907378472UL, 2636491350UL, 2176128529UL, 3574915532UL, 2372987046UL, 2604001339UL, 3893075234UL, 3495918635UL, 1280296085UL, 534929913UL, 3660102574UL, 2030233939UL, 2759207091UL, 299776535UL, 987575186UL, 2566932710UL, 1566181275UL, 3127827248UL, 3874691533UL, 3731513754UL, 2581732444UL, 279715551UL, 809690877UL, 3100791084UL, 2185866850UL, +1495277039UL, 3417305339UL, 2858903785UL, 1310351481UL, 4198538376UL, 2370669734UL, 391683868UL, 3933465331UL, 2749085130UL, 1400216510UL, 1864988335UL, 2925823809UL, 4133578805UL, 3352814594UL, 2798390374UL, 1998600344UL, 1109346044UL, 1716435313UL, 1571752941UL, 1892535124UL, 2536620737UL, 1440068573UL, 481874870UL, 2485033697UL, 329082740UL, 2077118779UL, 2858045339UL, 4068162251UL, 3837440666UL, 2644000449UL, 3550167006UL, 3728768059UL, +1772423685UL, 1176559812UL, 2140118619UL, 1412607307UL, 4081166331UL, 154438218UL, 2902622972UL, 3804911318UL, 3142799969UL, 3154073676UL, 3112018078UL, 2403391233UL, 50297646UL, 2855791484UL, 793851407UL, 507785167UL, 2351826747UL, 3324588195UL, 3291978358UL, 1584226715UL, 2546417990UL, 746876926UL, 3455625012UL, 2706009093UL, 1788578194UL, 4030171132UL, 3779307353UL, 3835380965UL, 4269115622UL, 2180305819UL, 2646894726UL, 2602235234UL, +2607142354UL, 853428184UL, 2436760738UL, 4190071217UL, 2066757692UL, 456808691UL, 4082489821UL, 741976046UL, 267559495UL, 3001080633UL, 2722205042UL, 3203248679UL, 147312102UL, 2772368222UL, 89950260UL, 1950543946UL, 1932341300UL, 898396308UL, 1837129999UL, 947911286UL, 428616392UL, 3141601915UL, 276087167UL, 1887389351UL, 2583987247UL, 963534966UL, 2745818074UL, 1442953464UL, 3802648347UL, 4229124441UL, 229039300UL, 1338125300UL, +3642174036UL, 2794462634UL, 2472155633UL, 206115203UL, 3577092599UL, 627103363UL, 552173564UL, 2586882739UL, 1492461846UL, 583522272UL, 189323282UL, 1217612313UL, 3501549884UL, 3552211807UL, 2757269706UL, 2392210091UL, 3032922600UL, 740675778UL, 810640644UL, 2632631469UL, 3085332665UL, 3775619904UL, 3643289881UL, 922608790UL, 4043427793UL, 1803743084UL, 3112116579UL, 2213337398UL, 1785093944UL, 2613871529UL, 3810037031UL, 1765642390UL, +762472016UL, 3528050076UL, 2264349344UL, 1680024716UL, 2112340059UL, 1372272974UL, 3295682653UL, 75966494UL, 3907378472UL, 2636491350UL, 3117471955UL, 3574915532UL, 2372987046UL, 2604001339UL, 3893075234UL, 915576383UL, 1280296085UL, 534929913UL, 3660102574UL, 2030233939UL, 346368350UL, 299776535UL, 987575186UL, 2566932710UL, 1566181275UL, 3535223896UL, 3874691533UL, 3731513754UL, 2581732444UL, 279715551UL, 2456894951UL, 3100791084UL, +2185866850UL, 1495277039UL, 3417305339UL, 1618871086UL, 1310351481UL, 4198538376UL, 2370669734UL, 391683868UL, 2009676005UL, 2749085130UL, 1400216510UL, 1864988335UL, 2925823809UL, 58955107UL, 3352814594UL, 2798390374UL, 1998600344UL, 1109346044UL, 3273979614UL, 1571752941UL, 1892535124UL, 2536620737UL, 1440068573UL, 1174168447UL, 2485033697UL, 329082740UL, 2077118779UL, 2858045339UL, 4062921629UL, 3837440666UL, 2644000449UL, 3550167006UL, +3728768059UL, 2642133401UL, 1176559812UL, 2140118619UL, 1412607307UL, 4081166331UL, 3124905304UL, 2902622972UL, 3804911318UL, 3142799969UL, 3154073676UL, 1449454613UL, 2403391233UL, 50297646UL, 2855791484UL, 793851407UL, 3514201526UL, 2351826747UL, 3324588195UL, 3291978358UL, 1584226715UL, 3636681672UL, 746876926UL, 3455625012UL, 2706009093UL, 1788578194UL, 3451519459UL, 3779307353UL, 3835380965UL, 4269115622UL, 2180305819UL, 3987989524UL, +2602235234UL, 2607142354UL, 853428184UL, 2436760738UL, 2151617107UL, 2066757692UL, 456808691UL, 4082489821UL, 741976046UL, 3590081269UL, 3001080633UL, 2722205042UL, 3203248679UL, 147312102UL, 3432947806UL, 89950260UL, 1950543946UL, 1932341300UL, 898396308UL, 3828432864UL, 947911286UL, 428616392UL, 3141601915UL, 276087167UL, 2517666433UL, 2583987247UL, 963534966UL, 2745818074UL, 1442953464UL, 2223986807UL, 4229124441UL, 229039300UL, +1338125300UL, 3642174036UL, 1053796945UL, 2472155633UL, 206115203UL, 3577092599UL, 627103363UL, 1113276084UL, 2586882739UL, 1492461846UL, 583522272UL, 189323282UL, 1490604990UL, 3501549884UL, 3552211807UL, 2757269706UL, 2392210091UL, 3545407532UL, 740675778UL, 810640644UL, 2632631469UL, 3085332665UL, 755862267UL, 3643289881UL, 922608790UL, 4043427793UL, 1803743084UL, 1954166630UL, 2213337398UL, 1785093944UL, 2613871529UL, 3810037031UL, +3042935707UL, 3162182177UL, 2791346436UL, 1901925289UL, 863100941UL, 3367519168UL, 1972623238UL, 3664303070UL, 604922059UL, 3026817982UL, 1436412310UL, 4096180631UL, 1597561857UL, 4206212303UL, 4127914332UL, 3228677359UL, 3985733659UL, 3597290113UL, 4251197894UL, 3451370603UL, 609679338UL, 3360835257UL, 1372239885UL, 638572328UL, 3806422284UL, 3974147336UL, 1804280837UL, 4209089291UL, 2021797469UL, 3557188838UL, 409727186UL, 2114649178UL, +687702120UL, 2542445992UL, 1235991799UL, 460479179UL, 2008348175UL, 887884478UL, 3942327811UL, 2999928223UL, 4171339789UL, 2286339235UL, 1293442231UL, 1575942850UL, 76122475UL, 1440527701UL, 2006558403UL, 1544148172UL, 895899367UL, 681826913UL, 4094701935UL, 3995413790UL, 1027509154UL, 2264990896UL, 1938238113UL, 213430250UL, 222469320UL, 609726517UL, 3581538106UL, 492802663UL, 120480843UL, 1720004062UL, 1132674507UL, 911082758UL, +2909148131UL, 566658805UL, 3964114445UL, 3483602509UL, 1793438750UL, 165562604UL, 3641830063UL, 2394205521UL, 3404874822UL, 1672998096UL, 916151953UL, 1141264477UL, 3171661340UL, 3803396219UL, 3018337382UL, 1863902683UL, 2474641928UL, 3250365071UL, 3897886220UL, 1219701051UL, 51332576UL, 1358614881UL, 1707407492UL, 3670647816UL, 923357625UL, 343687395UL, 3991339686UL, 3913575403UL, 1267727936UL, 4001357856UL, 3820224848UL, 2942896724UL, +3505936742UL, 1403285299UL, 1992762049UL, 567748449UL, 2202721585UL, 2781324216UL, 1724850068UL, 2408314541UL, 3073975813UL, 3992810029UL, 2475242354UL, 540562053UL, 2185198943UL, 3759352041UL, 3373885614UL, 1132999410UL, 1097554565UL, 4089342358UL, 3239542922UL, 2451748646UL, 407290679UL, 3188103200UL, 1708016248UL, 26848241UL, 2796711130UL, 3090711568UL, 4068389322UL, 3420916085UL, 3137567033UL, 2877819818UL, 22133454UL, 4629160UL, +3703695249UL, 1920151708UL, 1175452162UL, 130015299UL, 3331834713UL, 1099225384UL, 689254331UL, 1851083761UL, 2654970209UL, 3259297936UL, 3742819314UL, 3524284766UL, 2291819083UL, 3494031861UL, 16242889UL, 3545082774UL, 1997878108UL, 777447699UL, 4244916543UL, 3508640253UL, 3782278393UL, 2107258964UL, 2139074576UL, 1383217899UL, 2337934322UL, 3181899620UL, 1285955765UL, 2989610020UL, 3326862146UL, 1168587380UL, 801203532UL, 3020809957UL, +}, +{ +3810471203UL, 1017064446UL, 1595207573UL, 441087832UL, 3326746890UL, 3294064431UL, 167972517UL, 3625210015UL, 1011845006UL, 2980240819UL, 1778354660UL, 3041730987UL, 1598611350UL, 2015169745UL, 2321724978UL, 3390812967UL, 2432904511UL, 113261909UL, 3957193232UL, 3806115908UL, 2965828929UL, 2035392295UL, 3500116619UL, 2881232416UL, 1672212265UL, 1607201428UL, 425148945UL, 1262591961UL, 2221781268UL, 4215047456UL, 2148245850UL, 2787488981UL, +1077262192UL, 2085467561UL, 3053954888UL, 3584435116UL, 3013084787UL, 287099941UL, 1290407232UL, 4078552287UL, 2658945475UL, 4251530898UL, 2403086478UL, 2884923598UL, 3545110453UL, 4105390090UL, 343200643UL, 3189888821UL, 4086304363UL, 3466483195UL, 259435633UL, 2846377387UL, 497258846UL, 272775541UL, 985737911UL, 2957688879UL, 2180784344UL, 3434619542UL, 3643384838UL, 2228652440UL, 3107480718UL, 2208729807UL, 596436263UL, 3255120711UL, +3248886970UL, 519242965UL, 602979109UL, 1619614UL, 1391563565UL, 56262588UL, 1584463910UL, 1849038201UL, 728022295UL, 848624947UL, 1813827408UL, 428214945UL, 1246345586UL, 4213351865UL, 168985863UL, 456608054UL, 4277869380UL, 3886828599UL, 2264054549UL, 3110967170UL, 3138175314UL, 2649164828UL, 3369378320UL, 3648350039UL, 3524848759UL, 1468470706UL, 3558859222UL, 2669673235UL, 831851874UL, 4285651092UL, 4224147373UL, 1088456706UL, +231954609UL, 3118005852UL, 225508069UL, 883105389UL, 856371341UL, 2001356578UL, 639336670UL, 2363501707UL, 3622399552UL, 4024065226UL, 1093546838UL, 4263608561UL, 1852072422UL, 425195042UL, 2441102396UL, 296426333UL, 384641750UL, 3559334435UL, 1757327033UL, 1016016207UL, 3595686646UL, 24777793UL, 623926105UL, 2169195923UL, 1779396793UL, 646997837UL, 1459728476UL, 2644865980UL, 1994581089UL, 3956278544UL, 919592580UL, 2153558858UL, +2029633394UL, 3837501009UL, 4016560170UL, 484838096UL, 3652199054UL, 1971790561UL, 605295089UL, 637470291UL, 278970544UL, 3574824693UL, 295866521UL, 1755035156UL, 2542341803UL, 1588716357UL, 1502596918UL, 4124554133UL, 3547049843UL, 1768033045UL, 1531734630UL, 101448323UL, 3233017580UL, 1793222944UL, 3187853500UL, 186000900UL, 803444571UL, 2820254958UL, 2009384608UL, 2384668855UL, 2222812920UL, 633608665UL, 2028480056UL, 1258028235UL, +545095949UL, 3810471203UL, 1017064446UL, 1595207573UL, 441087832UL, 899068662UL, 3294064431UL, 167972517UL, 3625210015UL, 1011845006UL, 3951305793UL, 1778354660UL, 3041730987UL, 1598611350UL, 2015169745UL, 1885149424UL, 3390812967UL, 2432904511UL, 113261909UL, 3957193232UL, 3953443155UL, 2965828929UL, 2035392295UL, 3500116619UL, 2881232416UL, 329153573UL, 1607201428UL, 425148945UL, 1262591961UL, 2221781268UL, 78028761UL, 2148245850UL, +2787488981UL, 1077262192UL, 2085467561UL, 647235899UL, 3584435116UL, 3013084787UL, 287099941UL, 1290407232UL, 1467385694UL, 2658945475UL, 4251530898UL, 2403086478UL, 2884923598UL, 3489351040UL, 4105390090UL, 343200643UL, 3189888821UL, 4086304363UL, 3521512280UL, 259435633UL, 2846377387UL, 497258846UL, 272775541UL, 1367093111UL, 2957688879UL, 2180784344UL, 3434619542UL, 3643384838UL, 411877686UL, 3107480718UL, 2208729807UL, 596436263UL, +3255120711UL, 584605030UL, 519242965UL, 602979109UL, 1619614UL, 1391563565UL, 3902518209UL, 1584463910UL, 1849038201UL, 728022295UL, 848624947UL, 1932969318UL, 428214945UL, 1246345586UL, 4213351865UL, 168985863UL, 2770345237UL, 4277869380UL, 3886828599UL, 2264054549UL, 3110967170UL, 2953581033UL, 2649164828UL, 3369378320UL, 3648350039UL, 3524848759UL, 2380353977UL, 3558859222UL, 2669673235UL, 831851874UL, 4285651092UL, 1214052447UL, +1088456706UL, 231954609UL, 3118005852UL, 225508069UL, 1766983646UL, 856371341UL, 2001356578UL, 639336670UL, 2363501707UL, 1782816591UL, 4024065226UL, 1093546838UL, 4263608561UL, 1852072422UL, 1149716600UL, 2441102396UL, 296426333UL, 384641750UL, 3559334435UL, 2391309970UL, 1016016207UL, 3595686646UL, 24777793UL, 623926105UL, 362098678UL, 1779396793UL, 646997837UL, 1459728476UL, 2644865980UL, 3238673748UL, 3956278544UL, 919592580UL, +2153558858UL, 2029633394UL, 115778559UL, 4016560170UL, 484838096UL, 3652199054UL, 1971790561UL, 737357475UL, 637470291UL, 278970544UL, 3574824693UL, 295866521UL, 3989745853UL, 2542341803UL, 1588716357UL, 1502596918UL, 4124554133UL, 3016849744UL, 1768033045UL, 1531734630UL, 101448323UL, 3233017580UL, 4157527581UL, 3187853500UL, 186000900UL, 803444571UL, 2820254958UL, 1980528062UL, 2384668855UL, 2222812920UL, 633608665UL, 2028480056UL, +3166710281UL, 545095949UL, 3810471203UL, 1017064446UL, 1595207573UL, 693962828UL, 899068662UL, 3294064431UL, 167972517UL, 3625210015UL, 1486040398UL, 3951305793UL, 1778354660UL, 3041730987UL, 1598611350UL, 2859363132UL, 1885149424UL, 3390812967UL, 2432904511UL, 113261909UL, 664880478UL, 3953443155UL, 2965828929UL, 2035392295UL, 3500116619UL, 558081801UL, 329153573UL, 1607201428UL, 425148945UL, 1262591961UL, 3716247699UL, 78028761UL, +2148245850UL, 2787488981UL, 1077262192UL, 4206362947UL, 647235899UL, 3584435116UL, 3013084787UL, 287099941UL, 2536781098UL, 1467385694UL, 2658945475UL, 4251530898UL, 2403086478UL, 3075072413UL, 3489351040UL, 4105390090UL, 343200643UL, 3189888821UL, 2540485172UL, 3521512280UL, 259435633UL, 2846377387UL, 497258846UL, 2442427327UL, 1367093111UL, 2957688879UL, 2180784344UL, 3434619542UL, 1593967423UL, 411877686UL, 3107480718UL, 2208729807UL, +596436263UL, 1048686529UL, 584605030UL, 519242965UL, 602979109UL, 1619614UL, 2072745381UL, 3902518209UL, 1584463910UL, 1849038201UL, 728022295UL, 846033949UL, 1932969318UL, 428214945UL, 1246345586UL, 4213351865UL, 1066373275UL, 2770345237UL, 4277869380UL, 3886828599UL, 2264054549UL, 1877859690UL, 2953581033UL, 2649164828UL, 3369378320UL, 3648350039UL, 2537763389UL, 2380353977UL, 3558859222UL, 2669673235UL, 831851874UL, 522748140UL, +1214052447UL, 1088456706UL, 231954609UL, 3118005852UL, 1381269315UL, 1766983646UL, 856371341UL, 2001356578UL, 639336670UL, 667275675UL, 1782816591UL, 4024065226UL, 1093546838UL, 4263608561UL, 2057337961UL, 1149716600UL, 2441102396UL, 296426333UL, 384641750UL, 340523210UL, 2391309970UL, 1016016207UL, 3595686646UL, 24777793UL, 3094832341UL, 362098678UL, 1779396793UL, 646997837UL, 1459728476UL, 1169681568UL, 3238673748UL, 3956278544UL, +919592580UL, 2153558858UL, 388335108UL, 115778559UL, 4016560170UL, 484838096UL, 3652199054UL, 1764858181UL, 737357475UL, 637470291UL, 278970544UL, 3574824693UL, 3671458900UL, 3989745853UL, 2542341803UL, 1588716357UL, 1502596918UL, 2102871406UL, 3016849744UL, 1768033045UL, 1531734630UL, 101448323UL, 3964942332UL, 4157527581UL, 3187853500UL, 186000900UL, 803444571UL, 3425652083UL, 1980528062UL, 2384668855UL, 2222812920UL, 633608665UL, +3035373876UL, 3166710281UL, 545095949UL, 3810471203UL, 1017064446UL, 669282349UL, 693962828UL, 899068662UL, 3294064431UL, 167972517UL, 2007256988UL, 1486040398UL, 3951305793UL, 1778354660UL, 3041730987UL, 2827768941UL, 2859363132UL, 1885149424UL, 3390812967UL, 2432904511UL, 3700915653UL, 664880478UL, 3953443155UL, 2965828929UL, 2035392295UL, 1461208330UL, 558081801UL, 329153573UL, 1607201428UL, 425148945UL, 1700881129UL, 3716247699UL, +78028761UL, 2148245850UL, 2787488981UL, 2706775080UL, 4206362947UL, 647235899UL, 3584435116UL, 3013084787UL, 2958545221UL, 2536781098UL, 1467385694UL, 2658945475UL, 4251530898UL, 2241012567UL, 3075072413UL, 3489351040UL, 4105390090UL, 343200643UL, 490164649UL, 2540485172UL, 3521512280UL, 259435633UL, 2846377387UL, 4073611831UL, 2442427327UL, 1367093111UL, 2957688879UL, 2180784344UL, 1835510773UL, 1593967423UL, 411877686UL, 3107480718UL, +2208729807UL, 3306732468UL, 1048686529UL, 584605030UL, 519242965UL, 602979109UL, 2978864605UL, 2072745381UL, 3902518209UL, 1584463910UL, 1849038201UL, 3284115169UL, 846033949UL, 1932969318UL, 428214945UL, 1246345586UL, 194166002UL, 1066373275UL, 2770345237UL, 4277869380UL, 3886828599UL, 1874087886UL, 1877859690UL, 2953581033UL, 2649164828UL, 3369378320UL, 4145454028UL, 2537763389UL, 2380353977UL, 3558859222UL, 2669673235UL, 739345884UL, +522748140UL, 1214052447UL, 1088456706UL, 231954609UL, 3605603781UL, 1381269315UL, 1766983646UL, 856371341UL, 2001356578UL, 2049940324UL, 667275675UL, 1782816591UL, 4024065226UL, 1093546838UL, 152524382UL, 2057337961UL, 1149716600UL, 2441102396UL, 296426333UL, 3195130788UL, 340523210UL, 2391309970UL, 1016016207UL, 3595686646UL, 180492441UL, 3094832341UL, 362098678UL, 1779396793UL, 646997837UL, 2458167607UL, 1169681568UL, 3238673748UL, +3956278544UL, 919592580UL, 3421005218UL, 388335108UL, 115778559UL, 4016560170UL, 484838096UL, 2649676374UL, 1764858181UL, 737357475UL, 637470291UL, 278970544UL, 2236401278UL, 3671458900UL, 3989745853UL, 2542341803UL, 1588716357UL, 1241570134UL, 2102871406UL, 3016849744UL, 1768033045UL, 1531734630UL, 1765654724UL, 3964942332UL, 4157527581UL, 3187853500UL, 186000900UL, 2189716659UL, 3425652083UL, 1980528062UL, 2384668855UL, 2222812920UL, +3955466207UL, 2426547616UL, 3846752458UL, 3015538636UL, 2342593365UL, 3613176865UL, 3484860981UL, 4278370194UL, 1979143878UL, 1159739458UL, 3714038404UL, 396530346UL, 3276617756UL, 3293940597UL, 4050183149UL, 1418571985UL, 402563753UL, 2702853013UL, 2289900621UL, 2267058511UL, 3482161995UL, 3375026019UL, 1988640267UL, 3674438074UL, 4124612310UL, 1057883705UL, 434730475UL, 3210959778UL, 4102029739UL, 2140938750UL, 3176753074UL, 2356971512UL, +3969685288UL, 1556275580UL, 2648433428UL, 3959375381UL, 478841344UL, 1496991528UL, 3309714981UL, 569990368UL, 3660587501UL, 2550379574UL, 1177519842UL, 2652707373UL, 543943404UL, 1912551128UL, 2278132032UL, 1484596780UL, 3570913985UL, 2982401320UL, 1413776035UL, 3177275459UL, 3036211597UL, 1091740466UL, 3448424311UL, 1445187645UL, 3205024875UL, 3135795254UL, 823738729UL, 3742134467UL, 4066657438UL, 1226311678UL, 2403605393UL, 537573634UL, +3457409768UL, 1940233423UL, 1761431281UL, 1129427309UL, 2443661283UL, 3200814257UL, 4094866249UL, 2666869754UL, 604785127UL, 2213464116UL, 3002782918UL, 468024929UL, 2490681314UL, 3666681384UL, 1583346053UL, 3049668798UL, 3592153237UL, 2573082448UL, 3082970021UL, 1461796708UL, 832526980UL, 3728763274UL, 355291229UL, 4029588456UL, 832358279UL, 2125298737UL, 3681181038UL, 3245535160UL, 1333342738UL, 1868897492UL, 446790068UL, 1278093154UL, +2090118615UL, 4158925515UL, 4062165914UL, 822726809UL, 1154960183UL, 286518382UL, 1170424276UL, 2554691236UL, 3674133415UL, 2765714969UL, 2330865375UL, 1908307334UL, 3537287082UL, 410252600UL, 3977128218UL, 424210327UL, 2919071615UL, 2715518134UL, 64568844UL, 480972649UL, 2488797168UL, 1302817038UL, 2213995265UL, 4229997295UL, 2200797852UL, 109368057UL, 3033807022UL, 1907400078UL, 645977948UL, 1410909090UL, 3700787906UL, 3375062371UL, +629087832UL, 1344281719UL, 4249981139UL, 3457543297UL, 1218556849UL, 864222854UL, 1458445945UL, 914545469UL, 3451164212UL, 1088025757UL, 1129933985UL, 953788883UL, 2406172924UL, 170364546UL, 3505490646UL, 1027553899UL, 2864067776UL, 436854871UL, 1342782209UL, 761167471UL, 2660173631UL, 4159507498UL, 4172028400UL, 2442254644UL, 2110123720UL, 2315991253UL, 873066601UL, 1725470559UL, 3831299052UL, 678672031UL, 1585431329UL, 3495750550UL, +}, +{ +1998393432UL, 2665389278UL, 3989307699UL, 3267631636UL, 3861682977UL, 3243522970UL, 1243992413UL, 2200497260UL, 3821883021UL, 4187123083UL, 3451270040UL, 3044132745UL, 2101287249UL, 2340839784UL, 227040990UL, 1724350416UL, 3228881240UL, 3123386528UL, 4279362126UL, 3098224464UL, 2635534069UL, 3622906431UL, 206207480UL, 1894245533UL, 2152374527UL, 1011223653UL, 7271757UL, 2972858087UL, 207942127UL, 3355362797UL, 2593296740UL, 174093751UL, +3713822176UL, 4212355586UL, 3335605224UL, 1171716408UL, 2867257989UL, 1522213957UL, 2016192462UL, 4229688395UL, 2174928148UL, 1468226225UL, 3938290338UL, 493240317UL, 3229423344UL, 2585475729UL, 3112454413UL, 1881171707UL, 2555908056UL, 1997546352UL, 380428329UL, 3341885423UL, 3307510279UL, 3519476676UL, 3613100811UL, 2555826262UL, 109341943UL, 2382715395UL, 3883409616UL, 1593551879UL, 2163678014UL, 3379783137UL, 2810374300UL, 1516064864UL, +561144874UL, 316017838UL, 1899237567UL, 70857401UL, 3435185465UL, 4234661323UL, 2580352177UL, 32879620UL, 4171670150UL, 1986234067UL, 3589478191UL, 2073132526UL, 2603712175UL, 377997975UL, 2474419397UL, 3110698341UL, 812664089UL, 1778922726UL, 1686111212UL, 972784138UL, 3936486236UL, 2711468739UL, 423435866UL, 1661961159UL, 802312780UL, 1868728136UL, 1760295704UL, 3357409828UL, 215039860UL, 683184627UL, 4019111064UL, 3609261689UL, +2167554309UL, 1831085281UL, 3389357802UL, 4193421575UL, 628277197UL, 2900207619UL, 993609502UL, 3429627083UL, 2636466084UL, 3652352199UL, 1780133580UL, 1670387713UL, 4086070210UL, 4004540729UL, 783029246UL, 2165667566UL, 1739001057UL, 377639972UL, 1102689625UL, 1945278055UL, 3941185940UL, 3685368326UL, 1881761572UL, 2201338934UL, 801752UL, 2729497735UL, 492844690UL, 2998826141UL, 3844964457UL, 3679088359UL, 2196391660UL, 4222269404UL, +357321611UL, 3727170055UL, 1819614072UL, 2348798457UL, 4294366646UL, 1952884323UL, 3574345216UL, 2040734807UL, 232392443UL, 4183498179UL, 2614866055UL, 112120292UL, 3624018350UL, 3340709877UL, 3097507723UL, 1268833488UL, 3570501956UL, 3338260086UL, 293812421UL, 3683058169UL, 1147960351UL, 283731890UL, 2171233479UL, 1830154455UL, 4036602681UL, 1996981699UL, 132803834UL, 40256165UL, 2158110401UL, 3575159090UL, 3196553513UL, 3559872992UL, +3402884675UL, 1998393432UL, 2665389278UL, 3989307699UL, 3267631636UL, 3617519767UL, 3243522970UL, 1243992413UL, 2200497260UL, 3821883021UL, 3715729085UL, 3451270040UL, 3044132745UL, 2101287249UL, 2340839784UL, 3173635549UL, 1724350416UL, 3228881240UL, 3123386528UL, 4279362126UL, 2287520039UL, 2635534069UL, 3622906431UL, 206207480UL, 1894245533UL, 96723416UL, 1011223653UL, 7271757UL, 2972858087UL, 207942127UL, 1668335352UL, 2593296740UL, +174093751UL, 3713822176UL, 4212355586UL, 49226793UL, 1171716408UL, 2867257989UL, 1522213957UL, 2016192462UL, 118712412UL, 2174928148UL, 1468226225UL, 3938290338UL, 493240317UL, 3788174304UL, 2585475729UL, 3112454413UL, 1881171707UL, 2555908056UL, 3351139844UL, 380428329UL, 3341885423UL, 3307510279UL, 3519476676UL, 1368994724UL, 2555826262UL, 109341943UL, 2382715395UL, 3883409616UL, 1561509458UL, 2163678014UL, 3379783137UL, 2810374300UL, +1516064864UL, 2313252274UL, 316017838UL, 1899237567UL, 70857401UL, 3435185465UL, 2585770746UL, 2580352177UL, 32879620UL, 4171670150UL, 1986234067UL, 3317983509UL, 2073132526UL, 2603712175UL, 377997975UL, 2474419397UL, 908728599UL, 812664089UL, 1778922726UL, 1686111212UL, 972784138UL, 1992540005UL, 2711468739UL, 423435866UL, 1661961159UL, 802312780UL, 907108769UL, 1760295704UL, 3357409828UL, 215039860UL, 683184627UL, 2806826652UL, +3609261689UL, 2167554309UL, 1831085281UL, 3389357802UL, 2755692689UL, 628277197UL, 2900207619UL, 993609502UL, 3429627083UL, 3605915742UL, 3652352199UL, 1780133580UL, 1670387713UL, 4086070210UL, 3717326627UL, 783029246UL, 2165667566UL, 1739001057UL, 377639972UL, 2355216626UL, 1945278055UL, 3941185940UL, 3685368326UL, 1881761572UL, 4024097818UL, 801752UL, 2729497735UL, 492844690UL, 2998826141UL, 2719601647UL, 3679088359UL, 2196391660UL, +4222269404UL, 357321611UL, 1319821972UL, 1819614072UL, 2348798457UL, 4294366646UL, 1952884323UL, 3573866689UL, 2040734807UL, 232392443UL, 4183498179UL, 2614866055UL, 440744432UL, 3624018350UL, 3340709877UL, 3097507723UL, 1268833488UL, 224895395UL, 3338260086UL, 293812421UL, 3683058169UL, 1147960351UL, 3433425235UL, 2171233479UL, 1830154455UL, 4036602681UL, 1996981699UL, 2875889721UL, 40256165UL, 2158110401UL, 3575159090UL, 3196553513UL, +1094082574UL, 3402884675UL, 1998393432UL, 2665389278UL, 3989307699UL, 4068940467UL, 3617519767UL, 3243522970UL, 1243992413UL, 2200497260UL, 441678457UL, 3715729085UL, 3451270040UL, 3044132745UL, 2101287249UL, 2181502237UL, 3173635549UL, 1724350416UL, 3228881240UL, 3123386528UL, 1968352124UL, 2287520039UL, 2635534069UL, 3622906431UL, 206207480UL, 2065093599UL, 96723416UL, 1011223653UL, 7271757UL, 2972858087UL, 1094044749UL, 1668335352UL, +2593296740UL, 174093751UL, 3713822176UL, 2887397643UL, 49226793UL, 1171716408UL, 2867257989UL, 1522213957UL, 984348433UL, 118712412UL, 2174928148UL, 1468226225UL, 3938290338UL, 2279430036UL, 3788174304UL, 2585475729UL, 3112454413UL, 1881171707UL, 4247636500UL, 3351139844UL, 380428329UL, 3341885423UL, 3307510279UL, 2887754196UL, 1368994724UL, 2555826262UL, 109341943UL, 2382715395UL, 2836761616UL, 1561509458UL, 2163678014UL, 3379783137UL, +2810374300UL, 1635278016UL, 2313252274UL, 316017838UL, 1899237567UL, 70857401UL, 3481535811UL, 2585770746UL, 2580352177UL, 32879620UL, 4171670150UL, 2248003250UL, 3317983509UL, 2073132526UL, 2603712175UL, 377997975UL, 3286162818UL, 908728599UL, 812664089UL, 1778922726UL, 1686111212UL, 4024815755UL, 1992540005UL, 2711468739UL, 423435866UL, 1661961159UL, 2257259057UL, 907108769UL, 1760295704UL, 3357409828UL, 215039860UL, 3917391198UL, +2806826652UL, 3609261689UL, 2167554309UL, 1831085281UL, 4238043113UL, 2755692689UL, 628277197UL, 2900207619UL, 993609502UL, 2036092353UL, 3605915742UL, 3652352199UL, 1780133580UL, 1670387713UL, 118446953UL, 3717326627UL, 783029246UL, 2165667566UL, 1739001057UL, 203160626UL, 2355216626UL, 1945278055UL, 3941185940UL, 3685368326UL, 546361979UL, 4024097818UL, 801752UL, 2729497735UL, 492844690UL, 1023017124UL, 2719601647UL, 3679088359UL, +2196391660UL, 4222269404UL, 621859651UL, 1319821972UL, 1819614072UL, 2348798457UL, 4294366646UL, 1114888560UL, 3573866689UL, 2040734807UL, 232392443UL, 4183498179UL, 3959504609UL, 440744432UL, 3624018350UL, 3340709877UL, 3097507723UL, 3613295037UL, 224895395UL, 3338260086UL, 293812421UL, 3683058169UL, 1655305863UL, 3433425235UL, 2171233479UL, 1830154455UL, 4036602681UL, 3731384097UL, 2875889721UL, 40256165UL, 2158110401UL, 3575159090UL, +1847744924UL, 1094082574UL, 3402884675UL, 1998393432UL, 2665389278UL, 3781866777UL, 4068940467UL, 3617519767UL, 3243522970UL, 1243992413UL, 2723708256UL, 441678457UL, 3715729085UL, 3451270040UL, 3044132745UL, 4013832842UL, 2181502237UL, 3173635549UL, 1724350416UL, 3228881240UL, 2092292494UL, 1968352124UL, 2287520039UL, 2635534069UL, 3622906431UL, 3186333458UL, 2065093599UL, 96723416UL, 1011223653UL, 7271757UL, 649658033UL, 1094044749UL, +1668335352UL, 2593296740UL, 174093751UL, 4159420309UL, 2887397643UL, 49226793UL, 1171716408UL, 2867257989UL, 2590077953UL, 984348433UL, 118712412UL, 2174928148UL, 1468226225UL, 1065322711UL, 2279430036UL, 3788174304UL, 2585475729UL, 3112454413UL, 3932517386UL, 4247636500UL, 3351139844UL, 380428329UL, 3341885423UL, 1285273904UL, 2887754196UL, 1368994724UL, 2555826262UL, 109341943UL, 2318470582UL, 2836761616UL, 1561509458UL, 2163678014UL, +3379783137UL, 674658583UL, 1635278016UL, 2313252274UL, 316017838UL, 1899237567UL, 2192372173UL, 3481535811UL, 2585770746UL, 2580352177UL, 32879620UL, 300323274UL, 2248003250UL, 3317983509UL, 2073132526UL, 2603712175UL, 3086543917UL, 3286162818UL, 908728599UL, 812664089UL, 1778922726UL, 2263290659UL, 4024815755UL, 1992540005UL, 2711468739UL, 423435866UL, 819027349UL, 2257259057UL, 907108769UL, 1760295704UL, 3357409828UL, 1142221093UL, +3917391198UL, 2806826652UL, 3609261689UL, 2167554309UL, 4108155875UL, 4238043113UL, 2755692689UL, 628277197UL, 2900207619UL, 3041719497UL, 2036092353UL, 3605915742UL, 3652352199UL, 1780133580UL, 2397410862UL, 118446953UL, 3717326627UL, 783029246UL, 2165667566UL, 2721690354UL, 203160626UL, 2355216626UL, 1945278055UL, 3941185940UL, 2768842108UL, 546361979UL, 4024097818UL, 801752UL, 2729497735UL, 4045063232UL, 1023017124UL, 2719601647UL, +3679088359UL, 2196391660UL, 2666107451UL, 621859651UL, 1319821972UL, 1819614072UL, 2348798457UL, 3555102623UL, 1114888560UL, 3573866689UL, 2040734807UL, 232392443UL, 3359040541UL, 3959504609UL, 440744432UL, 3624018350UL, 3340709877UL, 1477919696UL, 3613295037UL, 224895395UL, 3338260086UL, 293812421UL, 4210187101UL, 1655305863UL, 3433425235UL, 2171233479UL, 1830154455UL, 4150241150UL, 3731384097UL, 2875889721UL, 40256165UL, 2158110401UL, +3350246687UL, 455561037UL, 2250400255UL, 3192153445UL, 3258870230UL, 1500391873UL, 4142878334UL, 1155955691UL, 1483275844UL, 4189436981UL, 323745948UL, 1976017426UL, 2804626790UL, 2717553615UL, 2315409034UL, 954508235UL, 3845175920UL, 3999878682UL, 1247696432UL, 1743319509UL, 2998248398UL, 3694350012UL, 4072006361UL, 191306987UL, 2816321878UL, 1324077734UL, 1083060006UL, 3406855480UL, 1619622379UL, 2160350UL, 3302238190UL, 3368021261UL, +3685228564UL, 3863934685UL, 771728612UL, 854205233UL, 2304696695UL, 421449207UL, 1265752117UL, 3852292419UL, 305345788UL, 1540622105UL, 1904883477UL, 833469256UL, 134406680UL, 3012455058UL, 4035477953UL, 2925192459UL, 1559200592UL, 3851612860UL, 718484562UL, 1377960276UL, 1586892849UL, 1361298269UL, 3417917896UL, 1281324499UL, 1012538763UL, 1350578667UL, 3946475598UL, 2982283954UL, 3548792804UL, 284542749UL, 1194648577UL, 3087899716UL, +3966595444UL, 2088330116UL, 3641652062UL, 327128507UL, 593906557UL, 1092448919UL, 2459189516UL, 4053392241UL, 3356198248UL, 2352376508UL, 470648997UL, 1017041256UL, 3234172340UL, 3928191489UL, 3266226858UL, 4219289150UL, 1229098319UL, 4275351308UL, 2720777751UL, 3566728718UL, 638322822UL, 2369792461UL, 2869492261UL, 3120083828UL, 1890399556UL, 3309991008UL, 3785452464UL, 4128660314UL, 3726791982UL, 167177896UL, 461294981UL, 3988638998UL, +2937794823UL, 3981029822UL, 1111681402UL, 2015965721UL, 7261806UL, 2669786265UL, 1083582734UL, 3270228881UL, 3892235938UL, 2695872715UL, 4246051290UL, 3214293333UL, 343604199UL, 3215604888UL, 661024127UL, 2931754053UL, 3787840039UL, 2053363765UL, 363432336UL, 112334132UL, 2871797223UL, 138911320UL, 3981126938UL, 2027332192UL, 1804730644UL, 590150270UL, 641538574UL, 6802174UL, 3551446076UL, 3908480472UL, 1004531022UL, 2097228524UL, +1919074232UL, 154482247UL, 121437972UL, 1215661323UL, 1178068273UL, 1097220699UL, 2823681422UL, 262636065UL, 2943371149UL, 1768780720UL, 3866040605UL, 1855991583UL, 3988248086UL, 629223947UL, 3380612330UL, 3552916762UL, 197596340UL, 573801686UL, 2049230598UL, 2910471867UL, 2686314264UL, 1726228846UL, 3516983332UL, 726840185UL, 1241204222UL, 2237574317UL, 70568042UL, 1932610099UL, 2221862221UL, 1510378092UL, 4050391637UL, 4077539568UL, +}, +{ +3872117793UL, 803220151UL, 70843412UL, 1661103032UL, 1976811457UL, 2186373604UL, 564259972UL, 1475436923UL, 2260980893UL, 4245534505UL, 1075107552UL, 3692990573UL, 370098873UL, 4045905424UL, 2420395420UL, 2332395402UL, 207483321UL, 622317750UL, 3004242500UL, 833623111UL, 3151161301UL, 1629139881UL, 352228793UL, 2439953368UL, 3183333619UL, 2703537080UL, 3218957129UL, 3164695888UL, 1741641842UL, 963394141UL, 4241612717UL, 1034476784UL, +2035880432UL, 3977821313UL, 1543311495UL, 3010014356UL, 1638490901UL, 2364265378UL, 3420329129UL, 333361555UL, 1133565821UL, 1450937015UL, 616059115UL, 3216393887UL, 3041978455UL, 3990855695UL, 1238628750UL, 512746184UL, 3256670217UL, 1616316512UL, 2791405051UL, 93474487UL, 2865892488UL, 1901471398UL, 2930857966UL, 2178431077UL, 2325598341UL, 3189256113UL, 1302432091UL, 808592927UL, 2945846737UL, 3487931071UL, 2018175258UL, 752981057UL, +1097082589UL, 1307115286UL, 175147508UL, 3611190164UL, 850238914UL, 3318706185UL, 199743319UL, 328621708UL, 3183670050UL, 3609998315UL, 4075306371UL, 3554549067UL, 2119566187UL, 1498503842UL, 1261870696UL, 2216745780UL, 950288337UL, 1117344941UL, 2150569143UL, 2899286760UL, 1594966374UL, 888858617UL, 35840654UL, 2829539211UL, 2511395669UL, 3607190544UL, 3278412778UL, 2249895907UL, 1320858068UL, 3576889788UL, 266766189UL, 1522426851UL, +1903494122UL, 1928370573UL, 2628132591UL, 3322025904UL, 220280169UL, 433606853UL, 1428961479UL, 986074592UL, 2128892987UL, 467697583UL, 1616913929UL, 325674890UL, 444442578UL, 649166208UL, 1689709565UL, 1493452467UL, 2222122038UL, 121114616UL, 2134348225UL, 3512035688UL, 1283058921UL, 4230441398UL, 3701238559UL, 337534132UL, 1418548715UL, 1190006478UL, 500654385UL, 1766924757UL, 1944680746UL, 940574010UL, 922744002UL, 186142284UL, +3131162902UL, 1693891092UL, 3031823448UL, 2143051534UL, 1429025284UL, 1487843160UL, 3606456133UL, 2079235652UL, 2447285474UL, 2669283767UL, 3232117829UL, 2490054343UL, 3225501736UL, 2911340385UL, 382319031UL, 1516937595UL, 622543191UL, 1388990570UL, 1749179860UL, 1924483707UL, 2593474505UL, 472539197UL, 122872799UL, 2586347240UL, 880588515UL, 4046335279UL, 1712182607UL, 4270737941UL, 1336703451UL, 3390078162UL, 382216945UL, 3733326081UL, +460422073UL, 3872117793UL, 803220151UL, 70843412UL, 1661103032UL, 250339760UL, 2186373604UL, 564259972UL, 1475436923UL, 2260980893UL, 657986735UL, 1075107552UL, 3692990573UL, 370098873UL, 4045905424UL, 3201950123UL, 2332395402UL, 207483321UL, 622317750UL, 3004242500UL, 3732213278UL, 3151161301UL, 1629139881UL, 352228793UL, 2439953368UL, 3572618926UL, 2703537080UL, 3218957129UL, 3164695888UL, 1741641842UL, 685933373UL, 4241612717UL, +1034476784UL, 2035880432UL, 3977821313UL, 3855995181UL, 3010014356UL, 1638490901UL, 2364265378UL, 3420329129UL, 2355603679UL, 1133565821UL, 1450937015UL, 616059115UL, 3216393887UL, 1733804102UL, 3990855695UL, 1238628750UL, 512746184UL, 3256670217UL, 2651059231UL, 2791405051UL, 93474487UL, 2865892488UL, 1901471398UL, 2113461797UL, 2178431077UL, 2325598341UL, 3189256113UL, 1302432091UL, 2986990416UL, 2945846737UL, 3487931071UL, 2018175258UL, +752981057UL, 2428033310UL, 1307115286UL, 175147508UL, 3611190164UL, 850238914UL, 1033628405UL, 199743319UL, 328621708UL, 3183670050UL, 3609998315UL, 4024297327UL, 3554549067UL, 2119566187UL, 1498503842UL, 1261870696UL, 290361143UL, 950288337UL, 1117344941UL, 2150569143UL, 2899286760UL, 168826051UL, 888858617UL, 35840654UL, 2829539211UL, 2511395669UL, 2890882060UL, 3278412778UL, 2249895907UL, 1320858068UL, 3576889788UL, 1794920145UL, +1522426851UL, 1903494122UL, 1928370573UL, 2628132591UL, 1251697758UL, 220280169UL, 433606853UL, 1428961479UL, 986074592UL, 2707115661UL, 467697583UL, 1616913929UL, 325674890UL, 444442578UL, 122781510UL, 1689709565UL, 1493452467UL, 2222122038UL, 121114616UL, 3425723636UL, 3512035688UL, 1283058921UL, 4230441398UL, 3701238559UL, 1646155473UL, 1418548715UL, 1190006478UL, 500654385UL, 1766924757UL, 3920475367UL, 940574010UL, 922744002UL, +186142284UL, 3131162902UL, 54639113UL, 3031823448UL, 2143051534UL, 1429025284UL, 1487843160UL, 4152687885UL, 2079235652UL, 2447285474UL, 2669283767UL, 3232117829UL, 1601035152UL, 3225501736UL, 2911340385UL, 382319031UL, 1516937595UL, 3508441679UL, 1388990570UL, 1749179860UL, 1924483707UL, 2593474505UL, 2835403456UL, 122872799UL, 2586347240UL, 880588515UL, 4046335279UL, 2958058367UL, 4270737941UL, 1336703451UL, 3390078162UL, 382216945UL, +450517882UL, 460422073UL, 3872117793UL, 803220151UL, 70843412UL, 2066343874UL, 250339760UL, 2186373604UL, 564259972UL, 1475436923UL, 1683787449UL, 657986735UL, 1075107552UL, 3692990573UL, 370098873UL, 2615082840UL, 3201950123UL, 2332395402UL, 207483321UL, 622317750UL, 2655424371UL, 3732213278UL, 3151161301UL, 1629139881UL, 352228793UL, 3236724760UL, 3572618926UL, 2703537080UL, 3218957129UL, 3164695888UL, 9775065UL, 685933373UL, +4241612717UL, 1034476784UL, 2035880432UL, 1621920075UL, 3855995181UL, 3010014356UL, 1638490901UL, 2364265378UL, 1509475888UL, 2355603679UL, 1133565821UL, 1450937015UL, 616059115UL, 3666188236UL, 1733804102UL, 3990855695UL, 1238628750UL, 512746184UL, 3900473826UL, 2651059231UL, 2791405051UL, 93474487UL, 2865892488UL, 222759186UL, 2113461797UL, 2178431077UL, 2325598341UL, 3189256113UL, 2505499508UL, 2986990416UL, 2945846737UL, 3487931071UL, +2018175258UL, 2766733928UL, 2428033310UL, 1307115286UL, 175147508UL, 3611190164UL, 1909211603UL, 1033628405UL, 199743319UL, 328621708UL, 3183670050UL, 1680331218UL, 4024297327UL, 3554549067UL, 2119566187UL, 1498503842UL, 3516256046UL, 290361143UL, 950288337UL, 1117344941UL, 2150569143UL, 3182619063UL, 168826051UL, 888858617UL, 35840654UL, 2829539211UL, 645798943UL, 2890882060UL, 3278412778UL, 2249895907UL, 1320858068UL, 1436708568UL, +1794920145UL, 1522426851UL, 1903494122UL, 1928370573UL, 3693049252UL, 1251697758UL, 220280169UL, 433606853UL, 1428961479UL, 3724415861UL, 2707115661UL, 467697583UL, 1616913929UL, 325674890UL, 1448052253UL, 122781510UL, 1689709565UL, 1493452467UL, 2222122038UL, 2177448198UL, 3425723636UL, 3512035688UL, 1283058921UL, 4230441398UL, 3050940272UL, 1646155473UL, 1418548715UL, 1190006478UL, 500654385UL, 1106232UL, 3920475367UL, 940574010UL, +922744002UL, 186142284UL, 4144806511UL, 54639113UL, 3031823448UL, 2143051534UL, 1429025284UL, 2067453848UL, 4152687885UL, 2079235652UL, 2447285474UL, 2669283767UL, 428527087UL, 1601035152UL, 3225501736UL, 2911340385UL, 382319031UL, 2565464472UL, 3508441679UL, 1388990570UL, 1749179860UL, 1924483707UL, 1737735237UL, 2835403456UL, 122872799UL, 2586347240UL, 880588515UL, 597822462UL, 2958058367UL, 4270737941UL, 1336703451UL, 3390078162UL, +2532634475UL, 450517882UL, 460422073UL, 3872117793UL, 803220151UL, 801648827UL, 2066343874UL, 250339760UL, 2186373604UL, 564259972UL, 3417948976UL, 1683787449UL, 657986735UL, 1075107552UL, 3692990573UL, 2235306692UL, 2615082840UL, 3201950123UL, 2332395402UL, 207483321UL, 699310933UL, 2655424371UL, 3732213278UL, 3151161301UL, 1629139881UL, 1152704006UL, 3236724760UL, 3572618926UL, 2703537080UL, 3218957129UL, 2726926336UL, 9775065UL, +685933373UL, 4241612717UL, 1034476784UL, 2398119652UL, 1621920075UL, 3855995181UL, 3010014356UL, 1638490901UL, 252854480UL, 1509475888UL, 2355603679UL, 1133565821UL, 1450937015UL, 2655911639UL, 3666188236UL, 1733804102UL, 3990855695UL, 1238628750UL, 1115900497UL, 3900473826UL, 2651059231UL, 2791405051UL, 93474487UL, 1862985957UL, 222759186UL, 2113461797UL, 2178431077UL, 2325598341UL, 4179075132UL, 2505499508UL, 2986990416UL, 2945846737UL, +3487931071UL, 564667776UL, 2766733928UL, 2428033310UL, 1307115286UL, 175147508UL, 1759077815UL, 1909211603UL, 1033628405UL, 199743319UL, 328621708UL, 2552816198UL, 1680331218UL, 4024297327UL, 3554549067UL, 2119566187UL, 2267805778UL, 3516256046UL, 290361143UL, 950288337UL, 1117344941UL, 2897506172UL, 3182619063UL, 168826051UL, 888858617UL, 35840654UL, 2035476068UL, 645798943UL, 2890882060UL, 3278412778UL, 2249895907UL, 3278449102UL, +1436708568UL, 1794920145UL, 1522426851UL, 1903494122UL, 1500763736UL, 3693049252UL, 1251697758UL, 220280169UL, 433606853UL, 3914497854UL, 3724415861UL, 2707115661UL, 467697583UL, 1616913929UL, 918435305UL, 1448052253UL, 122781510UL, 1689709565UL, 1493452467UL, 609575172UL, 2177448198UL, 3425723636UL, 3512035688UL, 1283058921UL, 3661181550UL, 3050940272UL, 1646155473UL, 1418548715UL, 1190006478UL, 1047301661UL, 1106232UL, 3920475367UL, +940574010UL, 922744002UL, 2510633517UL, 4144806511UL, 54639113UL, 3031823448UL, 2143051534UL, 3242814908UL, 2067453848UL, 4152687885UL, 2079235652UL, 2447285474UL, 736638210UL, 428527087UL, 1601035152UL, 3225501736UL, 2911340385UL, 1849570436UL, 2565464472UL, 3508441679UL, 1388990570UL, 1749179860UL, 84517579UL, 1737735237UL, 2835403456UL, 122872799UL, 2586347240UL, 4002124614UL, 597822462UL, 2958058367UL, 4270737941UL, 1336703451UL, +3078170472UL, 1186434751UL, 700631413UL, 1497890797UL, 1195347450UL, 2560167391UL, 1116697259UL, 1254138573UL, 747913260UL, 240954704UL, 3107512667UL, 360584144UL, 3422778960UL, 3516528389UL, 3301260366UL, 1254513537UL, 122269053UL, 1579582456UL, 873334104UL, 3918835024UL, 1731872444UL, 1974410416UL, 1811172641UL, 4172523062UL, 4092675777UL, 4124987343UL, 1936078756UL, 1757348689UL, 2694415512UL, 128641660UL, 1744777659UL, 3173116729UL, +983733754UL, 1430789547UL, 701906842UL, 3367232568UL, 3266433501UL, 3572590347UL, 1453272962UL, 2106553114UL, 993786201UL, 2149441250UL, 1295181065UL, 2962229026UL, 3709052556UL, 3255608941UL, 3677730029UL, 483873127UL, 102227292UL, 2626265293UL, 2018984578UL, 2266388762UL, 1191709548UL, 2152725916UL, 583672623UL, 2230473473UL, 1995194269UL, 1740347812UL, 2558095372UL, 3070195183UL, 3023333227UL, 2497183195UL, 1908755188UL, 773027539UL, +3646876518UL, 2272586839UL, 493318726UL, 2107067517UL, 2000805278UL, 2530829636UL, 3183628745UL, 677565332UL, 1497629423UL, 82094920UL, 2214054433UL, 2635367545UL, 470855467UL, 2184853389UL, 2942188934UL, 188335670UL, 3656661644UL, 1883526235UL, 3990873975UL, 1490784356UL, 4047548172UL, 3149642641UL, 3289988179UL, 2590918909UL, 2893039564UL, 2350687346UL, 4252624874UL, 15372456UL, 1614496594UL, 2364847678UL, 2604511825UL, 422365460UL, +4195174772UL, 3266964836UL, 2008671995UL, 54038434UL, 781948549UL, 1276017666UL, 2756376612UL, 2436825273UL, 1711863836UL, 3541493950UL, 3821378841UL, 1007557618UL, 345375815UL, 2081905201UL, 2227278118UL, 1185927141UL, 1082173792UL, 3567361925UL, 1940465859UL, 541632942UL, 1830210248UL, 3757851982UL, 775883450UL, 1666577465UL, 1004944607UL, 878440834UL, 2146344131UL, 4195798476UL, 370164841UL, 3649112729UL, 37066142UL, 2311278904UL, +1935745497UL, 2304799402UL, 4107299626UL, 1348526232UL, 2473609635UL, 3284032699UL, 2374292786UL, 1762329186UL, 857978496UL, 1039346432UL, 2621413355UL, 29961014UL, 3582263091UL, 4268542513UL, 3890612190UL, 3096173646UL, 2026544230UL, 3856142618UL, 2347115934UL, 319800326UL, 3255916105UL, 2430273059UL, 823505311UL, 874255188UL, 1401925393UL, 4203707857UL, 4259159566UL, 2606881118UL, 1978288664UL, 1447576038UL, 3860341401UL, 412510348UL, +}, +{ +4052471963UL, 683640040UL, 3043876021UL, 3466644483UL, 4222418025UL, 3035140128UL, 1466027937UL, 18198088UL, 3410320851UL, 3040963721UL, 488404231UL, 3157371815UL, 769336092UL, 3240417718UL, 808582581UL, 2075839263UL, 835026995UL, 3123726486UL, 3284240985UL, 1898453053UL, 3606056482UL, 512836002UL, 2715428547UL, 4182302879UL, 1644882480UL, 3160187826UL, 390292489UL, 980889545UL, 2776206633UL, 2482799995UL, 617042280UL, 3501667414UL, +689451808UL, 497018701UL, 238525753UL, 3890163301UL, 896679896UL, 1544533015UL, 3412477225UL, 3116575138UL, 4250402651UL, 3990990746UL, 819056741UL, 1459334146UL, 158377590UL, 3444755752UL, 8230450UL, 1378706455UL, 684191332UL, 3217423797UL, 2842520097UL, 1631477948UL, 2591254230UL, 959644473UL, 1020694107UL, 1748401915UL, 3452514983UL, 3892766171UL, 1227786994UL, 2086180800UL, 2394613217UL, 2091953150UL, 870094953UL, 2306851481UL, +571550601UL, 488878212UL, 873197214UL, 2630100528UL, 2067476907UL, 2162307009UL, 2026119728UL, 115875280UL, 2905867426UL, 248774881UL, 3110900450UL, 2236032812UL, 1888510348UL, 708001855UL, 996960491UL, 3514196956UL, 1407967546UL, 1826568876UL, 3659618284UL, 2614104317UL, 2230066308UL, 1055135881UL, 2537437343UL, 1858044413UL, 2608594891UL, 2750681169UL, 3241939420UL, 3966440877UL, 2375002886UL, 2417753441UL, 1405878685UL, 1081133199UL, +1496940727UL, 382467042UL, 2745477587UL, 1209424459UL, 811187075UL, 1385604734UL, 2623887355UL, 3443875720UL, 394141555UL, 4142998949UL, 4195414618UL, 1489846841UL, 2253433808UL, 1171450286UL, 84131191UL, 4387588UL, 2641405140UL, 3525405389UL, 3273000909UL, 423660319UL, 2366546732UL, 3698878607UL, 2161119729UL, 4263629085UL, 3029102089UL, 2692507376UL, 3266869596UL, 1658012061UL, 1960169440UL, 1002311379UL, 3724446882UL, 2004188516UL, +999513506UL, 2200093802UL, 4141037460UL, 351865836UL, 412875013UL, 1535823315UL, 3880657632UL, 3109944987UL, 3207577548UL, 3462087941UL, 584875517UL, 2635241084UL, 3834145971UL, 1693380373UL, 3524443732UL, 934775214UL, 1960588847UL, 2226778032UL, 1044609478UL, 12199016UL, 1120582000UL, 226430296UL, 665553142UL, 2570993348UL, 1685535237UL, 3325420136UL, 3925248326UL, 2855346376UL, 1205558328UL, 808835317UL, 3295908896UL, 4170076136UL, +2438272365UL, 4052471963UL, 683640040UL, 3043876021UL, 3466644483UL, 1385549869UL, 3035140128UL, 1466027937UL, 18198088UL, 3410320851UL, 2171386836UL, 488404231UL, 3157371815UL, 769336092UL, 3240417718UL, 2921774554UL, 2075839263UL, 835026995UL, 3123726486UL, 3284240985UL, 72352110UL, 3606056482UL, 512836002UL, 2715428547UL, 4182302879UL, 3869483469UL, 3160187826UL, 390292489UL, 980889545UL, 2776206633UL, 1385691983UL, 617042280UL, +3501667414UL, 689451808UL, 497018701UL, 2600411809UL, 3890163301UL, 896679896UL, 1544533015UL, 3412477225UL, 356556378UL, 4250402651UL, 3990990746UL, 819056741UL, 1459334146UL, 199003993UL, 3444755752UL, 8230450UL, 1378706455UL, 684191332UL, 1750733272UL, 2842520097UL, 1631477948UL, 2591254230UL, 959644473UL, 2113375576UL, 1748401915UL, 3452514983UL, 3892766171UL, 1227786994UL, 275473920UL, 2394613217UL, 2091953150UL, 870094953UL, +2306851481UL, 897057645UL, 488878212UL, 873197214UL, 2630100528UL, 2067476907UL, 944114068UL, 2026119728UL, 115875280UL, 2905867426UL, 248774881UL, 989201307UL, 2236032812UL, 1888510348UL, 708001855UL, 996960491UL, 2121706374UL, 1407967546UL, 1826568876UL, 3659618284UL, 2614104317UL, 2931815032UL, 1055135881UL, 2537437343UL, 1858044413UL, 2608594891UL, 1423973935UL, 3241939420UL, 3966440877UL, 2375002886UL, 2417753441UL, 2514473440UL, +1081133199UL, 1496940727UL, 382467042UL, 2745477587UL, 81977310UL, 811187075UL, 1385604734UL, 2623887355UL, 3443875720UL, 2100629879UL, 4142998949UL, 4195414618UL, 1489846841UL, 2253433808UL, 337182869UL, 84131191UL, 4387588UL, 2641405140UL, 3525405389UL, 661876463UL, 423660319UL, 2366546732UL, 3698878607UL, 2161119729UL, 309510684UL, 3029102089UL, 2692507376UL, 3266869596UL, 1658012061UL, 11119541UL, 1002311379UL, 3724446882UL, +2004188516UL, 999513506UL, 3486722046UL, 4141037460UL, 351865836UL, 412875013UL, 1535823315UL, 2818130700UL, 3109944987UL, 3207577548UL, 3462087941UL, 584875517UL, 322875622UL, 3834145971UL, 1693380373UL, 3524443732UL, 934775214UL, 3879414752UL, 2226778032UL, 1044609478UL, 12199016UL, 1120582000UL, 4207259464UL, 665553142UL, 2570993348UL, 1685535237UL, 3325420136UL, 553869152UL, 2855346376UL, 1205558328UL, 808835317UL, 3295908896UL, +470585896UL, 2438272365UL, 4052471963UL, 683640040UL, 3043876021UL, 1588419572UL, 1385549869UL, 3035140128UL, 1466027937UL, 18198088UL, 363815288UL, 2171386836UL, 488404231UL, 3157371815UL, 769336092UL, 2464768302UL, 2921774554UL, 2075839263UL, 835026995UL, 3123726486UL, 4229246330UL, 72352110UL, 3606056482UL, 512836002UL, 2715428547UL, 319830805UL, 3869483469UL, 3160187826UL, 390292489UL, 980889545UL, 2966401462UL, 1385691983UL, +617042280UL, 3501667414UL, 689451808UL, 4047377762UL, 2600411809UL, 3890163301UL, 896679896UL, 1544533015UL, 764316452UL, 356556378UL, 4250402651UL, 3990990746UL, 819056741UL, 965331966UL, 199003993UL, 3444755752UL, 8230450UL, 1378706455UL, 51902971UL, 1750733272UL, 2842520097UL, 1631477948UL, 2591254230UL, 426039404UL, 2113375576UL, 1748401915UL, 3452514983UL, 3892766171UL, 2833368447UL, 275473920UL, 2394613217UL, 2091953150UL, +870094953UL, 3524323828UL, 897057645UL, 488878212UL, 873197214UL, 2630100528UL, 3939852929UL, 944114068UL, 2026119728UL, 115875280UL, 2905867426UL, 3192643919UL, 989201307UL, 2236032812UL, 1888510348UL, 708001855UL, 2166012172UL, 2121706374UL, 1407967546UL, 1826568876UL, 3659618284UL, 135277096UL, 2931815032UL, 1055135881UL, 2537437343UL, 1858044413UL, 2588429924UL, 1423973935UL, 3241939420UL, 3966440877UL, 2375002886UL, 2477142003UL, +2514473440UL, 1081133199UL, 1496940727UL, 382467042UL, 1760129281UL, 81977310UL, 811187075UL, 1385604734UL, 2623887355UL, 4070531513UL, 2100629879UL, 4142998949UL, 4195414618UL, 1489846841UL, 2688068550UL, 337182869UL, 84131191UL, 4387588UL, 2641405140UL, 1837403234UL, 661876463UL, 423660319UL, 2366546732UL, 3698878607UL, 2916121190UL, 309510684UL, 3029102089UL, 2692507376UL, 3266869596UL, 303422295UL, 11119541UL, 1002311379UL, +3724446882UL, 2004188516UL, 2652711421UL, 3486722046UL, 4141037460UL, 351865836UL, 412875013UL, 113149471UL, 2818130700UL, 3109944987UL, 3207577548UL, 3462087941UL, 1443140792UL, 322875622UL, 3834145971UL, 1693380373UL, 3524443732UL, 901891935UL, 3879414752UL, 2226778032UL, 1044609478UL, 12199016UL, 2213168758UL, 4207259464UL, 665553142UL, 2570993348UL, 1685535237UL, 1114492412UL, 553869152UL, 2855346376UL, 1205558328UL, 808835317UL, +3266626294UL, 470585896UL, 2438272365UL, 4052471963UL, 683640040UL, 3581539398UL, 1588419572UL, 1385549869UL, 3035140128UL, 1466027937UL, 4075470388UL, 363815288UL, 2171386836UL, 488404231UL, 3157371815UL, 2759472233UL, 2464768302UL, 2921774554UL, 2075839263UL, 835026995UL, 1030654310UL, 4229246330UL, 72352110UL, 3606056482UL, 512836002UL, 961858496UL, 319830805UL, 3869483469UL, 3160187826UL, 390292489UL, 2366221117UL, 2966401462UL, +1385691983UL, 617042280UL, 3501667414UL, 295865937UL, 4047377762UL, 2600411809UL, 3890163301UL, 896679896UL, 21714884UL, 764316452UL, 356556378UL, 4250402651UL, 3990990746UL, 1012967081UL, 965331966UL, 199003993UL, 3444755752UL, 8230450UL, 1255302023UL, 51902971UL, 1750733272UL, 2842520097UL, 1631477948UL, 2321320272UL, 426039404UL, 2113375576UL, 1748401915UL, 3452514983UL, 2847013518UL, 2833368447UL, 275473920UL, 2394613217UL, +2091953150UL, 1250695522UL, 3524323828UL, 897057645UL, 488878212UL, 873197214UL, 1452317325UL, 3939852929UL, 944114068UL, 2026119728UL, 115875280UL, 4061820350UL, 3192643919UL, 989201307UL, 2236032812UL, 1888510348UL, 3986446165UL, 2166012172UL, 2121706374UL, 1407967546UL, 1826568876UL, 2910745432UL, 135277096UL, 2931815032UL, 1055135881UL, 2537437343UL, 2976455307UL, 2588429924UL, 1423973935UL, 3241939420UL, 3966440877UL, 2418897705UL, +2477142003UL, 2514473440UL, 1081133199UL, 1496940727UL, 1321648771UL, 1760129281UL, 81977310UL, 811187075UL, 1385604734UL, 17644628UL, 4070531513UL, 2100629879UL, 4142998949UL, 4195414618UL, 2697310527UL, 2688068550UL, 337182869UL, 84131191UL, 4387588UL, 1724191700UL, 1837403234UL, 661876463UL, 423660319UL, 2366546732UL, 693430992UL, 2916121190UL, 309510684UL, 3029102089UL, 2692507376UL, 3917396098UL, 303422295UL, 11119541UL, +1002311379UL, 3724446882UL, 841468294UL, 2652711421UL, 3486722046UL, 4141037460UL, 351865836UL, 1733384185UL, 113149471UL, 2818130700UL, 3109944987UL, 3207577548UL, 2326233100UL, 1443140792UL, 322875622UL, 3834145971UL, 1693380373UL, 1580706359UL, 901891935UL, 3879414752UL, 2226778032UL, 1044609478UL, 3805470822UL, 2213168758UL, 4207259464UL, 665553142UL, 2570993348UL, 3406548636UL, 1114492412UL, 553869152UL, 2855346376UL, 1205558328UL, +4287831475UL, 1329654114UL, 2347235746UL, 2477803138UL, 2962371859UL, 3610024283UL, 4197266903UL, 1162294689UL, 1746713323UL, 2815058477UL, 2152552186UL, 4214791071UL, 2382522482UL, 3713914466UL, 3974765132UL, 348354997UL, 1670276150UL, 2173074887UL, 381736894UL, 3866219357UL, 1919366695UL, 3635118824UL, 2298653261UL, 3534332682UL, 1627699897UL, 4168636618UL, 3787938690UL, 2144231271UL, 2067679462UL, 217001062UL, 2308928337UL, 1620415125UL, +3526559172UL, 749451561UL, 2456947371UL, 3543607786UL, 1893824735UL, 962598819UL, 2332807164UL, 1691114891UL, 2543992233UL, 2914780639UL, 1610287145UL, 1700599697UL, 3185174208UL, 552323208UL, 2367242224UL, 3797136972UL, 3415066418UL, 2468049249UL, 1677937401UL, 40445671UL, 2886682530UL, 2585715434UL, 194932329UL, 2994003812UL, 3099556382UL, 680852222UL, 135838738UL, 1371063256UL, 995454898UL, 3754526418UL, 803635682UL, 634588682UL, +3869250783UL, 2442285521UL, 1455637058UL, 570621479UL, 2512681851UL, 1220136924UL, 750260121UL, 2909903038UL, 1582019728UL, 955115170UL, 1608265445UL, 2157390890UL, 2303678604UL, 1568394164UL, 831914289UL, 1971271392UL, 1294799854UL, 1489945167UL, 442427880UL, 1305083700UL, 1211218668UL, 2380073713UL, 2798736785UL, 2193524273UL, 3227386915UL, 1636588977UL, 3612937642UL, 435113647UL, 1591761830UL, 536210039UL, 2475747073UL, 4223795480UL, +1786737271UL, 1444661534UL, 3249410301UL, 3333695212UL, 4169107188UL, 3280638635UL, 702659930UL, 1444127970UL, 225340755UL, 2255629368UL, 746584456UL, 3965677674UL, 2671132955UL, 2080717656UL, 2145343886UL, 3712441197UL, 368422910UL, 1297685674UL, 4076123901UL, 26214470UL, 2948764826UL, 40503299UL, 1198194334UL, 2100063637UL, 1966331612UL, 2189582064UL, 2064696934UL, 1797550642UL, 3469793941UL, 2868963812UL, 851437659UL, 240918534UL, +365060070UL, 3530600064UL, 39695324UL, 1753898837UL, 1286976449UL, 3131971360UL, 2406485219UL, 3365373704UL, 3224113403UL, 1651742834UL, 587601940UL, 1574206085UL, 3739575036UL, 1413669616UL, 38172232UL, 293127854UL, 4126190109UL, 1891744061UL, 787878666UL, 456643669UL, 4228710325UL, 2025132037UL, 1492133135UL, 3122840937UL, 969442079UL, 3272420439UL, 3836126369UL, 1877655562UL, 2766212758UL, 3867984746UL, 3348077578UL, 1841216706UL, +}, +{ +1676507466UL, 1017841240UL, 2992644565UL, 476936158UL, 2468072723UL, 3113105154UL, 1154120402UL, 460889625UL, 1942263502UL, 1761593999UL, 3020908939UL, 3078194866UL, 310971889UL, 1644896012UL, 3756044556UL, 3549937583UL, 3710822994UL, 3554313733UL, 2174654326UL, 4251063242UL, 2340485150UL, 950951909UL, 4288936895UL, 3744348848UL, 706644559UL, 1085927825UL, 1595992020UL, 3288724966UL, 1367247946UL, 2950094970UL, 3925419886UL, 2628739022UL, +2528254629UL, 3582224789UL, 3907345559UL, 3373329273UL, 4255542251UL, 1185418446UL, 4018656113UL, 2854344020UL, 1381160022UL, 3642438773UL, 4284399225UL, 935780030UL, 4142412144UL, 1263328494UL, 1154237693UL, 2684443667UL, 3067549398UL, 4253090033UL, 1251034970UL, 1874233020UL, 3222830495UL, 3866931656UL, 286048055UL, 3146635362UL, 1436483376UL, 2821876495UL, 3927829532UL, 2648886905UL, 2142862852UL, 1368937545UL, 2647327844UL, 1072219385UL, +2621337706UL, 3543274652UL, 911792564UL, 1204178178UL, 4127214323UL, 2821691380UL, 3101998294UL, 730811902UL, 1989156224UL, 2872353003UL, 278290276UL, 1390223786UL, 2657819643UL, 552729795UL, 1736270535UL, 2759207116UL, 1897013739UL, 3657020278UL, 1387364861UL, 1966588302UL, 1049203087UL, 486446521UL, 3675999281UL, 714737345UL, 686837530UL, 85509025UL, 3609089773UL, 2117061768UL, 3935682560UL, 3859508784UL, 4105287041UL, 1808988481UL, +83680601UL, 1464326680UL, 1657693523UL, 3318062731UL, 1391154023UL, 234460119UL, 3551348221UL, 2245244809UL, 3635923821UL, 2814385745UL, 3497626257UL, 916790795UL, 245338628UL, 2514528380UL, 3711787525UL, 2239286063UL, 1054058916UL, 3963706010UL, 3176203796UL, 2230543409UL, 2173597546UL, 3786733892UL, 1396036965UL, 1038764273UL, 2032556038UL, 3216540537UL, 3298170974UL, 1008892557UL, 141155464UL, 1863766055UL, 3931110690UL, 191299053UL, +2019139711UL, 2409528317UL, 739418419UL, 1377144055UL, 2876702705UL, 3911939673UL, 1197696462UL, 2814009721UL, 600813233UL, 1535885024UL, 1486280357UL, 3084650548UL, 2324695947UL, 2293284974UL, 2036339249UL, 3465600153UL, 1624446108UL, 327866771UL, 3356772175UL, 1826625240UL, 1947102360UL, 3661848193UL, 1421374867UL, 3228945021UL, 1358646008UL, 1067180174UL, 2190741258UL, 643362354UL, 109899594UL, 2064362635UL, 3249674888UL, 2165543887UL, +4180291913UL, 1676507466UL, 1017841240UL, 2992644565UL, 476936158UL, 3608467942UL, 3113105154UL, 1154120402UL, 460889625UL, 1942263502UL, 1862994005UL, 3020908939UL, 3078194866UL, 310971889UL, 1644896012UL, 693774191UL, 3549937583UL, 3710822994UL, 3554313733UL, 2174654326UL, 37658897UL, 2340485150UL, 950951909UL, 4288936895UL, 3744348848UL, 2258231402UL, 1085927825UL, 1595992020UL, 3288724966UL, 1367247946UL, 3850509554UL, 3925419886UL, +2628739022UL, 2528254629UL, 3582224789UL, 3124287811UL, 3373329273UL, 4255542251UL, 1185418446UL, 4018656113UL, 1989726178UL, 1381160022UL, 3642438773UL, 4284399225UL, 935780030UL, 3622052196UL, 1263328494UL, 1154237693UL, 2684443667UL, 3067549398UL, 2786224913UL, 1251034970UL, 1874233020UL, 3222830495UL, 3866931656UL, 1529490307UL, 3146635362UL, 1436483376UL, 2821876495UL, 3927829532UL, 979247444UL, 2142862852UL, 1368937545UL, 2647327844UL, +1072219385UL, 294065371UL, 3543274652UL, 911792564UL, 1204178178UL, 4127214323UL, 103582737UL, 3101998294UL, 730811902UL, 1989156224UL, 2872353003UL, 1885087777UL, 1390223786UL, 2657819643UL, 552729795UL, 1736270535UL, 3325206451UL, 1897013739UL, 3657020278UL, 1387364861UL, 1966588302UL, 2117065739UL, 486446521UL, 3675999281UL, 714737345UL, 686837530UL, 3946214694UL, 3609089773UL, 2117061768UL, 3935682560UL, 3859508784UL, 2916136885UL, +1808988481UL, 83680601UL, 1464326680UL, 1657693523UL, 3438751781UL, 1391154023UL, 234460119UL, 3551348221UL, 2245244809UL, 3948410079UL, 2814385745UL, 3497626257UL, 916790795UL, 245338628UL, 1767303496UL, 3711787525UL, 2239286063UL, 1054058916UL, 3963706010UL, 4140631909UL, 2230543409UL, 2173597546UL, 3786733892UL, 1396036965UL, 1116033475UL, 2032556038UL, 3216540537UL, 3298170974UL, 1008892557UL, 667272562UL, 1863766055UL, 3931110690UL, +191299053UL, 2019139711UL, 272901326UL, 739418419UL, 1377144055UL, 2876702705UL, 3911939673UL, 3839312742UL, 2814009721UL, 600813233UL, 1535885024UL, 1486280357UL, 4256065219UL, 2324695947UL, 2293284974UL, 2036339249UL, 3465600153UL, 1215859603UL, 327866771UL, 3356772175UL, 1826625240UL, 1947102360UL, 4240407984UL, 1421374867UL, 3228945021UL, 1358646008UL, 1067180174UL, 4100357988UL, 643362354UL, 109899594UL, 2064362635UL, 3249674888UL, +2898852084UL, 4180291913UL, 1676507466UL, 1017841240UL, 2992644565UL, 1569683812UL, 3608467942UL, 3113105154UL, 1154120402UL, 460889625UL, 966040649UL, 1862994005UL, 3020908939UL, 3078194866UL, 310971889UL, 786634113UL, 693774191UL, 3549937583UL, 3710822994UL, 3554313733UL, 1578429713UL, 37658897UL, 2340485150UL, 950951909UL, 4288936895UL, 2528123823UL, 2258231402UL, 1085927825UL, 1595992020UL, 3288724966UL, 3544041088UL, 3850509554UL, +3925419886UL, 2628739022UL, 2528254629UL, 2562145937UL, 3124287811UL, 3373329273UL, 4255542251UL, 1185418446UL, 3693565710UL, 1989726178UL, 1381160022UL, 3642438773UL, 4284399225UL, 3271478204UL, 3622052196UL, 1263328494UL, 1154237693UL, 2684443667UL, 3615401444UL, 2786224913UL, 1251034970UL, 1874233020UL, 3222830495UL, 2572413057UL, 1529490307UL, 3146635362UL, 1436483376UL, 2821876495UL, 3993894153UL, 979247444UL, 2142862852UL, 1368937545UL, +2647327844UL, 1353904396UL, 294065371UL, 3543274652UL, 911792564UL, 1204178178UL, 3165709748UL, 103582737UL, 3101998294UL, 730811902UL, 1989156224UL, 893293786UL, 1885087777UL, 1390223786UL, 2657819643UL, 552729795UL, 3388458110UL, 3325206451UL, 1897013739UL, 3657020278UL, 1387364861UL, 3025318046UL, 2117065739UL, 486446521UL, 3675999281UL, 714737345UL, 2085926890UL, 3946214694UL, 3609089773UL, 2117061768UL, 3935682560UL, 868009118UL, +2916136885UL, 1808988481UL, 83680601UL, 1464326680UL, 797410789UL, 3438751781UL, 1391154023UL, 234460119UL, 3551348221UL, 4068940987UL, 3948410079UL, 2814385745UL, 3497626257UL, 916790795UL, 3722456098UL, 1767303496UL, 3711787525UL, 2239286063UL, 1054058916UL, 2030352819UL, 4140631909UL, 2230543409UL, 2173597546UL, 3786733892UL, 3211336683UL, 1116033475UL, 2032556038UL, 3216540537UL, 3298170974UL, 2589589144UL, 667272562UL, 1863766055UL, +3931110690UL, 191299053UL, 1139480458UL, 272901326UL, 739418419UL, 1377144055UL, 2876702705UL, 1954361769UL, 3839312742UL, 2814009721UL, 600813233UL, 1535885024UL, 3587775605UL, 4256065219UL, 2324695947UL, 2293284974UL, 2036339249UL, 1534849280UL, 1215859603UL, 327866771UL, 3356772175UL, 1826625240UL, 720372669UL, 4240407984UL, 1421374867UL, 3228945021UL, 1358646008UL, 3409069246UL, 4100357988UL, 643362354UL, 109899594UL, 2064362635UL, +4243434294UL, 2898852084UL, 4180291913UL, 1676507466UL, 1017841240UL, 3243922356UL, 1569683812UL, 3608467942UL, 3113105154UL, 1154120402UL, 1479311403UL, 966040649UL, 1862994005UL, 3020908939UL, 3078194866UL, 1556392996UL, 786634113UL, 693774191UL, 3549937583UL, 3710822994UL, 920664071UL, 1578429713UL, 37658897UL, 2340485150UL, 950951909UL, 740197415UL, 2528123823UL, 2258231402UL, 1085927825UL, 1595992020UL, 2580760267UL, 3544041088UL, +3850509554UL, 3925419886UL, 2628739022UL, 3867556156UL, 2562145937UL, 3124287811UL, 3373329273UL, 4255542251UL, 3185271749UL, 3693565710UL, 1989726178UL, 1381160022UL, 3642438773UL, 3042165367UL, 3271478204UL, 3622052196UL, 1263328494UL, 1154237693UL, 1016814036UL, 3615401444UL, 2786224913UL, 1251034970UL, 1874233020UL, 2956086971UL, 2572413057UL, 1529490307UL, 3146635362UL, 1436483376UL, 1513970396UL, 3993894153UL, 979247444UL, 2142862852UL, +1368937545UL, 3275665128UL, 1353904396UL, 294065371UL, 3543274652UL, 911792564UL, 2209636872UL, 3165709748UL, 103582737UL, 3101998294UL, 730811902UL, 965151434UL, 893293786UL, 1885087777UL, 1390223786UL, 2657819643UL, 3278634059UL, 3388458110UL, 3325206451UL, 1897013739UL, 3657020278UL, 4293473749UL, 3025318046UL, 2117065739UL, 486446521UL, 3675999281UL, 620561205UL, 2085926890UL, 3946214694UL, 3609089773UL, 2117061768UL, 163384588UL, +868009118UL, 2916136885UL, 1808988481UL, 83680601UL, 10243015UL, 797410789UL, 3438751781UL, 1391154023UL, 234460119UL, 1278218413UL, 4068940987UL, 3948410079UL, 2814385745UL, 3497626257UL, 1233272798UL, 3722456098UL, 1767303496UL, 3711787525UL, 2239286063UL, 3968895688UL, 2030352819UL, 4140631909UL, 2230543409UL, 2173597546UL, 2866251044UL, 3211336683UL, 1116033475UL, 2032556038UL, 3216540537UL, 4233849723UL, 2589589144UL, 667272562UL, +1863766055UL, 3931110690UL, 2468422423UL, 1139480458UL, 272901326UL, 739418419UL, 1377144055UL, 4240143411UL, 1954361769UL, 3839312742UL, 2814009721UL, 600813233UL, 3976840004UL, 3587775605UL, 4256065219UL, 2324695947UL, 2293284974UL, 437604123UL, 1534849280UL, 1215859603UL, 327866771UL, 3356772175UL, 2757237699UL, 720372669UL, 4240407984UL, 1421374867UL, 3228945021UL, 3284801305UL, 3409069246UL, 4100357988UL, 643362354UL, 109899594UL, +1301585321UL, 2528806870UL, 1838904064UL, 448772403UL, 1097849740UL, 1899994097UL, 618309123UL, 1911948510UL, 2309256224UL, 1861398151UL, 905306403UL, 1067595802UL, 36868624UL, 3780886191UL, 835126206UL, 3190251977UL, 2672497726UL, 2085944002UL, 2912993968UL, 2493776706UL, 667136329UL, 1474890786UL, 2383346554UL, 943528949UL, 3376706013UL, 2495573574UL, 144956345UL, 793159960UL, 1591274917UL, 477107637UL, 1383815442UL, 67384899UL, +2355242218UL, 1687409818UL, 3801093871UL, 2108217811UL, 3455908733UL, 4172160797UL, 3935534685UL, 631067839UL, 1187677548UL, 2280856137UL, 3020767646UL, 2063176246UL, 3736904984UL, 2952933848UL, 2975164686UL, 4144473303UL, 34670977UL, 1250976509UL, 3484166554UL, 1532744745UL, 225700994UL, 1878713627UL, 2122358980UL, 1456610194UL, 2917522161UL, 2818947075UL, 102678939UL, 53743858UL, 2095250656UL, 4023979225UL, 3094092874UL, 4128760696UL, +3411610028UL, 3020200609UL, 2225866341UL, 586320946UL, 63813522UL, 1238216159UL, 2825692263UL, 2169937231UL, 3298517640UL, 1542128261UL, 2205544184UL, 1258655704UL, 2629012083UL, 4113650203UL, 3198617867UL, 2742310794UL, 3372657381UL, 3115904410UL, 1948638822UL, 1123521744UL, 1080429281UL, 4086706732UL, 4142693211UL, 817377147UL, 2570194641UL, 26001503UL, 2861456160UL, 4185725555UL, 2573003804UL, 1618628779UL, 2588489212UL, 3996192609UL, +1555844274UL, 1003123505UL, 1326350123UL, 1130583849UL, 3017128756UL, 74119042UL, 4041266437UL, 1938014170UL, 3528465794UL, 4203969698UL, 1913054398UL, 3617979809UL, 2218810167UL, 2453899816UL, 1997423206UL, 477446533UL, 303090065UL, 757937082UL, 1523238256UL, 3140505311UL, 1422588701UL, 3642014639UL, 1740624195UL, 1276017154UL, 3072526193UL, 3675105122UL, 1335122682UL, 4080595263UL, 2308519420UL, 3299182769UL, 1461978532UL, 3098694217UL, +2982399822UL, 3088698511UL, 586759229UL, 3548750902UL, 1449857891UL, 2866451663UL, 2525162286UL, 57294602UL, 4107991297UL, 1214672265UL, 2940391280UL, 4285346034UL, 3338216759UL, 737207923UL, 4264163846UL, 59219141UL, 2300024654UL, 1876616814UL, 1976543605UL, 783571061UL, 1724699622UL, 1967524469UL, 1650309916UL, 3322257631UL, 3975521122UL, 273342162UL, 1156754241UL, 185315896UL, 3368133921UL, 66314655UL, 4153777915UL, 3519901897UL, +}, +{ +3672467167UL, 68684525UL, 1738833632UL, 3081329135UL, 2583806115UL, 2291130512UL, 503032614UL, 3658059597UL, 571493931UL, 685537959UL, 3498787788UL, 422428426UL, 3879256913UL, 1173158320UL, 4000800121UL, 298972869UL, 1718342816UL, 2541691685UL, 2490502642UL, 2321452806UL, 4223212804UL, 1812334632UL, 3717655725UL, 4238191852UL, 3001307165UL, 2621896355UL, 2572404999UL, 3590094954UL, 760765206UL, 2293618001UL, 1392353032UL, 1733137169UL, +2674005018UL, 4067961151UL, 1505710487UL, 451078217UL, 2591688848UL, 12635611UL, 507045428UL, 694822241UL, 1789383090UL, 1140183890UL, 1720695967UL, 1994318191UL, 3340349873UL, 2793804971UL, 1054433135UL, 2345087879UL, 3179939285UL, 1651968615UL, 1793223686UL, 1055357758UL, 914271617UL, 483007580UL, 2127727816UL, 2754998083UL, 3179053982UL, 598442002UL, 1950227301UL, 213053613UL, 3566888111UL, 2832258993UL, 4260365359UL, 443662829UL, +1706542890UL, 3852730296UL, 3643260763UL, 2163607277UL, 1812905006UL, 171529637UL, 215187467UL, 2369406909UL, 1929000706UL, 2572441025UL, 2133955541UL, 810692262UL, 1337974799UL, 4030350704UL, 2159178715UL, 3769451556UL, 1026825278UL, 593628480UL, 1817383139UL, 878832429UL, 2253876350UL, 203612980UL, 2102950440UL, 3407143936UL, 1912362251UL, 1595387637UL, 2827580539UL, 305467658UL, 3292706746UL, 44135525UL, 4001933553UL, 3697343089UL, +760470915UL, 587414402UL, 1419378814UL, 2852774010UL, 3891626781UL, 2757016765UL, 1090707384UL, 3997074427UL, 1047182100UL, 2855539022UL, 36229159UL, 1591415533UL, 3471572739UL, 1237952140UL, 2614469314UL, 213338525UL, 886212578UL, 2620301943UL, 713590207UL, 2430496777UL, 1198164420UL, 2644841698UL, 3654164701UL, 36283572UL, 1461695896UL, 1770331341UL, 1641501876UL, 3470919184UL, 3181021559UL, 3053795110UL, 3533531372UL, 3134337355UL, +668308383UL, 388340999UL, 3221275220UL, 1589659138UL, 294382235UL, 1447443579UL, 690177534UL, 1799726917UL, 2838977761UL, 4172949119UL, 2360858031UL, 159385920UL, 2248389027UL, 1790015671UL, 3925738275UL, 1049918544UL, 4107349511UL, 1619955951UL, 4188275966UL, 1672572975UL, 2672697497UL, 1863413666UL, 747724021UL, 4037561738UL, 1605940213UL, 445253292UL, 3362434828UL, 610898209UL, 1473244091UL, 735444769UL, 1540599852UL, 2449351720UL, +1032410949UL, 3672467167UL, 68684525UL, 1738833632UL, 3081329135UL, 519684794UL, 2291130512UL, 503032614UL, 3658059597UL, 571493931UL, 2400186105UL, 3498787788UL, 422428426UL, 3879256913UL, 1173158320UL, 4120704752UL, 298972869UL, 1718342816UL, 2541691685UL, 2490502642UL, 1686027891UL, 4223212804UL, 1812334632UL, 3717655725UL, 4238191852UL, 642431972UL, 2621896355UL, 2572404999UL, 3590094954UL, 760765206UL, 2949609717UL, 1392353032UL, +1733137169UL, 2674005018UL, 4067961151UL, 1526077846UL, 451078217UL, 2591688848UL, 12635611UL, 507045428UL, 2417951415UL, 1789383090UL, 1140183890UL, 1720695967UL, 1994318191UL, 3465605863UL, 2793804971UL, 1054433135UL, 2345087879UL, 3179939285UL, 3079297626UL, 1793223686UL, 1055357758UL, 914271617UL, 483007580UL, 306802527UL, 2754998083UL, 3179053982UL, 598442002UL, 1950227301UL, 2473418737UL, 3566888111UL, 2832258993UL, 4260365359UL, +443662829UL, 2097776414UL, 3852730296UL, 3643260763UL, 2163607277UL, 1812905006UL, 3957721904UL, 215187467UL, 2369406909UL, 1929000706UL, 2572441025UL, 3779486126UL, 810692262UL, 1337974799UL, 4030350704UL, 2159178715UL, 1127012865UL, 1026825278UL, 593628480UL, 1817383139UL, 878832429UL, 361018423UL, 203612980UL, 2102950440UL, 3407143936UL, 1912362251UL, 1475218277UL, 2827580539UL, 305467658UL, 3292706746UL, 44135525UL, 1900092336UL, +3697343089UL, 760470915UL, 587414402UL, 1419378814UL, 343303227UL, 3891626781UL, 2757016765UL, 1090707384UL, 3997074427UL, 745490961UL, 2855539022UL, 36229159UL, 1591415533UL, 3471572739UL, 3920625546UL, 2614469314UL, 213338525UL, 886212578UL, 2620301943UL, 827771411UL, 2430496777UL, 1198164420UL, 2644841698UL, 3654164701UL, 2747674190UL, 1461695896UL, 1770331341UL, 1641501876UL, 3470919184UL, 919857376UL, 3053795110UL, 3533531372UL, +3134337355UL, 668308383UL, 201138876UL, 3221275220UL, 1589659138UL, 294382235UL, 1447443579UL, 4211579707UL, 1799726917UL, 2838977761UL, 4172949119UL, 2360858031UL, 416103844UL, 2248389027UL, 1790015671UL, 3925738275UL, 1049918544UL, 3481887924UL, 1619955951UL, 4188275966UL, 1672572975UL, 2672697497UL, 564854400UL, 747724021UL, 4037561738UL, 1605940213UL, 445253292UL, 604900912UL, 610898209UL, 1473244091UL, 735444769UL, 1540599852UL, +3036173307UL, 1032410949UL, 3672467167UL, 68684525UL, 1738833632UL, 973022696UL, 519684794UL, 2291130512UL, 503032614UL, 3658059597UL, 1500301452UL, 2400186105UL, 3498787788UL, 422428426UL, 3879256913UL, 3923611748UL, 4120704752UL, 298972869UL, 1718342816UL, 2541691685UL, 2323881484UL, 1686027891UL, 4223212804UL, 1812334632UL, 3717655725UL, 2109094458UL, 642431972UL, 2621896355UL, 2572404999UL, 3590094954UL, 1837882537UL, 2949609717UL, +1392353032UL, 1733137169UL, 2674005018UL, 3252348987UL, 1526077846UL, 451078217UL, 2591688848UL, 12635611UL, 3971261781UL, 2417951415UL, 1789383090UL, 1140183890UL, 1720695967UL, 2906966040UL, 3465605863UL, 2793804971UL, 1054433135UL, 2345087879UL, 915518921UL, 3079297626UL, 1793223686UL, 1055357758UL, 914271617UL, 791633499UL, 306802527UL, 2754998083UL, 3179053982UL, 598442002UL, 324402573UL, 2473418737UL, 3566888111UL, 2832258993UL, +4260365359UL, 2168046398UL, 2097776414UL, 3852730296UL, 3643260763UL, 2163607277UL, 2595175979UL, 3957721904UL, 215187467UL, 2369406909UL, 1929000706UL, 657446369UL, 3779486126UL, 810692262UL, 1337974799UL, 4030350704UL, 1865557469UL, 1127012865UL, 1026825278UL, 593628480UL, 1817383139UL, 3414354529UL, 361018423UL, 203612980UL, 2102950440UL, 3407143936UL, 1739372987UL, 1475218277UL, 2827580539UL, 305467658UL, 3292706746UL, 825045562UL, +1900092336UL, 3697343089UL, 760470915UL, 587414402UL, 2000637694UL, 343303227UL, 3891626781UL, 2757016765UL, 1090707384UL, 4015377800UL, 745490961UL, 2855539022UL, 36229159UL, 1591415533UL, 2208656873UL, 3920625546UL, 2614469314UL, 213338525UL, 886212578UL, 2729976209UL, 827771411UL, 2430496777UL, 1198164420UL, 2644841698UL, 1922667440UL, 2747674190UL, 1461695896UL, 1770331341UL, 1641501876UL, 357535311UL, 919857376UL, 3053795110UL, +3533531372UL, 3134337355UL, 1004072597UL, 201138876UL, 3221275220UL, 1589659138UL, 294382235UL, 1148950143UL, 4211579707UL, 1799726917UL, 2838977761UL, 4172949119UL, 892664404UL, 416103844UL, 2248389027UL, 1790015671UL, 3925738275UL, 2612357890UL, 3481887924UL, 1619955951UL, 4188275966UL, 1672572975UL, 2005534713UL, 564854400UL, 747724021UL, 4037561738UL, 1605940213UL, 2620990454UL, 604900912UL, 610898209UL, 1473244091UL, 735444769UL, +3571225334UL, 3036173307UL, 1032410949UL, 3672467167UL, 68684525UL, 3327351604UL, 973022696UL, 519684794UL, 2291130512UL, 503032614UL, 3814902238UL, 1500301452UL, 2400186105UL, 3498787788UL, 422428426UL, 1756753750UL, 3923611748UL, 4120704752UL, 298972869UL, 1718342816UL, 652903081UL, 2323881484UL, 1686027891UL, 4223212804UL, 1812334632UL, 1599640566UL, 2109094458UL, 642431972UL, 2621896355UL, 2572404999UL, 1668409355UL, 1837882537UL, +2949609717UL, 1392353032UL, 1733137169UL, 3691709793UL, 3252348987UL, 1526077846UL, 451078217UL, 2591688848UL, 3353622601UL, 3971261781UL, 2417951415UL, 1789383090UL, 1140183890UL, 4113853791UL, 2906966040UL, 3465605863UL, 2793804971UL, 1054433135UL, 2195882948UL, 915518921UL, 3079297626UL, 1793223686UL, 1055357758UL, 898713552UL, 791633499UL, 306802527UL, 2754998083UL, 3179053982UL, 2469350088UL, 324402573UL, 2473418737UL, 3566888111UL, +2832258993UL, 1377718274UL, 2168046398UL, 2097776414UL, 3852730296UL, 3643260763UL, 3492388484UL, 2595175979UL, 3957721904UL, 215187467UL, 2369406909UL, 4243449339UL, 657446369UL, 3779486126UL, 810692262UL, 1337974799UL, 3960230785UL, 1865557469UL, 1127012865UL, 1026825278UL, 593628480UL, 732793312UL, 3414354529UL, 361018423UL, 203612980UL, 2102950440UL, 2401792405UL, 1739372987UL, 1475218277UL, 2827580539UL, 305467658UL, 2454275289UL, +825045562UL, 1900092336UL, 3697343089UL, 760470915UL, 2146882409UL, 2000637694UL, 343303227UL, 3891626781UL, 2757016765UL, 3997473261UL, 4015377800UL, 745490961UL, 2855539022UL, 36229159UL, 2375394427UL, 2208656873UL, 3920625546UL, 2614469314UL, 213338525UL, 2055366274UL, 2729976209UL, 827771411UL, 2430496777UL, 1198164420UL, 1789631187UL, 1922667440UL, 2747674190UL, 1461695896UL, 1770331341UL, 4284442852UL, 357535311UL, 919857376UL, +3053795110UL, 3533531372UL, 2124270060UL, 1004072597UL, 201138876UL, 3221275220UL, 1589659138UL, 1418386120UL, 1148950143UL, 4211579707UL, 1799726917UL, 2838977761UL, 3540708069UL, 892664404UL, 416103844UL, 2248389027UL, 1790015671UL, 3936883UL, 2612357890UL, 3481887924UL, 1619955951UL, 4188275966UL, 2963623483UL, 2005534713UL, 564854400UL, 747724021UL, 4037561738UL, 3431155922UL, 2620990454UL, 604900912UL, 610898209UL, 1473244091UL, +3880001339UL, 2879060316UL, 3300897679UL, 3960972039UL, 3201086624UL, 3814462934UL, 3426650044UL, 1930881632UL, 1981178788UL, 2956279691UL, 4272406256UL, 372705521UL, 1359389771UL, 1590302979UL, 3940206208UL, 3817999127UL, 2527835456UL, 2739078164UL, 716997849UL, 3235607043UL, 2550297745UL, 3688700200UL, 354502605UL, 2285793656UL, 2339138034UL, 3912354142UL, 2262255668UL, 469322622UL, 1319943359UL, 1916101235UL, 200441823UL, 509436982UL, +2160284593UL, 1687919695UL, 4153615582UL, 495735041UL, 3694469424UL, 2086893117UL, 4223008799UL, 105344742UL, 1698033424UL, 1149223145UL, 4183918790UL, 4176151950UL, 415739351UL, 817762972UL, 3768072560UL, 1931430949UL, 2698979439UL, 3481477932UL, 1994322914UL, 4078299950UL, 1268233995UL, 3254069145UL, 91029129UL, 498234704UL, 1636613942UL, 3710087092UL, 3876816560UL, 3510446387UL, 3870169008UL, 1370156410UL, 2442498047UL, 2324396523UL, +1258730334UL, 621954739UL, 1053015373UL, 491820717UL, 3386515432UL, 2203703266UL, 120167176UL, 2383669740UL, 1038666440UL, 2927342870UL, 3583197824UL, 1236241846UL, 2474675929UL, 679052891UL, 2451259584UL, 2177706146UL, 606842882UL, 3546980104UL, 2289281509UL, 353873434UL, 2041926837UL, 1238346748UL, 2729109726UL, 2843938395UL, 2938124210UL, 2554443866UL, 1494477920UL, 693378319UL, 2020963566UL, 2000385949UL, 3744098787UL, 650307220UL, +2631327075UL, 1529128757UL, 595871428UL, 3206666562UL, 458062987UL, 875238192UL, 3729317374UL, 1368843921UL, 3478430230UL, 3234384578UL, 3232435428UL, 321359326UL, 994274524UL, 361184397UL, 4285497594UL, 915263578UL, 1486882838UL, 9988613UL, 829077170UL, 677216046UL, 4141828204UL, 165804609UL, 1086678519UL, 2933434608UL, 1351662802UL, 2640085040UL, 2611502932UL, 2033698714UL, 2008873254UL, 3995557835UL, 1020873906UL, 67873555UL, +2230337823UL, 1263800417UL, 1148712155UL, 3985159589UL, 2979503513UL, 2854714997UL, 1539343345UL, 2751484352UL, 1569100732UL, 2020758949UL, 2126757134UL, 3426641899UL, 2808587825UL, 1953320148UL, 1096398464UL, 1502907172UL, 3751230087UL, 765557661UL, 765290990UL, 3056075500UL, 2040620632UL, 422573751UL, 3613558930UL, 1741145769UL, 273531216UL, 837238736UL, 494297893UL, 2903251124UL, 1636782182UL, 4256592784UL, 3652746656UL, 4258393217UL, +}, +{ +2657510202UL, 270297201UL, 2970166904UL, 3151626326UL, 973127447UL, 1523852613UL, 598650578UL, 10289043UL, 1138773500UL, 1379558769UL, 2202575480UL, 1622690708UL, 181345079UL, 228706650UL, 2807760507UL, 3061024281UL, 2310359315UL, 3094465578UL, 4062753882UL, 2744510393UL, 3844622451UL, 1759718963UL, 2393602744UL, 977540509UL, 870449791UL, 1484134272UL, 2838962253UL, 3079492430UL, 2617141201UL, 3744868057UL, 994295425UL, 1302594555UL, +277777192UL, 1793039043UL, 1620482692UL, 2518563014UL, 1163760339UL, 2709515777UL, 4220588138UL, 531143270UL, 2528377633UL, 931694828UL, 1472659070UL, 900489303UL, 3538137811UL, 3849822545UL, 1304182427UL, 2423451948UL, 587259647UL, 296795227UL, 3843393378UL, 100570026UL, 1824916038UL, 3155192628UL, 1205830295UL, 2205840913UL, 2598785234UL, 2138099222UL, 1585588098UL, 1304106911UL, 2443465671UL, 3007665864UL, 3350433156UL, 3623458138UL, +629407548UL, 3209244941UL, 2102270358UL, 952701496UL, 2715374730UL, 2142960491UL, 2566649458UL, 2386659994UL, 4201648072UL, 367516884UL, 211986877UL, 3970312395UL, 4153651951UL, 3794120671UL, 614826776UL, 769672874UL, 2218713182UL, 236114529UL, 1614697510UL, 2420862368UL, 3471485219UL, 3080341429UL, 2394724619UL, 3585194114UL, 1394678495UL, 2137969611UL, 3955498999UL, 2765569351UL, 3084915757UL, 765232390UL, 1406483345UL, 2796499268UL, +2491128017UL, 1052428931UL, 1713430644UL, 3921576513UL, 3753414774UL, 973530327UL, 2545412294UL, 1841110931UL, 1174406073UL, 1104865218UL, 1586606252UL, 2612244473UL, 1407875673UL, 1823397519UL, 2613642581UL, 3163449384UL, 3129975397UL, 2059184961UL, 818092118UL, 3182607992UL, 1658516909UL, 2467681581UL, 1065789733UL, 799857247UL, 2492902195UL, 168866110UL, 2251316716UL, 1607684829UL, 2347941418UL, 2382781983UL, 3298500129UL, 3609200925UL, +3060374324UL, 2602420483UL, 2357812057UL, 3739699403UL, 3260652552UL, 205015857UL, 1936033273UL, 3955997259UL, 821264237UL, 1882720491UL, 159294165UL, 3197657094UL, 528058988UL, 2768830342UL, 805087358UL, 896645931UL, 1360375456UL, 3417488932UL, 3863200799UL, 4033907887UL, 983658874UL, 1828706965UL, 875027318UL, 1310362653UL, 3711487613UL, 4148261033UL, 3145162047UL, 485182003UL, 2633647498UL, 1369395018UL, 4163384029UL, 1827719274UL, +270658892UL, 2657510202UL, 270297201UL, 2970166904UL, 3151626326UL, 499420828UL, 1523852613UL, 598650578UL, 10289043UL, 1138773500UL, 640170086UL, 2202575480UL, 1622690708UL, 181345079UL, 228706650UL, 3957853780UL, 3061024281UL, 2310359315UL, 3094465578UL, 4062753882UL, 2049506087UL, 3844622451UL, 1759718963UL, 2393602744UL, 977540509UL, 2346891936UL, 1484134272UL, 2838962253UL, 3079492430UL, 2617141201UL, 2112540708UL, 994295425UL, +1302594555UL, 277777192UL, 1793039043UL, 981072592UL, 2518563014UL, 1163760339UL, 2709515777UL, 4220588138UL, 1992965594UL, 2528377633UL, 931694828UL, 1472659070UL, 900489303UL, 32461040UL, 3849822545UL, 1304182427UL, 2423451948UL, 587259647UL, 3728056788UL, 3843393378UL, 100570026UL, 1824916038UL, 3155192628UL, 1194916233UL, 2205840913UL, 2598785234UL, 2138099222UL, 1585588098UL, 2944318376UL, 2443465671UL, 3007665864UL, 3350433156UL, +3623458138UL, 1413669939UL, 3209244941UL, 2102270358UL, 952701496UL, 2715374730UL, 826676012UL, 2566649458UL, 2386659994UL, 4201648072UL, 367516884UL, 4272143576UL, 3970312395UL, 4153651951UL, 3794120671UL, 614826776UL, 4106382849UL, 2218713182UL, 236114529UL, 1614697510UL, 2420862368UL, 138091237UL, 3080341429UL, 2394724619UL, 3585194114UL, 1394678495UL, 2113895281UL, 3955498999UL, 2765569351UL, 3084915757UL, 765232390UL, 2247301699UL, +2796499268UL, 2491128017UL, 1052428931UL, 1713430644UL, 1076867271UL, 3753414774UL, 973530327UL, 2545412294UL, 1841110931UL, 3427639042UL, 1104865218UL, 1586606252UL, 2612244473UL, 1407875673UL, 2159805028UL, 2613642581UL, 3163449384UL, 3129975397UL, 2059184961UL, 1251595655UL, 3182607992UL, 1658516909UL, 2467681581UL, 1065789733UL, 524065102UL, 2492902195UL, 168866110UL, 2251316716UL, 1607684829UL, 877205873UL, 2382781983UL, 3298500129UL, +3609200925UL, 3060374324UL, 1983477493UL, 2357812057UL, 3739699403UL, 3260652552UL, 205015857UL, 3578808491UL, 3955997259UL, 821264237UL, 1882720491UL, 159294165UL, 3639531297UL, 528058988UL, 2768830342UL, 805087358UL, 896645931UL, 2309781073UL, 3417488932UL, 3863200799UL, 4033907887UL, 983658874UL, 3756437847UL, 875027318UL, 1310362653UL, 3711487613UL, 4148261033UL, 3264363953UL, 485182003UL, 2633647498UL, 1369395018UL, 4163384029UL, +184614728UL, 270658892UL, 2657510202UL, 270297201UL, 2970166904UL, 884907665UL, 499420828UL, 1523852613UL, 598650578UL, 10289043UL, 2023902217UL, 640170086UL, 2202575480UL, 1622690708UL, 181345079UL, 1358722197UL, 3957853780UL, 3061024281UL, 2310359315UL, 3094465578UL, 4156960892UL, 2049506087UL, 3844622451UL, 1759718963UL, 2393602744UL, 1018272187UL, 2346891936UL, 1484134272UL, 2838962253UL, 3079492430UL, 663361761UL, 2112540708UL, +994295425UL, 1302594555UL, 277777192UL, 4201292427UL, 981072592UL, 2518563014UL, 1163760339UL, 2709515777UL, 3301905324UL, 1992965594UL, 2528377633UL, 931694828UL, 1472659070UL, 3170286187UL, 32461040UL, 3849822545UL, 1304182427UL, 2423451948UL, 166213287UL, 3728056788UL, 3843393378UL, 100570026UL, 1824916038UL, 1534589402UL, 1194916233UL, 2205840913UL, 2598785234UL, 2138099222UL, 767439709UL, 2944318376UL, 2443465671UL, 3007665864UL, +3350433156UL, 257274072UL, 1413669939UL, 3209244941UL, 2102270358UL, 952701496UL, 893224047UL, 826676012UL, 2566649458UL, 2386659994UL, 4201648072UL, 1336000731UL, 4272143576UL, 3970312395UL, 4153651951UL, 3794120671UL, 2381517352UL, 4106382849UL, 2218713182UL, 236114529UL, 1614697510UL, 2427291612UL, 138091237UL, 3080341429UL, 2394724619UL, 3585194114UL, 1339840651UL, 2113895281UL, 3955498999UL, 2765569351UL, 3084915757UL, 1920073265UL, +2247301699UL, 2796499268UL, 2491128017UL, 1052428931UL, 1720704700UL, 1076867271UL, 3753414774UL, 973530327UL, 2545412294UL, 655938239UL, 3427639042UL, 1104865218UL, 1586606252UL, 2612244473UL, 748629647UL, 2159805028UL, 2613642581UL, 3163449384UL, 3129975397UL, 1868740512UL, 1251595655UL, 3182607992UL, 1658516909UL, 2467681581UL, 3092135795UL, 524065102UL, 2492902195UL, 168866110UL, 2251316716UL, 229376275UL, 877205873UL, 2382781983UL, +3298500129UL, 3609200925UL, 1270454086UL, 1983477493UL, 2357812057UL, 3739699403UL, 3260652552UL, 3976376418UL, 3578808491UL, 3955997259UL, 821264237UL, 1882720491UL, 2211365699UL, 3639531297UL, 528058988UL, 2768830342UL, 805087358UL, 1351870678UL, 2309781073UL, 3417488932UL, 3863200799UL, 4033907887UL, 2317721807UL, 3756437847UL, 875027318UL, 1310362653UL, 3711487613UL, 1929459086UL, 3264363953UL, 485182003UL, 2633647498UL, 1369395018UL, +2141675718UL, 184614728UL, 270658892UL, 2657510202UL, 270297201UL, 3337954073UL, 884907665UL, 499420828UL, 1523852613UL, 598650578UL, 3874207188UL, 2023902217UL, 640170086UL, 2202575480UL, 1622690708UL, 2020255059UL, 1358722197UL, 3957853780UL, 3061024281UL, 2310359315UL, 753738868UL, 4156960892UL, 2049506087UL, 3844622451UL, 1759718963UL, 1672276116UL, 1018272187UL, 2346891936UL, 1484134272UL, 2838962253UL, 1680679979UL, 663361761UL, +2112540708UL, 994295425UL, 1302594555UL, 1941500850UL, 4201292427UL, 981072592UL, 2518563014UL, 1163760339UL, 184357645UL, 3301905324UL, 1992965594UL, 2528377633UL, 931694828UL, 3462653134UL, 3170286187UL, 32461040UL, 3849822545UL, 1304182427UL, 396808784UL, 166213287UL, 3728056788UL, 3843393378UL, 100570026UL, 876691173UL, 1534589402UL, 1194916233UL, 2205840913UL, 2598785234UL, 4286653520UL, 767439709UL, 2944318376UL, 2443465671UL, +3007665864UL, 2793587144UL, 257274072UL, 1413669939UL, 3209244941UL, 2102270358UL, 2792966616UL, 893224047UL, 826676012UL, 2566649458UL, 2386659994UL, 798757973UL, 1336000731UL, 4272143576UL, 3970312395UL, 4153651951UL, 2930383268UL, 2381517352UL, 4106382849UL, 2218713182UL, 236114529UL, 1936008889UL, 2427291612UL, 138091237UL, 3080341429UL, 2394724619UL, 4157586029UL, 1339840651UL, 2113895281UL, 3955498999UL, 2765569351UL, 2243544114UL, +1920073265UL, 2247301699UL, 2796499268UL, 2491128017UL, 3372810009UL, 1720704700UL, 1076867271UL, 3753414774UL, 973530327UL, 484392041UL, 655938239UL, 3427639042UL, 1104865218UL, 1586606252UL, 1373046326UL, 748629647UL, 2159805028UL, 2613642581UL, 3163449384UL, 1558595520UL, 1868740512UL, 1251595655UL, 3182607992UL, 1658516909UL, 3503432306UL, 3092135795UL, 524065102UL, 2492902195UL, 168866110UL, 4106973392UL, 229376275UL, 877205873UL, +2382781983UL, 3298500129UL, 2366096961UL, 1270454086UL, 1983477493UL, 2357812057UL, 3739699403UL, 4223323197UL, 3976376418UL, 3578808491UL, 3955997259UL, 821264237UL, 1581729952UL, 2211365699UL, 3639531297UL, 528058988UL, 2768830342UL, 3946263978UL, 1351870678UL, 2309781073UL, 3417488932UL, 3863200799UL, 3948072426UL, 2317721807UL, 3756437847UL, 875027318UL, 1310362653UL, 3439391360UL, 1929459086UL, 3264363953UL, 485182003UL, 2633647498UL, +3576868480UL, 2527748673UL, 3116247125UL, 4020801612UL, 2594734840UL, 3308177137UL, 665011257UL, 40118275UL, 3584569179UL, 3399729283UL, 3867174947UL, 658488234UL, 1099195903UL, 2274511402UL, 1872529118UL, 2518961094UL, 2633598693UL, 4160728307UL, 449442630UL, 164837956UL, 1010805767UL, 605336924UL, 1178031445UL, 3949359502UL, 2585151633UL, 611885521UL, 293204651UL, 3389557188UL, 1172294301UL, 2503819061UL, 659842653UL, 504992348UL, +3762165683UL, 1799777932UL, 4161843209UL, 1924622448UL, 1006263939UL, 115233249UL, 2775142171UL, 3228632586UL, 885407023UL, 2514866293UL, 3615088636UL, 2488824172UL, 2631364137UL, 1454226414UL, 3888177876UL, 70646265UL, 2291458600UL, 2370783730UL, 1566625834UL, 3652033806UL, 4136806683UL, 2819973124UL, 3207365429UL, 989185345UL, 3343822313UL, 2580472874UL, 4077285847UL, 4032963783UL, 2883518039UL, 2253593637UL, 904631114UL, 2654790756UL, +2967911632UL, 2131672564UL, 1594073414UL, 2370718497UL, 3769371275UL, 1547951748UL, 2473303924UL, 651625138UL, 2159175883UL, 4062995539UL, 696224922UL, 3388626509UL, 100118553UL, 770731124UL, 2149458689UL, 3223175313UL, 3524052514UL, 2651241522UL, 78236806UL, 3212708723UL, 1045780878UL, 2257575290UL, 3709360831UL, 966829465UL, 61269250UL, 405063245UL, 331731998UL, 2472078870UL, 1138237364UL, 1135091387UL, 3245001409UL, 3817992705UL, +1738939574UL, 1397617581UL, 2896546651UL, 4207083421UL, 3802162100UL, 391930524UL, 1326819828UL, 85308067UL, 3235336831UL, 686989692UL, 1947564282UL, 842881662UL, 2887279866UL, 3850666935UL, 2001895525UL, 2673649961UL, 2106555006UL, 1762053005UL, 2334552700UL, 26094213UL, 1184502058UL, 2048598709UL, 4039640450UL, 1439363714UL, 1022688817UL, 1053169108UL, 170896272UL, 444231850UL, 1500204748UL, 1077470703UL, 1630597179UL, 1382588806UL, +138805391UL, 1636536505UL, 3118018426UL, 3461152216UL, 2486547351UL, 2045361316UL, 2976067436UL, 468876399UL, 1407419455UL, 3226137264UL, 414206328UL, 1011039713UL, 3537947031UL, 2359787831UL, 258556532UL, 3615987029UL, 3372097337UL, 3586352388UL, 1056198830UL, 1852291192UL, 3888893481UL, 746156045UL, 4203877603UL, 297851145UL, 2615507398UL, 1141098641UL, 1881412583UL, 3014341741UL, 2125186797UL, 229307235UL, 3476606674UL, 3553854689UL, +}, +{ +3768542219UL, 2777948797UL, 3328832678UL, 3488502819UL, 2708053041UL, 2217907094UL, 2133505056UL, 2218961277UL, 2148551748UL, 1420045625UL, 1709182366UL, 1816409641UL, 3791695288UL, 4207813971UL, 22588497UL, 2211317602UL, 616238454UL, 2394270012UL, 3212896041UL, 213408768UL, 2199328374UL, 3188624050UL, 811443809UL, 2818548979UL, 3150758902UL, 2022548260UL, 2462701924UL, 3793704672UL, 2358080321UL, 483288372UL, 450033142UL, 772942770UL, +2224873625UL, 241543410UL, 312552314UL, 1268067149UL, 915918620UL, 3906238422UL, 132545832UL, 3486041298UL, 2414090506UL, 3798383292UL, 2257004699UL, 130309284UL, 1158673651UL, 152325583UL, 3499865580UL, 4094273597UL, 1029041593UL, 93538481UL, 3963199522UL, 4215066819UL, 2851084137UL, 950351173UL, 2758084052UL, 3408506640UL, 2468905351UL, 3982226741UL, 3591899344UL, 2972879639UL, 3321078070UL, 252381865UL, 409397320UL, 741653003UL, +1936712854UL, 1198684021UL, 922916691UL, 10413506UL, 3546896248UL, 1704703870UL, 1479762464UL, 104399432UL, 4144557684UL, 68239720UL, 2666028745UL, 362625839UL, 2591539911UL, 2837165752UL, 2180226515UL, 4076543943UL, 2956460273UL, 312410753UL, 2566731139UL, 2532653524UL, 2399030172UL, 207904356UL, 354574195UL, 485696336UL, 3816686234UL, 3016971115UL, 4272692603UL, 2352732136UL, 33493163UL, 780255811UL, 4092242980UL, 4121521600UL, +2119254314UL, 42767673UL, 1081488778UL, 2757446871UL, 2267513620UL, 3472164720UL, 2750308207UL, 1707164045UL, 3125591821UL, 3236687597UL, 299194858UL, 537384087UL, 1695155491UL, 2078250102UL, 1705861659UL, 2416322096UL, 1692335914UL, 1178915980UL, 3405431297UL, 4059323309UL, 2014660182UL, 3847682866UL, 4037583683UL, 2629253995UL, 867809161UL, 2167953720UL, 2290558548UL, 417635396UL, 53496289UL, 1890906570UL, 2842247580UL, 807266805UL, +1226139132UL, 2067929784UL, 1697038549UL, 3312131466UL, 1234311530UL, 3199840935UL, 4185078776UL, 1807030355UL, 215385887UL, 845421530UL, 1350380353UL, 4209181096UL, 2576197887UL, 1275262872UL, 2806513944UL, 2718623701UL, 2779287384UL, 71403197UL, 219220133UL, 2181111477UL, 2000396844UL, 3595837555UL, 1232425455UL, 2630647391UL, 3280867676UL, 2622740782UL, 1578938469UL, 3624564545UL, 992324522UL, 3056113148UL, 3473635768UL, 3664935418UL, +1786902552UL, 3768542219UL, 2777948797UL, 3328832678UL, 3488502819UL, 2530862473UL, 2217907094UL, 2133505056UL, 2218961277UL, 2148551748UL, 4050672856UL, 1709182366UL, 1816409641UL, 3791695288UL, 4207813971UL, 4175126713UL, 2211317602UL, 616238454UL, 2394270012UL, 3212896041UL, 732700649UL, 2199328374UL, 3188624050UL, 811443809UL, 2818548979UL, 972036137UL, 2022548260UL, 2462701924UL, 3793704672UL, 2358080321UL, 1200725173UL, 450033142UL, +772942770UL, 2224873625UL, 241543410UL, 1907109304UL, 1268067149UL, 915918620UL, 3906238422UL, 132545832UL, 301668366UL, 2414090506UL, 3798383292UL, 2257004699UL, 130309284UL, 1228520287UL, 152325583UL, 3499865580UL, 4094273597UL, 1029041593UL, 3267460249UL, 3963199522UL, 4215066819UL, 2851084137UL, 950351173UL, 47361585UL, 3408506640UL, 2468905351UL, 3982226741UL, 3591899344UL, 1878226915UL, 3321078070UL, 252381865UL, 409397320UL, +741653003UL, 1716437506UL, 1198684021UL, 922916691UL, 10413506UL, 3546896248UL, 1591998796UL, 1479762464UL, 104399432UL, 4144557684UL, 68239720UL, 3810955599UL, 362625839UL, 2591539911UL, 2837165752UL, 2180226515UL, 3908378015UL, 2956460273UL, 312410753UL, 2566731139UL, 2532653524UL, 687490649UL, 207904356UL, 354574195UL, 485696336UL, 3816686234UL, 378445403UL, 4272692603UL, 2352732136UL, 33493163UL, 780255811UL, 1303281526UL, +4121521600UL, 2119254314UL, 42767673UL, 1081488778UL, 1734311274UL, 2267513620UL, 3472164720UL, 2750308207UL, 1707164045UL, 4212588163UL, 3236687597UL, 299194858UL, 537384087UL, 1695155491UL, 2250704950UL, 1705861659UL, 2416322096UL, 1692335914UL, 1178915980UL, 677982197UL, 4059323309UL, 2014660182UL, 3847682866UL, 4037583683UL, 1765435945UL, 867809161UL, 2167953720UL, 2290558548UL, 417635396UL, 2125103002UL, 1890906570UL, 2842247580UL, +807266805UL, 1226139132UL, 2056644398UL, 1697038549UL, 3312131466UL, 1234311530UL, 3199840935UL, 3063718636UL, 1807030355UL, 215385887UL, 845421530UL, 1350380353UL, 3610667273UL, 2576197887UL, 1275262872UL, 2806513944UL, 2718623701UL, 2492912955UL, 71403197UL, 219220133UL, 2181111477UL, 2000396844UL, 3465351710UL, 1232425455UL, 2630647391UL, 3280867676UL, 2622740782UL, 1331873639UL, 3624564545UL, 992324522UL, 3056113148UL, 3473635768UL, +782257020UL, 1786902552UL, 3768542219UL, 2777948797UL, 3328832678UL, 856888454UL, 2530862473UL, 2217907094UL, 2133505056UL, 2218961277UL, 3752437534UL, 4050672856UL, 1709182366UL, 1816409641UL, 3791695288UL, 1581813910UL, 4175126713UL, 2211317602UL, 616238454UL, 2394270012UL, 1796414157UL, 732700649UL, 2199328374UL, 3188624050UL, 811443809UL, 4225173324UL, 972036137UL, 2022548260UL, 2462701924UL, 3793704672UL, 1410793611UL, 1200725173UL, +450033142UL, 772942770UL, 2224873625UL, 3889840648UL, 1907109304UL, 1268067149UL, 915918620UL, 3906238422UL, 1249098244UL, 301668366UL, 2414090506UL, 3798383292UL, 2257004699UL, 1620796656UL, 1228520287UL, 152325583UL, 3499865580UL, 4094273597UL, 82853050UL, 3267460249UL, 3963199522UL, 4215066819UL, 2851084137UL, 1212493334UL, 47361585UL, 3408506640UL, 2468905351UL, 3982226741UL, 3195419905UL, 1878226915UL, 3321078070UL, 252381865UL, +409397320UL, 1584154733UL, 1716437506UL, 1198684021UL, 922916691UL, 10413506UL, 1734068880UL, 1591998796UL, 1479762464UL, 104399432UL, 4144557684UL, 1973878859UL, 3810955599UL, 362625839UL, 2591539911UL, 2837165752UL, 1727282404UL, 3908378015UL, 2956460273UL, 312410753UL, 2566731139UL, 3656295687UL, 687490649UL, 207904356UL, 354574195UL, 485696336UL, 355953909UL, 378445403UL, 4272692603UL, 2352732136UL, 33493163UL, 3784169684UL, +1303281526UL, 4121521600UL, 2119254314UL, 42767673UL, 2331527847UL, 1734311274UL, 2267513620UL, 3472164720UL, 2750308207UL, 820692528UL, 4212588163UL, 3236687597UL, 299194858UL, 537384087UL, 781151234UL, 2250704950UL, 1705861659UL, 2416322096UL, 1692335914UL, 4288008793UL, 677982197UL, 4059323309UL, 2014660182UL, 3847682866UL, 3328850880UL, 1765435945UL, 867809161UL, 2167953720UL, 2290558548UL, 542850707UL, 2125103002UL, 1890906570UL, +2842247580UL, 807266805UL, 3803006390UL, 2056644398UL, 1697038549UL, 3312131466UL, 1234311530UL, 809106036UL, 3063718636UL, 1807030355UL, 215385887UL, 845421530UL, 654189622UL, 3610667273UL, 2576197887UL, 1275262872UL, 2806513944UL, 1517875462UL, 2492912955UL, 71403197UL, 219220133UL, 2181111477UL, 3826277490UL, 3465351710UL, 1232425455UL, 2630647391UL, 3280867676UL, 3343597872UL, 1331873639UL, 3624564545UL, 992324522UL, 3056113148UL, +3725661598UL, 782257020UL, 1786902552UL, 3768542219UL, 2777948797UL, 3392298403UL, 856888454UL, 2530862473UL, 2217907094UL, 2133505056UL, 4160889036UL, 3752437534UL, 4050672856UL, 1709182366UL, 1816409641UL, 1282922706UL, 1581813910UL, 4175126713UL, 2211317602UL, 616238454UL, 3806252779UL, 1796414157UL, 732700649UL, 2199328374UL, 3188624050UL, 983474330UL, 4225173324UL, 972036137UL, 2022548260UL, 2462701924UL, 880446667UL, 1410793611UL, +1200725173UL, 450033142UL, 772942770UL, 3179870546UL, 3889840648UL, 1907109304UL, 1268067149UL, 915918620UL, 4261932110UL, 1249098244UL, 301668366UL, 2414090506UL, 3798383292UL, 471794009UL, 1620796656UL, 1228520287UL, 152325583UL, 3499865580UL, 1275109063UL, 82853050UL, 3267460249UL, 3963199522UL, 4215066819UL, 4209882674UL, 1212493334UL, 47361585UL, 3408506640UL, 2468905351UL, 1324785625UL, 3195419905UL, 1878226915UL, 3321078070UL, +252381865UL, 4259927884UL, 1584154733UL, 1716437506UL, 1198684021UL, 922916691UL, 1800164165UL, 1734068880UL, 1591998796UL, 1479762464UL, 104399432UL, 2774114308UL, 1973878859UL, 3810955599UL, 362625839UL, 2591539911UL, 2126614872UL, 1727282404UL, 3908378015UL, 2956460273UL, 312410753UL, 4098052715UL, 3656295687UL, 687490649UL, 207904356UL, 354574195UL, 937379582UL, 355953909UL, 378445403UL, 4272692603UL, 2352732136UL, 2694800574UL, +3784169684UL, 1303281526UL, 4121521600UL, 2119254314UL, 1741415022UL, 2331527847UL, 1734311274UL, 2267513620UL, 3472164720UL, 480821513UL, 820692528UL, 4212588163UL, 3236687597UL, 299194858UL, 1128762168UL, 781151234UL, 2250704950UL, 1705861659UL, 2416322096UL, 160918735UL, 4288008793UL, 677982197UL, 4059323309UL, 2014660182UL, 3354205317UL, 3328850880UL, 1765435945UL, 867809161UL, 2167953720UL, 3363861382UL, 542850707UL, 2125103002UL, +1890906570UL, 2842247580UL, 2459935488UL, 3803006390UL, 2056644398UL, 1697038549UL, 3312131466UL, 2378675900UL, 809106036UL, 3063718636UL, 1807030355UL, 215385887UL, 3528413525UL, 654189622UL, 3610667273UL, 2576197887UL, 1275262872UL, 993221887UL, 1517875462UL, 2492912955UL, 71403197UL, 219220133UL, 1805256638UL, 3826277490UL, 3465351710UL, 1232425455UL, 2630647391UL, 3718538519UL, 3343597872UL, 1331873639UL, 3624564545UL, 992324522UL, +3490576382UL, 2532191937UL, 1108692984UL, 802110050UL, 3984561242UL, 1973015939UL, 1351080551UL, 2382044123UL, 2393286227UL, 860228704UL, 179528099UL, 3569709850UL, 233527199UL, 3657599850UL, 3269634908UL, 3278075383UL, 4037814788UL, 952837871UL, 2050210570UL, 2376157484UL, 2566048929UL, 4200278597UL, 123440514UL, 573557299UL, 1585379806UL, 4012659271UL, 4000306490UL, 2508478465UL, 970078629UL, 4064973573UL, 645149301UL, 109544347UL, +647594029UL, 2097163688UL, 1515080116UL, 2142799649UL, 2519702653UL, 3122920796UL, 1952249156UL, 3932382760UL, 2155292687UL, 2517875978UL, 249059416UL, 4282787227UL, 2595461065UL, 1004349415UL, 2151451255UL, 2510715277UL, 3004500356UL, 3410567758UL, 344538405UL, 1946747709UL, 470298928UL, 1033671146UL, 4207801290UL, 1411375630UL, 3419808553UL, 3218285984UL, 3584735265UL, 811222695UL, 3898833227UL, 3535298390UL, 3764741581UL, 3927026520UL, +2850086968UL, 2818485449UL, 1963038474UL, 1871366998UL, 1900570117UL, 997663534UL, 746627295UL, 1827737271UL, 3814054979UL, 728285698UL, 1696496343UL, 1696888597UL, 1010837663UL, 1756050352UL, 785994134UL, 1436861536UL, 1949153732UL, 2360018842UL, 1703393654UL, 2248338006UL, 3884572674UL, 789998735UL, 1155994673UL, 2022469457UL, 223162974UL, 309571006UL, 725482797UL, 3909032036UL, 2531190541UL, 373676789UL, 1061107200UL, 4231921550UL, +558635876UL, 2773807977UL, 1860218585UL, 1150041015UL, 2252812038UL, 2413330952UL, 191909567UL, 3518171813UL, 3513416318UL, 2679253717UL, 3850755687UL, 1564154710UL, 324714884UL, 1600953447UL, 4095583159UL, 1796641692UL, 2518000547UL, 3621187982UL, 501166402UL, 2112782420UL, 1704276185UL, 2249859782UL, 3754293422UL, 1942321901UL, 1851019104UL, 240158224UL, 3181132144UL, 2281632719UL, 808029657UL, 1721710011UL, 2287207169UL, 3044484177UL, +2363339534UL, 805273402UL, 3696016147UL, 3549191229UL, 3353631259UL, 2946802391UL, 383414270UL, 300735554UL, 471515206UL, 1907815837UL, 1576327662UL, 3825043525UL, 2817119733UL, 1973847200UL, 1398317206UL, 2221853087UL, 501440864UL, 642467132UL, 494410179UL, 1191241925UL, 3549838846UL, 3621239619UL, 2640266286UL, 4140123024UL, 315957218UL, 3696758268UL, 2502777875UL, 2150738616UL, 1570099119UL, 2598276767UL, 3585886712UL, 230047417UL, +}, +{ +220882755UL, 630187688UL, 2600079656UL, 3103815531UL, 4259457395UL, 306940008UL, 760977254UL, 558299017UL, 73879495UL, 2342545344UL, 572800511UL, 3922797738UL, 3754011306UL, 698257357UL, 1274843132UL, 1455757442UL, 1014649591UL, 3205662508UL, 2997738251UL, 613949432UL, 2267018388UL, 2925762681UL, 3702061213UL, 299380602UL, 1711070497UL, 4140032336UL, 4134705925UL, 2836703879UL, 3776863395UL, 507121465UL, 3480792188UL, 1862887216UL, +247780795UL, 2528677869UL, 2881446422UL, 271754977UL, 833498724UL, 1489102731UL, 3636156177UL, 1839744487UL, 2011839858UL, 2353400914UL, 510437606UL, 561141583UL, 2979592314UL, 3844268262UL, 3011027242UL, 3113817193UL, 3491178377UL, 1448376742UL, 2478683391UL, 2597550150UL, 699310968UL, 1979488062UL, 277591964UL, 1312002175UL, 168047351UL, 1826859926UL, 2030631355UL, 3097860388UL, 1950614326UL, 4070838751UL, 4454933UL, 1890661188UL, +3929835227UL, 1008498572UL, 3301557438UL, 3906313590UL, 1240635175UL, 280935563UL, 113509402UL, 226900299UL, 1246395851UL, 1220916742UL, 2651515540UL, 2058590162UL, 1983114332UL, 2040467861UL, 780818345UL, 544262576UL, 2826997265UL, 349354812UL, 2360120613UL, 1181324247UL, 2380347783UL, 3938729706UL, 1610628643UL, 2008635822UL, 2937909233UL, 1583978206UL, 3589167073UL, 1942470196UL, 402177406UL, 2636510744UL, 3709747478UL, 2428569572UL, +4071828137UL, 2880315633UL, 1433558231UL, 1137076031UL, 3833202201UL, 2378168250UL, 1412413704UL, 3349323744UL, 1740721660UL, 3155643175UL, 2580327273UL, 3020661883UL, 1658910832UL, 2065649368UL, 3277572880UL, 3795585437UL, 1266185861UL, 2925935368UL, 4147230645UL, 203577834UL, 2230529041UL, 2864778434UL, 270386174UL, 2867122465UL, 2676624544UL, 2035972330UL, 500973884UL, 2983028740UL, 117131866UL, 1456450936UL, 429171245UL, 3921563262UL, +342800398UL, 255116920UL, 1219580025UL, 1549741331UL, 3832317567UL, 3750096895UL, 4036554472UL, 4099775516UL, 1451717480UL, 149159438UL, 3593827664UL, 1406572509UL, 27774796UL, 1138983585UL, 1577536190UL, 978350835UL, 2704344602UL, 95204061UL, 1507155668UL, 304760810UL, 1981315657UL, 3139306913UL, 3908131532UL, 3767856445UL, 3851422551UL, 2018732047UL, 2474676116UL, 2745551516UL, 1585868430UL, 1125303733UL, 3147584753UL, 2368921260UL, +1524991519UL, 220882755UL, 630187688UL, 2600079656UL, 3103815531UL, 2671841243UL, 306940008UL, 760977254UL, 558299017UL, 73879495UL, 1196617651UL, 572800511UL, 3922797738UL, 3754011306UL, 698257357UL, 1982654891UL, 1455757442UL, 1014649591UL, 3205662508UL, 2997738251UL, 3769735713UL, 2267018388UL, 2925762681UL, 3702061213UL, 299380602UL, 2224634157UL, 4140032336UL, 4134705925UL, 2836703879UL, 3776863395UL, 1027030708UL, 3480792188UL, +1862887216UL, 247780795UL, 2528677869UL, 300214141UL, 271754977UL, 833498724UL, 1489102731UL, 3636156177UL, 1683033001UL, 2011839858UL, 2353400914UL, 510437606UL, 561141583UL, 2832813585UL, 3844268262UL, 3011027242UL, 3113817193UL, 3491178377UL, 316500941UL, 2478683391UL, 2597550150UL, 699310968UL, 1979488062UL, 4092049617UL, 1312002175UL, 168047351UL, 1826859926UL, 2030631355UL, 2797906491UL, 1950614326UL, 4070838751UL, 4454933UL, +1890661188UL, 2602196847UL, 1008498572UL, 3301557438UL, 3906313590UL, 1240635175UL, 946440664UL, 113509402UL, 226900299UL, 1246395851UL, 1220916742UL, 1314772486UL, 2058590162UL, 1983114332UL, 2040467861UL, 780818345UL, 3064382079UL, 2826997265UL, 349354812UL, 2360120613UL, 1181324247UL, 3434653713UL, 3938729706UL, 1610628643UL, 2008635822UL, 2937909233UL, 2815835447UL, 3589167073UL, 1942470196UL, 402177406UL, 2636510744UL, 865459039UL, +2428569572UL, 4071828137UL, 2880315633UL, 1433558231UL, 1582478959UL, 3833202201UL, 2378168250UL, 1412413704UL, 3349323744UL, 3686787615UL, 3155643175UL, 2580327273UL, 3020661883UL, 1658910832UL, 3152644489UL, 3277572880UL, 3795585437UL, 1266185861UL, 2925935368UL, 3101079227UL, 203577834UL, 2230529041UL, 2864778434UL, 270386174UL, 3024925346UL, 2676624544UL, 2035972330UL, 500973884UL, 2983028740UL, 974511421UL, 1456450936UL, 429171245UL, +3921563262UL, 342800398UL, 1540218139UL, 1219580025UL, 1549741331UL, 3832317567UL, 3750096895UL, 2195381148UL, 4099775516UL, 1451717480UL, 149159438UL, 3593827664UL, 3715984838UL, 27774796UL, 1138983585UL, 1577536190UL, 978350835UL, 2060213898UL, 95204061UL, 1507155668UL, 304760810UL, 1981315657UL, 774471092UL, 3908131532UL, 3767856445UL, 3851422551UL, 2018732047UL, 1649125731UL, 2745551516UL, 1585868430UL, 1125303733UL, 3147584753UL, +1661721342UL, 1524991519UL, 220882755UL, 630187688UL, 2600079656UL, 3647143842UL, 2671841243UL, 306940008UL, 760977254UL, 558299017UL, 3406011854UL, 1196617651UL, 572800511UL, 3922797738UL, 3754011306UL, 2314291278UL, 1982654891UL, 1455757442UL, 1014649591UL, 3205662508UL, 3471741326UL, 3769735713UL, 2267018388UL, 2925762681UL, 3702061213UL, 1593850639UL, 2224634157UL, 4140032336UL, 4134705925UL, 2836703879UL, 3918266498UL, 1027030708UL, +3480792188UL, 1862887216UL, 247780795UL, 3383776045UL, 300214141UL, 271754977UL, 833498724UL, 1489102731UL, 2477093804UL, 1683033001UL, 2011839858UL, 2353400914UL, 510437606UL, 2361664959UL, 2832813585UL, 3844268262UL, 3011027242UL, 3113817193UL, 1468705704UL, 316500941UL, 2478683391UL, 2597550150UL, 699310968UL, 1593029686UL, 4092049617UL, 1312002175UL, 168047351UL, 1826859926UL, 3922295193UL, 2797906491UL, 1950614326UL, 4070838751UL, +4454933UL, 485374579UL, 2602196847UL, 1008498572UL, 3301557438UL, 3906313590UL, 2102043683UL, 946440664UL, 113509402UL, 226900299UL, 1246395851UL, 2635764090UL, 1314772486UL, 2058590162UL, 1983114332UL, 2040467861UL, 354791UL, 3064382079UL, 2826997265UL, 349354812UL, 2360120613UL, 2126504772UL, 3434653713UL, 3938729706UL, 1610628643UL, 2008635822UL, 2400061949UL, 2815835447UL, 3589167073UL, 1942470196UL, 402177406UL, 806469309UL, +865459039UL, 2428569572UL, 4071828137UL, 2880315633UL, 2512200928UL, 1582478959UL, 3833202201UL, 2378168250UL, 1412413704UL, 2767451252UL, 3686787615UL, 3155643175UL, 2580327273UL, 3020661883UL, 1040874588UL, 3152644489UL, 3277572880UL, 3795585437UL, 1266185861UL, 238446394UL, 3101079227UL, 203577834UL, 2230529041UL, 2864778434UL, 653319712UL, 3024925346UL, 2676624544UL, 2035972330UL, 500973884UL, 3839534784UL, 974511421UL, 1456450936UL, +429171245UL, 3921563262UL, 602320448UL, 1540218139UL, 1219580025UL, 1549741331UL, 3832317567UL, 1068872823UL, 2195381148UL, 4099775516UL, 1451717480UL, 149159438UL, 1699607068UL, 3715984838UL, 27774796UL, 1138983585UL, 1577536190UL, 837921790UL, 2060213898UL, 95204061UL, 1507155668UL, 304760810UL, 1446133066UL, 774471092UL, 3908131532UL, 3767856445UL, 3851422551UL, 2672625648UL, 1649125731UL, 2745551516UL, 1585868430UL, 1125303733UL, +2181520384UL, 1661721342UL, 1524991519UL, 220882755UL, 630187688UL, 1599074811UL, 3647143842UL, 2671841243UL, 306940008UL, 760977254UL, 3020017536UL, 3406011854UL, 1196617651UL, 572800511UL, 3922797738UL, 810584907UL, 2314291278UL, 1982654891UL, 1455757442UL, 1014649591UL, 1775783567UL, 3471741326UL, 3769735713UL, 2267018388UL, 2925762681UL, 319055602UL, 1593850639UL, 2224634157UL, 4140032336UL, 4134705925UL, 2794599326UL, 3918266498UL, +1027030708UL, 3480792188UL, 1862887216UL, 659607854UL, 3383776045UL, 300214141UL, 271754977UL, 833498724UL, 4054679386UL, 2477093804UL, 1683033001UL, 2011839858UL, 2353400914UL, 283191425UL, 2361664959UL, 2832813585UL, 3844268262UL, 3011027242UL, 137688840UL, 1468705704UL, 316500941UL, 2478683391UL, 2597550150UL, 1468220070UL, 1593029686UL, 4092049617UL, 1312002175UL, 168047351UL, 1602414610UL, 3922295193UL, 2797906491UL, 1950614326UL, +4070838751UL, 3858763082UL, 485374579UL, 2602196847UL, 1008498572UL, 3301557438UL, 2719858709UL, 2102043683UL, 946440664UL, 113509402UL, 226900299UL, 798285817UL, 2635764090UL, 1314772486UL, 2058590162UL, 1983114332UL, 2526463430UL, 354791UL, 3064382079UL, 2826997265UL, 349354812UL, 249430921UL, 2126504772UL, 3434653713UL, 3938729706UL, 1610628643UL, 967431506UL, 2400061949UL, 2815835447UL, 3589167073UL, 1942470196UL, 669129162UL, +806469309UL, 865459039UL, 2428569572UL, 4071828137UL, 3447449944UL, 2512200928UL, 1582478959UL, 3833202201UL, 2378168250UL, 1945768856UL, 2767451252UL, 3686787615UL, 3155643175UL, 2580327273UL, 2905624117UL, 1040874588UL, 3152644489UL, 3277572880UL, 3795585437UL, 3869959934UL, 238446394UL, 3101079227UL, 203577834UL, 2230529041UL, 1087760616UL, 653319712UL, 3024925346UL, 2676624544UL, 2035972330UL, 741014356UL, 3839534784UL, 974511421UL, +1456450936UL, 429171245UL, 598362053UL, 602320448UL, 1540218139UL, 1219580025UL, 1549741331UL, 401740328UL, 1068872823UL, 2195381148UL, 4099775516UL, 1451717480UL, 412110161UL, 1699607068UL, 3715984838UL, 27774796UL, 1138983585UL, 1531670562UL, 837921790UL, 2060213898UL, 95204061UL, 1507155668UL, 90279751UL, 1446133066UL, 774471092UL, 3908131532UL, 3767856445UL, 1136546910UL, 2672625648UL, 1649125731UL, 2745551516UL, 1585868430UL, +857721974UL, 1470900829UL, 64550776UL, 3252081369UL, 1649342279UL, 378546910UL, 3444980597UL, 3134750739UL, 1010105258UL, 1395608241UL, 1003208120UL, 3960524028UL, 3200241620UL, 3079969898UL, 1508044775UL, 4153769914UL, 2838198142UL, 773928818UL, 25836261UL, 3812652461UL, 3870603819UL, 931071963UL, 2565579710UL, 2930918109UL, 1091097445UL, 2223628368UL, 2934719684UL, 430797922UL, 2102409587UL, 720592077UL, 1675280068UL, 2578226918UL, +1316600845UL, 3427946098UL, 682896800UL, 1861125007UL, 251332674UL, 1502078012UL, 3020904394UL, 1458399451UL, 3088315263UL, 1635399147UL, 3605560130UL, 1755669804UL, 3754169290UL, 962708070UL, 3896576937UL, 3764679740UL, 2707457262UL, 3082551065UL, 1558451132UL, 1046028905UL, 3206335691UL, 731828142UL, 1765772975UL, 1195727587UL, 2664218451UL, 4234957963UL, 4073757168UL, 3230123616UL, 683981262UL, 607599877UL, 3659273671UL, 3230354324UL, +3393069074UL, 3250708814UL, 2229361194UL, 3923623619UL, 4093221649UL, 2441971643UL, 1787414237UL, 3603907850UL, 2254399656UL, 3508336126UL, 3578571587UL, 2383062806UL, 1012097006UL, 4250629546UL, 2086981615UL, 4190388250UL, 1399942361UL, 400707931UL, 3159618664UL, 2129750192UL, 911779896UL, 2736829998UL, 1909644954UL, 2168355517UL, 1583901478UL, 3468891177UL, 509297602UL, 769296769UL, 1865028750UL, 43276967UL, 3375387845UL, 2647467777UL, +1544731454UL, 3479333955UL, 4279441447UL, 485490313UL, 3523606596UL, 2880752852UL, 1946443431UL, 3760803481UL, 3115278477UL, 3693898557UL, 2387822435UL, 334412170UL, 2054111717UL, 269013084UL, 170401553UL, 3456013554UL, 3395842846UL, 508189059UL, 3398715186UL, 3862791669UL, 2741070272UL, 65318715UL, 1933435210UL, 4086198650UL, 3033193928UL, 1242412691UL, 3397363281UL, 3187419149UL, 1019508117UL, 562380742UL, 961415837UL, 2990412400UL, +3597720222UL, 2754100415UL, 1793508822UL, 966564784UL, 1875616532UL, 394646945UL, 1386107842UL, 2750810827UL, 2931007937UL, 3356489930UL, 2358364634UL, 3703772713UL, 3188884403UL, 2793590498UL, 3285138686UL, 515002680UL, 521510516UL, 887213583UL, 1873460781UL, 1583027667UL, 613895001UL, 557578628UL, 1892686243UL, 1974572772UL, 595831726UL, 229299738UL, 3847982294UL, 448248098UL, 1493822844UL, 3326405260UL, 2752463855UL, 128616819UL, +}, +{ +2014765631UL, 3938779303UL, 1811986049UL, 2101875601UL, 887194972UL, 3966228860UL, 3450775746UL, 4026039255UL, 4082308025UL, 432404123UL, 3181099213UL, 1228097256UL, 2368258457UL, 2953933351UL, 2582232464UL, 1657799516UL, 3525421629UL, 3927364159UL, 978138132UL, 3603597064UL, 342571522UL, 2100072168UL, 676229632UL, 2062864895UL, 3713317279UL, 4255773013UL, 1179492389UL, 3501226604UL, 1641801113UL, 2066614519UL, 3303232023UL, 1717768923UL, +2333501450UL, 4246883128UL, 1655087824UL, 1547897374UL, 754215285UL, 2832638094UL, 1365153701UL, 3309513970UL, 765738141UL, 1177808869UL, 324127419UL, 1171195868UL, 3494966448UL, 1714410667UL, 3645762436UL, 603810292UL, 489970006UL, 3126166124UL, 1616642501UL, 2646836239UL, 734727001UL, 118064420UL, 1164195304UL, 3692353914UL, 2267623847UL, 405457397UL, 2510437259UL, 3245015882UL, 2110859730UL, 967046702UL, 265790493UL, 3007163818UL, +3178475505UL, 1784447992UL, 3662964942UL, 1509963062UL, 1867864652UL, 1377871790UL, 4185567242UL, 657897796UL, 1762205546UL, 3895944199UL, 693988565UL, 2359023506UL, 1667660316UL, 478341078UL, 1898651054UL, 2352226314UL, 202416031UL, 855532642UL, 2290137962UL, 1573485803UL, 3675269487UL, 2346740592UL, 3111005795UL, 1741227661UL, 1222572879UL, 2176146608UL, 1595608675UL, 197451178UL, 1729118168UL, 876472937UL, 3201705210UL, 2315408645UL, +699968623UL, 2185639066UL, 3960900430UL, 539499973UL, 4226318752UL, 266371152UL, 2714506838UL, 945022093UL, 1378798863UL, 1925020181UL, 574417318UL, 1341455098UL, 3664225722UL, 3020780778UL, 3256613994UL, 2081255019UL, 3082744844UL, 3572803922UL, 1726854692UL, 1167777002UL, 557257486UL, 3577067012UL, 3806913480UL, 1578577194UL, 2631896730UL, 3937479909UL, 826138924UL, 670145071UL, 832017019UL, 715875283UL, 2008704579UL, 804955545UL, +4184114494UL, 867004874UL, 3586861289UL, 1190193155UL, 3288754776UL, 2271906590UL, 2007547109UL, 2206084232UL, 1621944575UL, 973990634UL, 3981493346UL, 1972746975UL, 1040348653UL, 2895228417UL, 691038334UL, 775610724UL, 3837025597UL, 714850057UL, 2912426839UL, 774555258UL, 3553866253UL, 2096154755UL, 1645117543UL, 3401470072UL, 2056183169UL, 2029528044UL, 3145728013UL, 1090530001UL, 49523828UL, 2228313334UL, 4013648604UL, 4289025873UL, +2749397923UL, 2014765631UL, 3938779303UL, 1811986049UL, 2101875601UL, 1575247143UL, 3966228860UL, 3450775746UL, 4026039255UL, 4082308025UL, 532118065UL, 3181099213UL, 1228097256UL, 2368258457UL, 2953933351UL, 896129082UL, 1657799516UL, 3525421629UL, 3927364159UL, 978138132UL, 3403930517UL, 342571522UL, 2100072168UL, 676229632UL, 2062864895UL, 38934050UL, 4255773013UL, 1179492389UL, 3501226604UL, 1641801113UL, 4195983797UL, 3303232023UL, +1717768923UL, 2333501450UL, 4246883128UL, 2854551758UL, 1547897374UL, 754215285UL, 2832638094UL, 1365153701UL, 1406220165UL, 765738141UL, 1177808869UL, 324127419UL, 1171195868UL, 625985592UL, 1714410667UL, 3645762436UL, 603810292UL, 489970006UL, 344948229UL, 1616642501UL, 2646836239UL, 734727001UL, 118064420UL, 3360380275UL, 3692353914UL, 2267623847UL, 405457397UL, 2510437259UL, 3697919521UL, 2110859730UL, 967046702UL, 265790493UL, +3007163818UL, 1395299303UL, 1784447992UL, 3662964942UL, 1509963062UL, 1867864652UL, 849544728UL, 4185567242UL, 657897796UL, 1762205546UL, 3895944199UL, 1219998053UL, 2359023506UL, 1667660316UL, 478341078UL, 1898651054UL, 943166064UL, 202416031UL, 855532642UL, 2290137962UL, 1573485803UL, 4238971908UL, 2346740592UL, 3111005795UL, 1741227661UL, 1222572879UL, 2670048596UL, 1595608675UL, 197451178UL, 1729118168UL, 876472937UL, 94688481UL, +2315408645UL, 699968623UL, 2185639066UL, 3960900430UL, 1224638706UL, 4226318752UL, 266371152UL, 2714506838UL, 945022093UL, 2683523818UL, 1925020181UL, 574417318UL, 1341455098UL, 3664225722UL, 1168593559UL, 3256613994UL, 2081255019UL, 3082744844UL, 3572803922UL, 2816021735UL, 1167777002UL, 557257486UL, 3577067012UL, 3806913480UL, 740433434UL, 2631896730UL, 3937479909UL, 826138924UL, 670145071UL, 4127240538UL, 715875283UL, 2008704579UL, +804955545UL, 4184114494UL, 1692532062UL, 3586861289UL, 1190193155UL, 3288754776UL, 2271906590UL, 922306057UL, 2206084232UL, 1621944575UL, 973990634UL, 3981493346UL, 3555073644UL, 1040348653UL, 2895228417UL, 691038334UL, 775610724UL, 1798939042UL, 714850057UL, 2912426839UL, 774555258UL, 3553866253UL, 4209859609UL, 1645117543UL, 3401470072UL, 2056183169UL, 2029528044UL, 2169159734UL, 1090530001UL, 49523828UL, 2228313334UL, 4013648604UL, +1499948031UL, 2749397923UL, 2014765631UL, 3938779303UL, 1811986049UL, 2169095159UL, 1575247143UL, 3966228860UL, 3450775746UL, 4026039255UL, 1220311069UL, 532118065UL, 3181099213UL, 1228097256UL, 2368258457UL, 649921441UL, 896129082UL, 1657799516UL, 3525421629UL, 3927364159UL, 2546335470UL, 3403930517UL, 342571522UL, 2100072168UL, 676229632UL, 3090148374UL, 38934050UL, 4255773013UL, 1179492389UL, 3501226604UL, 2613176152UL, 4195983797UL, +3303232023UL, 1717768923UL, 2333501450UL, 3923041739UL, 2854551758UL, 1547897374UL, 754215285UL, 2832638094UL, 731392091UL, 1406220165UL, 765738141UL, 1177808869UL, 324127419UL, 12876722UL, 625985592UL, 1714410667UL, 3645762436UL, 603810292UL, 2789313462UL, 344948229UL, 1616642501UL, 2646836239UL, 734727001UL, 3369486664UL, 3360380275UL, 3692353914UL, 2267623847UL, 405457397UL, 4284067044UL, 3697919521UL, 2110859730UL, 967046702UL, +265790493UL, 2779045063UL, 1395299303UL, 1784447992UL, 3662964942UL, 1509963062UL, 3233239196UL, 849544728UL, 4185567242UL, 657897796UL, 1762205546UL, 2086953994UL, 1219998053UL, 2359023506UL, 1667660316UL, 478341078UL, 4137166515UL, 943166064UL, 202416031UL, 855532642UL, 2290137962UL, 1053737970UL, 4238971908UL, 2346740592UL, 3111005795UL, 1741227661UL, 3570501235UL, 2670048596UL, 1595608675UL, 197451178UL, 1729118168UL, 4162077327UL, +94688481UL, 2315408645UL, 699968623UL, 2185639066UL, 2842562270UL, 1224638706UL, 4226318752UL, 266371152UL, 2714506838UL, 755620309UL, 2683523818UL, 1925020181UL, 574417318UL, 1341455098UL, 3323621213UL, 1168593559UL, 3256613994UL, 2081255019UL, 3082744844UL, 3845230416UL, 2816021735UL, 1167777002UL, 557257486UL, 3577067012UL, 66225918UL, 740433434UL, 2631896730UL, 3937479909UL, 826138924UL, 522548622UL, 4127240538UL, 715875283UL, +2008704579UL, 804955545UL, 22190845UL, 1692532062UL, 3586861289UL, 1190193155UL, 3288754776UL, 610751818UL, 922306057UL, 2206084232UL, 1621944575UL, 973990634UL, 1771882567UL, 3555073644UL, 1040348653UL, 2895228417UL, 691038334UL, 149995790UL, 1798939042UL, 714850057UL, 2912426839UL, 774555258UL, 2020442761UL, 4209859609UL, 1645117543UL, 3401470072UL, 2056183169UL, 460813741UL, 2169159734UL, 1090530001UL, 49523828UL, 2228313334UL, +504317288UL, 1499948031UL, 2749397923UL, 2014765631UL, 3938779303UL, 1175469033UL, 2169095159UL, 1575247143UL, 3966228860UL, 3450775746UL, 1032079910UL, 1220311069UL, 532118065UL, 3181099213UL, 1228097256UL, 3353583885UL, 649921441UL, 896129082UL, 1657799516UL, 3525421629UL, 2830418357UL, 2546335470UL, 3403930517UL, 342571522UL, 2100072168UL, 1099053459UL, 3090148374UL, 38934050UL, 4255773013UL, 1179492389UL, 1634035942UL, 2613176152UL, +4195983797UL, 3303232023UL, 1717768923UL, 4175785502UL, 3923041739UL, 2854551758UL, 1547897374UL, 754215285UL, 3674851127UL, 731392091UL, 1406220165UL, 765738141UL, 1177808869UL, 776475327UL, 12876722UL, 625985592UL, 1714410667UL, 3645762436UL, 759189800UL, 2789313462UL, 344948229UL, 1616642501UL, 2646836239UL, 1228911282UL, 3369486664UL, 3360380275UL, 3692353914UL, 2267623847UL, 3058856811UL, 4284067044UL, 3697919521UL, 2110859730UL, +967046702UL, 3601311392UL, 2779045063UL, 1395299303UL, 1784447992UL, 3662964942UL, 284169442UL, 3233239196UL, 849544728UL, 4185567242UL, 657897796UL, 905886381UL, 2086953994UL, 1219998053UL, 2359023506UL, 1667660316UL, 2784311626UL, 4137166515UL, 943166064UL, 202416031UL, 855532642UL, 895862877UL, 1053737970UL, 4238971908UL, 2346740592UL, 3111005795UL, 1509264114UL, 3570501235UL, 2670048596UL, 1595608675UL, 197451178UL, 3653040124UL, +4162077327UL, 94688481UL, 2315408645UL, 699968623UL, 1071988392UL, 2842562270UL, 1224638706UL, 4226318752UL, 266371152UL, 4214356293UL, 755620309UL, 2683523818UL, 1925020181UL, 574417318UL, 119162126UL, 3323621213UL, 1168593559UL, 3256613994UL, 2081255019UL, 1317924999UL, 3845230416UL, 2816021735UL, 1167777002UL, 557257486UL, 638058809UL, 66225918UL, 740433434UL, 2631896730UL, 3937479909UL, 411228024UL, 522548622UL, 4127240538UL, +715875283UL, 2008704579UL, 2246049355UL, 22190845UL, 1692532062UL, 3586861289UL, 1190193155UL, 4078828073UL, 610751818UL, 922306057UL, 2206084232UL, 1621944575UL, 907181435UL, 1771882567UL, 3555073644UL, 1040348653UL, 2895228417UL, 940846326UL, 149995790UL, 1798939042UL, 714850057UL, 2912426839UL, 3345560812UL, 2020442761UL, 4209859609UL, 1645117543UL, 3401470072UL, 2036328600UL, 460813741UL, 2169159734UL, 1090530001UL, 49523828UL, +510136795UL, 2233313725UL, 1046048857UL, 700202384UL, 926275751UL, 4104982908UL, 3910999868UL, 1125213128UL, 492681420UL, 3891914731UL, 956545470UL, 115696875UL, 2957144177UL, 77090391UL, 467732901UL, 2599813105UL, 3888976883UL, 2098926023UL, 2844817051UL, 2069408123UL, 2239429902UL, 3793992219UL, 3020240490UL, 1721698056UL, 3012473888UL, 1537226153UL, 725991171UL, 61376035UL, 381912667UL, 3904514327UL, 40015731UL, 4263210119UL, +2876064791UL, 2732785471UL, 2934318283UL, 3134934287UL, 3161129365UL, 3789733734UL, 2954419388UL, 2742205850UL, 3488450208UL, 3252908703UL, 410643191UL, 3246033194UL, 2846558783UL, 828879673UL, 2428687670UL, 389617242UL, 63987225UL, 439842832UL, 2635895570UL, 3468152776UL, 4086700701UL, 3370617315UL, 2400127386UL, 4266992260UL, 3026019128UL, 4225721108UL, 1328114488UL, 2808680961UL, 3574018824UL, 4060262451UL, 2329039960UL, 1165344648UL, +3635963149UL, 2414703792UL, 2269100254UL, 832995451UL, 2143875746UL, 1031309981UL, 2129333746UL, 2606784227UL, 805236091UL, 666141116UL, 2749351381UL, 53998350UL, 2270447972UL, 2092784991UL, 877961283UL, 3019419608UL, 2438459472UL, 2273921167UL, 332279281UL, 3759993687UL, 2465113760UL, 3732237006UL, 322823266UL, 491053374UL, 686619591UL, 4192648122UL, 4118497267UL, 1948902148UL, 988375775UL, 2098328675UL, 3107501958UL, 2979856583UL, +2274193457UL, 6179961UL, 188209161UL, 1491245003UL, 3005972885UL, 1658799053UL, 3420802262UL, 2128792168UL, 3272743598UL, 4163716849UL, 817350318UL, 3372322557UL, 1525295885UL, 490587460UL, 3634834949UL, 2584809384UL, 3638373352UL, 2603765126UL, 3223396315UL, 4021061386UL, 2143780551UL, 248332433UL, 3654752967UL, 27201989UL, 3994156272UL, 5505477UL, 4260955724UL, 1175998822UL, 2665646240UL, 866875674UL, 3569324422UL, 202962714UL, +896177244UL, 3146417201UL, 1168925859UL, 2228636445UL, 105395449UL, 2567482935UL, 1301265751UL, 3739617610UL, 2486939910UL, 1891847857UL, 2647840744UL, 1141826566UL, 3360553996UL, 4267671927UL, 2546157872UL, 1143297884UL, 2049385137UL, 4288036836UL, 3347190546UL, 3480408604UL, 2756408254UL, 2396048567UL, 1151717877UL, 2211243289UL, 4221659024UL, 21773193UL, 1665317870UL, 3116384869UL, 3231689469UL, 3689471824UL, 1520574310UL, 463615415UL, +}, +{ +2647200400UL, 1592194261UL, 1289872755UL, 2079982087UL, 3431487085UL, 1101851783UL, 3373292799UL, 2148994262UL, 2785319928UL, 3206527339UL, 2731839331UL, 1280366172UL, 1146205735UL, 2930495205UL, 2876978398UL, 3885758458UL, 2062812458UL, 2448488486UL, 192141900UL, 3861696664UL, 2677929258UL, 3606729729UL, 2920965773UL, 1156521508UL, 3168665640UL, 298794036UL, 957896625UL, 2606719899UL, 3699219026UL, 3120096333UL, 2531109351UL, 1920936462UL, +2848868175UL, 1406404729UL, 2956672675UL, 1376226240UL, 3667482110UL, 2551426756UL, 3433640449UL, 2603906744UL, 4217864690UL, 47671552UL, 2993859190UL, 1269153270UL, 3463588775UL, 1655126430UL, 3453916724UL, 2157890969UL, 252769449UL, 1583335064UL, 2560819344UL, 52639671UL, 39618615UL, 313192112UL, 2625914283UL, 2964928555UL, 4226359627UL, 4141969666UL, 183405146UL, 1455378225UL, 2994063945UL, 3146629795UL, 2992956289UL, 368634554UL, +4110058153UL, 1156556441UL, 3690317172UL, 906928962UL, 3773042217UL, 948650679UL, 4134172918UL, 2922802573UL, 1417921660UL, 291400676UL, 3120733115UL, 3225369425UL, 3200455006UL, 2207799613UL, 1766261260UL, 914727455UL, 1927023103UL, 572959294UL, 3447057855UL, 4042691162UL, 840021910UL, 4187195325UL, 3627831667UL, 1671506539UL, 242673485UL, 3330397756UL, 776552069UL, 684550924UL, 261597601UL, 1857936262UL, 1022869402UL, 4209077103UL, +14248159UL, 2366156245UL, 1910356465UL, 2020463550UL, 873419743UL, 4290775093UL, 3670978210UL, 1726974037UL, 784115717UL, 3574834402UL, 357805142UL, 3820795621UL, 1854247318UL, 1161642656UL, 3977404318UL, 2054677775UL, 1737374322UL, 2852015019UL, 4277252452UL, 1392810771UL, 3742661504UL, 1900815804UL, 1965911170UL, 3540183220UL, 2106191537UL, 3606954134UL, 2108636204UL, 2981827052UL, 2506861567UL, 184003599UL, 3319252632UL, 1370913077UL, +940955681UL, 2244100002UL, 3683661822UL, 3215832318UL, 3463899341UL, 134577035UL, 3404365179UL, 2262494389UL, 88039196UL, 114405083UL, 1071449574UL, 4008494055UL, 765981248UL, 758357266UL, 2564125377UL, 901977407UL, 955156196UL, 3900980822UL, 134031448UL, 2566915950UL, 3445833537UL, 3138903399UL, 2113076217UL, 713587277UL, 3396078039UL, 3987657193UL, 3004104774UL, 800324742UL, 652529813UL, 3999083342UL, 486108562UL, 2103591900UL, +104743736UL, 2647200400UL, 1592194261UL, 1289872755UL, 2079982087UL, 552781204UL, 1101851783UL, 3373292799UL, 2148994262UL, 2785319928UL, 1222851809UL, 2731839331UL, 1280366172UL, 1146205735UL, 2930495205UL, 942360591UL, 3885758458UL, 2062812458UL, 2448488486UL, 192141900UL, 1909229999UL, 2677929258UL, 3606729729UL, 2920965773UL, 1156521508UL, 2995805883UL, 298794036UL, 957896625UL, 2606719899UL, 3699219026UL, 2447513005UL, 2531109351UL, +1920936462UL, 2848868175UL, 1406404729UL, 2751142611UL, 1376226240UL, 3667482110UL, 2551426756UL, 3433640449UL, 3724189478UL, 4217864690UL, 47671552UL, 2993859190UL, 1269153270UL, 2144136371UL, 1655126430UL, 3453916724UL, 2157890969UL, 252769449UL, 2959496542UL, 2560819344UL, 52639671UL, 39618615UL, 313192112UL, 2367743540UL, 2964928555UL, 4226359627UL, 4141969666UL, 183405146UL, 2006751422UL, 2994063945UL, 3146629795UL, 2992956289UL, +368634554UL, 1529794973UL, 1156556441UL, 3690317172UL, 906928962UL, 3773042217UL, 2005599428UL, 4134172918UL, 2922802573UL, 1417921660UL, 291400676UL, 2664982078UL, 3225369425UL, 3200455006UL, 2207799613UL, 1766261260UL, 2623711877UL, 1927023103UL, 572959294UL, 3447057855UL, 4042691162UL, 3510199782UL, 4187195325UL, 3627831667UL, 1671506539UL, 242673485UL, 1978730938UL, 776552069UL, 684550924UL, 261597601UL, 1857936262UL, 3273582958UL, +4209077103UL, 14248159UL, 2366156245UL, 1910356465UL, 457933823UL, 873419743UL, 4290775093UL, 3670978210UL, 1726974037UL, 1414288023UL, 3574834402UL, 357805142UL, 3820795621UL, 1854247318UL, 2679386897UL, 3977404318UL, 2054677775UL, 1737374322UL, 2852015019UL, 2411291453UL, 1392810771UL, 3742661504UL, 1900815804UL, 1965911170UL, 3719529323UL, 2106191537UL, 3606954134UL, 2108636204UL, 2981827052UL, 3702357099UL, 184003599UL, 3319252632UL, +1370913077UL, 940955681UL, 4262675711UL, 3683661822UL, 3215832318UL, 3463899341UL, 134577035UL, 3494669542UL, 2262494389UL, 88039196UL, 114405083UL, 1071449574UL, 1060831201UL, 765981248UL, 758357266UL, 2564125377UL, 901977407UL, 3003279383UL, 3900980822UL, 134031448UL, 2566915950UL, 3445833537UL, 2846863035UL, 2113076217UL, 713587277UL, 3396078039UL, 3987657193UL, 2067196130UL, 800324742UL, 652529813UL, 3999083342UL, 486108562UL, +2321935002UL, 104743736UL, 2647200400UL, 1592194261UL, 1289872755UL, 466892855UL, 552781204UL, 1101851783UL, 3373292799UL, 2148994262UL, 3078568050UL, 1222851809UL, 2731839331UL, 1280366172UL, 1146205735UL, 1710937426UL, 942360591UL, 3885758458UL, 2062812458UL, 2448488486UL, 3418446265UL, 1909229999UL, 2677929258UL, 3606729729UL, 2920965773UL, 1103324742UL, 2995805883UL, 298794036UL, 957896625UL, 2606719899UL, 675602173UL, 2447513005UL, +2531109351UL, 1920936462UL, 2848868175UL, 1509959171UL, 2751142611UL, 1376226240UL, 3667482110UL, 2551426756UL, 2447143807UL, 3724189478UL, 4217864690UL, 47671552UL, 2993859190UL, 2821422976UL, 2144136371UL, 1655126430UL, 3453916724UL, 2157890969UL, 3665277070UL, 2959496542UL, 2560819344UL, 52639671UL, 39618615UL, 2817859210UL, 2367743540UL, 2964928555UL, 4226359627UL, 4141969666UL, 2856219617UL, 2006751422UL, 2994063945UL, 3146629795UL, +2992956289UL, 3176479073UL, 1529794973UL, 1156556441UL, 3690317172UL, 906928962UL, 97899274UL, 2005599428UL, 4134172918UL, 2922802573UL, 1417921660UL, 1492426675UL, 2664982078UL, 3225369425UL, 3200455006UL, 2207799613UL, 2275640124UL, 2623711877UL, 1927023103UL, 572959294UL, 3447057855UL, 1036984002UL, 3510199782UL, 4187195325UL, 3627831667UL, 1671506539UL, 1827895694UL, 1978730938UL, 776552069UL, 684550924UL, 261597601UL, 3493571621UL, +3273582958UL, 4209077103UL, 14248159UL, 2366156245UL, 211745521UL, 457933823UL, 873419743UL, 4290775093UL, 3670978210UL, 1909994881UL, 1414288023UL, 3574834402UL, 357805142UL, 3820795621UL, 1911700755UL, 2679386897UL, 3977404318UL, 2054677775UL, 1737374322UL, 213019511UL, 2411291453UL, 1392810771UL, 3742661504UL, 1900815804UL, 237536256UL, 3719529323UL, 2106191537UL, 3606954134UL, 2108636204UL, 665423205UL, 3702357099UL, 184003599UL, +3319252632UL, 1370913077UL, 3583034472UL, 4262675711UL, 3683661822UL, 3215832318UL, 3463899341UL, 4027471772UL, 3494669542UL, 2262494389UL, 88039196UL, 114405083UL, 3580272354UL, 1060831201UL, 765981248UL, 758357266UL, 2564125377UL, 2592170747UL, 3003279383UL, 3900980822UL, 134031448UL, 2566915950UL, 1722483656UL, 2846863035UL, 2113076217UL, 713587277UL, 3396078039UL, 244197359UL, 2067196130UL, 800324742UL, 652529813UL, 3999083342UL, +2310369213UL, 2321935002UL, 104743736UL, 2647200400UL, 1592194261UL, 1610483859UL, 466892855UL, 552781204UL, 1101851783UL, 3373292799UL, 2617595614UL, 3078568050UL, 1222851809UL, 2731839331UL, 1280366172UL, 808483717UL, 1710937426UL, 942360591UL, 3885758458UL, 2062812458UL, 3260452154UL, 3418446265UL, 1909229999UL, 2677929258UL, 3606729729UL, 341113837UL, 1103324742UL, 2995805883UL, 298794036UL, 957896625UL, 2309730124UL, 675602173UL, +2447513005UL, 2531109351UL, 1920936462UL, 2268824429UL, 1509959171UL, 2751142611UL, 1376226240UL, 3667482110UL, 2745634237UL, 2447143807UL, 3724189478UL, 4217864690UL, 47671552UL, 2787057737UL, 2821422976UL, 2144136371UL, 1655126430UL, 3453916724UL, 339095616UL, 3665277070UL, 2959496542UL, 2560819344UL, 52639671UL, 3200765881UL, 2817859210UL, 2367743540UL, 2964928555UL, 4226359627UL, 3206913703UL, 2856219617UL, 2006751422UL, 2994063945UL, +3146629795UL, 1042016834UL, 3176479073UL, 1529794973UL, 1156556441UL, 3690317172UL, 171871257UL, 97899274UL, 2005599428UL, 4134172918UL, 2922802573UL, 1501051393UL, 1492426675UL, 2664982078UL, 3225369425UL, 3200455006UL, 1356823782UL, 2275640124UL, 2623711877UL, 1927023103UL, 572959294UL, 319456586UL, 1036984002UL, 3510199782UL, 4187195325UL, 3627831667UL, 3026392291UL, 1827895694UL, 1978730938UL, 776552069UL, 684550924UL, 2862336749UL, +3493571621UL, 3273582958UL, 4209077103UL, 14248159UL, 1597498830UL, 211745521UL, 457933823UL, 873419743UL, 4290775093UL, 2990300609UL, 1909994881UL, 1414288023UL, 3574834402UL, 357805142UL, 1957211849UL, 1911700755UL, 2679386897UL, 3977404318UL, 2054677775UL, 1006075205UL, 213019511UL, 2411291453UL, 1392810771UL, 3742661504UL, 1443139437UL, 237536256UL, 3719529323UL, 2106191537UL, 3606954134UL, 2671394121UL, 665423205UL, 3702357099UL, +184003599UL, 3319252632UL, 1632983188UL, 3583034472UL, 4262675711UL, 3683661822UL, 3215832318UL, 4080585934UL, 4027471772UL, 3494669542UL, 2262494389UL, 88039196UL, 677218369UL, 3580272354UL, 1060831201UL, 765981248UL, 758357266UL, 1277026792UL, 2592170747UL, 3003279383UL, 3900980822UL, 134031448UL, 4189207981UL, 1722483656UL, 2846863035UL, 2113076217UL, 713587277UL, 2098603934UL, 244197359UL, 2067196130UL, 800324742UL, 652529813UL, +1307843279UL, 3205610699UL, 1606722715UL, 2749781905UL, 3500078806UL, 320007706UL, 4092615096UL, 608085660UL, 1869480444UL, 459160631UL, 3657609957UL, 1944540526UL, 2184854884UL, 3497113751UL, 2817682182UL, 3367276652UL, 2069300794UL, 1466691974UL, 3078806052UL, 3998756116UL, 2068892089UL, 1789981386UL, 4196184114UL, 4004623319UL, 3029515569UL, 3206332209UL, 3424306963UL, 1805804276UL, 899469644UL, 1149853995UL, 903917909UL, 1185042552UL, +447265042UL, 3579272434UL, 116409560UL, 2211704275UL, 1237721838UL, 3636618157UL, 3191931082UL, 2430339315UL, 3551966793UL, 1533877057UL, 1700891210UL, 3317627852UL, 828148584UL, 1733460943UL, 3866870689UL, 3970886915UL, 1624935507UL, 3236099078UL, 4209593953UL, 1951283095UL, 1579020365UL, 1165668813UL, 1423097998UL, 1294879824UL, 3406063424UL, 3313007028UL, 2090501113UL, 842064167UL, 729587893UL, 2949702260UL, 2099637920UL, 260436310UL, +1056109549UL, 657874983UL, 2734575906UL, 4088958435UL, 3265216971UL, 1081848592UL, 2593212854UL, 4028921684UL, 2868974814UL, 2299228627UL, 49944924UL, 955114665UL, 2844328062UL, 885136505UL, 4262681333UL, 977883895UL, 998890598UL, 2026602293UL, 87852872UL, 2197997810UL, 910583259UL, 3151223623UL, 3960726944UL, 1778982325UL, 3322631234UL, 2940402694UL, 1619768059UL, 1592832128UL, 1434542537UL, 2107314297UL, 1170789408UL, 3357335254UL, +3317662644UL, 1409884338UL, 73741139UL, 1093507243UL, 329113525UL, 4199840577UL, 442295615UL, 3348669654UL, 435948047UL, 1154137005UL, 3151357655UL, 2101029905UL, 2430218233UL, 2474305449UL, 2316834456UL, 1736616135UL, 1575712778UL, 370866908UL, 4256943043UL, 2805503887UL, 1099763491UL, 2473785999UL, 3215573143UL, 472701386UL, 3070116154UL, 3969279119UL, 3331310102UL, 3932945670UL, 1502564397UL, 1294139579UL, 3073834823UL, 3115143551UL, +3602082994UL, 3707103500UL, 2570195094UL, 1268510174UL, 3561337287UL, 112422529UL, 1483304061UL, 3712148969UL, 3729628891UL, 2741131557UL, 4035019342UL, 2395091348UL, 208448216UL, 607199897UL, 4049058939UL, 3463267226UL, 3821711834UL, 1697628853UL, 691151709UL, 3014869414UL, 11610545UL, 3895793639UL, 3019679196UL, 1246664817UL, 753245113UL, 2236232962UL, 4172861179UL, 4030183420UL, 2367787106UL, 2209331085UL, 4170801007UL, 3609895913UL, +}, +{ +930278208UL, 223382535UL, 720499309UL, 2613473585UL, 4173439516UL, 2132019243UL, 468054579UL, 1141433627UL, 1328639101UL, 3222455434UL, 4023859457UL, 892124224UL, 2940688706UL, 2894552260UL, 1595432126UL, 2558709596UL, 2057191226UL, 1116728192UL, 3767370344UL, 1457278707UL, 3171850455UL, 3733161247UL, 149922078UL, 3860652874UL, 743952057UL, 1024625539UL, 3982786483UL, 2077838781UL, 3713742913UL, 2790452624UL, 3014482913UL, 2928857967UL, +476371337UL, 611803300UL, 3000092437UL, 57069608UL, 1554852195UL, 1406780525UL, 2288998898UL, 460131340UL, 3945168588UL, 18495216UL, 547882902UL, 1624966119UL, 2229423551UL, 1492565146UL, 706052879UL, 2733955743UL, 1450476708UL, 2565285196UL, 2491601298UL, 850297175UL, 331472128UL, 3275065709UL, 3154247398UL, 1364512871UL, 1193063601UL, 579449294UL, 4097747196UL, 3572372000UL, 2712499116UL, 1172861307UL, 3964137156UL, 1300564854UL, +1057993198UL, 2785733262UL, 3548277076UL, 2572944411UL, 3299232577UL, 2031854568UL, 2468534978UL, 602097973UL, 2068619195UL, 2639336890UL, 1694467033UL, 1581263823UL, 809076686UL, 2892861850UL, 4042078087UL, 3178152001UL, 706023882UL, 3236709493UL, 3603158102UL, 2575690800UL, 2831218686UL, 2492604085UL, 207296828UL, 1561595438UL, 2961967115UL, 3304283504UL, 835276604UL, 3005485731UL, 58946395UL, 3979071161UL, 1560535337UL, 2679058432UL, +1061627241UL, 1142692919UL, 1476802977UL, 1306619165UL, 1297953898UL, 4282928317UL, 3630719944UL, 2305895643UL, 2656730970UL, 916308118UL, 4160016206UL, 3541795573UL, 4222235077UL, 1289754532UL, 1963633184UL, 3595798857UL, 2273299603UL, 1687478595UL, 2249344966UL, 2267127964UL, 2201115693UL, 917609614UL, 3731921025UL, 1634893875UL, 3039440017UL, 1122674005UL, 2906728840UL, 921166852UL, 3525309936UL, 633872502UL, 821930665UL, 3861074060UL, +3309559821UL, 304858441UL, 1530517912UL, 1140212033UL, 3168869568UL, 3223449972UL, 1343718360UL, 2831361172UL, 1723616626UL, 3675867172UL, 2586694335UL, 2374941766UL, 387033391UL, 1528180036UL, 1561421035UL, 2735360720UL, 3952587140UL, 13543969UL, 3987997725UL, 4273177532UL, 2200558169UL, 461920718UL, 459441276UL, 4225054447UL, 2248193798UL, 1103878063UL, 3027778665UL, 1844457031UL, 1364117386UL, 1575430424UL, 2276483962UL, 2665252582UL, +1572038262UL, 930278208UL, 223382535UL, 720499309UL, 2613473585UL, 4025056228UL, 2132019243UL, 468054579UL, 1141433627UL, 1328639101UL, 304940359UL, 4023859457UL, 892124224UL, 2940688706UL, 2894552260UL, 2006939659UL, 2558709596UL, 2057191226UL, 1116728192UL, 3767370344UL, 3026555841UL, 3171850455UL, 3733161247UL, 149922078UL, 3860652874UL, 2068299929UL, 1024625539UL, 3982786483UL, 2077838781UL, 3713742913UL, 2512419366UL, 3014482913UL, +2928857967UL, 476371337UL, 611803300UL, 259065762UL, 57069608UL, 1554852195UL, 1406780525UL, 2288998898UL, 2261401631UL, 3945168588UL, 18495216UL, 547882902UL, 1624966119UL, 3049748661UL, 1492565146UL, 706052879UL, 2733955743UL, 1450476708UL, 910808481UL, 2491601298UL, 850297175UL, 331472128UL, 3275065709UL, 3877736250UL, 1364512871UL, 1193063601UL, 579449294UL, 4097747196UL, 3029512053UL, 2712499116UL, 1172861307UL, 3964137156UL, +1300564854UL, 2398462790UL, 2785733262UL, 3548277076UL, 2572944411UL, 3299232577UL, 3497485227UL, 2468534978UL, 602097973UL, 2068619195UL, 2639336890UL, 4271191874UL, 1581263823UL, 809076686UL, 2892861850UL, 4042078087UL, 3046259144UL, 706023882UL, 3236709493UL, 3603158102UL, 2575690800UL, 591682100UL, 2492604085UL, 207296828UL, 1561595438UL, 2961967115UL, 3885379584UL, 835276604UL, 3005485731UL, 58946395UL, 3979071161UL, 2784795951UL, +2679058432UL, 1061627241UL, 1142692919UL, 1476802977UL, 2864266022UL, 1297953898UL, 4282928317UL, 3630719944UL, 2305895643UL, 3374260620UL, 916308118UL, 4160016206UL, 3541795573UL, 4222235077UL, 3025355241UL, 1963633184UL, 3595798857UL, 2273299603UL, 1687478595UL, 4115795122UL, 2267127964UL, 2201115693UL, 917609614UL, 3731921025UL, 2905712346UL, 3039440017UL, 1122674005UL, 2906728840UL, 921166852UL, 2881663141UL, 633872502UL, 821930665UL, +3861074060UL, 3309559821UL, 2816533968UL, 1530517912UL, 1140212033UL, 3168869568UL, 3223449972UL, 1894667948UL, 2831361172UL, 1723616626UL, 3675867172UL, 2586694335UL, 3974041178UL, 387033391UL, 1528180036UL, 1561421035UL, 2735360720UL, 2014321457UL, 13543969UL, 3987997725UL, 4273177532UL, 2200558169UL, 2259553303UL, 459441276UL, 4225054447UL, 2248193798UL, 1103878063UL, 3889361594UL, 1844457031UL, 1364117386UL, 1575430424UL, 2276483962UL, +3302182736UL, 1572038262UL, 930278208UL, 223382535UL, 720499309UL, 4173186621UL, 4025056228UL, 2132019243UL, 468054579UL, 1141433627UL, 2396654717UL, 304940359UL, 4023859457UL, 892124224UL, 2940688706UL, 2903529759UL, 2006939659UL, 2558709596UL, 2057191226UL, 1116728192UL, 715931354UL, 3026555841UL, 3171850455UL, 3733161247UL, 149922078UL, 3342675578UL, 2068299929UL, 1024625539UL, 3982786483UL, 2077838781UL, 1157097180UL, 2512419366UL, +3014482913UL, 2928857967UL, 476371337UL, 2192872017UL, 259065762UL, 57069608UL, 1554852195UL, 1406780525UL, 4165039782UL, 2261401631UL, 3945168588UL, 18495216UL, 547882902UL, 2453072030UL, 3049748661UL, 1492565146UL, 706052879UL, 2733955743UL, 2233423433UL, 910808481UL, 2491601298UL, 850297175UL, 331472128UL, 1154483111UL, 3877736250UL, 1364512871UL, 1193063601UL, 579449294UL, 690173400UL, 3029512053UL, 2712499116UL, 1172861307UL, +3964137156UL, 2683130322UL, 2398462790UL, 2785733262UL, 3548277076UL, 2572944411UL, 4075824857UL, 3497485227UL, 2468534978UL, 602097973UL, 2068619195UL, 2711665545UL, 4271191874UL, 1581263823UL, 809076686UL, 2892861850UL, 3558962856UL, 3046259144UL, 706023882UL, 3236709493UL, 3603158102UL, 274706518UL, 591682100UL, 2492604085UL, 207296828UL, 1561595438UL, 1532885415UL, 3885379584UL, 835276604UL, 3005485731UL, 58946395UL, 4143205928UL, +2784795951UL, 2679058432UL, 1061627241UL, 1142692919UL, 2539503297UL, 2864266022UL, 1297953898UL, 4282928317UL, 3630719944UL, 3333189589UL, 3374260620UL, 916308118UL, 4160016206UL, 3541795573UL, 1771535488UL, 3025355241UL, 1963633184UL, 3595798857UL, 2273299603UL, 1735171204UL, 4115795122UL, 2267127964UL, 2201115693UL, 917609614UL, 4220503034UL, 2905712346UL, 3039440017UL, 1122674005UL, 2906728840UL, 868453017UL, 2881663141UL, 633872502UL, +821930665UL, 3861074060UL, 1928586970UL, 2816533968UL, 1530517912UL, 1140212033UL, 3168869568UL, 1082127627UL, 1894667948UL, 2831361172UL, 1723616626UL, 3675867172UL, 496773835UL, 3974041178UL, 387033391UL, 1528180036UL, 1561421035UL, 2763161987UL, 2014321457UL, 13543969UL, 3987997725UL, 4273177532UL, 2110570579UL, 2259553303UL, 459441276UL, 4225054447UL, 2248193798UL, 53021618UL, 3889361594UL, 1844457031UL, 1364117386UL, 1575430424UL, +1105247032UL, 3302182736UL, 1572038262UL, 930278208UL, 223382535UL, 2159964170UL, 4173186621UL, 4025056228UL, 2132019243UL, 468054579UL, 1397544344UL, 2396654717UL, 304940359UL, 4023859457UL, 892124224UL, 2800429255UL, 2903529759UL, 2006939659UL, 2558709596UL, 2057191226UL, 296054924UL, 715931354UL, 3026555841UL, 3171850455UL, 3733161247UL, 863280930UL, 3342675578UL, 2068299929UL, 1024625539UL, 3982786483UL, 949122664UL, 1157097180UL, +2512419366UL, 3014482913UL, 2928857967UL, 2585465463UL, 2192872017UL, 259065762UL, 57069608UL, 1554852195UL, 3650462338UL, 4165039782UL, 2261401631UL, 3945168588UL, 18495216UL, 524715648UL, 2453072030UL, 3049748661UL, 1492565146UL, 706052879UL, 123143857UL, 2233423433UL, 910808481UL, 2491601298UL, 850297175UL, 3272095697UL, 1154483111UL, 3877736250UL, 1364512871UL, 1193063601UL, 2394240337UL, 690173400UL, 3029512053UL, 2712499116UL, +1172861307UL, 598335483UL, 2683130322UL, 2398462790UL, 2785733262UL, 3548277076UL, 678275336UL, 4075824857UL, 3497485227UL, 2468534978UL, 602097973UL, 1861912463UL, 2711665545UL, 4271191874UL, 1581263823UL, 809076686UL, 3324887617UL, 3558962856UL, 3046259144UL, 706023882UL, 3236709493UL, 1776103512UL, 274706518UL, 591682100UL, 2492604085UL, 207296828UL, 1739697610UL, 1532885415UL, 3885379584UL, 835276604UL, 3005485731UL, 2931144546UL, +4143205928UL, 2784795951UL, 2679058432UL, 1061627241UL, 1487949699UL, 2539503297UL, 2864266022UL, 1297953898UL, 4282928317UL, 4101955339UL, 3333189589UL, 3374260620UL, 916308118UL, 4160016206UL, 376029432UL, 1771535488UL, 3025355241UL, 1963633184UL, 3595798857UL, 2826786027UL, 1735171204UL, 4115795122UL, 2267127964UL, 2201115693UL, 2572535497UL, 4220503034UL, 2905712346UL, 3039440017UL, 1122674005UL, 2482828099UL, 868453017UL, 2881663141UL, +633872502UL, 821930665UL, 2579406681UL, 1928586970UL, 2816533968UL, 1530517912UL, 1140212033UL, 2547368381UL, 1082127627UL, 1894667948UL, 2831361172UL, 1723616626UL, 1903980411UL, 496773835UL, 3974041178UL, 387033391UL, 1528180036UL, 2681142643UL, 2763161987UL, 2014321457UL, 13543969UL, 3987997725UL, 2583502227UL, 2110570579UL, 2259553303UL, 459441276UL, 4225054447UL, 177868402UL, 53021618UL, 3889361594UL, 1844457031UL, 1364117386UL, +2369166739UL, 240269378UL, 689700242UL, 297384154UL, 1052178701UL, 2154172820UL, 614713903UL, 3000863907UL, 3916962502UL, 94341217UL, 2609111975UL, 1621831476UL, 4260159710UL, 694869580UL, 1708268072UL, 2751452128UL, 3843916827UL, 3400387883UL, 2394104046UL, 2348934617UL, 3263438569UL, 3818556032UL, 1695621950UL, 410888855UL, 347231182UL, 612084657UL, 1858306225UL, 3024940417UL, 2482215564UL, 2728249904UL, 2825132299UL, 329106327UL, +3333110741UL, 2742025573UL, 2947035922UL, 3758718780UL, 2191527983UL, 864130510UL, 2586839659UL, 662702978UL, 817620197UL, 2888275812UL, 3372817000UL, 2982240654UL, 2211025418UL, 2043458594UL, 498221898UL, 1559803796UL, 209509183UL, 3004637012UL, 2204871924UL, 2445352606UL, 4026842262UL, 3211433366UL, 3533095828UL, 4172447076UL, 865408944UL, 2797639687UL, 3201749441UL, 1286664278UL, 1158271235UL, 2641361834UL, 4261559289UL, 3643706696UL, +2017210420UL, 2067296744UL, 3548126272UL, 3846378526UL, 3885857009UL, 3013926193UL, 368948443UL, 3839554625UL, 2032663713UL, 4185819024UL, 4279332940UL, 137321733UL, 3515190288UL, 4281845500UL, 2738024944UL, 3350239126UL, 1456676856UL, 1246688651UL, 2478709188UL, 12570320UL, 989306366UL, 2347610707UL, 2849134988UL, 2351681449UL, 4063448910UL, 1193872626UL, 3645565330UL, 1863134777UL, 1345198234UL, 2504863006UL, 3815974850UL, 3075495578UL, +2400383333UL, 2727346254UL, 985812393UL, 1432182882UL, 3668977714UL, 231840487UL, 647229148UL, 274547428UL, 2856186783UL, 1273158535UL, 900081267UL, 1566366419UL, 562584841UL, 2247144789UL, 3522587233UL, 1686032132UL, 586483076UL, 1207387616UL, 3040778905UL, 2532774045UL, 3681992451UL, 1034866888UL, 4029685195UL, 3307070989UL, 2412903766UL, 3156200186UL, 2625083166UL, 4148004113UL, 1756566287UL, 2319065855UL, 2924909429UL, 3050022486UL, +2464491722UL, 1137782196UL, 2749457821UL, 790410752UL, 3511746957UL, 2277733721UL, 2871407058UL, 3858561909UL, 2176119631UL, 952943025UL, 2987154266UL, 120799539UL, 2862346597UL, 3689389598UL, 3329995989UL, 715438735UL, 1035277216UL, 3079684809UL, 677298106UL, 2364292665UL, 4110165256UL, 4096954153UL, 356732100UL, 2361282903UL, 4050817284UL, 2010946835UL, 1824397679UL, 4087204231UL, 4178036725UL, 4197370951UL, 503070461UL, 1879838906UL, +}, +{ +4117851084UL, 2941903397UL, 1156439261UL, 1922510465UL, 2925632294UL, 2272105738UL, 641404242UL, 3414739418UL, 2602896978UL, 672876430UL, 1998875331UL, 1325970749UL, 1633717408UL, 3567722815UL, 2088144733UL, 95705225UL, 580635702UL, 3543633503UL, 1469889369UL, 239816045UL, 2254984383UL, 1632695776UL, 2033839470UL, 4117902893UL, 509938588UL, 1291002316UL, 3600816069UL, 2962644092UL, 4269959520UL, 3161890066UL, 1908855486UL, 1177948589UL, +473118979UL, 3205649854UL, 2027137481UL, 227656706UL, 1485922673UL, 3380103860UL, 2080286336UL, 2588604114UL, 1727893393UL, 3602757903UL, 3126385963UL, 2101893784UL, 3058515017UL, 833779022UL, 719369683UL, 3768029740UL, 1123855192UL, 2580550821UL, 3694463505UL, 1137588651UL, 1724433728UL, 3847324234UL, 2368689516UL, 1226895255UL, 1126753016UL, 2557024841UL, 3187601018UL, 3790080711UL, 2423256074UL, 2463913828UL, 1753321774UL, 1621519784UL, +3456900204UL, 3550875802UL, 3783120790UL, 2740104077UL, 2010858632UL, 1569277627UL, 1492853575UL, 2182681191UL, 3866043645UL, 2566155095UL, 770150438UL, 2482504045UL, 3916834400UL, 222960658UL, 342285296UL, 3354506276UL, 1371039946UL, 3717269950UL, 3632913684UL, 2557531969UL, 3934379214UL, 1732115898UL, 1598596195UL, 1180866173UL, 3526785234UL, 2740387380UL, 3540138766UL, 338607286UL, 3262593182UL, 2413619772UL, 2248013920UL, 3557851982UL, +2470276596UL, 1549877186UL, 447909575UL, 4010548064UL, 282941857UL, 3418249797UL, 3300699992UL, 1957423733UL, 2615274674UL, 370155667UL, 1109991145UL, 933065597UL, 3947818943UL, 3221736239UL, 402503017UL, 4016454981UL, 3640556350UL, 243947268UL, 1175418215UL, 2752078014UL, 371928981UL, 3354635500UL, 3471578165UL, 2735623932UL, 445067764UL, 2732367763UL, 3225606514UL, 1214718589UL, 2197756425UL, 2134958042UL, 680726116UL, 3098695319UL, +2103463364UL, 4058022972UL, 2428195541UL, 2433504485UL, 4042288512UL, 2383438250UL, 3821638336UL, 2375226348UL, 806148488UL, 197247918UL, 768984129UL, 412771011UL, 4020619856UL, 3030619444UL, 3242554868UL, 282156707UL, 3718880754UL, 2938924979UL, 4189583150UL, 1604586306UL, 1245779881UL, 4006389745UL, 2437150739UL, 1749517801UL, 2903749036UL, 1247308303UL, 2580023735UL, 2457849017UL, 342934950UL, 216040419UL, 3176519601UL, 4151509434UL, +2404801649UL, 4117851084UL, 2941903397UL, 1156439261UL, 1922510465UL, 14864453UL, 2272105738UL, 641404242UL, 3414739418UL, 2602896978UL, 2179417586UL, 1998875331UL, 1325970749UL, 1633717408UL, 3567722815UL, 428880410UL, 95705225UL, 580635702UL, 3543633503UL, 1469889369UL, 3132946201UL, 2254984383UL, 1632695776UL, 2033839470UL, 4117902893UL, 3029657560UL, 1291002316UL, 3600816069UL, 2962644092UL, 4269959520UL, 397442545UL, 1908855486UL, +1177948589UL, 473118979UL, 3205649854UL, 990384909UL, 227656706UL, 1485922673UL, 3380103860UL, 2080286336UL, 3295033100UL, 1727893393UL, 3602757903UL, 3126385963UL, 2101893784UL, 1132286601UL, 833779022UL, 719369683UL, 3768029740UL, 1123855192UL, 283414013UL, 3694463505UL, 1137588651UL, 1724433728UL, 3847324234UL, 1735742473UL, 1226895255UL, 1126753016UL, 2557024841UL, 3187601018UL, 2090644528UL, 2423256074UL, 2463913828UL, 1753321774UL, +1621519784UL, 1037552449UL, 3550875802UL, 3783120790UL, 2740104077UL, 2010858632UL, 3730461081UL, 1492853575UL, 2182681191UL, 3866043645UL, 2566155095UL, 2782805925UL, 2482504045UL, 3916834400UL, 222960658UL, 342285296UL, 2406892654UL, 1371039946UL, 3717269950UL, 3632913684UL, 2557531969UL, 4071148456UL, 1732115898UL, 1598596195UL, 1180866173UL, 3526785234UL, 1110366522UL, 3540138766UL, 338607286UL, 3262593182UL, 2413619772UL, 995824548UL, +3557851982UL, 2470276596UL, 1549877186UL, 447909575UL, 2962194596UL, 282941857UL, 3418249797UL, 3300699992UL, 1957423733UL, 1859612288UL, 370155667UL, 1109991145UL, 933065597UL, 3947818943UL, 3005912276UL, 402503017UL, 4016454981UL, 3640556350UL, 243947268UL, 2884057401UL, 2752078014UL, 371928981UL, 3354635500UL, 3471578165UL, 908942821UL, 445067764UL, 2732367763UL, 3225606514UL, 1214718589UL, 4104754911UL, 2134958042UL, 680726116UL, +3098695319UL, 2103463364UL, 2946640978UL, 2428195541UL, 2433504485UL, 4042288512UL, 2383438250UL, 1252490765UL, 2375226348UL, 806148488UL, 197247918UL, 768984129UL, 2578888115UL, 4020619856UL, 3030619444UL, 3242554868UL, 282156707UL, 3433259466UL, 2938924979UL, 4189583150UL, 1604586306UL, 1245779881UL, 616758943UL, 2437150739UL, 1749517801UL, 2903749036UL, 1247308303UL, 2722580830UL, 2457849017UL, 342934950UL, 216040419UL, 3176519601UL, +545097903UL, 2404801649UL, 4117851084UL, 2941903397UL, 1156439261UL, 1253296096UL, 14864453UL, 2272105738UL, 641404242UL, 3414739418UL, 2989955985UL, 2179417586UL, 1998875331UL, 1325970749UL, 1633717408UL, 1896726594UL, 428880410UL, 95705225UL, 580635702UL, 3543633503UL, 3294258049UL, 3132946201UL, 2254984383UL, 1632695776UL, 2033839470UL, 829668922UL, 3029657560UL, 1291002316UL, 3600816069UL, 2962644092UL, 715635401UL, 397442545UL, +1908855486UL, 1177948589UL, 473118979UL, 443010703UL, 990384909UL, 227656706UL, 1485922673UL, 3380103860UL, 727464961UL, 3295033100UL, 1727893393UL, 3602757903UL, 3126385963UL, 3020775130UL, 1132286601UL, 833779022UL, 719369683UL, 3768029740UL, 2215591597UL, 283414013UL, 3694463505UL, 1137588651UL, 1724433728UL, 2124955521UL, 1735742473UL, 1226895255UL, 1126753016UL, 2557024841UL, 1719121879UL, 2090644528UL, 2423256074UL, 2463913828UL, +1753321774UL, 1283364713UL, 1037552449UL, 3550875802UL, 3783120790UL, 2740104077UL, 3326764615UL, 3730461081UL, 1492853575UL, 2182681191UL, 3866043645UL, 1353658829UL, 2782805925UL, 2482504045UL, 3916834400UL, 222960658UL, 2681616579UL, 2406892654UL, 1371039946UL, 3717269950UL, 3632913684UL, 2373372484UL, 4071148456UL, 1732115898UL, 1598596195UL, 1180866173UL, 3787873944UL, 1110366522UL, 3540138766UL, 338607286UL, 3262593182UL, 1714619779UL, +995824548UL, 3557851982UL, 2470276596UL, 1549877186UL, 2342751414UL, 2962194596UL, 282941857UL, 3418249797UL, 3300699992UL, 2080590834UL, 1859612288UL, 370155667UL, 1109991145UL, 933065597UL, 4126279826UL, 3005912276UL, 402503017UL, 4016454981UL, 3640556350UL, 618040940UL, 2884057401UL, 2752078014UL, 371928981UL, 3354635500UL, 2952377979UL, 908942821UL, 445067764UL, 2732367763UL, 3225606514UL, 935181950UL, 4104754911UL, 2134958042UL, +680726116UL, 3098695319UL, 652514936UL, 2946640978UL, 2428195541UL, 2433504485UL, 4042288512UL, 1834165243UL, 1252490765UL, 2375226348UL, 806148488UL, 197247918UL, 1459523569UL, 2578888115UL, 4020619856UL, 3030619444UL, 3242554868UL, 2222750155UL, 3433259466UL, 2938924979UL, 4189583150UL, 1604586306UL, 400149547UL, 616758943UL, 2437150739UL, 1749517801UL, 2903749036UL, 571531698UL, 2722580830UL, 2457849017UL, 342934950UL, 216040419UL, +3302138698UL, 545097903UL, 2404801649UL, 4117851084UL, 2941903397UL, 2926001994UL, 1253296096UL, 14864453UL, 2272105738UL, 641404242UL, 2446601571UL, 2989955985UL, 2179417586UL, 1998875331UL, 1325970749UL, 2470418771UL, 1896726594UL, 428880410UL, 95705225UL, 580635702UL, 95529058UL, 3294258049UL, 3132946201UL, 2254984383UL, 1632695776UL, 3381575123UL, 829668922UL, 3029657560UL, 1291002316UL, 3600816069UL, 332821128UL, 715635401UL, +397442545UL, 1908855486UL, 1177948589UL, 3324147260UL, 443010703UL, 990384909UL, 227656706UL, 1485922673UL, 3468390490UL, 727464961UL, 3295033100UL, 1727893393UL, 3602757903UL, 3849734062UL, 3020775130UL, 1132286601UL, 833779022UL, 719369683UL, 3336941985UL, 2215591597UL, 283414013UL, 3694463505UL, 1137588651UL, 1245145305UL, 2124955521UL, 1735742473UL, 1226895255UL, 1126753016UL, 1536376839UL, 1719121879UL, 2090644528UL, 2423256074UL, +2463913828UL, 4035794571UL, 1283364713UL, 1037552449UL, 3550875802UL, 3783120790UL, 4233012781UL, 3326764615UL, 3730461081UL, 1492853575UL, 2182681191UL, 654850701UL, 1353658829UL, 2782805925UL, 2482504045UL, 3916834400UL, 1556782509UL, 2681616579UL, 2406892654UL, 1371039946UL, 3717269950UL, 1227526114UL, 2373372484UL, 4071148456UL, 1732115898UL, 1598596195UL, 1777009717UL, 3787873944UL, 1110366522UL, 3540138766UL, 338607286UL, 1161080599UL, +1714619779UL, 995824548UL, 3557851982UL, 2470276596UL, 3162659171UL, 2342751414UL, 2962194596UL, 282941857UL, 3418249797UL, 1032034511UL, 2080590834UL, 1859612288UL, 370155667UL, 1109991145UL, 2568097099UL, 4126279826UL, 3005912276UL, 402503017UL, 4016454981UL, 3196575353UL, 618040940UL, 2884057401UL, 2752078014UL, 371928981UL, 4223799564UL, 2952377979UL, 908942821UL, 445067764UL, 2732367763UL, 174723563UL, 935181950UL, 4104754911UL, +2134958042UL, 680726116UL, 649687363UL, 652514936UL, 2946640978UL, 2428195541UL, 2433504485UL, 3735735592UL, 1834165243UL, 1252490765UL, 2375226348UL, 806148488UL, 3720638976UL, 1459523569UL, 2578888115UL, 4020619856UL, 3030619444UL, 283333114UL, 2222750155UL, 3433259466UL, 2938924979UL, 4189583150UL, 870522428UL, 400149547UL, 616758943UL, 2437150739UL, 1749517801UL, 999295363UL, 571531698UL, 2722580830UL, 2457849017UL, 342934950UL, +3151292467UL, 2839665217UL, 2452261456UL, 208520727UL, 2269948412UL, 344787478UL, 3987474076UL, 3770524881UL, 2718719281UL, 2537804795UL, 850790212UL, 639946566UL, 2073602691UL, 2316769983UL, 3577216077UL, 3538374748UL, 61447995UL, 3718817085UL, 1476398788UL, 3239144530UL, 3595014456UL, 454482110UL, 286330934UL, 2119173159UL, 1693518756UL, 1464218560UL, 1201825197UL, 1112746405UL, 2988579776UL, 1626663767UL, 2236015969UL, 4018896468UL, +1885926862UL, 671386673UL, 1583086162UL, 1114723892UL, 2936863300UL, 2620955107UL, 2628074015UL, 426673611UL, 3370181092UL, 3462245129UL, 3590185736UL, 2630441788UL, 171626554UL, 3647663038UL, 880996914UL, 1155913149UL, 2653278555UL, 508978149UL, 2031872445UL, 3041145171UL, 1339819022UL, 127509725UL, 1336955078UL, 727702092UL, 693349672UL, 999665905UL, 2287631318UL, 961427722UL, 3355851447UL, 821851136UL, 2370998072UL, 4027450519UL, +2054803464UL, 144596514UL, 3295312213UL, 2579322479UL, 2982266864UL, 4275468400UL, 179988815UL, 2123828208UL, 1486957870UL, 2484928010UL, 288096701UL, 1211834301UL, 1819157080UL, 3569000238UL, 4164201803UL, 3042117433UL, 2741571248UL, 3688451311UL, 29376415UL, 437788821UL, 994675658UL, 1014591996UL, 296335443UL, 363551454UL, 2628890394UL, 332401256UL, 2288239762UL, 3766239385UL, 317162173UL, 3721125104UL, 2296650899UL, 56428392UL, +3900411067UL, 2303724992UL, 3735005983UL, 1377320198UL, 612032498UL, 1171213235UL, 2494454628UL, 1894368149UL, 4124860986UL, 1694123597UL, 2306091209UL, 2075278956UL, 3898366152UL, 937522278UL, 32800830UL, 324902076UL, 2365753207UL, 2251160429UL, 1692543836UL, 2920424644UL, 119047416UL, 1821685115UL, 1486296407UL, 3055580738UL, 3711421730UL, 1522703457UL, 1422399573UL, 2515073038UL, 3788816887UL, 3490575947UL, 2395299159UL, 4248373284UL, +3383561277UL, 3128107243UL, 2344292809UL, 1806504793UL, 3087395022UL, 4113720664UL, 2749262038UL, 395148869UL, 1331347439UL, 2682558741UL, 1253966763UL, 4204248490UL, 2083995727UL, 2717069903UL, 4144872894UL, 1857751053UL, 2166276701UL, 1419950839UL, 1145170701UL, 3225260742UL, 211743500UL, 2746391743UL, 3333387219UL, 4115426799UL, 3801457092UL, 3327614811UL, 1460971336UL, 2256342146UL, 3186427137UL, 2684216499UL, 1035644397UL, 2948948308UL, +}, +{ +216975964UL, 4145824263UL, 2147471723UL, 4154469597UL, 161744273UL, 1299764439UL, 3468614543UL, 4190517158UL, 4124232403UL, 754999274UL, 208153182UL, 1442063188UL, 2940825403UL, 729331312UL, 2124186505UL, 1136411459UL, 1083787490UL, 442264548UL, 442338468UL, 464589685UL, 3509461223UL, 4241734851UL, 370778328UL, 4003105058UL, 3163637982UL, 3747133182UL, 1433548371UL, 1876378240UL, 536564977UL, 1171222160UL, 3268902719UL, 2725776746UL, +1547771137UL, 2818791461UL, 4129042013UL, 2677094853UL, 1594765197UL, 1556725424UL, 569252594UL, 2640731848UL, 2947042710UL, 2633188904UL, 1640957370UL, 1806863786UL, 2803403654UL, 2632220187UL, 2740076538UL, 383549855UL, 3211856699UL, 3933793958UL, 1988232112UL, 404006876UL, 1369488120UL, 1963339964UL, 609604643UL, 2488118016UL, 3936354252UL, 1980115609UL, 189069630UL, 860670414UL, 85775513UL, 2447581620UL, 886385122UL, 3047212472UL, +2470718978UL, 4044569663UL, 430717074UL, 1598133481UL, 1905362808UL, 2981511487UL, 1842297666UL, 2992320857UL, 1682119455UL, 1753461544UL, 700013801UL, 3025873251UL, 3413358770UL, 1673092091UL, 113651375UL, 2618875026UL, 1479752146UL, 81598739UL, 1530418117UL, 962911586UL, 778994423UL, 3944331100UL, 4116504755UL, 480712357UL, 1078821437UL, 1091665476UL, 3696871260UL, 2074607518UL, 3226459752UL, 3767432525UL, 768289441UL, 3142741843UL, +2969151790UL, 1814889320UL, 2122849610UL, 451935137UL, 2784993892UL, 1836517944UL, 1565951586UL, 1663606442UL, 1578543925UL, 33407321UL, 1445768530UL, 2156093253UL, 3164165477UL, 3093293932UL, 298945371UL, 2558835427UL, 1386275152UL, 2649603495UL, 893605644UL, 1147537351UL, 1889670166UL, 3203610476UL, 2598985714UL, 966335150UL, 3384227644UL, 2584671737UL, 552770393UL, 2430097209UL, 3085150053UL, 3633667948UL, 1319147485UL, 1999467843UL, +3676133150UL, 2314789604UL, 1443760911UL, 1552954684UL, 2411684219UL, 3708965016UL, 2607719926UL, 484007519UL, 491681421UL, 2498192461UL, 6342020UL, 4226570819UL, 2329860147UL, 1097040622UL, 1270325434UL, 2572535504UL, 918592905UL, 193599782UL, 4223250613UL, 1640082589UL, 1817957216UL, 2937344769UL, 3768793871UL, 2982566292UL, 1607453458UL, 4096207317UL, 696907828UL, 2431936270UL, 627206620UL, 3267100287UL, 1161821973UL, 2322099303UL, +1700245615UL, 216975964UL, 4145824263UL, 2147471723UL, 4154469597UL, 2836499116UL, 1299764439UL, 3468614543UL, 4190517158UL, 4124232403UL, 2176257299UL, 208153182UL, 1442063188UL, 2940825403UL, 729331312UL, 2954254860UL, 1136411459UL, 1083787490UL, 442264548UL, 442338468UL, 3098695824UL, 3509461223UL, 4241734851UL, 370778328UL, 4003105058UL, 2963948505UL, 3747133182UL, 1433548371UL, 1876378240UL, 536564977UL, 1565224991UL, 3268902719UL, +2725776746UL, 1547771137UL, 2818791461UL, 2118790546UL, 2677094853UL, 1594765197UL, 1556725424UL, 569252594UL, 610771792UL, 2947042710UL, 2633188904UL, 1640957370UL, 1806863786UL, 2121022793UL, 2632220187UL, 2740076538UL, 383549855UL, 3211856699UL, 14274926UL, 1988232112UL, 404006876UL, 1369488120UL, 1963339964UL, 1661081792UL, 2488118016UL, 3936354252UL, 1980115609UL, 189069630UL, 595192504UL, 85775513UL, 2447581620UL, 886385122UL, +3047212472UL, 1596069326UL, 4044569663UL, 430717074UL, 1598133481UL, 1905362808UL, 2670961612UL, 1842297666UL, 2992320857UL, 1682119455UL, 1753461544UL, 1121764918UL, 3025873251UL, 3413358770UL, 1673092091UL, 113651375UL, 1721474883UL, 1479752146UL, 81598739UL, 1530418117UL, 962911586UL, 3478535046UL, 3944331100UL, 4116504755UL, 480712357UL, 1078821437UL, 1456786415UL, 3696871260UL, 2074607518UL, 3226459752UL, 3767432525UL, 2947648865UL, +3142741843UL, 2969151790UL, 1814889320UL, 2122849610UL, 3367879697UL, 2784993892UL, 1836517944UL, 1565951586UL, 1663606442UL, 2621366329UL, 33407321UL, 1445768530UL, 2156093253UL, 3164165477UL, 619266142UL, 298945371UL, 2558835427UL, 1386275152UL, 2649603495UL, 97967685UL, 1147537351UL, 1889670166UL, 3203610476UL, 2598985714UL, 504495866UL, 3384227644UL, 2584671737UL, 552770393UL, 2430097209UL, 2168477293UL, 3633667948UL, 1319147485UL, +1999467843UL, 3676133150UL, 2755203144UL, 1443760911UL, 1552954684UL, 2411684219UL, 3708965016UL, 2301846628UL, 484007519UL, 491681421UL, 2498192461UL, 6342020UL, 318325395UL, 2329860147UL, 1097040622UL, 1270325434UL, 2572535504UL, 3458698828UL, 193599782UL, 4223250613UL, 1640082589UL, 1817957216UL, 1861636211UL, 3768793871UL, 2982566292UL, 1607453458UL, 4096207317UL, 1871072589UL, 2431936270UL, 627206620UL, 3267100287UL, 1161821973UL, +3904037207UL, 1700245615UL, 216975964UL, 4145824263UL, 2147471723UL, 2789343849UL, 2836499116UL, 1299764439UL, 3468614543UL, 4190517158UL, 639361502UL, 2176257299UL, 208153182UL, 1442063188UL, 2940825403UL, 2962998954UL, 2954254860UL, 1136411459UL, 1083787490UL, 442264548UL, 1812626669UL, 3098695824UL, 3509461223UL, 4241734851UL, 370778328UL, 1673951193UL, 2963948505UL, 3747133182UL, 1433548371UL, 1876378240UL, 3651623536UL, 1565224991UL, +3268902719UL, 2725776746UL, 1547771137UL, 1938402968UL, 2118790546UL, 2677094853UL, 1594765197UL, 1556725424UL, 3267956202UL, 610771792UL, 2947042710UL, 2633188904UL, 1640957370UL, 1448040688UL, 2121022793UL, 2632220187UL, 2740076538UL, 383549855UL, 300148175UL, 14274926UL, 1988232112UL, 404006876UL, 1369488120UL, 3313508750UL, 1661081792UL, 2488118016UL, 3936354252UL, 1980115609UL, 2631341293UL, 595192504UL, 85775513UL, 2447581620UL, +886385122UL, 2465820467UL, 1596069326UL, 4044569663UL, 430717074UL, 1598133481UL, 4191772516UL, 2670961612UL, 1842297666UL, 2992320857UL, 1682119455UL, 997741285UL, 1121764918UL, 3025873251UL, 3413358770UL, 1673092091UL, 1493832846UL, 1721474883UL, 1479752146UL, 81598739UL, 1530418117UL, 2762019274UL, 3478535046UL, 3944331100UL, 4116504755UL, 480712357UL, 448437372UL, 1456786415UL, 3696871260UL, 2074607518UL, 3226459752UL, 2507199309UL, +2947648865UL, 3142741843UL, 2969151790UL, 1814889320UL, 2268952501UL, 3367879697UL, 2784993892UL, 1836517944UL, 1565951586UL, 377207573UL, 2621366329UL, 33407321UL, 1445768530UL, 2156093253UL, 1325490318UL, 619266142UL, 298945371UL, 2558835427UL, 1386275152UL, 2662699426UL, 97967685UL, 1147537351UL, 1889670166UL, 3203610476UL, 1999783658UL, 504495866UL, 3384227644UL, 2584671737UL, 552770393UL, 1562106652UL, 2168477293UL, 3633667948UL, +1319147485UL, 1999467843UL, 2037219988UL, 2755203144UL, 1443760911UL, 1552954684UL, 2411684219UL, 1579607443UL, 2301846628UL, 484007519UL, 491681421UL, 2498192461UL, 745333677UL, 318325395UL, 2329860147UL, 1097040622UL, 1270325434UL, 208017379UL, 3458698828UL, 193599782UL, 4223250613UL, 1640082589UL, 4049245262UL, 1861636211UL, 3768793871UL, 2982566292UL, 1607453458UL, 2058912455UL, 1871072589UL, 2431936270UL, 627206620UL, 3267100287UL, +1186015034UL, 3904037207UL, 1700245615UL, 216975964UL, 4145824263UL, 2422827462UL, 2789343849UL, 2836499116UL, 1299764439UL, 3468614543UL, 2084839633UL, 639361502UL, 2176257299UL, 208153182UL, 1442063188UL, 4065931048UL, 2962998954UL, 2954254860UL, 1136411459UL, 1083787490UL, 465529524UL, 1812626669UL, 3098695824UL, 3509461223UL, 4241734851UL, 3818602366UL, 1673951193UL, 2963948505UL, 3747133182UL, 1433548371UL, 2475307467UL, 3651623536UL, +1565224991UL, 3268902719UL, 2725776746UL, 2374226870UL, 1938402968UL, 2118790546UL, 2677094853UL, 1594765197UL, 348828658UL, 3267956202UL, 610771792UL, 2947042710UL, 2633188904UL, 1713124265UL, 1448040688UL, 2121022793UL, 2632220187UL, 2740076538UL, 1400362266UL, 300148175UL, 14274926UL, 1988232112UL, 404006876UL, 3662575932UL, 3313508750UL, 1661081792UL, 2488118016UL, 3936354252UL, 3100635752UL, 2631341293UL, 595192504UL, 85775513UL, +2447581620UL, 2417839883UL, 2465820467UL, 1596069326UL, 4044569663UL, 430717074UL, 1093503127UL, 4191772516UL, 2670961612UL, 1842297666UL, 2992320857UL, 3292586028UL, 997741285UL, 1121764918UL, 3025873251UL, 3413358770UL, 222522839UL, 1493832846UL, 1721474883UL, 1479752146UL, 81598739UL, 3132900738UL, 2762019274UL, 3478535046UL, 3944331100UL, 4116504755UL, 3429405501UL, 448437372UL, 1456786415UL, 3696871260UL, 2074607518UL, 1492852861UL, +2507199309UL, 2947648865UL, 3142741843UL, 2969151790UL, 2186889362UL, 2268952501UL, 3367879697UL, 2784993892UL, 1836517944UL, 3169157745UL, 377207573UL, 2621366329UL, 33407321UL, 1445768530UL, 4266168148UL, 1325490318UL, 619266142UL, 298945371UL, 2558835427UL, 1447045944UL, 2662699426UL, 97967685UL, 1147537351UL, 1889670166UL, 3354555370UL, 1999783658UL, 504495866UL, 3384227644UL, 2584671737UL, 2489662408UL, 1562106652UL, 2168477293UL, +3633667948UL, 1319147485UL, 3353555249UL, 2037219988UL, 2755203144UL, 1443760911UL, 1552954684UL, 4137514176UL, 1579607443UL, 2301846628UL, 484007519UL, 491681421UL, 164627749UL, 745333677UL, 318325395UL, 2329860147UL, 1097040622UL, 3587444362UL, 208017379UL, 3458698828UL, 193599782UL, 4223250613UL, 1102471426UL, 4049245262UL, 1861636211UL, 3768793871UL, 2982566292UL, 1941698603UL, 2058912455UL, 1871072589UL, 2431936270UL, 627206620UL, +2511999766UL, 1406946444UL, 1571284360UL, 1416792763UL, 1774410400UL, 1655066897UL, 740531687UL, 2852637013UL, 1574342442UL, 3931672444UL, 2887289502UL, 3588598337UL, 1607795590UL, 1893126336UL, 4113959952UL, 250670029UL, 89330705UL, 2198706475UL, 133060312UL, 4033807246UL, 2161604768UL, 3871950931UL, 1820516188UL, 828316231UL, 3126087794UL, 3740050736UL, 543577819UL, 1589693651UL, 4210480257UL, 3844498352UL, 96010254UL, 2888517657UL, +2931088981UL, 2307454606UL, 2411141663UL, 4193964276UL, 918899600UL, 888509951UL, 3023902229UL, 1371276096UL, 2107726407UL, 3863079906UL, 3849297291UL, 1512401618UL, 3098628219UL, 487705749UL, 492891601UL, 345791371UL, 3230138831UL, 1022138839UL, 974682588UL, 3677932604UL, 2054641860UL, 3303576494UL, 1416653965UL, 1119635666UL, 1907978487UL, 4269977208UL, 2047880336UL, 205698774UL, 2401894999UL, 3253173123UL, 2603439113UL, 1295808319UL, +2965198050UL, 1718424301UL, 1605627562UL, 2860017421UL, 1619060227UL, 1130717786UL, 2992070906UL, 2964091191UL, 3192265220UL, 3860528275UL, 45139953UL, 3914023193UL, 1253834497UL, 3885013544UL, 3793695046UL, 3632364934UL, 4127361980UL, 3323804519UL, 4117285262UL, 4171102020UL, 1863837906UL, 2848174924UL, 1731389076UL, 2514130112UL, 3539384422UL, 2950752200UL, 1138137434UL, 4147328087UL, 3345958235UL, 2305097760UL, 974161669UL, 1739611700UL, +2522036172UL, 1196649816UL, 2395301283UL, 911135539UL, 1029496076UL, 1786766951UL, 1802412425UL, 3485017668UL, 2837835718UL, 1951207514UL, 1447650206UL, 2289702688UL, 2517625074UL, 2408021138UL, 2022522416UL, 719777136UL, 417238676UL, 1865171065UL, 801820378UL, 2836941189UL, 1148226009UL, 1713866138UL, 64608707UL, 1458585813UL, 3581572089UL, 2251042907UL, 1818903516UL, 3278072806UL, 2838874249UL, 2665607605UL, 3360214955UL, 2185961451UL, +410342713UL, 364484774UL, 2887998484UL, 2100888426UL, 1394314931UL, 1362560504UL, 3487221127UL, 3140021092UL, 3168968161UL, 1613267484UL, 290430673UL, 2588210538UL, 2493788232UL, 2641638765UL, 2971195072UL, 2749469779UL, 692014176UL, 3268150742UL, 387451740UL, 461249727UL, 3579417331UL, 3738405845UL, 385445455UL, 1464799053UL, 2786433795UL, 3370371952UL, 675344511UL, 4049011269UL, 2196568686UL, 4166285481UL, 2547135972UL, 119952106UL, +}, +{ +2307933966UL, 145940188UL, 4247815717UL, 2995341855UL, 3245382498UL, 1213200792UL, 232910392UL, 2718014238UL, 918321585UL, 3583102265UL, 3176078796UL, 937696513UL, 266558688UL, 1520650260UL, 3655025189UL, 1653323191UL, 538426778UL, 491545855UL, 4064663509UL, 2788350755UL, 3941259490UL, 3471552693UL, 1851151228UL, 3279627338UL, 845228710UL, 29883500UL, 1503432309UL, 593880175UL, 2488716480UL, 828058076UL, 3287933183UL, 3510981973UL, +3970051135UL, 3803049980UL, 898259836UL, 2890959433UL, 234437380UL, 201835406UL, 1523016285UL, 2419577439UL, 2943482079UL, 4219300984UL, 1490698759UL, 533411805UL, 1644926459UL, 4097374623UL, 265292490UL, 2694560848UL, 285667083UL, 1563945375UL, 3128365011UL, 95277844UL, 2938824634UL, 2717708621UL, 3374928056UL, 3672802273UL, 3445399260UL, 2422205637UL, 1106030557UL, 1269805720UL, 1781057614UL, 3491203689UL, 2454028630UL, 2158698380UL, +2578431870UL, 3540412661UL, 2206372988UL, 3138025266UL, 474100503UL, 3310048546UL, 126856999UL, 3144057206UL, 917199551UL, 3549528813UL, 343855771UL, 391118877UL, 1900257963UL, 1616289477UL, 3663959751UL, 1887891784UL, 697303016UL, 1346369879UL, 3634838543UL, 909311683UL, 3534738830UL, 2676838865UL, 3020679234UL, 1248902118UL, 1517698896UL, 414632197UL, 199589058UL, 2922557451UL, 3915079510UL, 1309075563UL, 3836275459UL, 2549095941UL, +1643088840UL, 1153547003UL, 2254144060UL, 3585420425UL, 915059870UL, 2410951596UL, 1876156254UL, 2384812180UL, 3893647829UL, 4119002503UL, 1535078752UL, 3888310943UL, 1483731374UL, 3915992153UL, 3662664617UL, 1065246672UL, 2307959656UL, 1845927873UL, 2075990232UL, 1346396900UL, 4218283385UL, 3427468026UL, 1518645158UL, 3092538772UL, 3383570452UL, 1317710387UL, 3390054918UL, 4222595168UL, 2468387909UL, 3864538174UL, 2442851586UL, 1858344050UL, +1537617445UL, 1090881039UL, 2055021834UL, 4011332463UL, 2797336692UL, 280272261UL, 3350338577UL, 1682666744UL, 1256176165UL, 2017003515UL, 3666229067UL, 4288064377UL, 3407437449UL, 2957152445UL, 3557139753UL, 4106922773UL, 2612653316UL, 3491950269UL, 1107293753UL, 2926461368UL, 1433860998UL, 1975669351UL, 1680462513UL, 4283282673UL, 168788571UL, 57021447UL, 3888396304UL, 2218068386UL, 2170981202UL, 1587568797UL, 2097820654UL, 1308061343UL, +4096726326UL, 2307933966UL, 145940188UL, 4247815717UL, 2995341855UL, 2894586378UL, 1213200792UL, 232910392UL, 2718014238UL, 918321585UL, 520434726UL, 3176078796UL, 937696513UL, 266558688UL, 1520650260UL, 645408471UL, 1653323191UL, 538426778UL, 491545855UL, 4064663509UL, 2605358672UL, 3941259490UL, 3471552693UL, 1851151228UL, 3279627338UL, 1290188176UL, 29883500UL, 1503432309UL, 593880175UL, 2488716480UL, 1172244224UL, 3287933183UL, +3510981973UL, 3970051135UL, 3803049980UL, 3836242189UL, 2890959433UL, 234437380UL, 201835406UL, 1523016285UL, 1720566850UL, 2943482079UL, 4219300984UL, 1490698759UL, 533411805UL, 982587365UL, 4097374623UL, 265292490UL, 2694560848UL, 285667083UL, 3905392425UL, 3128365011UL, 95277844UL, 2938824634UL, 2717708621UL, 262111126UL, 3672802273UL, 3445399260UL, 2422205637UL, 1106030557UL, 233401560UL, 1781057614UL, 3491203689UL, 2454028630UL, +2158698380UL, 3314008662UL, 3540412661UL, 2206372988UL, 3138025266UL, 474100503UL, 1150191741UL, 126856999UL, 3144057206UL, 917199551UL, 3549528813UL, 84516590UL, 391118877UL, 1900257963UL, 1616289477UL, 3663959751UL, 2831036790UL, 697303016UL, 1346369879UL, 3634838543UL, 909311683UL, 2206291004UL, 2676838865UL, 3020679234UL, 1248902118UL, 1517698896UL, 882506847UL, 199589058UL, 2922557451UL, 3915079510UL, 1309075563UL, 3675129276UL, +2549095941UL, 1643088840UL, 1153547003UL, 2254144060UL, 1702669516UL, 915059870UL, 2410951596UL, 1876156254UL, 2384812180UL, 393602062UL, 4119002503UL, 1535078752UL, 3888310943UL, 1483731374UL, 1135074988UL, 3662664617UL, 1065246672UL, 2307959656UL, 1845927873UL, 883002610UL, 1346396900UL, 4218283385UL, 3427468026UL, 1518645158UL, 1478839081UL, 3383570452UL, 1317710387UL, 3390054918UL, 4222595168UL, 3009846855UL, 3864538174UL, 2442851586UL, +1858344050UL, 1537617445UL, 2419526192UL, 2055021834UL, 4011332463UL, 2797336692UL, 280272261UL, 2937342669UL, 1682666744UL, 1256176165UL, 2017003515UL, 3666229067UL, 3563024742UL, 3407437449UL, 2957152445UL, 3557139753UL, 4106922773UL, 610182860UL, 3491950269UL, 1107293753UL, 2926461368UL, 1433860998UL, 2493047579UL, 1680462513UL, 4283282673UL, 168788571UL, 57021447UL, 2151356582UL, 2218068386UL, 2170981202UL, 1587568797UL, 2097820654UL, +2738927570UL, 4096726326UL, 2307933966UL, 145940188UL, 4247815717UL, 1887236689UL, 2894586378UL, 1213200792UL, 232910392UL, 2718014238UL, 2028538736UL, 520434726UL, 3176078796UL, 937696513UL, 266558688UL, 305624632UL, 645408471UL, 1653323191UL, 538426778UL, 491545855UL, 4188864445UL, 2605358672UL, 3941259490UL, 3471552693UL, 1851151228UL, 1720039364UL, 1290188176UL, 29883500UL, 1503432309UL, 593880175UL, 2595662526UL, 1172244224UL, +3287933183UL, 3510981973UL, 3970051135UL, 2763703998UL, 3836242189UL, 2890959433UL, 234437380UL, 201835406UL, 2652280530UL, 1720566850UL, 2943482079UL, 4219300984UL, 1490698759UL, 1968049758UL, 982587365UL, 4097374623UL, 265292490UL, 2694560848UL, 1165326939UL, 3905392425UL, 3128365011UL, 95277844UL, 2938824634UL, 2521869983UL, 262111126UL, 3672802273UL, 3445399260UL, 2422205637UL, 395183943UL, 233401560UL, 1781057614UL, 3491203689UL, +2454028630UL, 249721174UL, 3314008662UL, 3540412661UL, 2206372988UL, 3138025266UL, 1644439373UL, 1150191741UL, 126856999UL, 3144057206UL, 917199551UL, 1997133400UL, 84516590UL, 391118877UL, 1900257963UL, 1616289477UL, 3843764922UL, 2831036790UL, 697303016UL, 1346369879UL, 3634838543UL, 1901125181UL, 2206291004UL, 2676838865UL, 3020679234UL, 1248902118UL, 344347894UL, 882506847UL, 199589058UL, 2922557451UL, 3915079510UL, 2919277604UL, +3675129276UL, 2549095941UL, 1643088840UL, 1153547003UL, 3305575634UL, 1702669516UL, 915059870UL, 2410951596UL, 1876156254UL, 1416053196UL, 393602062UL, 4119002503UL, 1535078752UL, 3888310943UL, 3993632377UL, 1135074988UL, 3662664617UL, 1065246672UL, 2307959656UL, 1044670394UL, 883002610UL, 1346396900UL, 4218283385UL, 3427468026UL, 1792832168UL, 1478839081UL, 3383570452UL, 1317710387UL, 3390054918UL, 1596709924UL, 3009846855UL, 3864538174UL, +2442851586UL, 1858344050UL, 2428482265UL, 2419526192UL, 2055021834UL, 4011332463UL, 2797336692UL, 424213503UL, 2937342669UL, 1682666744UL, 1256176165UL, 2017003515UL, 717473071UL, 3563024742UL, 3407437449UL, 2957152445UL, 3557139753UL, 3319575432UL, 610182860UL, 3491950269UL, 1107293753UL, 2926461368UL, 3052637648UL, 2493047579UL, 1680462513UL, 4283282673UL, 168788571UL, 1401253163UL, 2151356582UL, 2218068386UL, 2170981202UL, 1587568797UL, +3994937670UL, 2738927570UL, 4096726326UL, 2307933966UL, 145940188UL, 3928146647UL, 1887236689UL, 2894586378UL, 1213200792UL, 232910392UL, 833120806UL, 2028538736UL, 520434726UL, 3176078796UL, 937696513UL, 3704968451UL, 305624632UL, 645408471UL, 1653323191UL, 538426778UL, 939335571UL, 4188864445UL, 2605358672UL, 3941259490UL, 3471552693UL, 2168499975UL, 1720039364UL, 1290188176UL, 29883500UL, 1503432309UL, 524387655UL, 2595662526UL, +1172244224UL, 3287933183UL, 3510981973UL, 2444664749UL, 2763703998UL, 3836242189UL, 2890959433UL, 234437380UL, 3272987579UL, 2652280530UL, 1720566850UL, 2943482079UL, 4219300984UL, 1045589319UL, 1968049758UL, 982587365UL, 4097374623UL, 265292490UL, 1077412791UL, 1165326939UL, 3905392425UL, 3128365011UL, 95277844UL, 2896038035UL, 2521869983UL, 262111126UL, 3672802273UL, 3445399260UL, 4273256145UL, 395183943UL, 233401560UL, 1781057614UL, +3491203689UL, 8343453UL, 249721174UL, 3314008662UL, 3540412661UL, 2206372988UL, 3738630867UL, 1644439373UL, 1150191741UL, 126856999UL, 3144057206UL, 65169501UL, 1997133400UL, 84516590UL, 391118877UL, 1900257963UL, 2914085557UL, 3843764922UL, 2831036790UL, 697303016UL, 1346369879UL, 2007568079UL, 1901125181UL, 2206291004UL, 2676838865UL, 3020679234UL, 2097032931UL, 344347894UL, 882506847UL, 199589058UL, 2922557451UL, 3740400148UL, +2919277604UL, 3675129276UL, 2549095941UL, 1643088840UL, 199560818UL, 3305575634UL, 1702669516UL, 915059870UL, 2410951596UL, 117939268UL, 1416053196UL, 393602062UL, 4119002503UL, 1535078752UL, 4281599711UL, 3993632377UL, 1135074988UL, 3662664617UL, 1065246672UL, 2854253374UL, 1044670394UL, 883002610UL, 1346396900UL, 4218283385UL, 803910659UL, 1792832168UL, 1478839081UL, 3383570452UL, 1317710387UL, 1311168874UL, 1596709924UL, 3009846855UL, +3864538174UL, 2442851586UL, 1967982878UL, 2428482265UL, 2419526192UL, 2055021834UL, 4011332463UL, 2725198749UL, 424213503UL, 2937342669UL, 1682666744UL, 1256176165UL, 713350501UL, 717473071UL, 3563024742UL, 3407437449UL, 2957152445UL, 2363682828UL, 3319575432UL, 610182860UL, 3491950269UL, 1107293753UL, 3429638328UL, 3052637648UL, 2493047579UL, 1680462513UL, 4283282673UL, 2672311163UL, 1401253163UL, 2151356582UL, 2218068386UL, 2170981202UL, +431601500UL, 4193143261UL, 2985267149UL, 1556712183UL, 4135181832UL, 285960576UL, 81711096UL, 57066962UL, 2646151573UL, 3692824605UL, 485132216UL, 2799654118UL, 903527523UL, 1210637484UL, 3195346614UL, 599540837UL, 1410108963UL, 3723542120UL, 1350764011UL, 1717225239UL, 239736775UL, 3946934722UL, 420024332UL, 589304817UL, 1331122625UL, 4294403247UL, 2009397371UL, 844641869UL, 166387728UL, 4093361096UL, 2342369656UL, 3958170613UL, +1660376297UL, 1259528150UL, 4240809115UL, 2875563845UL, 2613790323UL, 2869665108UL, 1414690635UL, 944649070UL, 3539368342UL, 199532147UL, 2707660205UL, 2258475730UL, 771169023UL, 158544851UL, 588872178UL, 2002019277UL, 4225148852UL, 641266809UL, 2133909450UL, 330112418UL, 1815776319UL, 1949213618UL, 3868452239UL, 2702722715UL, 2491030937UL, 468812562UL, 3226259052UL, 199165016UL, 436679774UL, 881956108UL, 1098105661UL, 68909298UL, +248572829UL, 339224422UL, 553849953UL, 3054752668UL, 701934162UL, 1898925107UL, 749060575UL, 987950022UL, 4040401060UL, 684345838UL, 3449205676UL, 2583450513UL, 433795092UL, 3559011048UL, 293161429UL, 3947766299UL, 3491895171UL, 1651265910UL, 1216468759UL, 1625512737UL, 412235874UL, 893680794UL, 2582820523UL, 1514322840UL, 2348781204UL, 2720801933UL, 3364999370UL, 2822073391UL, 2627166519UL, 3805500773UL, 177760590UL, 2210728920UL, +3136345252UL, 3226658259UL, 3982978003UL, 86264452UL, 536816704UL, 3489051867UL, 2161950016UL, 1375640747UL, 4116957650UL, 3676292350UL, 3001078542UL, 1379688752UL, 3059678152UL, 3740664918UL, 475697670UL, 539253230UL, 1256048653UL, 3819847913UL, 141216227UL, 3888391528UL, 3567424851UL, 4131097532UL, 2142453586UL, 3606575354UL, 3689715433UL, 2318212425UL, 3026095399UL, 2451038695UL, 4052322172UL, 1861782452UL, 3032216562UL, 4078403318UL, +2636775961UL, 2188864067UL, 3276459319UL, 2230349722UL, 3939784264UL, 831216291UL, 2483460713UL, 2571551493UL, 484276565UL, 3173595164UL, 4177831244UL, 4132249231UL, 2116763555UL, 1420812998UL, 2121017321UL, 2855491215UL, 1630144518UL, 2489688364UL, 411521312UL, 3713786536UL, 4177871972UL, 690465497UL, 855092147UL, 4271606539UL, 1265108699UL, 3757106624UL, 3151574897UL, 670335437UL, 3099376310UL, 3946436509UL, 1795346235UL, 4013409945UL, +}, +{ +650684252UL, 2220445579UL, 537394374UL, 571322423UL, 2781663439UL, 899394682UL, 364129622UL, 328438826UL, 1219862153UL, 830435885UL, 3278649457UL, 3072225531UL, 2838645991UL, 3150905380UL, 1251952499UL, 1751415553UL, 2034088483UL, 1437197870UL, 1907624878UL, 1786974150UL, 4207811086UL, 768131803UL, 2713210999UL, 4004509777UL, 3510764535UL, 2740991637UL, 3000313526UL, 1355959320UL, 938244439UL, 4093313692UL, 2476002145UL, 835527260UL, +2084758949UL, 4223775017UL, 91645393UL, 2251723899UL, 3159477758UL, 2008655575UL, 912220875UL, 1525327655UL, 2067948386UL, 2006141522UL, 450235614UL, 3945671083UL, 2852189452UL, 3804118704UL, 3302604345UL, 1712745267UL, 349281154UL, 19331179UL, 3423301791UL, 416995358UL, 2049170698UL, 684574142UL, 3271042138UL, 3438668017UL, 1645378852UL, 1995123150UL, 1835887948UL, 2347182898UL, 3828432892UL, 3710259931UL, 713144773UL, 3246285450UL, +2196135622UL, 1611287338UL, 2845388948UL, 3690657633UL, 2403178686UL, 2946296994UL, 2180908599UL, 3072014497UL, 3436535724UL, 2948908116UL, 3080353236UL, 1669938872UL, 3572731079UL, 1100892983UL, 308060688UL, 3092946261UL, 2725115972UL, 887278263UL, 991869336UL, 3597899723UL, 3454505181UL, 1108269267UL, 851855066UL, 1940998002UL, 3539084542UL, 3102161424UL, 965450940UL, 1942363226UL, 1430246588UL, 1368971075UL, 4251556311UL, 642683738UL, +3035789355UL, 1829444044UL, 4234626091UL, 671403403UL, 2809844786UL, 2251172733UL, 970188857UL, 3910072565UL, 1131847479UL, 3397535176UL, 3290884849UL, 861868157UL, 2811422184UL, 3280310458UL, 3502085520UL, 1499698865UL, 2446269873UL, 236680785UL, 1896103604UL, 1179896471UL, 83960622UL, 3303129336UL, 1191373247UL, 177898275UL, 3077388457UL, 1022975703UL, 2535144448UL, 8680269UL, 3602435630UL, 1810825915UL, 2293529378UL, 2307085218UL, +483894148UL, 2872435038UL, 2043868156UL, 3038491874UL, 3786518530UL, 3606440668UL, 3336713377UL, 120183042UL, 86901386UL, 2233164457UL, 2881782972UL, 3135264768UL, 2294460421UL, 2996668315UL, 658184098UL, 3558825846UL, 2386173040UL, 1950463910UL, 551627788UL, 2464303444UL, 893474565UL, 3277869222UL, 2852725906UL, 1191310725UL, 2398932683UL, 4164956002UL, 1689291769UL, 2619288187UL, 3429362702UL, 3205668166UL, 1668126623UL, 955771270UL, +2106753333UL, 650684252UL, 2220445579UL, 537394374UL, 571322423UL, 2369694095UL, 899394682UL, 364129622UL, 328438826UL, 1219862153UL, 4195985755UL, 3278649457UL, 3072225531UL, 2838645991UL, 3150905380UL, 2389919UL, 1751415553UL, 2034088483UL, 1437197870UL, 1907624878UL, 1516966376UL, 4207811086UL, 768131803UL, 2713210999UL, 4004509777UL, 1955929377UL, 2740991637UL, 3000313526UL, 1355959320UL, 938244439UL, 4263287583UL, 2476002145UL, +835527260UL, 2084758949UL, 4223775017UL, 110659216UL, 2251723899UL, 3159477758UL, 2008655575UL, 912220875UL, 2378803214UL, 2067948386UL, 2006141522UL, 450235614UL, 3945671083UL, 4112321452UL, 3804118704UL, 3302604345UL, 1712745267UL, 349281154UL, 3834044005UL, 3423301791UL, 416995358UL, 2049170698UL, 684574142UL, 3651360887UL, 3438668017UL, 1645378852UL, 1995123150UL, 1835887948UL, 1022257616UL, 3828432892UL, 3710259931UL, 713144773UL, +3246285450UL, 2485142597UL, 1611287338UL, 2845388948UL, 3690657633UL, 2403178686UL, 2201888000UL, 2180908599UL, 3072014497UL, 3436535724UL, 2948908116UL, 1647734358UL, 1669938872UL, 3572731079UL, 1100892983UL, 308060688UL, 592016509UL, 2725115972UL, 887278263UL, 991869336UL, 3597899723UL, 819708104UL, 1108269267UL, 851855066UL, 1940998002UL, 3539084542UL, 3156419045UL, 965450940UL, 1942363226UL, 1430246588UL, 1368971075UL, 224112021UL, +642683738UL, 3035789355UL, 1829444044UL, 4234626091UL, 314715303UL, 2809844786UL, 2251172733UL, 970188857UL, 3910072565UL, 155628632UL, 3397535176UL, 3290884849UL, 861868157UL, 2811422184UL, 1847583676UL, 3502085520UL, 1499698865UL, 2446269873UL, 236680785UL, 3698448762UL, 1179896471UL, 83960622UL, 3303129336UL, 1191373247UL, 1567908030UL, 3077388457UL, 1022975703UL, 2535144448UL, 8680269UL, 3979982957UL, 1810825915UL, 2293529378UL, +2307085218UL, 483894148UL, 4003402870UL, 2043868156UL, 3038491874UL, 3786518530UL, 3606440668UL, 3062185402UL, 120183042UL, 86901386UL, 2233164457UL, 2881782972UL, 3345668738UL, 2294460421UL, 2996668315UL, 658184098UL, 3558825846UL, 2121278529UL, 1950463910UL, 551627788UL, 2464303444UL, 893474565UL, 183176481UL, 2852725906UL, 1191310725UL, 2398932683UL, 4164956002UL, 788617081UL, 2619288187UL, 3429362702UL, 3205668166UL, 1668126623UL, +29124108UL, 2106753333UL, 650684252UL, 2220445579UL, 537394374UL, 725338795UL, 2369694095UL, 899394682UL, 364129622UL, 328438826UL, 1727397396UL, 4195985755UL, 3278649457UL, 3072225531UL, 2838645991UL, 583924693UL, 2389919UL, 1751415553UL, 2034088483UL, 1437197870UL, 1017611325UL, 1516966376UL, 4207811086UL, 768131803UL, 2713210999UL, 761144580UL, 1955929377UL, 2740991637UL, 3000313526UL, 1355959320UL, 840696976UL, 4263287583UL, +2476002145UL, 835527260UL, 2084758949UL, 3729075247UL, 110659216UL, 2251723899UL, 3159477758UL, 2008655575UL, 4127907945UL, 2378803214UL, 2067948386UL, 2006141522UL, 450235614UL, 3240776806UL, 4112321452UL, 3804118704UL, 3302604345UL, 1712745267UL, 1079549936UL, 3834044005UL, 3423301791UL, 416995358UL, 2049170698UL, 3913510119UL, 3651360887UL, 3438668017UL, 1645378852UL, 1995123150UL, 841590980UL, 1022257616UL, 3828432892UL, 3710259931UL, +713144773UL, 1272133892UL, 2485142597UL, 1611287338UL, 2845388948UL, 3690657633UL, 3083851146UL, 2201888000UL, 2180908599UL, 3072014497UL, 3436535724UL, 4162521870UL, 1647734358UL, 1669938872UL, 3572731079UL, 1100892983UL, 986584939UL, 592016509UL, 2725115972UL, 887278263UL, 991869336UL, 2711883653UL, 819708104UL, 1108269267UL, 851855066UL, 1940998002UL, 4050477073UL, 3156419045UL, 965450940UL, 1942363226UL, 1430246588UL, 4285490865UL, +224112021UL, 642683738UL, 3035789355UL, 1829444044UL, 4197159994UL, 314715303UL, 2809844786UL, 2251172733UL, 970188857UL, 3018833494UL, 155628632UL, 3397535176UL, 3290884849UL, 861868157UL, 2883971818UL, 1847583676UL, 3502085520UL, 1499698865UL, 2446269873UL, 2621709156UL, 3698448762UL, 1179896471UL, 83960622UL, 3303129336UL, 2192966710UL, 1567908030UL, 3077388457UL, 1022975703UL, 2535144448UL, 95661399UL, 3979982957UL, 1810825915UL, +2293529378UL, 2307085218UL, 485952375UL, 4003402870UL, 2043868156UL, 3038491874UL, 3786518530UL, 575288835UL, 3062185402UL, 120183042UL, 86901386UL, 2233164457UL, 2864966512UL, 3345668738UL, 2294460421UL, 2996668315UL, 658184098UL, 2892259673UL, 2121278529UL, 1950463910UL, 551627788UL, 2464303444UL, 2699734841UL, 183176481UL, 2852725906UL, 1191310725UL, 2398932683UL, 3505505465UL, 788617081UL, 2619288187UL, 3429362702UL, 3205668166UL, +2157859363UL, 29124108UL, 2106753333UL, 650684252UL, 2220445579UL, 978263237UL, 725338795UL, 2369694095UL, 899394682UL, 364129622UL, 3795063930UL, 1727397396UL, 4195985755UL, 3278649457UL, 3072225531UL, 1996768476UL, 583924693UL, 2389919UL, 1751415553UL, 2034088483UL, 1069211024UL, 1017611325UL, 1516966376UL, 4207811086UL, 768131803UL, 1365857736UL, 761144580UL, 1955929377UL, 2740991637UL, 3000313526UL, 1057560595UL, 840696976UL, +4263287583UL, 2476002145UL, 835527260UL, 76517292UL, 3729075247UL, 110659216UL, 2251723899UL, 3159477758UL, 3272987770UL, 4127907945UL, 2378803214UL, 2067948386UL, 2006141522UL, 1223694226UL, 3240776806UL, 4112321452UL, 3804118704UL, 3302604345UL, 2218568154UL, 1079549936UL, 3834044005UL, 3423301791UL, 416995358UL, 3661322119UL, 3913510119UL, 3651360887UL, 3438668017UL, 1645378852UL, 3606917602UL, 841590980UL, 1022257616UL, 3828432892UL, +3710259931UL, 1270853142UL, 1272133892UL, 2485142597UL, 1611287338UL, 2845388948UL, 131877212UL, 3083851146UL, 2201888000UL, 2180908599UL, 3072014497UL, 2459348479UL, 4162521870UL, 1647734358UL, 1669938872UL, 3572731079UL, 4285199726UL, 986584939UL, 592016509UL, 2725115972UL, 887278263UL, 3824306591UL, 2711883653UL, 819708104UL, 1108269267UL, 851855066UL, 190839383UL, 4050477073UL, 3156419045UL, 965450940UL, 1942363226UL, 1750931697UL, +4285490865UL, 224112021UL, 642683738UL, 3035789355UL, 1544088048UL, 4197159994UL, 314715303UL, 2809844786UL, 2251172733UL, 3155072709UL, 3018833494UL, 155628632UL, 3397535176UL, 3290884849UL, 4153861738UL, 2883971818UL, 1847583676UL, 3502085520UL, 1499698865UL, 1780983485UL, 2621709156UL, 3698448762UL, 1179896471UL, 83960622UL, 3849402190UL, 2192966710UL, 1567908030UL, 3077388457UL, 1022975703UL, 1639944917UL, 95661399UL, 3979982957UL, +1810825915UL, 2293529378UL, 3477014442UL, 485952375UL, 4003402870UL, 2043868156UL, 3038491874UL, 1482314580UL, 575288835UL, 3062185402UL, 120183042UL, 86901386UL, 3129494022UL, 2864966512UL, 3345668738UL, 2294460421UL, 2996668315UL, 1986664970UL, 2892259673UL, 2121278529UL, 1950463910UL, 551627788UL, 3105369079UL, 2699734841UL, 183176481UL, 2852725906UL, 1191310725UL, 3154591925UL, 3505505465UL, 788617081UL, 2619288187UL, 3429362702UL, +4204415531UL, 1321048315UL, 4247243973UL, 3085535935UL, 114618345UL, 2126710176UL, 1857709117UL, 3744103666UL, 304437872UL, 2388303947UL, 1802971382UL, 2099900439UL, 2543837819UL, 593111133UL, 3788847386UL, 1479546758UL, 4095492150UL, 240996968UL, 3423191009UL, 2666077260UL, 884572403UL, 2988847666UL, 928827215UL, 2549465610UL, 2773670136UL, 708214104UL, 2594951780UL, 1076989709UL, 2850313793UL, 1401578686UL, 4100639899UL, 2353261688UL, +1323066237UL, 31664438UL, 951240198UL, 3676836716UL, 3633113483UL, 3262159382UL, 981784748UL, 1172850762UL, 3106238289UL, 3118297408UL, 4207023277UL, 3362324732UL, 844983306UL, 3790928628UL, 4156848237UL, 2638267501UL, 1494090858UL, 3955182404UL, 1193294064UL, 4035152789UL, 2971914580UL, 2865046609UL, 3782329083UL, 120288587UL, 3300482994UL, 4268540970UL, 4183426205UL, 3572724103UL, 3287140971UL, 3038086532UL, 3210919007UL, 2171998100UL, +3958495101UL, 1589679371UL, 2880366694UL, 827575211UL, 1343189406UL, 364332706UL, 866065087UL, 33080625UL, 4284492640UL, 2277479989UL, 4110331130UL, 430538110UL, 3549886335UL, 3734345920UL, 3780943339UL, 638033279UL, 2684714509UL, 945721631UL, 49994267UL, 2394351381UL, 1996532760UL, 3201422203UL, 3509459657UL, 4118609520UL, 632454166UL, 696027759UL, 901486290UL, 1230453723UL, 4225865813UL, 4072619256UL, 3111686961UL, 1487480830UL, +4112016561UL, 1577020285UL, 2765241900UL, 2496609620UL, 1731271292UL, 6970479UL, 2936359283UL, 1541124937UL, 3705956773UL, 2349695021UL, 2247551804UL, 3759489710UL, 1321217706UL, 379586757UL, 2008242014UL, 1138475935UL, 3044902216UL, 1917596533UL, 2905651936UL, 3320601534UL, 1468557693UL, 4101437636UL, 374575138UL, 730079080UL, 995340259UL, 1430552870UL, 3860649629UL, 541396702UL, 3413070856UL, 3052797396UL, 3591116740UL, 2811484252UL, +2464310183UL, 1597327051UL, 3288232619UL, 1564716093UL, 2838386049UL, 264313861UL, 881377066UL, 4165178494UL, 1069189853UL, 1045737884UL, 2072266205UL, 2700673629UL, 2338724235UL, 837702541UL, 2603464957UL, 1548182143UL, 3565539962UL, 38172869UL, 1949065935UL, 3628598166UL, 2788698071UL, 3531182193UL, 1367529788UL, 3902468811UL, 1215323634UL, 1117475027UL, 3901912129UL, 2678279671UL, 597953858UL, 4082485755UL, 3696533122UL, 1078703353UL, +}, +{ +590004384UL, 3025338414UL, 1764374188UL, 20686172UL, 932343559UL, 1798441768UL, 1013577341UL, 4275903797UL, 853441141UL, 1065980978UL, 3665193407UL, 1555165047UL, 2962781443UL, 1822487181UL, 3329200135UL, 1527094489UL, 3805115799UL, 2252376033UL, 2137546519UL, 3632426270UL, 2439842864UL, 2525211849UL, 602876448UL, 1488163727UL, 3169015136UL, 832084039UL, 81097112UL, 994974428UL, 1945411347UL, 1020609213UL, 2863240894UL, 1639194881UL, +3078842449UL, 1885382385UL, 2595105518UL, 3857547190UL, 3654577058UL, 3853111480UL, 2237941224UL, 625422255UL, 3292783340UL, 750206381UL, 1002246874UL, 900879607UL, 820635221UL, 3318328110UL, 3980484559UL, 3924790669UL, 4260574943UL, 3658381114UL, 3673068643UL, 1319175627UL, 3620071157UL, 3914274380UL, 3310864044UL, 1529070914UL, 1760958838UL, 818806045UL, 3056976418UL, 2337737150UL, 2061530784UL, 1036243443UL, 2058675708UL, 1932546035UL, +1604709219UL, 1317296740UL, 2505350414UL, 624826181UL, 2710208816UL, 2208469912UL, 1930700024UL, 3769953790UL, 2092911082UL, 520309780UL, 3787727278UL, 684095804UL, 3697683979UL, 111440289UL, 4043494885UL, 1571375993UL, 1828801775UL, 3589061974UL, 3016563679UL, 2026002784UL, 3810490061UL, 2634997537UL, 2715287551UL, 1973545003UL, 3407971274UL, 3239387641UL, 2479429785UL, 324785401UL, 2622755198UL, 1525605325UL, 3280412074UL, 2453630352UL, +726090704UL, 4170024046UL, 248003549UL, 3319518538UL, 1331224401UL, 1203416669UL, 3497395173UL, 2465693133UL, 15303334UL, 267163358UL, 627307819UL, 294350450UL, 3691559013UL, 2491765952UL, 839609873UL, 1598505629UL, 3905396753UL, 583168080UL, 281403302UL, 1658629464UL, 1498139453UL, 2860737994UL, 148007837UL, 1439496901UL, 3226624586UL, 1708925351UL, 195473107UL, 1150552649UL, 2856922985UL, 1853471286UL, 1286593394UL, 2025932254UL, +1300583198UL, 3169702837UL, 1255226060UL, 3482666699UL, 1515557266UL, 1964035766UL, 1604627993UL, 641427670UL, 450188959UL, 1095230428UL, 293179001UL, 1293554079UL, 3022335608UL, 610535626UL, 1329467104UL, 3717935497UL, 1252385485UL, 441595535UL, 2937045243UL, 2846877561UL, 668719121UL, 3604154741UL, 1150714166UL, 1689640190UL, 2219487087UL, 2445975095UL, 3492083575UL, 377195836UL, 2727989292UL, 2460040634UL, 2910322481UL, 399050881UL, +3601292788UL, 590004384UL, 3025338414UL, 1764374188UL, 20686172UL, 3576058865UL, 1798441768UL, 1013577341UL, 4275903797UL, 853441141UL, 3862104007UL, 3665193407UL, 1555165047UL, 2962781443UL, 1822487181UL, 1058917817UL, 1527094489UL, 3805115799UL, 2252376033UL, 2137546519UL, 780594798UL, 2439842864UL, 2525211849UL, 602876448UL, 1488163727UL, 642430472UL, 832084039UL, 81097112UL, 994974428UL, 1945411347UL, 2231598766UL, 2863240894UL, +1639194881UL, 3078842449UL, 1885382385UL, 2387524763UL, 3857547190UL, 3654577058UL, 3853111480UL, 2237941224UL, 991026264UL, 3292783340UL, 750206381UL, 1002246874UL, 900879607UL, 1178067772UL, 3318328110UL, 3980484559UL, 3924790669UL, 4260574943UL, 1964983082UL, 3673068643UL, 1319175627UL, 3620071157UL, 3914274380UL, 992141498UL, 1529070914UL, 1760958838UL, 818806045UL, 3056976418UL, 3295305429UL, 2061530784UL, 1036243443UL, 2058675708UL, +1932546035UL, 3724542133UL, 1317296740UL, 2505350414UL, 624826181UL, 2710208816UL, 3359715256UL, 1930700024UL, 3769953790UL, 2092911082UL, 520309780UL, 1979908015UL, 684095804UL, 3697683979UL, 111440289UL, 4043494885UL, 3256907235UL, 1828801775UL, 3589061974UL, 3016563679UL, 2026002784UL, 1967781780UL, 2634997537UL, 2715287551UL, 1973545003UL, 3407971274UL, 391604110UL, 2479429785UL, 324785401UL, 2622755198UL, 1525605325UL, 462777294UL, +2453630352UL, 726090704UL, 4170024046UL, 248003549UL, 3125444318UL, 1331224401UL, 1203416669UL, 3497395173UL, 2465693133UL, 1610778556UL, 267163358UL, 627307819UL, 294350450UL, 3691559013UL, 3302305047UL, 839609873UL, 1598505629UL, 3905396753UL, 583168080UL, 1502262581UL, 1658629464UL, 1498139453UL, 2860737994UL, 148007837UL, 2973368511UL, 3226624586UL, 1708925351UL, 195473107UL, 1150552649UL, 522423348UL, 1853471286UL, 1286593394UL, +2025932254UL, 1300583198UL, 555770116UL, 1255226060UL, 3482666699UL, 1515557266UL, 1964035766UL, 877073175UL, 641427670UL, 450188959UL, 1095230428UL, 293179001UL, 4216364784UL, 3022335608UL, 610535626UL, 1329467104UL, 3717935497UL, 1665384485UL, 441595535UL, 2937045243UL, 2846877561UL, 668719121UL, 978801343UL, 1150714166UL, 1689640190UL, 2219487087UL, 2445975095UL, 3819595050UL, 377195836UL, 2727989292UL, 2460040634UL, 2910322481UL, +1200428010UL, 3601292788UL, 590004384UL, 3025338414UL, 1764374188UL, 3586255253UL, 3576058865UL, 1798441768UL, 1013577341UL, 4275903797UL, 1511067357UL, 3862104007UL, 3665193407UL, 1555165047UL, 2962781443UL, 2749766525UL, 1058917817UL, 1527094489UL, 3805115799UL, 2252376033UL, 817362043UL, 780594798UL, 2439842864UL, 2525211849UL, 602876448UL, 2309049006UL, 642430472UL, 832084039UL, 81097112UL, 994974428UL, 3148197354UL, 2231598766UL, +2863240894UL, 1639194881UL, 3078842449UL, 311769962UL, 2387524763UL, 3857547190UL, 3654577058UL, 3853111480UL, 1888597091UL, 991026264UL, 3292783340UL, 750206381UL, 1002246874UL, 2904195378UL, 1178067772UL, 3318328110UL, 3980484559UL, 3924790669UL, 4265386540UL, 1964983082UL, 3673068643UL, 1319175627UL, 3620071157UL, 1635921454UL, 992141498UL, 1529070914UL, 1760958838UL, 818806045UL, 3002614702UL, 3295305429UL, 2061530784UL, 1036243443UL, +2058675708UL, 2534375036UL, 3724542133UL, 1317296740UL, 2505350414UL, 624826181UL, 3042995618UL, 3359715256UL, 1930700024UL, 3769953790UL, 2092911082UL, 1870611696UL, 1979908015UL, 684095804UL, 3697683979UL, 111440289UL, 1111193348UL, 3256907235UL, 1828801775UL, 3589061974UL, 3016563679UL, 2203918092UL, 1967781780UL, 2634997537UL, 2715287551UL, 1973545003UL, 17967467UL, 391604110UL, 2479429785UL, 324785401UL, 2622755198UL, 3993572289UL, +462777294UL, 2453630352UL, 726090704UL, 4170024046UL, 813760479UL, 3125444318UL, 1331224401UL, 1203416669UL, 3497395173UL, 2528908686UL, 1610778556UL, 267163358UL, 627307819UL, 294350450UL, 4252461657UL, 3302305047UL, 839609873UL, 1598505629UL, 3905396753UL, 3407593947UL, 1502262581UL, 1658629464UL, 1498139453UL, 2860737994UL, 1137070983UL, 2973368511UL, 3226624586UL, 1708925351UL, 195473107UL, 1973834367UL, 522423348UL, 1853471286UL, +1286593394UL, 2025932254UL, 1636839834UL, 555770116UL, 1255226060UL, 3482666699UL, 1515557266UL, 4244619305UL, 877073175UL, 641427670UL, 450188959UL, 1095230428UL, 710341587UL, 4216364784UL, 3022335608UL, 610535626UL, 1329467104UL, 262034293UL, 1665384485UL, 441595535UL, 2937045243UL, 2846877561UL, 1059914271UL, 978801343UL, 1150714166UL, 1689640190UL, 2219487087UL, 258315233UL, 3819595050UL, 377195836UL, 2727989292UL, 2460040634UL, +1828274968UL, 1200428010UL, 3601292788UL, 590004384UL, 3025338414UL, 3487643146UL, 3586255253UL, 3576058865UL, 1798441768UL, 1013577341UL, 3609472816UL, 1511067357UL, 3862104007UL, 3665193407UL, 1555165047UL, 4188135767UL, 2749766525UL, 1058917817UL, 1527094489UL, 3805115799UL, 1547526585UL, 817362043UL, 780594798UL, 2439842864UL, 2525211849UL, 3949139098UL, 2309049006UL, 642430472UL, 832084039UL, 81097112UL, 2619711743UL, 3148197354UL, +2231598766UL, 2863240894UL, 1639194881UL, 3018692935UL, 311769962UL, 2387524763UL, 3857547190UL, 3654577058UL, 2418052942UL, 1888597091UL, 991026264UL, 3292783340UL, 750206381UL, 2501986418UL, 2904195378UL, 1178067772UL, 3318328110UL, 3980484559UL, 655757623UL, 4265386540UL, 1964983082UL, 3673068643UL, 1319175627UL, 1539823819UL, 1635921454UL, 992141498UL, 1529070914UL, 1760958838UL, 1840073710UL, 3002614702UL, 3295305429UL, 2061530784UL, +1036243443UL, 2212957003UL, 2534375036UL, 3724542133UL, 1317296740UL, 2505350414UL, 2754670042UL, 3042995618UL, 3359715256UL, 1930700024UL, 3769953790UL, 3307920786UL, 1870611696UL, 1979908015UL, 684095804UL, 3697683979UL, 326641529UL, 1111193348UL, 3256907235UL, 1828801775UL, 3589061974UL, 1408835557UL, 2203918092UL, 1967781780UL, 2634997537UL, 2715287551UL, 1958610929UL, 17967467UL, 391604110UL, 2479429785UL, 324785401UL, 3833051255UL, +3993572289UL, 462777294UL, 2453630352UL, 726090704UL, 1236380896UL, 813760479UL, 3125444318UL, 1331224401UL, 1203416669UL, 728276857UL, 2528908686UL, 1610778556UL, 267163358UL, 627307819UL, 4276734917UL, 4252461657UL, 3302305047UL, 839609873UL, 1598505629UL, 3827653659UL, 3407593947UL, 1502262581UL, 1658629464UL, 1498139453UL, 3636064463UL, 1137070983UL, 2973368511UL, 3226624586UL, 1708925351UL, 2288771247UL, 1973834367UL, 522423348UL, +1853471286UL, 1286593394UL, 798364204UL, 1636839834UL, 555770116UL, 1255226060UL, 3482666699UL, 2385578475UL, 4244619305UL, 877073175UL, 641427670UL, 450188959UL, 3502743047UL, 710341587UL, 4216364784UL, 3022335608UL, 610535626UL, 2388448039UL, 262034293UL, 1665384485UL, 441595535UL, 2937045243UL, 3028160550UL, 1059914271UL, 978801343UL, 1150714166UL, 1689640190UL, 169488023UL, 258315233UL, 3819595050UL, 377195836UL, 2727989292UL, +837094660UL, 3531987448UL, 1901453576UL, 3312447598UL, 1036467641UL, 2243300650UL, 3148869460UL, 1886274644UL, 4076707689UL, 257110870UL, 3118463831UL, 1165161057UL, 1118846497UL, 3446934363UL, 1514176098UL, 1362957326UL, 2629874126UL, 791374320UL, 1015673947UL, 4252955786UL, 2409207780UL, 3831311130UL, 1654475922UL, 3682733431UL, 780405105UL, 4059616372UL, 503333525UL, 1471514828UL, 2526848791UL, 607539645UL, 730408454UL, 1574159005UL, +1777808061UL, 1296178310UL, 1078855633UL, 878462103UL, 269337411UL, 750735378UL, 2599590920UL, 4206153248UL, 939121991UL, 3061289971UL, 2543431563UL, 1684736054UL, 2319658494UL, 77300347UL, 3222569207UL, 3882064339UL, 2201120493UL, 289098227UL, 3934209124UL, 2407620042UL, 2713079957UL, 2812644841UL, 115993752UL, 2545688211UL, 774350907UL, 939749505UL, 2242588062UL, 960853876UL, 296665594UL, 1367312411UL, 3370351589UL, 711706404UL, +3331136631UL, 1370376958UL, 2322438166UL, 577115138UL, 1472236592UL, 4029835216UL, 1122502809UL, 3490426739UL, 1930206806UL, 2074277138UL, 1360950220UL, 3797708387UL, 2007430804UL, 2257239461UL, 3889012648UL, 710165871UL, 763101711UL, 728019024UL, 652403220UL, 2517020147UL, 1801290767UL, 1478810019UL, 1057288808UL, 2879821959UL, 3916870020UL, 1480362189UL, 919816752UL, 375872647UL, 3236906236UL, 1504223782UL, 128306943UL, 1355826533UL, +2656243649UL, 390454690UL, 3848250363UL, 377480950UL, 358651174UL, 1337795904UL, 1925462532UL, 2421843219UL, 173144626UL, 886649902UL, 402617827UL, 932830871UL, 742712936UL, 4033430386UL, 1409945926UL, 3617206544UL, 2383446356UL, 3452204096UL, 615486157UL, 720696019UL, 1730134434UL, 3918468503UL, 1629431965UL, 2174079220UL, 325852294UL, 234479771UL, 1490297289UL, 3579002992UL, 3538738636UL, 139386548UL, 3067789050UL, 2078261059UL, +3552654276UL, 1774602596UL, 2105142163UL, 2768099869UL, 2265044995UL, 3680536732UL, 3601322356UL, 2848878442UL, 1166743022UL, 3508176959UL, 2186695985UL, 550278868UL, 3324775634UL, 384537301UL, 1019044102UL, 3354263542UL, 1942540686UL, 922714337UL, 3097711558UL, 3074228403UL, 3565076630UL, 3459053081UL, 4128383906UL, 1114387332UL, 2101424539UL, 1192649508UL, 58778130UL, 1651798895UL, 1752063480UL, 1728826905UL, 2225187635UL, 2463770127UL, +}, +{ +1978406995UL, 576106282UL, 2238958298UL, 2073551095UL, 624788087UL, 4231569260UL, 1853272808UL, 238274694UL, 2389334758UL, 410188028UL, 2293786099UL, 4243662908UL, 2317700970UL, 4050493361UL, 2348206908UL, 485250660UL, 1212732903UL, 169414736UL, 292623762UL, 1602229231UL, 2466348869UL, 3063669700UL, 1872890881UL, 1887188929UL, 3447638989UL, 162521682UL, 1470651713UL, 4036975255UL, 3423782623UL, 4043724693UL, 1686690883UL, 2610958712UL, +35940353UL, 78593759UL, 1565950713UL, 1304303952UL, 2004267248UL, 1417268036UL, 3328228522UL, 789915977UL, 2567452041UL, 3564175714UL, 1838409932UL, 1455795236UL, 22377452UL, 455201131UL, 3340286965UL, 184599544UL, 4102076073UL, 4007870762UL, 1470247063UL, 1579231003UL, 3544385556UL, 3408973464UL, 3759098465UL, 3243598964UL, 532452279UL, 1172265732UL, 3520978258UL, 2880513876UL, 41188252UL, 1663974668UL, 3444236420UL, 338981290UL, +2140558860UL, 3310465688UL, 552673362UL, 3277110106UL, 948036400UL, 1346056406UL, 3257468427UL, 4008294878UL, 3788890535UL, 2414511414UL, 3539325895UL, 3025695322UL, 3727849930UL, 3922840362UL, 535899902UL, 665898223UL, 1456499692UL, 354208792UL, 247894771UL, 2093316680UL, 2945209002UL, 1029298544UL, 976007759UL, 394966955UL, 1843302845UL, 3689202777UL, 1999949614UL, 1070472810UL, 4233404701UL, 667526747UL, 2313963966UL, 3519400667UL, +1548274317UL, 3272402139UL, 2570038689UL, 892260481UL, 3547254358UL, 1540409404UL, 3687395534UL, 3751445920UL, 546406228UL, 2167638865UL, 4234783150UL, 806401261UL, 1351195286UL, 1085913868UL, 3109267901UL, 1882610112UL, 1568734773UL, 239430641UL, 3971361190UL, 383932711UL, 149541490UL, 196701535UL, 108079452UL, 888590964UL, 1708559652UL, 3196290573UL, 2115587458UL, 3198525248UL, 3580113911UL, 3098818120UL, 4271558926UL, 3208851696UL, +3354604918UL, 3536923694UL, 1087345822UL, 2292802521UL, 3500230819UL, 411564772UL, 2408049547UL, 1215342690UL, 1707182109UL, 774540619UL, 1613606757UL, 836141085UL, 1061962136UL, 348765795UL, 2852610966UL, 3526215991UL, 2708801073UL, 3467537935UL, 472234793UL, 3944263763UL, 1782219410UL, 502724699UL, 3525703395UL, 1756411033UL, 1358811278UL, 3938603279UL, 3701976555UL, 3259537961UL, 628617330UL, 1553932236UL, 1974037630UL, 2090519666UL, +2185028543UL, 1978406995UL, 576106282UL, 2238958298UL, 2073551095UL, 638634424UL, 4231569260UL, 1853272808UL, 238274694UL, 2389334758UL, 3808551433UL, 2293786099UL, 4243662908UL, 2317700970UL, 4050493361UL, 957981276UL, 485250660UL, 1212732903UL, 169414736UL, 292623762UL, 1956197178UL, 2466348869UL, 3063669700UL, 1872890881UL, 1887188929UL, 1162224455UL, 162521682UL, 1470651713UL, 4036975255UL, 3423782623UL, 3243414978UL, 1686690883UL, +2610958712UL, 35940353UL, 78593759UL, 1648686849UL, 1304303952UL, 2004267248UL, 1417268036UL, 3328228522UL, 3740797237UL, 2567452041UL, 3564175714UL, 1838409932UL, 1455795236UL, 1045087636UL, 455201131UL, 3340286965UL, 184599544UL, 4102076073UL, 2685677331UL, 1470247063UL, 1579231003UL, 3544385556UL, 3408973464UL, 3832799869UL, 3243598964UL, 532452279UL, 1172265732UL, 3520978258UL, 531684354UL, 41188252UL, 1663974668UL, 3444236420UL, +338981290UL, 1286622338UL, 3310465688UL, 552673362UL, 3277110106UL, 948036400UL, 2987864230UL, 3257468427UL, 4008294878UL, 3788890535UL, 2414511414UL, 2613137548UL, 3025695322UL, 3727849930UL, 3922840362UL, 535899902UL, 3288883992UL, 1456499692UL, 354208792UL, 247894771UL, 2093316680UL, 3775770224UL, 1029298544UL, 976007759UL, 394966955UL, 1843302845UL, 1484214934UL, 1999949614UL, 1070472810UL, 4233404701UL, 667526747UL, 3708951530UL, +3519400667UL, 1548274317UL, 3272402139UL, 2570038689UL, 3457725296UL, 3547254358UL, 1540409404UL, 3687395534UL, 3751445920UL, 181641144UL, 2167638865UL, 4234783150UL, 806401261UL, 1351195286UL, 3457819598UL, 3109267901UL, 1882610112UL, 1568734773UL, 239430641UL, 4037392309UL, 383932711UL, 149541490UL, 196701535UL, 108079452UL, 1724276622UL, 1708559652UL, 3196290573UL, 2115587458UL, 3198525248UL, 3784683125UL, 3098818120UL, 4271558926UL, +3208851696UL, 3354604918UL, 149872004UL, 1087345822UL, 2292802521UL, 3500230819UL, 411564772UL, 4068437023UL, 1215342690UL, 1707182109UL, 774540619UL, 1613606757UL, 1062624488UL, 1061962136UL, 348765795UL, 2852610966UL, 3526215991UL, 1518538195UL, 3467537935UL, 472234793UL, 3944263763UL, 1782219410UL, 1835413488UL, 3525703395UL, 1756411033UL, 1358811278UL, 3938603279UL, 1054245423UL, 3259537961UL, 628617330UL, 1553932236UL, 1974037630UL, +2030751433UL, 2185028543UL, 1978406995UL, 576106282UL, 2238958298UL, 3877268821UL, 638634424UL, 4231569260UL, 1853272808UL, 238274694UL, 2482404724UL, 3808551433UL, 2293786099UL, 4243662908UL, 2317700970UL, 1955227186UL, 957981276UL, 485250660UL, 1212732903UL, 169414736UL, 1333246101UL, 1956197178UL, 2466348869UL, 3063669700UL, 1872890881UL, 3662049503UL, 1162224455UL, 162521682UL, 1470651713UL, 4036975255UL, 3593925064UL, 3243414978UL, +1686690883UL, 2610958712UL, 35940353UL, 2530174792UL, 1648686849UL, 1304303952UL, 2004267248UL, 1417268036UL, 1299827381UL, 3740797237UL, 2567452041UL, 3564175714UL, 1838409932UL, 4221368409UL, 1045087636UL, 455201131UL, 3340286965UL, 184599544UL, 486448047UL, 2685677331UL, 1470247063UL, 1579231003UL, 3544385556UL, 1404931688UL, 3832799869UL, 3243598964UL, 532452279UL, 1172265732UL, 3373048034UL, 531684354UL, 41188252UL, 1663974668UL, +3444236420UL, 1375188728UL, 1286622338UL, 3310465688UL, 552673362UL, 3277110106UL, 655980467UL, 2987864230UL, 3257468427UL, 4008294878UL, 3788890535UL, 763995173UL, 2613137548UL, 3025695322UL, 3727849930UL, 3922840362UL, 1850434657UL, 3288883992UL, 1456499692UL, 354208792UL, 247894771UL, 3440471938UL, 3775770224UL, 1029298544UL, 976007759UL, 394966955UL, 3298245949UL, 1484214934UL, 1999949614UL, 1070472810UL, 4233404701UL, 3788558253UL, +3708951530UL, 3519400667UL, 1548274317UL, 3272402139UL, 3117201719UL, 3457725296UL, 3547254358UL, 1540409404UL, 3687395534UL, 3871454027UL, 181641144UL, 2167638865UL, 4234783150UL, 806401261UL, 1627904858UL, 3457819598UL, 3109267901UL, 1882610112UL, 1568734773UL, 3178105921UL, 4037392309UL, 383932711UL, 149541490UL, 196701535UL, 424324376UL, 1724276622UL, 1708559652UL, 3196290573UL, 2115587458UL, 2946026327UL, 3784683125UL, 3098818120UL, +4271558926UL, 3208851696UL, 2551504859UL, 149872004UL, 1087345822UL, 2292802521UL, 3500230819UL, 3055410013UL, 4068437023UL, 1215342690UL, 1707182109UL, 774540619UL, 2466902579UL, 1062624488UL, 1061962136UL, 348765795UL, 2852610966UL, 355211123UL, 1518538195UL, 3467537935UL, 472234793UL, 3944263763UL, 3159176627UL, 1835413488UL, 3525703395UL, 1756411033UL, 1358811278UL, 2153206130UL, 1054245423UL, 3259537961UL, 628617330UL, 1553932236UL, +1741202495UL, 2030751433UL, 2185028543UL, 1978406995UL, 576106282UL, 2832311581UL, 3877268821UL, 638634424UL, 4231569260UL, 1853272808UL, 3103974717UL, 2482404724UL, 3808551433UL, 2293786099UL, 4243662908UL, 2607780401UL, 1955227186UL, 957981276UL, 485250660UL, 1212732903UL, 3214649174UL, 1333246101UL, 1956197178UL, 2466348869UL, 3063669700UL, 2428387069UL, 3662049503UL, 1162224455UL, 162521682UL, 1470651713UL, 3563435961UL, 3593925064UL, +3243414978UL, 1686690883UL, 2610958712UL, 1021669488UL, 2530174792UL, 1648686849UL, 1304303952UL, 2004267248UL, 1150095671UL, 1299827381UL, 3740797237UL, 2567452041UL, 3564175714UL, 1992360540UL, 4221368409UL, 1045087636UL, 455201131UL, 3340286965UL, 3795860292UL, 486448047UL, 2685677331UL, 1470247063UL, 1579231003UL, 3012017918UL, 1404931688UL, 3832799869UL, 3243598964UL, 532452279UL, 2740401823UL, 3373048034UL, 531684354UL, 41188252UL, +1663974668UL, 1239982773UL, 1375188728UL, 1286622338UL, 3310465688UL, 552673362UL, 2159084435UL, 655980467UL, 2987864230UL, 3257468427UL, 4008294878UL, 1526518186UL, 763995173UL, 2613137548UL, 3025695322UL, 3727849930UL, 4161669345UL, 1850434657UL, 3288883992UL, 1456499692UL, 354208792UL, 1648970767UL, 3440471938UL, 3775770224UL, 1029298544UL, 976007759UL, 292829454UL, 3298245949UL, 1484214934UL, 1999949614UL, 1070472810UL, 949984087UL, +3788558253UL, 3708951530UL, 3519400667UL, 1548274317UL, 3691975282UL, 3117201719UL, 3457725296UL, 3547254358UL, 1540409404UL, 3414085332UL, 3871454027UL, 181641144UL, 2167638865UL, 4234783150UL, 487427004UL, 1627904858UL, 3457819598UL, 3109267901UL, 1882610112UL, 2942538550UL, 3178105921UL, 4037392309UL, 383932711UL, 149541490UL, 528605550UL, 424324376UL, 1724276622UL, 1708559652UL, 3196290573UL, 2042399752UL, 2946026327UL, 3784683125UL, +3098818120UL, 4271558926UL, 2493686919UL, 2551504859UL, 149872004UL, 1087345822UL, 2292802521UL, 3257357826UL, 3055410013UL, 4068437023UL, 1215342690UL, 1707182109UL, 1101368233UL, 2466902579UL, 1062624488UL, 1061962136UL, 348765795UL, 377675640UL, 355211123UL, 1518538195UL, 3467537935UL, 472234793UL, 1918362523UL, 3159176627UL, 1835413488UL, 3525703395UL, 1756411033UL, 490591069UL, 2153206130UL, 1054245423UL, 3259537961UL, 628617330UL, +2464143505UL, 3547421156UL, 4181103091UL, 1646291356UL, 2711273600UL, 2961799099UL, 1443009342UL, 2191618308UL, 1193143275UL, 1858488142UL, 3741304147UL, 1479629752UL, 214641634UL, 1601114903UL, 3032545707UL, 5784133UL, 1466424840UL, 2251379876UL, 4054080092UL, 2965144328UL, 644228426UL, 1397556958UL, 422190032UL, 3059134799UL, 3779253493UL, 1314537880UL, 867798895UL, 3819721559UL, 3588436937UL, 670021879UL, 1070365654UL, 3339455790UL, +2963659516UL, 1662488399UL, 2336157317UL, 3427798652UL, 2782719134UL, 1317842084UL, 1576308528UL, 1129452059UL, 3400565954UL, 84977051UL, 3689257381UL, 3289717503UL, 3535165628UL, 3982356490UL, 173255911UL, 1929987033UL, 4221790572UL, 3473317939UL, 749060417UL, 2711561754UL, 316719217UL, 2359410057UL, 2014271053UL, 1432982162UL, 2107582322UL, 1899811989UL, 1394115707UL, 1134266213UL, 2334994542UL, 2475488907UL, 3238562415UL, 2410379210UL, +4147209396UL, 2446286513UL, 2194020199UL, 3068194593UL, 797186100UL, 1299000541UL, 1870322719UL, 2944499140UL, 1045779179UL, 2735528787UL, 3057750264UL, 2607876894UL, 1595833743UL, 3327636115UL, 3520489322UL, 3864068029UL, 3153522810UL, 2609437702UL, 1360208295UL, 2062444770UL, 3927110355UL, 1524755299UL, 1708215998UL, 3587488663UL, 2813888113UL, 686192293UL, 1078633032UL, 3066910876UL, 793688350UL, 3613674912UL, 387713910UL, 2660476731UL, +3032509241UL, 2353038709UL, 2212424333UL, 2110412913UL, 3631228061UL, 2765134272UL, 4025821789UL, 3324834269UL, 187577732UL, 1568270802UL, 2098502315UL, 2472645526UL, 2986813860UL, 1621191378UL, 3891512282UL, 1561648319UL, 2690491944UL, 3075246584UL, 3202791012UL, 315381589UL, 3645907425UL, 3532420114UL, 802256935UL, 1270128258UL, 2695868207UL, 4075358890UL, 3888212208UL, 510396943UL, 3683116722UL, 3943939501UL, 146061942UL, 733291914UL, +1402325031UL, 672641124UL, 2817168601UL, 2622398925UL, 3641379870UL, 2969146913UL, 4232866548UL, 1694492034UL, 3065141682UL, 234404736UL, 1921499010UL, 2300706258UL, 1304904939UL, 207802178UL, 2674605425UL, 2688377241UL, 2674991105UL, 2585496531UL, 2358858923UL, 2578793432UL, 3275116043UL, 228073476UL, 2936443283UL, 3713102344UL, 1629243323UL, 209348683UL, 3730808488UL, 275442226UL, 223820143UL, 2365614109UL, 3017206322UL, 1906208795UL, +}, +{ +1545504510UL, 1985586093UL, 2005504076UL, 2487099791UL, 2348737867UL, 2254755902UL, 3789154730UL, 3268946922UL, 99552511UL, 1369361877UL, 1888041043UL, 3105269579UL, 4044127396UL, 2380045264UL, 2970234287UL, 293292961UL, 1811276320UL, 1083136897UL, 3016497500UL, 950611584UL, 2165628367UL, 4140133899UL, 2402926185UL, 990501164UL, 2185997143UL, 1769871204UL, 721625457UL, 567446962UL, 1695515231UL, 1848699963UL, 4163520111UL, 2316975723UL, +4268269680UL, 1021066723UL, 517434635UL, 3827063239UL, 3483118065UL, 760366769UL, 3072996795UL, 3548263896UL, 2131401627UL, 4167855065UL, 410255606UL, 1992500865UL, 1322267629UL, 1599293552UL, 2389387938UL, 3721625360UL, 216375429UL, 2002236178UL, 1834631738UL, 1585275126UL, 3879559071UL, 2517667239UL, 1397456303UL, 4095227658UL, 589002062UL, 137665950UL, 3933018338UL, 1519132173UL, 3566494128UL, 3914066872UL, 3233332246UL, 855336825UL, +1882502420UL, 1081015168UL, 4148374722UL, 1683880703UL, 1161266344UL, 99374978UL, 733926790UL, 3520260556UL, 3643143173UL, 927318029UL, 398003191UL, 3472026294UL, 3518018860UL, 2319507998UL, 2650129369UL, 3781620600UL, 1294634949UL, 3977318486UL, 3068540117UL, 3732334866UL, 740308004UL, 1988900647UL, 2936479173UL, 2348744493UL, 1357856242UL, 3842428732UL, 3746094733UL, 214260739UL, 3493892012UL, 2358001919UL, 1775614809UL, 952871363UL, +1216985499UL, 2706067772UL, 1008517818UL, 4189424856UL, 1260334069UL, 2420035836UL, 311831945UL, 3409272605UL, 4266242510UL, 3590716427UL, 537257045UL, 3153762469UL, 1620749663UL, 3338743851UL, 3644831936UL, 3243426619UL, 783551642UL, 1305153827UL, 2026979662UL, 3164955857UL, 4082645339UL, 1633544228UL, 3389303153UL, 440623817UL, 204979344UL, 1674764841UL, 633231391UL, 4180702701UL, 1953210184UL, 2534954734UL, 4252100558UL, 2993632630UL, +4050264705UL, 678445398UL, 1502035091UL, 302442688UL, 493504779UL, 2321459487UL, 1141171231UL, 1507727159UL, 672678623UL, 4046722895UL, 65675127UL, 2936731189UL, 441159654UL, 832039862UL, 2252252769UL, 3090962795UL, 2839688755UL, 645344032UL, 2921087914UL, 2264738834UL, 2341060101UL, 778789539UL, 737962654UL, 2859693559UL, 2784310535UL, 493247978UL, 185832691UL, 3321631011UL, 641506549UL, 2652806878UL, 480335604UL, 2908694258UL, +984807024UL, 1545504510UL, 1985586093UL, 2005504076UL, 2487099791UL, 127488455UL, 2254755902UL, 3789154730UL, 3268946922UL, 99552511UL, 2160330513UL, 1888041043UL, 3105269579UL, 4044127396UL, 2380045264UL, 3185912634UL, 293292961UL, 1811276320UL, 1083136897UL, 3016497500UL, 116883339UL, 2165628367UL, 4140133899UL, 2402926185UL, 990501164UL, 4099344218UL, 1769871204UL, 721625457UL, 567446962UL, 1695515231UL, 1218419978UL, 4163520111UL, +2316975723UL, 4268269680UL, 1021066723UL, 237254804UL, 3827063239UL, 3483118065UL, 760366769UL, 3072996795UL, 1020639813UL, 2131401627UL, 4167855065UL, 410255606UL, 1992500865UL, 1887858126UL, 1599293552UL, 2389387938UL, 3721625360UL, 216375429UL, 2096265248UL, 1834631738UL, 1585275126UL, 3879559071UL, 2517667239UL, 3267338158UL, 4095227658UL, 589002062UL, 137665950UL, 3933018338UL, 3823062902UL, 3566494128UL, 3914066872UL, 3233332246UL, +855336825UL, 3240858503UL, 1081015168UL, 4148374722UL, 1683880703UL, 1161266344UL, 4034899335UL, 733926790UL, 3520260556UL, 3643143173UL, 927318029UL, 2130442867UL, 3472026294UL, 3518018860UL, 2319507998UL, 2650129369UL, 253769320UL, 1294634949UL, 3977318486UL, 3068540117UL, 3732334866UL, 3100107703UL, 1988900647UL, 2936479173UL, 2348744493UL, 1357856242UL, 477065277UL, 3746094733UL, 214260739UL, 3493892012UL, 2358001919UL, 52055911UL, +952871363UL, 1216985499UL, 2706067772UL, 1008517818UL, 2820619262UL, 1260334069UL, 2420035836UL, 311831945UL, 3409272605UL, 2066128794UL, 3590716427UL, 537257045UL, 3153762469UL, 1620749663UL, 2261931254UL, 3644831936UL, 3243426619UL, 783551642UL, 1305153827UL, 3937339872UL, 3164955857UL, 4082645339UL, 1633544228UL, 3389303153UL, 3304461891UL, 204979344UL, 1674764841UL, 633231391UL, 4180702701UL, 2649553051UL, 2534954734UL, 4252100558UL, +2993632630UL, 4050264705UL, 3777379050UL, 1502035091UL, 302442688UL, 493504779UL, 2321459487UL, 1795212504UL, 1507727159UL, 672678623UL, 4046722895UL, 65675127UL, 2810951967UL, 441159654UL, 832039862UL, 2252252769UL, 3090962795UL, 3317253399UL, 645344032UL, 2921087914UL, 2264738834UL, 2341060101UL, 1431934790UL, 737962654UL, 2859693559UL, 2784310535UL, 493247978UL, 555655767UL, 3321631011UL, 641506549UL, 2652806878UL, 480335604UL, +1837415425UL, 984807024UL, 1545504510UL, 1985586093UL, 2005504076UL, 2274320195UL, 127488455UL, 2254755902UL, 3789154730UL, 3268946922UL, 3812459919UL, 2160330513UL, 1888041043UL, 3105269579UL, 4044127396UL, 2341347785UL, 3185912634UL, 293292961UL, 1811276320UL, 1083136897UL, 825098089UL, 116883339UL, 2165628367UL, 4140133899UL, 2402926185UL, 4124720284UL, 4099344218UL, 1769871204UL, 721625457UL, 567446962UL, 3598160577UL, 1218419978UL, +4163520111UL, 2316975723UL, 4268269680UL, 923374392UL, 237254804UL, 3827063239UL, 3483118065UL, 760366769UL, 2263405553UL, 1020639813UL, 2131401627UL, 4167855065UL, 410255606UL, 3382265961UL, 1887858126UL, 1599293552UL, 2389387938UL, 3721625360UL, 3440586186UL, 2096265248UL, 1834631738UL, 1585275126UL, 3879559071UL, 711626863UL, 3267338158UL, 4095227658UL, 589002062UL, 137665950UL, 1190761134UL, 3823062902UL, 3566494128UL, 3914066872UL, +3233332246UL, 3844456625UL, 3240858503UL, 1081015168UL, 4148374722UL, 1683880703UL, 589447946UL, 4034899335UL, 733926790UL, 3520260556UL, 3643143173UL, 3202263729UL, 2130442867UL, 3472026294UL, 3518018860UL, 2319507998UL, 3458685425UL, 253769320UL, 1294634949UL, 3977318486UL, 3068540117UL, 702365700UL, 3100107703UL, 1988900647UL, 2936479173UL, 2348744493UL, 969926974UL, 477065277UL, 3746094733UL, 214260739UL, 3493892012UL, 2890740482UL, +52055911UL, 952871363UL, 1216985499UL, 2706067772UL, 1079370138UL, 2820619262UL, 1260334069UL, 2420035836UL, 311831945UL, 701108525UL, 2066128794UL, 3590716427UL, 537257045UL, 3153762469UL, 2900214585UL, 2261931254UL, 3644831936UL, 3243426619UL, 783551642UL, 3143067452UL, 3937339872UL, 3164955857UL, 4082645339UL, 1633544228UL, 1680728882UL, 3304461891UL, 204979344UL, 1674764841UL, 633231391UL, 689425572UL, 2649553051UL, 2534954734UL, +4252100558UL, 2993632630UL, 865432399UL, 3777379050UL, 1502035091UL, 302442688UL, 493504779UL, 1282312650UL, 1795212504UL, 1507727159UL, 672678623UL, 4046722895UL, 976003271UL, 2810951967UL, 441159654UL, 832039862UL, 2252252769UL, 726554843UL, 3317253399UL, 645344032UL, 2921087914UL, 2264738834UL, 1325395107UL, 1431934790UL, 737962654UL, 2859693559UL, 2784310535UL, 3876486226UL, 555655767UL, 3321631011UL, 641506549UL, 2652806878UL, +3848380198UL, 1837415425UL, 984807024UL, 1545504510UL, 1985586093UL, 3711682090UL, 2274320195UL, 127488455UL, 2254755902UL, 3789154730UL, 1595223697UL, 3812459919UL, 2160330513UL, 1888041043UL, 3105269579UL, 2773455385UL, 2341347785UL, 3185912634UL, 293292961UL, 1811276320UL, 3280464626UL, 825098089UL, 116883339UL, 2165628367UL, 4140133899UL, 3092114881UL, 4124720284UL, 4099344218UL, 1769871204UL, 721625457UL, 1514083147UL, 3598160577UL, +1218419978UL, 4163520111UL, 2316975723UL, 200993429UL, 923374392UL, 237254804UL, 3827063239UL, 3483118065UL, 677187089UL, 2263405553UL, 1020639813UL, 2131401627UL, 4167855065UL, 1892382552UL, 3382265961UL, 1887858126UL, 1599293552UL, 2389387938UL, 4153928364UL, 3440586186UL, 2096265248UL, 1834631738UL, 1585275126UL, 3348317504UL, 711626863UL, 3267338158UL, 4095227658UL, 589002062UL, 3125839176UL, 1190761134UL, 3823062902UL, 3566494128UL, +3914066872UL, 1320578396UL, 3844456625UL, 3240858503UL, 1081015168UL, 4148374722UL, 258762412UL, 589447946UL, 4034899335UL, 733926790UL, 3520260556UL, 4290301810UL, 3202263729UL, 2130442867UL, 3472026294UL, 3518018860UL, 2904238635UL, 3458685425UL, 253769320UL, 1294634949UL, 3977318486UL, 2517006218UL, 702365700UL, 3100107703UL, 1988900647UL, 2936479173UL, 3227096174UL, 969926974UL, 477065277UL, 3746094733UL, 214260739UL, 3868449115UL, +2890740482UL, 52055911UL, 952871363UL, 1216985499UL, 2857823043UL, 1079370138UL, 2820619262UL, 1260334069UL, 2420035836UL, 1843837226UL, 701108525UL, 2066128794UL, 3590716427UL, 537257045UL, 1202524172UL, 2900214585UL, 2261931254UL, 3644831936UL, 3243426619UL, 2113758468UL, 3143067452UL, 3937339872UL, 3164955857UL, 4082645339UL, 3987431298UL, 1680728882UL, 3304461891UL, 204979344UL, 1674764841UL, 2684386058UL, 689425572UL, 2649553051UL, +2534954734UL, 4252100558UL, 3511996574UL, 865432399UL, 3777379050UL, 1502035091UL, 302442688UL, 970989610UL, 1282312650UL, 1795212504UL, 1507727159UL, 672678623UL, 3080995547UL, 976003271UL, 2810951967UL, 441159654UL, 832039862UL, 2670291295UL, 726554843UL, 3317253399UL, 645344032UL, 2921087914UL, 3039207936UL, 1325395107UL, 1431934790UL, 737962654UL, 2859693559UL, 2452474228UL, 3876486226UL, 555655767UL, 3321631011UL, 641506549UL, +712394572UL, 931322445UL, 3691485988UL, 77755644UL, 3585967569UL, 1546642657UL, 1074481665UL, 1211742891UL, 2405208503UL, 1015438825UL, 3187019083UL, 2194891243UL, 1305917012UL, 3737279586UL, 2633137983UL, 1924729261UL, 72781059UL, 1412697099UL, 3828782214UL, 1637665425UL, 4170514983UL, 2248277352UL, 3793164712UL, 2365683667UL, 1287488796UL, 3240061130UL, 2411573225UL, 3237771995UL, 901649504UL, 4107276625UL, 1613775409UL, 741888560UL, +332459303UL, 850991886UL, 3249391248UL, 3550484151UL, 3689717953UL, 233288631UL, 2496730550UL, 3221264250UL, 3172144573UL, 1429937065UL, 1776357872UL, 1084763904UL, 1993209913UL, 4142869218UL, 3130780078UL, 18180577UL, 2819625557UL, 1978393449UL, 372704074UL, 3919523286UL, 1777756963UL, 188652529UL, 411213996UL, 62282979UL, 3775037518UL, 2534579861UL, 2966280971UL, 3863833471UL, 3228893189UL, 3123894696UL, 362579125UL, 1232030882UL, +575379775UL, 1019196436UL, 1914161190UL, 3649246842UL, 2192095564UL, 2368224476UL, 138396720UL, 1299868479UL, 507152626UL, 2129033575UL, 3801624222UL, 623352301UL, 1551535796UL, 3848329776UL, 2727905150UL, 1109499603UL, 3222756581UL, 3914846131UL, 3207366497UL, 3216028717UL, 3712661572UL, 1970542UL, 1320230637UL, 2583706801UL, 1341029904UL, 1903168049UL, 1244252579UL, 1885511879UL, 2426625042UL, 3082846847UL, 3858784104UL, 2263210027UL, +130350645UL, 956540733UL, 776729371UL, 2266749094UL, 2220603773UL, 2556170531UL, 263980324UL, 802194348UL, 697108594UL, 3634984969UL, 4251738712UL, 1831444758UL, 1209156358UL, 3089957258UL, 4195548426UL, 3641578987UL, 990686800UL, 2391278490UL, 2233755358UL, 1739784005UL, 2458544650UL, 340925249UL, 2442887806UL, 3503407512UL, 3058778909UL, 3619026333UL, 2289286518UL, 1296212011UL, 3879317178UL, 1210295163UL, 3113210467UL, 1578990986UL, +641384071UL, 2437977832UL, 1689385197UL, 1323268226UL, 861337916UL, 3532905860UL, 3735971843UL, 2294673483UL, 1032787575UL, 1868992735UL, 4260308791UL, 2091311463UL, 2354047234UL, 1005300697UL, 29821726UL, 2790044161UL, 3154591207UL, 1370229266UL, 3464848205UL, 3855301526UL, 544374401UL, 101012897UL, 4214903025UL, 1310520049UL, 14884434UL, 1438288148UL, 2118574986UL, 2360002070UL, 512167778UL, 4186534704UL, 3633828199UL, 493600836UL, +}, +{ +2932801042UL, 4101748508UL, 3363559072UL, 1213475638UL, 2400369070UL, 1726749444UL, 3175844814UL, 2600020277UL, 3779799804UL, 1886667522UL, 1228105891UL, 589138388UL, 3960459504UL, 450669757UL, 3773736740UL, 2107201112UL, 1437834675UL, 3618095315UL, 3662453347UL, 968349971UL, 1891706458UL, 2333451375UL, 4242907074UL, 3265111057UL, 3648168902UL, 4137035018UL, 105573058UL, 2075999861UL, 1053920954UL, 3768713177UL, 1836088599UL, 2015103258UL, +2649187541UL, 2717894301UL, 534937136UL, 3492326400UL, 2406499346UL, 617315838UL, 1384748442UL, 519804615UL, 524657043UL, 832148261UL, 156272480UL, 394759604UL, 2428809631UL, 3401589884UL, 2588359262UL, 3826333418UL, 2427993050UL, 3254067543UL, 2570694144UL, 2876613091UL, 2883884893UL, 613070434UL, 1599903665UL, 3476967713UL, 1729385632UL, 207879231UL, 1256308247UL, 2538975486UL, 2550001448UL, 1820975095UL, 915640692UL, 1633749116UL, +1294669585UL, 3257901643UL, 3193347552UL, 3369630539UL, 285165240UL, 2337727802UL, 1854640523UL, 1034379307UL, 1206304638UL, 889104297UL, 3084078942UL, 3485609519UL, 3903898589UL, 4274630316UL, 3290195566UL, 2071163950UL, 775170461UL, 551343738UL, 164916146UL, 1678786363UL, 123960948UL, 2721608023UL, 3463122611UL, 1525791510UL, 1531697627UL, 1457848578UL, 665433501UL, 1784274031UL, 3436850186UL, 3976095421UL, 383031580UL, 2146948399UL, +3137780800UL, 410458873UL, 381977170UL, 4264728702UL, 1515223147UL, 3358033956UL, 139804933UL, 438534588UL, 901342240UL, 1536972976UL, 184570377UL, 681864510UL, 844333847UL, 2515362910UL, 917461167UL, 2538721219UL, 4268394152UL, 680292330UL, 3420438710UL, 3784725677UL, 1983802086UL, 4165891809UL, 2369490764UL, 3808530114UL, 3391499460UL, 2509287180UL, 970129219UL, 2492785859UL, 3611863290UL, 1303524794UL, 2991964551UL, 1828774928UL, +3950385781UL, 3251583775UL, 14901408UL, 1890180396UL, 1306701779UL, 3161784071UL, 637842485UL, 2830070006UL, 3867491336UL, 1594948357UL, 2579795132UL, 479188700UL, 806498245UL, 3905876458UL, 3499065005UL, 3168076042UL, 769094339UL, 3769363696UL, 1241457026UL, 1073618847UL, 251335726UL, 2574341631UL, 2534047421UL, 3151952274UL, 534046859UL, 3264754113UL, 1325368288UL, 2131927230UL, 3229420672UL, 336348290UL, 3768781638UL, 2593952436UL, +849969290UL, 2932801042UL, 4101748508UL, 3363559072UL, 1213475638UL, 1710895496UL, 1726749444UL, 3175844814UL, 2600020277UL, 3779799804UL, 4044580435UL, 1228105891UL, 589138388UL, 3960459504UL, 450669757UL, 4253882965UL, 2107201112UL, 1437834675UL, 3618095315UL, 3662453347UL, 3625360228UL, 1891706458UL, 2333451375UL, 4242907074UL, 3265111057UL, 3638586625UL, 4137035018UL, 105573058UL, 2075999861UL, 1053920954UL, 3014895241UL, 1836088599UL, +2015103258UL, 2649187541UL, 2717894301UL, 701652515UL, 3492326400UL, 2406499346UL, 617315838UL, 1384748442UL, 1142040801UL, 524657043UL, 832148261UL, 156272480UL, 394759604UL, 944890908UL, 3401589884UL, 2588359262UL, 3826333418UL, 2427993050UL, 337891051UL, 2570694144UL, 2876613091UL, 2883884893UL, 613070434UL, 659063916UL, 3476967713UL, 1729385632UL, 207879231UL, 1256308247UL, 311608860UL, 2550001448UL, 1820975095UL, 915640692UL, +1633749116UL, 1772334285UL, 3257901643UL, 3193347552UL, 3369630539UL, 285165240UL, 2627441892UL, 1854640523UL, 1034379307UL, 1206304638UL, 889104297UL, 2289660031UL, 3485609519UL, 3903898589UL, 4274630316UL, 3290195566UL, 3572160580UL, 775170461UL, 551343738UL, 164916146UL, 1678786363UL, 3109616684UL, 2721608023UL, 3463122611UL, 1525791510UL, 1531697627UL, 3660976089UL, 665433501UL, 1784274031UL, 3436850186UL, 3976095421UL, 1696775162UL, +2146948399UL, 3137780800UL, 410458873UL, 381977170UL, 1669455215UL, 1515223147UL, 3358033956UL, 139804933UL, 438534588UL, 1738237971UL, 1536972976UL, 184570377UL, 681864510UL, 844333847UL, 770765754UL, 917461167UL, 2538721219UL, 4268394152UL, 680292330UL, 1993152157UL, 3784725677UL, 1983802086UL, 4165891809UL, 2369490764UL, 3411542022UL, 3391499460UL, 2509287180UL, 970129219UL, 2492785859UL, 1869391890UL, 1303524794UL, 2991964551UL, +1828774928UL, 3950385781UL, 4139486157UL, 14901408UL, 1890180396UL, 1306701779UL, 3161784071UL, 174545194UL, 2830070006UL, 3867491336UL, 1594948357UL, 2579795132UL, 4132973523UL, 806498245UL, 3905876458UL, 3499065005UL, 3168076042UL, 538076966UL, 3769363696UL, 1241457026UL, 1073618847UL, 251335726UL, 2085586137UL, 2534047421UL, 3151952274UL, 534046859UL, 3264754113UL, 643987981UL, 2131927230UL, 3229420672UL, 336348290UL, 3768781638UL, +3468816701UL, 849969290UL, 2932801042UL, 4101748508UL, 3363559072UL, 2524943673UL, 1710895496UL, 1726749444UL, 3175844814UL, 2600020277UL, 3677241699UL, 4044580435UL, 1228105891UL, 589138388UL, 3960459504UL, 3903077887UL, 4253882965UL, 2107201112UL, 1437834675UL, 3618095315UL, 2362822379UL, 3625360228UL, 1891706458UL, 2333451375UL, 4242907074UL, 2289503940UL, 3638586625UL, 4137035018UL, 105573058UL, 2075999861UL, 1299938293UL, 3014895241UL, +1836088599UL, 2015103258UL, 2649187541UL, 3727003343UL, 701652515UL, 3492326400UL, 2406499346UL, 617315838UL, 1627975589UL, 1142040801UL, 524657043UL, 832148261UL, 156272480UL, 3658645823UL, 944890908UL, 3401589884UL, 2588359262UL, 3826333418UL, 3645806126UL, 337891051UL, 2570694144UL, 2876613091UL, 2883884893UL, 2866570997UL, 659063916UL, 3476967713UL, 1729385632UL, 207879231UL, 298556768UL, 311608860UL, 2550001448UL, 1820975095UL, +915640692UL, 1014996737UL, 1772334285UL, 3257901643UL, 3193347552UL, 3369630539UL, 96395889UL, 2627441892UL, 1854640523UL, 1034379307UL, 1206304638UL, 2546521293UL, 2289660031UL, 3485609519UL, 3903898589UL, 4274630316UL, 2360048518UL, 3572160580UL, 775170461UL, 551343738UL, 164916146UL, 2068601014UL, 3109616684UL, 2721608023UL, 3463122611UL, 1525791510UL, 1228011534UL, 3660976089UL, 665433501UL, 1784274031UL, 3436850186UL, 1620580129UL, +1696775162UL, 2146948399UL, 3137780800UL, 410458873UL, 2753059283UL, 1669455215UL, 1515223147UL, 3358033956UL, 139804933UL, 2786429190UL, 1738237971UL, 1536972976UL, 184570377UL, 681864510UL, 358796749UL, 770765754UL, 917461167UL, 2538721219UL, 4268394152UL, 2355846025UL, 1993152157UL, 3784725677UL, 1983802086UL, 4165891809UL, 360259050UL, 3411542022UL, 3391499460UL, 2509287180UL, 970129219UL, 4055494275UL, 1869391890UL, 1303524794UL, +2991964551UL, 1828774928UL, 3508750618UL, 4139486157UL, 14901408UL, 1890180396UL, 1306701779UL, 3684762156UL, 174545194UL, 2830070006UL, 3867491336UL, 1594948357UL, 702781070UL, 4132973523UL, 806498245UL, 3905876458UL, 3499065005UL, 1372989388UL, 538076966UL, 3769363696UL, 1241457026UL, 1073618847UL, 3579114424UL, 2085586137UL, 2534047421UL, 3151952274UL, 534046859UL, 1882037168UL, 643987981UL, 2131927230UL, 3229420672UL, 336348290UL, +555833786UL, 3468816701UL, 849969290UL, 2932801042UL, 4101748508UL, 1095934625UL, 2524943673UL, 1710895496UL, 1726749444UL, 3175844814UL, 2287140069UL, 3677241699UL, 4044580435UL, 1228105891UL, 589138388UL, 1596938176UL, 3903077887UL, 4253882965UL, 2107201112UL, 1437834675UL, 2605388022UL, 2362822379UL, 3625360228UL, 1891706458UL, 2333451375UL, 174003035UL, 2289503940UL, 3638586625UL, 4137035018UL, 105573058UL, 697023108UL, 1299938293UL, +3014895241UL, 1836088599UL, 2015103258UL, 4128339205UL, 3727003343UL, 701652515UL, 3492326400UL, 2406499346UL, 426422678UL, 1627975589UL, 1142040801UL, 524657043UL, 832148261UL, 2461054373UL, 3658645823UL, 944890908UL, 3401589884UL, 2588359262UL, 3184255074UL, 3645806126UL, 337891051UL, 2570694144UL, 2876613091UL, 187151044UL, 2866570997UL, 659063916UL, 3476967713UL, 1729385632UL, 2811989057UL, 298556768UL, 311608860UL, 2550001448UL, +1820975095UL, 1806779934UL, 1014996737UL, 1772334285UL, 3257901643UL, 3193347552UL, 2145947779UL, 96395889UL, 2627441892UL, 1854640523UL, 1034379307UL, 2748996070UL, 2546521293UL, 2289660031UL, 3485609519UL, 3903898589UL, 452746826UL, 2360048518UL, 3572160580UL, 775170461UL, 551343738UL, 669098691UL, 2068601014UL, 3109616684UL, 2721608023UL, 3463122611UL, 22889155UL, 1228011534UL, 3660976089UL, 665433501UL, 1784274031UL, 227705324UL, +1620580129UL, 1696775162UL, 2146948399UL, 3137780800UL, 4267814323UL, 2753059283UL, 1669455215UL, 1515223147UL, 3358033956UL, 2806778033UL, 2786429190UL, 1738237971UL, 1536972976UL, 184570377UL, 3310279262UL, 358796749UL, 770765754UL, 917461167UL, 2538721219UL, 2247224091UL, 2355846025UL, 1993152157UL, 3784725677UL, 1983802086UL, 2399541755UL, 360259050UL, 3411542022UL, 3391499460UL, 2509287180UL, 2335541531UL, 4055494275UL, 1869391890UL, +1303524794UL, 2991964551UL, 392724462UL, 3508750618UL, 4139486157UL, 14901408UL, 1890180396UL, 2513331299UL, 3684762156UL, 174545194UL, 2830070006UL, 3867491336UL, 1887131931UL, 702781070UL, 4132973523UL, 806498245UL, 3905876458UL, 2263606492UL, 1372989388UL, 538076966UL, 3769363696UL, 1241457026UL, 170472774UL, 3579114424UL, 2085586137UL, 2534047421UL, 3151952274UL, 1488165272UL, 1882037168UL, 643987981UL, 2131927230UL, 3229420672UL, +1158405862UL, 1469009373UL, 4117356830UL, 4063868500UL, 2006417445UL, 2976934394UL, 2683607933UL, 3174943272UL, 2099974138UL, 2250858961UL, 205251124UL, 84783688UL, 1551294676UL, 224349432UL, 1893741756UL, 3680361724UL, 561624088UL, 251553631UL, 1654870642UL, 2195380145UL, 866503297UL, 1814519294UL, 905566144UL, 727763043UL, 1910034093UL, 1876316198UL, 3031876716UL, 2783769690UL, 2649650479UL, 2024342098UL, 2170858649UL, 2186613759UL, +2688207487UL, 881594599UL, 1010953695UL, 2768977700UL, 3341020856UL, 2446339960UL, 2648757147UL, 1317083878UL, 3301541769UL, 3574285525UL, 3331294407UL, 712581268UL, 3612116700UL, 3510601489UL, 2569879282UL, 3772968052UL, 332485239UL, 280920979UL, 716834274UL, 1863623285UL, 654670865UL, 1706917935UL, 1598315563UL, 2486805657UL, 2295746319UL, 635609792UL, 55141757UL, 4089183045UL, 145257162UL, 1921789879UL, 2833550514UL, 3798992859UL, +1532875864UL, 3668053062UL, 2749191097UL, 3412220447UL, 3383752088UL, 3191842833UL, 4167387125UL, 2438940746UL, 1453011669UL, 2747298308UL, 1057877757UL, 399006034UL, 132680506UL, 31671249UL, 1070386969UL, 2415113777UL, 3720335676UL, 3416473189UL, 1476808053UL, 785398955UL, 3335661823UL, 315496929UL, 1421907623UL, 1802371914UL, 3049258946UL, 1773374729UL, 382902076UL, 3262814446UL, 1774244917UL, 4064677234UL, 2281551331UL, 3019541390UL, +2445483046UL, 3059154103UL, 2147309319UL, 566587847UL, 216051987UL, 521013398UL, 2721884570UL, 3325443529UL, 1921922591UL, 1643064709UL, 1155714395UL, 1737031844UL, 2117338012UL, 1876262536UL, 3589621009UL, 3800806613UL, 1102108318UL, 1376914700UL, 539544394UL, 799741508UL, 1192097712UL, 2894663754UL, 567276527UL, 106814343UL, 3985577014UL, 422246623UL, 126568764UL, 4008211389UL, 4037889581UL, 2185357423UL, 2239644921UL, 2116447019UL, +1249715620UL, 2095747493UL, 4063243162UL, 3059330950UL, 1045571624UL, 1150656233UL, 3024439196UL, 3981904623UL, 1743764595UL, 4220253496UL, 3322182853UL, 2132911849UL, 2074342674UL, 198749193UL, 574306951UL, 3563262292UL, 3832626833UL, 2349475213UL, 182567249UL, 1530390173UL, 2066055611UL, 2609802571UL, 1392638962UL, 1495846580UL, 2356952332UL, 4029921749UL, 1731839848UL, 527880959UL, 1204112231UL, 938004695UL, 294300378UL, 1855457892UL, +}, +{ +1438083560UL, 1727969469UL, 703174449UL, 1296281193UL, 1386452240UL, 3304170302UL, 3048300096UL, 277697908UL, 2675939661UL, 3382564518UL, 1639425457UL, 2210719281UL, 3173605115UL, 1685375802UL, 1317820682UL, 1960916541UL, 4230888182UL, 1924357010UL, 3322827982UL, 1663716994UL, 976583570UL, 4146230815UL, 525755678UL, 3608894680UL, 1715438458UL, 1519478303UL, 2845291872UL, 1115405802UL, 2468673244UL, 2289739992UL, 46988928UL, 2559411080UL, +2466723374UL, 2995303634UL, 3871022237UL, 1794652692UL, 2424766096UL, 2849910020UL, 978542234UL, 1667051478UL, 3393290740UL, 1508376445UL, 4090541488UL, 1314139749UL, 1271060027UL, 3272019878UL, 4032394060UL, 757805987UL, 619143288UL, 1165760536UL, 225099797UL, 871754591UL, 2065691940UL, 2016593817UL, 1705071529UL, 2559080067UL, 2048856253UL, 3217759224UL, 2691334730UL, 1576829868UL, 3356759591UL, 1570481357UL, 1097065360UL, 852561431UL, +3559721965UL, 1403648739UL, 1772347635UL, 1196457607UL, 462142253UL, 761176322UL, 2209893444UL, 217724244UL, 3356132814UL, 2838131962UL, 3571552868UL, 1197135963UL, 3239010986UL, 2612283238UL, 2606429155UL, 2194090162UL, 4256137634UL, 935551404UL, 3057660021UL, 866672836UL, 1119670384UL, 1757615349UL, 649402076UL, 2814108193UL, 3312658713UL, 2627947214UL, 2982267121UL, 486762785UL, 2746076238UL, 2134737126UL, 4106010468UL, 3151832629UL, +2419694200UL, 2803791741UL, 2100250718UL, 3171079849UL, 1874606681UL, 1884940331UL, 926257211UL, 1940082331UL, 1024435222UL, 609478334UL, 2501896844UL, 518643063UL, 4285619138UL, 1054300997UL, 4024681853UL, 2287236199UL, 2891891855UL, 1519666047UL, 1919500932UL, 3880316442UL, 1994336737UL, 1025147784UL, 3433493260UL, 1647319600UL, 3298872174UL, 3744513628UL, 2918990402UL, 2649193481UL, 234630674UL, 1963357481UL, 1118148435UL, 2658522312UL, +2563194501UL, 2238556876UL, 1210050812UL, 748709882UL, 3894824022UL, 2575692519UL, 436044710UL, 3465014792UL, 3686094502UL, 2963529475UL, 3251316066UL, 2834750227UL, 789471563UL, 853201732UL, 4119014483UL, 1312738151UL, 2018934495UL, 542908921UL, 732294449UL, 2519981401UL, 1663929229UL, 4041419972UL, 3038382188UL, 3182489020UL, 353453260UL, 4074472601UL, 1187952022UL, 2118553383UL, 1068338764UL, 3699144039UL, 3129056770UL, 1419222328UL, +2666827910UL, 1438083560UL, 1727969469UL, 703174449UL, 1296281193UL, 2134413940UL, 3304170302UL, 3048300096UL, 277697908UL, 2675939661UL, 3817858752UL, 1639425457UL, 2210719281UL, 3173605115UL, 1685375802UL, 2587083472UL, 1960916541UL, 4230888182UL, 1924357010UL, 3322827982UL, 2582901426UL, 976583570UL, 4146230815UL, 525755678UL, 3608894680UL, 524232549UL, 1519478303UL, 2845291872UL, 1115405802UL, 2468673244UL, 591800699UL, 46988928UL, +2559411080UL, 2466723374UL, 2995303634UL, 2307625850UL, 1794652692UL, 2424766096UL, 2849910020UL, 978542234UL, 1284927074UL, 3393290740UL, 1508376445UL, 4090541488UL, 1314139749UL, 3508281898UL, 3272019878UL, 4032394060UL, 757805987UL, 619143288UL, 1846615167UL, 225099797UL, 871754591UL, 2065691940UL, 2016593817UL, 1193455869UL, 2559080067UL, 2048856253UL, 3217759224UL, 2691334730UL, 2665708717UL, 3356759591UL, 1570481357UL, 1097065360UL, +852561431UL, 1652864273UL, 1403648739UL, 1772347635UL, 1196457607UL, 462142253UL, 1222855287UL, 2209893444UL, 217724244UL, 3356132814UL, 2838131962UL, 3060983219UL, 1197135963UL, 3239010986UL, 2612283238UL, 2606429155UL, 4171729370UL, 4256137634UL, 935551404UL, 3057660021UL, 866672836UL, 75618353UL, 1757615349UL, 649402076UL, 2814108193UL, 3312658713UL, 3975515213UL, 2982267121UL, 486762785UL, 2746076238UL, 2134737126UL, 3251020123UL, +3151832629UL, 2419694200UL, 2803791741UL, 2100250718UL, 624531676UL, 1874606681UL, 1884940331UL, 926257211UL, 1940082331UL, 3678479182UL, 609478334UL, 2501896844UL, 518643063UL, 4285619138UL, 1725899979UL, 4024681853UL, 2287236199UL, 2891891855UL, 1519666047UL, 702508101UL, 3880316442UL, 1994336737UL, 1025147784UL, 3433493260UL, 4212959134UL, 3298872174UL, 3744513628UL, 2918990402UL, 2649193481UL, 1782150764UL, 1963357481UL, 1118148435UL, +2658522312UL, 2563194501UL, 3330122355UL, 1210050812UL, 748709882UL, 3894824022UL, 2575692519UL, 637240921UL, 3465014792UL, 3686094502UL, 2963529475UL, 3251316066UL, 1510158901UL, 789471563UL, 853201732UL, 4119014483UL, 1312738151UL, 3018953017UL, 542908921UL, 732294449UL, 2519981401UL, 1663929229UL, 2696317636UL, 3038382188UL, 3182489020UL, 353453260UL, 4074472601UL, 4249950407UL, 2118553383UL, 1068338764UL, 3699144039UL, 3129056770UL, +2334590922UL, 2666827910UL, 1438083560UL, 1727969469UL, 703174449UL, 1679528518UL, 2134413940UL, 3304170302UL, 3048300096UL, 277697908UL, 3417107827UL, 3817858752UL, 1639425457UL, 2210719281UL, 3173605115UL, 1858788112UL, 2587083472UL, 1960916541UL, 4230888182UL, 1924357010UL, 3692988029UL, 2582901426UL, 976583570UL, 4146230815UL, 525755678UL, 1122319464UL, 524232549UL, 1519478303UL, 2845291872UL, 1115405802UL, 205855120UL, 591800699UL, +46988928UL, 2559411080UL, 2466723374UL, 3358512221UL, 2307625850UL, 1794652692UL, 2424766096UL, 2849910020UL, 2865273283UL, 1284927074UL, 3393290740UL, 1508376445UL, 4090541488UL, 2453941323UL, 3508281898UL, 3272019878UL, 4032394060UL, 757805987UL, 3191753865UL, 1846615167UL, 225099797UL, 871754591UL, 2065691940UL, 1301630578UL, 1193455869UL, 2559080067UL, 2048856253UL, 3217759224UL, 3858428004UL, 2665708717UL, 3356759591UL, 1570481357UL, +1097065360UL, 3550687085UL, 1652864273UL, 1403648739UL, 1772347635UL, 1196457607UL, 2158802672UL, 1222855287UL, 2209893444UL, 217724244UL, 3356132814UL, 1954043011UL, 3060983219UL, 1197135963UL, 3239010986UL, 2612283238UL, 2156334822UL, 4171729370UL, 4256137634UL, 935551404UL, 3057660021UL, 3331206175UL, 75618353UL, 1757615349UL, 649402076UL, 2814108193UL, 1313890357UL, 3975515213UL, 2982267121UL, 486762785UL, 2746076238UL, 2023213803UL, +3251020123UL, 3151832629UL, 2419694200UL, 2803791741UL, 392313450UL, 624531676UL, 1874606681UL, 1884940331UL, 926257211UL, 3369012310UL, 3678479182UL, 609478334UL, 2501896844UL, 518643063UL, 3638013610UL, 1725899979UL, 4024681853UL, 2287236199UL, 2891891855UL, 429282096UL, 702508101UL, 3880316442UL, 1994336737UL, 1025147784UL, 1217486411UL, 4212959134UL, 3298872174UL, 3744513628UL, 2918990402UL, 1279832521UL, 1782150764UL, 1963357481UL, +1118148435UL, 2658522312UL, 2379123622UL, 3330122355UL, 1210050812UL, 748709882UL, 3894824022UL, 3987054169UL, 637240921UL, 3465014792UL, 3686094502UL, 2963529475UL, 2167876400UL, 1510158901UL, 789471563UL, 853201732UL, 4119014483UL, 1746447311UL, 3018953017UL, 542908921UL, 732294449UL, 2519981401UL, 1908715414UL, 2696317636UL, 3038382188UL, 3182489020UL, 353453260UL, 2132930364UL, 4249950407UL, 2118553383UL, 1068338764UL, 3699144039UL, +433893434UL, 2334590922UL, 2666827910UL, 1438083560UL, 1727969469UL, 1154725669UL, 1679528518UL, 2134413940UL, 3304170302UL, 3048300096UL, 31944135UL, 3417107827UL, 3817858752UL, 1639425457UL, 2210719281UL, 4203237786UL, 1858788112UL, 2587083472UL, 1960916541UL, 4230888182UL, 2712081548UL, 3692988029UL, 2582901426UL, 976583570UL, 4146230815UL, 3948659885UL, 1122319464UL, 524232549UL, 1519478303UL, 2845291872UL, 2881616509UL, 205855120UL, +591800699UL, 46988928UL, 2559411080UL, 3645011109UL, 3358512221UL, 2307625850UL, 1794652692UL, 2424766096UL, 3667888476UL, 2865273283UL, 1284927074UL, 3393290740UL, 1508376445UL, 1605429636UL, 2453941323UL, 3508281898UL, 3272019878UL, 4032394060UL, 3904681057UL, 3191753865UL, 1846615167UL, 225099797UL, 871754591UL, 696516502UL, 1301630578UL, 1193455869UL, 2559080067UL, 2048856253UL, 2589248412UL, 3858428004UL, 2665708717UL, 3356759591UL, +1570481357UL, 1884333722UL, 3550687085UL, 1652864273UL, 1403648739UL, 1772347635UL, 3418430008UL, 2158802672UL, 1222855287UL, 2209893444UL, 217724244UL, 4164333189UL, 1954043011UL, 3060983219UL, 1197135963UL, 3239010986UL, 2300947859UL, 2156334822UL, 4171729370UL, 4256137634UL, 935551404UL, 1258856668UL, 3331206175UL, 75618353UL, 1757615349UL, 649402076UL, 772455867UL, 1313890357UL, 3975515213UL, 2982267121UL, 486762785UL, 3671941628UL, +2023213803UL, 3251020123UL, 3151832629UL, 2419694200UL, 4264015999UL, 392313450UL, 624531676UL, 1874606681UL, 1884940331UL, 2460787316UL, 3369012310UL, 3678479182UL, 609478334UL, 2501896844UL, 2131090271UL, 3638013610UL, 1725899979UL, 4024681853UL, 2287236199UL, 455349830UL, 429282096UL, 702508101UL, 3880316442UL, 1994336737UL, 1727894434UL, 1217486411UL, 4212959134UL, 3298872174UL, 3744513628UL, 1120563681UL, 1279832521UL, 1782150764UL, +1963357481UL, 1118148435UL, 3362151087UL, 2379123622UL, 3330122355UL, 1210050812UL, 748709882UL, 2506587900UL, 3987054169UL, 637240921UL, 3465014792UL, 3686094502UL, 1265652315UL, 2167876400UL, 1510158901UL, 789471563UL, 853201732UL, 3472479264UL, 1746447311UL, 3018953017UL, 542908921UL, 732294449UL, 659090240UL, 1908715414UL, 2696317636UL, 3038382188UL, 3182489020UL, 174113867UL, 2132930364UL, 4249950407UL, 2118553383UL, 1068338764UL, +4115132848UL, 1714842877UL, 1153237667UL, 1015943026UL, 2014412384UL, 2478393613UL, 1340079052UL, 167685322UL, 1848482402UL, 3252973254UL, 638064461UL, 1599254200UL, 2525050247UL, 2813349060UL, 2415037971UL, 3274852801UL, 3415369586UL, 3216396500UL, 3147792606UL, 438338168UL, 2326605175UL, 2846648724UL, 3871841623UL, 287840506UL, 3218295001UL, 2562000356UL, 574276928UL, 418096348UL, 1798854554UL, 1913561074UL, 2025706546UL, 41907788UL, +3535708035UL, 1240819558UL, 208810147UL, 4062740265UL, 451865782UL, 2652508890UL, 3579720859UL, 1243967909UL, 2191937647UL, 2473947838UL, 1847359263UL, 2496539569UL, 4061942257UL, 1372849161UL, 2016697844UL, 1827460131UL, 1135062647UL, 1255573479UL, 3506657283UL, 3699699807UL, 3087913374UL, 1196140869UL, 4095306490UL, 830793530UL, 1289366065UL, 3268392251UL, 4119035690UL, 1631012325UL, 3410799501UL, 1470209122UL, 3057922764UL, 2895379380UL, +2654121201UL, 1984999545UL, 2258412956UL, 4267137150UL, 3396740662UL, 2480013857UL, 3845856317UL, 3669454152UL, 2438423716UL, 3191341994UL, 1571280634UL, 1423782557UL, 3279999352UL, 1886288620UL, 205278284UL, 793062897UL, 112852083UL, 69164746UL, 2218046933UL, 4206182754UL, 3021072495UL, 2157753215UL, 2875773583UL, 1453706073UL, 168681204UL, 3905840714UL, 4098714445UL, 3410804508UL, 1737239929UL, 1613207828UL, 2987997090UL, 1869303136UL, +3348561687UL, 3391148819UL, 1680062950UL, 4150476788UL, 2340622122UL, 11331065UL, 2250669421UL, 3003852975UL, 2145739501UL, 1627177260UL, 994260425UL, 1479134620UL, 2315299915UL, 1268765340UL, 285960682UL, 3801150032UL, 3948820512UL, 1677682247UL, 1735541155UL, 1914753931UL, 1965156079UL, 1875233710UL, 681418791UL, 2077804400UL, 1963479724UL, 2447942398UL, 269798686UL, 2740088859UL, 1974178779UL, 3373487761UL, 2879779843UL, 157827737UL, +3855390825UL, 2779173093UL, 2359181541UL, 3508102362UL, 4001266348UL, 3949912729UL, 3232414439UL, 472195874UL, 57835121UL, 1854343116UL, 3020785997UL, 2024437594UL, 2182964208UL, 3379376555UL, 1213864603UL, 307833006UL, 1029130725UL, 545051507UL, 4001695571UL, 2258480284UL, 896286117UL, 355474524UL, 2514583184UL, 2997458384UL, 3278715462UL, 1675341954UL, 3603020014UL, 2318410671UL, 2152785892UL, 4285597912UL, 35655711UL, 2087100216UL, +}, +{ +1671155UL, 472949658UL, 148656515UL, 1640075411UL, 930771231UL, 1601854390UL, 471598090UL, 2013359012UL, 3708325970UL, 1688441844UL, 736452516UL, 100585026UL, 1154373750UL, 4029833741UL, 3409420465UL, 192349301UL, 3804215437UL, 909027311UL, 2896874106UL, 3567276364UL, 1319305666UL, 3858990362UL, 3155018279UL, 3756192170UL, 3567813642UL, 228734829UL, 577956164UL, 2078807284UL, 1005987081UL, 1464380935UL, 112604551UL, 3865074232UL, +3776350052UL, 1112767766UL, 2947509331UL, 910887552UL, 4127297396UL, 851240323UL, 3136588838UL, 1639013085UL, 1154068086UL, 639126620UL, 2501600773UL, 3174842042UL, 3456593672UL, 80596481UL, 126970446UL, 2184239961UL, 1448001095UL, 689252599UL, 1087028487UL, 2905348107UL, 2502009404UL, 2156595397UL, 2149975474UL, 2201723284UL, 3908202640UL, 754508313UL, 2321393187UL, 787043244UL, 2575809693UL, 4172462501UL, 2322897687UL, 1899992264UL, +1854136781UL, 3575249683UL, 2939319477UL, 901605762UL, 676398674UL, 2849283587UL, 2992300101UL, 1513271778UL, 2797164148UL, 1914019034UL, 1889341710UL, 2739211008UL, 1954453463UL, 3279391005UL, 2899313529UL, 1412533980UL, 1291505093UL, 2884603001UL, 564097935UL, 3552741248UL, 2809901827UL, 1263126330UL, 860214490UL, 2168366043UL, 2681035029UL, 3226888214UL, 2902522885UL, 554804421UL, 1571065517UL, 3322453053UL, 4144256215UL, 126415290UL, +980853251UL, 1531963815UL, 3237470129UL, 1465444883UL, 2031491001UL, 2205009469UL, 1046577915UL, 828927962UL, 2170245718UL, 1090142292UL, 1667375106UL, 2522840205UL, 4047872402UL, 3862734726UL, 91588630UL, 3122782857UL, 929883614UL, 694999008UL, 1472139068UL, 1246663706UL, 3500613893UL, 4200173807UL, 186199942UL, 3890621040UL, 229752655UL, 1011692880UL, 2791828564UL, 2677625011UL, 791005643UL, 1754509337UL, 2321492983UL, 3512328605UL, +1294405891UL, 2845189858UL, 434175992UL, 3155484007UL, 2306406482UL, 3197931140UL, 22971924UL, 1521633702UL, 2366802562UL, 399245037UL, 2833224222UL, 2507478835UL, 3231711673UL, 3784114896UL, 1927919696UL, 783802899UL, 3408133710UL, 2278711709UL, 3001078924UL, 1223320630UL, 3246830042UL, 943189685UL, 4062534962UL, 1039971013UL, 2342241593UL, 3551623946UL, 322017346UL, 3585779636UL, 81127429UL, 3549929990UL, 2886997195UL, 1746081951UL, +4169018554UL, 1671155UL, 472949658UL, 148656515UL, 1640075411UL, 3772042754UL, 1601854390UL, 471598090UL, 2013359012UL, 3708325970UL, 321630853UL, 736452516UL, 100585026UL, 1154373750UL, 4029833741UL, 1926754199UL, 192349301UL, 3804215437UL, 909027311UL, 2896874106UL, 1138131968UL, 1319305666UL, 3858990362UL, 3155018279UL, 3756192170UL, 2489094664UL, 228734829UL, 577956164UL, 2078807284UL, 1005987081UL, 2678967510UL, 112604551UL, +3865074232UL, 3776350052UL, 1112767766UL, 626049886UL, 910887552UL, 4127297396UL, 851240323UL, 3136588838UL, 2142891352UL, 1154068086UL, 639126620UL, 2501600773UL, 3174842042UL, 3342870442UL, 80596481UL, 126970446UL, 2184239961UL, 1448001095UL, 3399719246UL, 1087028487UL, 2905348107UL, 2502009404UL, 2156595397UL, 14860817UL, 2201723284UL, 3908202640UL, 754508313UL, 2321393187UL, 90540547UL, 2575809693UL, 4172462501UL, 2322897687UL, +1899992264UL, 56239065UL, 3575249683UL, 2939319477UL, 901605762UL, 676398674UL, 412461711UL, 2992300101UL, 1513271778UL, 2797164148UL, 1914019034UL, 3660190396UL, 2739211008UL, 1954453463UL, 3279391005UL, 2899313529UL, 4193503742UL, 1291505093UL, 2884603001UL, 564097935UL, 3552741248UL, 2124229268UL, 1263126330UL, 860214490UL, 2168366043UL, 2681035029UL, 4086980935UL, 2902522885UL, 554804421UL, 1571065517UL, 3322453053UL, 1821678887UL, +126415290UL, 980853251UL, 1531963815UL, 3237470129UL, 2099629264UL, 2031491001UL, 2205009469UL, 1046577915UL, 828927962UL, 3447807375UL, 1090142292UL, 1667375106UL, 2522840205UL, 4047872402UL, 2255362927UL, 91588630UL, 3122782857UL, 929883614UL, 694999008UL, 4135967848UL, 1246663706UL, 3500613893UL, 4200173807UL, 186199942UL, 4182379872UL, 229752655UL, 1011692880UL, 2791828564UL, 2677625011UL, 397062412UL, 1754509337UL, 2321492983UL, +3512328605UL, 1294405891UL, 1028843071UL, 434175992UL, 3155484007UL, 2306406482UL, 3197931140UL, 3217107401UL, 1521633702UL, 2366802562UL, 399245037UL, 2833224222UL, 76017436UL, 3231711673UL, 3784114896UL, 1927919696UL, 783802899UL, 2157090897UL, 2278711709UL, 3001078924UL, 1223320630UL, 3246830042UL, 1197195551UL, 4062534962UL, 1039971013UL, 2342241593UL, 3551623946UL, 63853850UL, 3585779636UL, 81127429UL, 3549929990UL, 2886997195UL, +1335910186UL, 4169018554UL, 1671155UL, 472949658UL, 148656515UL, 3600963048UL, 3772042754UL, 1601854390UL, 471598090UL, 2013359012UL, 1181513377UL, 321630853UL, 736452516UL, 100585026UL, 1154373750UL, 2323956092UL, 1926754199UL, 192349301UL, 3804215437UL, 909027311UL, 2993842723UL, 1138131968UL, 1319305666UL, 3858990362UL, 3155018279UL, 2288945270UL, 2489094664UL, 228734829UL, 577956164UL, 2078807284UL, 1924581773UL, 2678967510UL, +112604551UL, 3865074232UL, 3776350052UL, 2127459222UL, 626049886UL, 910887552UL, 4127297396UL, 851240323UL, 547797457UL, 2142891352UL, 1154068086UL, 639126620UL, 2501600773UL, 2391654498UL, 3342870442UL, 80596481UL, 126970446UL, 2184239961UL, 824575673UL, 3399719246UL, 1087028487UL, 2905348107UL, 2502009404UL, 740197255UL, 14860817UL, 2201723284UL, 3908202640UL, 754508313UL, 4133980283UL, 90540547UL, 2575809693UL, 4172462501UL, +2322897687UL, 831222037UL, 56239065UL, 3575249683UL, 2939319477UL, 901605762UL, 1998632674UL, 412461711UL, 2992300101UL, 1513271778UL, 2797164148UL, 969149327UL, 3660190396UL, 2739211008UL, 1954453463UL, 3279391005UL, 1267183547UL, 4193503742UL, 1291505093UL, 2884603001UL, 564097935UL, 3378471970UL, 2124229268UL, 1263126330UL, 860214490UL, 2168366043UL, 867190357UL, 4086980935UL, 2902522885UL, 554804421UL, 1571065517UL, 497580674UL, +1821678887UL, 126415290UL, 980853251UL, 1531963815UL, 2259090956UL, 2099629264UL, 2031491001UL, 2205009469UL, 1046577915UL, 30458798UL, 3447807375UL, 1090142292UL, 1667375106UL, 2522840205UL, 748518306UL, 2255362927UL, 91588630UL, 3122782857UL, 929883614UL, 1016302700UL, 4135967848UL, 1246663706UL, 3500613893UL, 4200173807UL, 4149573092UL, 4182379872UL, 229752655UL, 1011692880UL, 2791828564UL, 2890696349UL, 397062412UL, 1754509337UL, +2321492983UL, 3512328605UL, 3005148093UL, 1028843071UL, 434175992UL, 3155484007UL, 2306406482UL, 1417194283UL, 3217107401UL, 1521633702UL, 2366802562UL, 399245037UL, 665389310UL, 76017436UL, 3231711673UL, 3784114896UL, 1927919696UL, 37004463UL, 2157090897UL, 2278711709UL, 3001078924UL, 1223320630UL, 1281902891UL, 1197195551UL, 4062534962UL, 1039971013UL, 2342241593UL, 836721481UL, 63853850UL, 3585779636UL, 81127429UL, 3549929990UL, +2541553478UL, 1335910186UL, 4169018554UL, 1671155UL, 472949658UL, 2086411677UL, 3600963048UL, 3772042754UL, 1601854390UL, 471598090UL, 3297781744UL, 1181513377UL, 321630853UL, 736452516UL, 100585026UL, 2296508711UL, 2323956092UL, 1926754199UL, 192349301UL, 3804215437UL, 314399580UL, 2993842723UL, 1138131968UL, 1319305666UL, 3858990362UL, 584746730UL, 2288945270UL, 2489094664UL, 228734829UL, 577956164UL, 3868048239UL, 1924581773UL, +2678967510UL, 112604551UL, 3865074232UL, 2091950990UL, 2127459222UL, 626049886UL, 910887552UL, 4127297396UL, 2494071916UL, 547797457UL, 2142891352UL, 1154068086UL, 639126620UL, 1159991153UL, 2391654498UL, 3342870442UL, 80596481UL, 126970446UL, 2276453681UL, 824575673UL, 3399719246UL, 1087028487UL, 2905348107UL, 874278393UL, 740197255UL, 14860817UL, 2201723284UL, 3908202640UL, 1189317351UL, 4133980283UL, 90540547UL, 2575809693UL, +4172462501UL, 746169572UL, 831222037UL, 56239065UL, 3575249683UL, 2939319477UL, 4148988439UL, 1998632674UL, 412461711UL, 2992300101UL, 1513271778UL, 1078781767UL, 969149327UL, 3660190396UL, 2739211008UL, 1954453463UL, 369522045UL, 1267183547UL, 4193503742UL, 1291505093UL, 2884603001UL, 2820350438UL, 3378471970UL, 2124229268UL, 1263126330UL, 860214490UL, 793306335UL, 867190357UL, 4086980935UL, 2902522885UL, 554804421UL, 1472297125UL, +497580674UL, 1821678887UL, 126415290UL, 980853251UL, 1628231485UL, 2259090956UL, 2099629264UL, 2031491001UL, 2205009469UL, 2562996945UL, 30458798UL, 3447807375UL, 1090142292UL, 1667375106UL, 3513508401UL, 748518306UL, 2255362927UL, 91588630UL, 3122782857UL, 435869165UL, 1016302700UL, 4135967848UL, 1246663706UL, 3500613893UL, 4156110437UL, 4149573092UL, 4182379872UL, 229752655UL, 1011692880UL, 1150278253UL, 2890696349UL, 397062412UL, +1754509337UL, 2321492983UL, 1126835971UL, 3005148093UL, 1028843071UL, 434175992UL, 3155484007UL, 4169948411UL, 1417194283UL, 3217107401UL, 1521633702UL, 2366802562UL, 1629830655UL, 665389310UL, 76017436UL, 3231711673UL, 3784114896UL, 2523153991UL, 37004463UL, 2157090897UL, 2278711709UL, 3001078924UL, 3770048208UL, 1281902891UL, 1197195551UL, 4062534962UL, 1039971013UL, 2710590100UL, 836721481UL, 63853850UL, 3585779636UL, 81127429UL, +3850118466UL, 1883009417UL, 1027645619UL, 2766570701UL, 529436174UL, 4182542040UL, 2027954186UL, 1551970336UL, 2476537298UL, 1601343216UL, 3847258834UL, 14764974UL, 2173280370UL, 4148127270UL, 2818930089UL, 4238274314UL, 1291010651UL, 276452076UL, 192067464UL, 4086351393UL, 37573517UL, 48008720UL, 1641547972UL, 3144774960UL, 2159884108UL, 4260412239UL, 4072883650UL, 801704944UL, 2475958420UL, 2719220408UL, 555871884UL, 3338968445UL, +1704817873UL, 1960791083UL, 3785650808UL, 948722806UL, 3591229899UL, 1776225011UL, 4086658524UL, 2675451845UL, 308053697UL, 3514232055UL, 2575301108UL, 1970226110UL, 3926325352UL, 770275431UL, 1432667716UL, 671201644UL, 1008866625UL, 1151827040UL, 11061406UL, 3492749345UL, 2398090284UL, 2479688660UL, 2275263177UL, 2452696627UL, 3239880878UL, 3206200433UL, 1520851097UL, 1517432473UL, 1468198490UL, 1756343506UL, 2477348626UL, 3684701600UL, +3173720911UL, 1034531154UL, 4092116810UL, 3546516359UL, 2085136160UL, 643024588UL, 1462240654UL, 1877398196UL, 3615581878UL, 1419408410UL, 3581360976UL, 1731324772UL, 1377343320UL, 3848152825UL, 2213533588UL, 2484549569UL, 2043594863UL, 224490427UL, 1298974897UL, 4279011954UL, 3970331393UL, 3795364604UL, 285230552UL, 2893090686UL, 2399312639UL, 2638905215UL, 3481427245UL, 3477537504UL, 2609821731UL, 867675919UL, 3395750357UL, 1969593211UL, +2390932014UL, 3164333009UL, 3032345429UL, 3054196992UL, 1655295657UL, 193598641UL, 1267960637UL, 1599091894UL, 3377410805UL, 1529073346UL, 1949183620UL, 1575927573UL, 1493246650UL, 2285478895UL, 797817618UL, 1736047766UL, 1537439339UL, 1422940895UL, 2210817855UL, 2888194544UL, 800138109UL, 1689425315UL, 87966703UL, 3800446188UL, 137301285UL, 3334431104UL, 1776710491UL, 4010349050UL, 2577018472UL, 3083459223UL, 672158271UL, 3379478560UL, +2445459713UL, 918903140UL, 2577376693UL, 273150303UL, 2300393435UL, 3529750006UL, 3941920515UL, 2590879584UL, 2005940914UL, 2533952036UL, 2918638361UL, 1907638097UL, 959011520UL, 1477207871UL, 2141548481UL, 2065858781UL, 3145892196UL, 3679867589UL, 1295127682UL, 1325838381UL, 3482593404UL, 1212565985UL, 3404887017UL, 709111097UL, 1714185234UL, 561489165UL, 3545430079UL, 359778601UL, 3034684349UL, 2235482356UL, 2263913966UL, 1397371482UL, +}, +{ +170295791UL, 2753410803UL, 2200994594UL, 14686027UL, 3460333923UL, 1523230564UL, 393272614UL, 1632665034UL, 2139771608UL, 2436912103UL, 375335282UL, 667585308UL, 3651645415UL, 1403132103UL, 4146144245UL, 786890392UL, 1349234364UL, 1278024517UL, 84921263UL, 3758850381UL, 4213552796UL, 2355655048UL, 1636349912UL, 172797504UL, 2490691729UL, 1233059003UL, 2593048824UL, 942056581UL, 953415060UL, 4250104075UL, 787552244UL, 1995239637UL, +2482815609UL, 767530774UL, 773778243UL, 841396894UL, 2718419035UL, 3363828032UL, 737774143UL, 4128182656UL, 2335090807UL, 1421795969UL, 2322011430UL, 2808330380UL, 2207840656UL, 1646731611UL, 492284258UL, 2339383764UL, 3439685708UL, 2316859204UL, 4055048437UL, 1700143892UL, 2980557654UL, 1353917552UL, 548777318UL, 1077538998UL, 2650679367UL, 2853583947UL, 2721899692UL, 4253535213UL, 3375043688UL, 3489699354UL, 2401362855UL, 3391605246UL, +914273272UL, 3060460082UL, 1409014396UL, 3313834796UL, 461914731UL, 82334736UL, 3200344474UL, 2743316601UL, 842885927UL, 613943741UL, 96056919UL, 3116963503UL, 305659983UL, 132158360UL, 239064402UL, 849530381UL, 543215927UL, 4250983939UL, 2719881954UL, 1950301886UL, 2760008207UL, 853237881UL, 3875675156UL, 1753566841UL, 1446648300UL, 1663885236UL, 2155720472UL, 1902508987UL, 4246118829UL, 383661834UL, 2420221467UL, 156828838UL, +2919782856UL, 499968148UL, 2538550321UL, 65231340UL, 1589837081UL, 3654438263UL, 467304037UL, 1000159563UL, 622643461UL, 1410713407UL, 491953742UL, 1003597552UL, 1972701846UL, 1534343952UL, 1934888620UL, 4214562113UL, 4154375443UL, 3612899079UL, 2132948514UL, 2599819225UL, 2676649952UL, 3147375990UL, 533258319UL, 3323553423UL, 4203909276UL, 668602384UL, 3979162921UL, 2360530772UL, 162121513UL, 8968884UL, 3647746035UL, 2830313226UL, +1736955603UL, 78142012UL, 1643270604UL, 1571637938UL, 4065571991UL, 2071640825UL, 2715113082UL, 3826814783UL, 1067370024UL, 1810581550UL, 2354204343UL, 3798962263UL, 1664654967UL, 3740539785UL, 3746164996UL, 4280983219UL, 3313400832UL, 3305556349UL, 4226011346UL, 839676594UL, 1785445494UL, 1248107478UL, 904240268UL, 3484988721UL, 2290931247UL, 2109493967UL, 3895901626UL, 1494555863UL, 3251796061UL, 40877237UL, 2914051470UL, 2810210896UL, +1428826975UL, 170295791UL, 2753410803UL, 2200994594UL, 14686027UL, 3263438011UL, 1523230564UL, 393272614UL, 1632665034UL, 2139771608UL, 1847095655UL, 375335282UL, 667585308UL, 3651645415UL, 1403132103UL, 1888152231UL, 786890392UL, 1349234364UL, 1278024517UL, 84921263UL, 317409190UL, 4213552796UL, 2355655048UL, 1636349912UL, 172797504UL, 891435579UL, 1233059003UL, 2593048824UL, 942056581UL, 953415060UL, 1606837225UL, 787552244UL, +1995239637UL, 2482815609UL, 767530774UL, 723338833UL, 841396894UL, 2718419035UL, 3363828032UL, 737774143UL, 1043554448UL, 2335090807UL, 1421795969UL, 2322011430UL, 2808330380UL, 2754923978UL, 1646731611UL, 492284258UL, 2339383764UL, 3439685708UL, 3985616488UL, 4055048437UL, 1700143892UL, 2980557654UL, 1353917552UL, 588678041UL, 1077538998UL, 2650679367UL, 2853583947UL, 2721899692UL, 992549416UL, 3375043688UL, 3489699354UL, 2401362855UL, +3391605246UL, 2111206241UL, 3060460082UL, 1409014396UL, 3313834796UL, 461914731UL, 749987143UL, 3200344474UL, 2743316601UL, 842885927UL, 613943741UL, 1572013294UL, 3116963503UL, 305659983UL, 132158360UL, 239064402UL, 2802105766UL, 543215927UL, 4250983939UL, 2719881954UL, 1950301886UL, 1025784309UL, 853237881UL, 3875675156UL, 1753566841UL, 1446648300UL, 2265992307UL, 2155720472UL, 1902508987UL, 4246118829UL, 383661834UL, 1291267638UL, +156828838UL, 2919782856UL, 499968148UL, 2538550321UL, 2108151330UL, 1589837081UL, 3654438263UL, 467304037UL, 1000159563UL, 611554173UL, 1410713407UL, 491953742UL, 1003597552UL, 1972701846UL, 1548061756UL, 1934888620UL, 4214562113UL, 4154375443UL, 3612899079UL, 3599839935UL, 2599819225UL, 2676649952UL, 3147375990UL, 533258319UL, 4213499273UL, 4203909276UL, 668602384UL, 3979162921UL, 2360530772UL, 197252548UL, 8968884UL, 3647746035UL, +2830313226UL, 1736955603UL, 791687787UL, 1643270604UL, 1571637938UL, 4065571991UL, 2071640825UL, 2026290282UL, 3826814783UL, 1067370024UL, 1810581550UL, 2354204343UL, 2679791787UL, 1664654967UL, 3740539785UL, 3746164996UL, 4280983219UL, 1690075221UL, 3305556349UL, 4226011346UL, 839676594UL, 1785445494UL, 935893161UL, 904240268UL, 3484988721UL, 2290931247UL, 2109493967UL, 1497667362UL, 1494555863UL, 3251796061UL, 40877237UL, 2914051470UL, +1936503212UL, 1428826975UL, 170295791UL, 2753410803UL, 2200994594UL, 3416506072UL, 3263438011UL, 1523230564UL, 393272614UL, 1632665034UL, 3223475136UL, 1847095655UL, 375335282UL, 667585308UL, 3651645415UL, 1628711405UL, 1888152231UL, 786890392UL, 1349234364UL, 1278024517UL, 3955811679UL, 317409190UL, 4213552796UL, 2355655048UL, 1636349912UL, 2875036620UL, 891435579UL, 1233059003UL, 2593048824UL, 942056581UL, 2852399035UL, 1606837225UL, +787552244UL, 1995239637UL, 2482815609UL, 3849697041UL, 723338833UL, 841396894UL, 2718419035UL, 3363828032UL, 2914796626UL, 1043554448UL, 2335090807UL, 1421795969UL, 2322011430UL, 1088985845UL, 2754923978UL, 1646731611UL, 492284258UL, 2339383764UL, 2345741058UL, 3985616488UL, 4055048437UL, 1700143892UL, 2980557654UL, 3047950756UL, 588678041UL, 1077538998UL, 2650679367UL, 2853583947UL, 1902113580UL, 992549416UL, 3375043688UL, 3489699354UL, +2401362855UL, 2822431025UL, 2111206241UL, 3060460082UL, 1409014396UL, 3313834796UL, 3661696135UL, 749987143UL, 3200344474UL, 2743316601UL, 842885927UL, 3902266797UL, 1572013294UL, 3116963503UL, 305659983UL, 132158360UL, 2399116869UL, 2802105766UL, 543215927UL, 4250983939UL, 2719881954UL, 1909593430UL, 1025784309UL, 853237881UL, 3875675156UL, 1753566841UL, 315928539UL, 2265992307UL, 2155720472UL, 1902508987UL, 4246118829UL, 4054781820UL, +1291267638UL, 156828838UL, 2919782856UL, 499968148UL, 2746436642UL, 2108151330UL, 1589837081UL, 3654438263UL, 467304037UL, 2376244866UL, 611554173UL, 1410713407UL, 491953742UL, 1003597552UL, 961109680UL, 1548061756UL, 1934888620UL, 4214562113UL, 4154375443UL, 3318608531UL, 3599839935UL, 2599819225UL, 2676649952UL, 3147375990UL, 3197943734UL, 4213499273UL, 4203909276UL, 668602384UL, 3979162921UL, 4241359084UL, 197252548UL, 8968884UL, +3647746035UL, 2830313226UL, 2057817762UL, 791687787UL, 1643270604UL, 1571637938UL, 4065571991UL, 961587641UL, 2026290282UL, 3826814783UL, 1067370024UL, 1810581550UL, 1525669339UL, 2679791787UL, 1664654967UL, 3740539785UL, 3746164996UL, 3971185743UL, 1690075221UL, 3305556349UL, 4226011346UL, 839676594UL, 4017546432UL, 935893161UL, 904240268UL, 3484988721UL, 2290931247UL, 2887434676UL, 1497667362UL, 1494555863UL, 3251796061UL, 40877237UL, +675451622UL, 1936503212UL, 1428826975UL, 170295791UL, 2753410803UL, 13691728UL, 3416506072UL, 3263438011UL, 1523230564UL, 393272614UL, 2875584734UL, 3223475136UL, 1847095655UL, 375335282UL, 667585308UL, 192306502UL, 1628711405UL, 1888152231UL, 786890392UL, 1349234364UL, 511851370UL, 3955811679UL, 317409190UL, 4213552796UL, 2355655048UL, 131052067UL, 2875036620UL, 891435579UL, 1233059003UL, 2593048824UL, 2915307792UL, 2852399035UL, +1606837225UL, 787552244UL, 1995239637UL, 886016481UL, 3849697041UL, 723338833UL, 841396894UL, 2718419035UL, 1765948302UL, 2914796626UL, 1043554448UL, 2335090807UL, 1421795969UL, 4270899906UL, 1088985845UL, 2754923978UL, 1646731611UL, 492284258UL, 1723935335UL, 2345741058UL, 3985616488UL, 4055048437UL, 1700143892UL, 2254566160UL, 3047950756UL, 588678041UL, 1077538998UL, 2650679367UL, 1004539894UL, 1902113580UL, 992549416UL, 3375043688UL, +3489699354UL, 2030140735UL, 2822431025UL, 2111206241UL, 3060460082UL, 1409014396UL, 3053214877UL, 3661696135UL, 749987143UL, 3200344474UL, 2743316601UL, 398855857UL, 3902266797UL, 1572013294UL, 3116963503UL, 305659983UL, 1626072332UL, 2399116869UL, 2802105766UL, 543215927UL, 4250983939UL, 1149058742UL, 1909593430UL, 1025784309UL, 853237881UL, 3875675156UL, 2709854504UL, 315928539UL, 2265992307UL, 2155720472UL, 1902508987UL, 4065691077UL, +4054781820UL, 1291267638UL, 156828838UL, 2919782856UL, 1004764391UL, 2746436642UL, 2108151330UL, 1589837081UL, 3654438263UL, 2380382984UL, 2376244866UL, 611554173UL, 1410713407UL, 491953742UL, 3149407591UL, 961109680UL, 1548061756UL, 1934888620UL, 4214562113UL, 1555853416UL, 3318608531UL, 3599839935UL, 2599819225UL, 2676649952UL, 1902647993UL, 3197943734UL, 4213499273UL, 4203909276UL, 668602384UL, 2188341510UL, 4241359084UL, 197252548UL, +8968884UL, 3647746035UL, 629654524UL, 2057817762UL, 791687787UL, 1643270604UL, 1571637938UL, 3066487639UL, 961587641UL, 2026290282UL, 3826814783UL, 1067370024UL, 2223613942UL, 1525669339UL, 2679791787UL, 1664654967UL, 3740539785UL, 3902060288UL, 3971185743UL, 1690075221UL, 3305556349UL, 4226011346UL, 3135081672UL, 4017546432UL, 935893161UL, 904240268UL, 3484988721UL, 2448752416UL, 2887434676UL, 1497667362UL, 1494555863UL, 3251796061UL, +1037186927UL, 1608759110UL, 3873834254UL, 59242551UL, 487334743UL, 2580513180UL, 3704829028UL, 3859157573UL, 3452402004UL, 783668920UL, 2394905786UL, 3179497902UL, 2576105629UL, 1552362163UL, 2138613992UL, 224944469UL, 3876873579UL, 3402518289UL, 1709606949UL, 4255868112UL, 1249055439UL, 3395879908UL, 2957760102UL, 346905231UL, 590629983UL, 1171021480UL, 4051081465UL, 3913643946UL, 3115845768UL, 1021908139UL, 2556028362UL, 3828177651UL, +2870156105UL, 899722025UL, 661756192UL, 3775551864UL, 1288569751UL, 3751947667UL, 3064664685UL, 2559273148UL, 2660772417UL, 2448044253UL, 3054357327UL, 3434913868UL, 1444728572UL, 3010819186UL, 3010362527UL, 1709131033UL, 3425689752UL, 2849921358UL, 3518017065UL, 3845809665UL, 3245724553UL, 1008739837UL, 3274032925UL, 2567688974UL, 1981389077UL, 1108638127UL, 470206543UL, 1097339633UL, 1714430226UL, 2321268672UL, 1149373331UL, 294569671UL, +4264586290UL, 4270574127UL, 2522456947UL, 230975563UL, 131504269UL, 541738544UL, 1380704847UL, 2946408074UL, 282744860UL, 246858261UL, 2037373985UL, 1769191691UL, 2174871838UL, 2097427065UL, 492251656UL, 1252290304UL, 3616248100UL, 3213248383UL, 1847973756UL, 647347869UL, 3015847616UL, 299045987UL, 866593289UL, 2009367463UL, 2448831631UL, 337965200UL, 1210654808UL, 1694878225UL, 853507918UL, 3373825966UL, 4262812941UL, 4279525028UL, +338822858UL, 1038097567UL, 3996799911UL, 755960212UL, 149304151UL, 1599868486UL, 4021605447UL, 3040297322UL, 3891899828UL, 1711866076UL, 900840696UL, 3675688669UL, 3070862438UL, 2611308185UL, 2359948129UL, 1158552196UL, 2094484627UL, 3077606843UL, 2119537593UL, 427023787UL, 3632076073UL, 2670551310UL, 3396099733UL, 1066081183UL, 1817788918UL, 324769315UL, 656687887UL, 202117575UL, 3106428593UL, 3730407212UL, 1661316263UL, 1215084998UL, +2025391552UL, 664352483UL, 1914686594UL, 9439399UL, 2548190484UL, 3127972014UL, 4008228378UL, 2645735658UL, 2191361716UL, 2211450148UL, 1863406291UL, 1179298131UL, 241880428UL, 2330159770UL, 3490494273UL, 1337382890UL, 747522461UL, 1060348557UL, 3618051469UL, 991193538UL, 1604905367UL, 2595102954UL, 1460144089UL, 3990194961UL, 44265425UL, 896268152UL, 9333748UL, 2850675977UL, 941433385UL, 2483544989UL, 3443750079UL, 2488690792UL, +}, +{ +824297644UL, 239464654UL, 4133652405UL, 1611614045UL, 102133367UL, 1780659362UL, 114934718UL, 3793050817UL, 3286619856UL, 1323742990UL, 3487325492UL, 468742651UL, 271433491UL, 3474195023UL, 479173886UL, 3282693508UL, 978269731UL, 1826990521UL, 3664994445UL, 1943608646UL, 2356793330UL, 2228748670UL, 4238523810UL, 2467714013UL, 1732683390UL, 2345218001UL, 3371637369UL, 1073602848UL, 844797255UL, 3881048480UL, 509186599UL, 1399427071UL, +3815270778UL, 1505666412UL, 2616384981UL, 2990167853UL, 3716581225UL, 3063486812UL, 1568307898UL, 3262882991UL, 1455926070UL, 3011806226UL, 3803364927UL, 849372289UL, 2382885729UL, 3071102985UL, 3838244574UL, 3219174218UL, 847830757UL, 1414310383UL, 3679389549UL, 1558413907UL, 2211822428UL, 339810803UL, 1051648907UL, 76928699UL, 3174194320UL, 3920525151UL, 2010088097UL, 4111092791UL, 3537133983UL, 1701410561UL, 3036563175UL, 4010986440UL, +1749862952UL, 159833659UL, 3406940095UL, 1041601178UL, 4005001553UL, 1663515026UL, 1728511107UL, 1496728329UL, 2359970426UL, 530862749UL, 3797637507UL, 2550923758UL, 1450321218UL, 21682904UL, 936804838UL, 3832989199UL, 3063256293UL, 3991708711UL, 986539283UL, 3775232150UL, 2867283706UL, 747477232UL, 946349345UL, 1010022077UL, 188204104UL, 2526787171UL, 2816843760UL, 1776005940UL, 2819738500UL, 1155856699UL, 2191793692UL, 3802193350UL, +1163036922UL, 645032560UL, 3122679267UL, 3311719932UL, 3757073707UL, 2464258247UL, 1360425558UL, 387981241UL, 1714916540UL, 411019237UL, 2248466094UL, 2878213113UL, 2742600760UL, 2763650927UL, 2526526309UL, 1093836264UL, 3819986000UL, 3754388150UL, 1731831799UL, 1441137152UL, 1625850961UL, 1182084155UL, 1596226376UL, 2389499892UL, 3923360808UL, 2439159233UL, 1623373213UL, 2513747479UL, 3651587995UL, 1040867254UL, 4208484711UL, 3489019765UL, +2141904813UL, 3666280633UL, 970464748UL, 2970978888UL, 1376163015UL, 1218588624UL, 2721249823UL, 707915046UL, 4262557484UL, 3237019195UL, 744279211UL, 364567144UL, 1997174860UL, 3215512870UL, 2758022574UL, 2677818352UL, 4198422061UL, 3016017869UL, 2243997977UL, 1029293722UL, 1820056287UL, 1090825999UL, 4135403724UL, 299239527UL, 874620372UL, 2995368704UL, 3219627293UL, 2431393692UL, 3470601754UL, 1809177571UL, 37446335UL, 1619184385UL, +675901368UL, 824297644UL, 239464654UL, 4133652405UL, 1611614045UL, 1918718045UL, 1780659362UL, 114934718UL, 3793050817UL, 3286619856UL, 3566342809UL, 3487325492UL, 468742651UL, 271433491UL, 3474195023UL, 77797025UL, 3282693508UL, 978269731UL, 1826990521UL, 3664994445UL, 1455182612UL, 2356793330UL, 2228748670UL, 4238523810UL, 2467714013UL, 1081984526UL, 2345218001UL, 3371637369UL, 1073602848UL, 844797255UL, 4125413817UL, 509186599UL, +1399427071UL, 3815270778UL, 1505666412UL, 891823593UL, 2990167853UL, 3716581225UL, 3063486812UL, 1568307898UL, 1753181930UL, 1455926070UL, 3011806226UL, 3803364927UL, 849372289UL, 4211525266UL, 3071102985UL, 3838244574UL, 3219174218UL, 847830757UL, 774013898UL, 3679389549UL, 1558413907UL, 2211822428UL, 339810803UL, 2282783575UL, 76928699UL, 3174194320UL, 3920525151UL, 2010088097UL, 3894905215UL, 3537133983UL, 1701410561UL, 3036563175UL, +4010986440UL, 676262036UL, 159833659UL, 3406940095UL, 1041601178UL, 4005001553UL, 3470687799UL, 1728511107UL, 1496728329UL, 2359970426UL, 530862749UL, 3081565689UL, 2550923758UL, 1450321218UL, 21682904UL, 936804838UL, 951873872UL, 3063256293UL, 3991708711UL, 986539283UL, 3775232150UL, 487381835UL, 747477232UL, 946349345UL, 1010022077UL, 188204104UL, 2898848241UL, 2816843760UL, 1776005940UL, 2819738500UL, 1155856699UL, 2432683643UL, +3802193350UL, 1163036922UL, 645032560UL, 3122679267UL, 22749078UL, 3757073707UL, 2464258247UL, 1360425558UL, 387981241UL, 3652130062UL, 411019237UL, 2248466094UL, 2878213113UL, 2742600760UL, 811608089UL, 2526526309UL, 1093836264UL, 3819986000UL, 3754388150UL, 415809552UL, 1441137152UL, 1625850961UL, 1182084155UL, 1596226376UL, 202609936UL, 3923360808UL, 2439159233UL, 1623373213UL, 2513747479UL, 4149563237UL, 1040867254UL, 4208484711UL, +3489019765UL, 2141904813UL, 718806958UL, 970464748UL, 2970978888UL, 1376163015UL, 1218588624UL, 2307367700UL, 707915046UL, 4262557484UL, 3237019195UL, 744279211UL, 1876395939UL, 1997174860UL, 3215512870UL, 2758022574UL, 2677818352UL, 2276158677UL, 3016017869UL, 2243997977UL, 1029293722UL, 1820056287UL, 3605618012UL, 4135403724UL, 299239527UL, 874620372UL, 2995368704UL, 872126519UL, 2431393692UL, 3470601754UL, 1809177571UL, 37446335UL, +2365355125UL, 675901368UL, 824297644UL, 239464654UL, 4133652405UL, 8139161UL, 1918718045UL, 1780659362UL, 114934718UL, 3793050817UL, 2424418256UL, 3566342809UL, 3487325492UL, 468742651UL, 271433491UL, 542129690UL, 77797025UL, 3282693508UL, 978269731UL, 1826990521UL, 2963435579UL, 1455182612UL, 2356793330UL, 2228748670UL, 4238523810UL, 2373300657UL, 1081984526UL, 2345218001UL, 3371637369UL, 1073602848UL, 2948610237UL, 4125413817UL, +509186599UL, 1399427071UL, 3815270778UL, 2870251133UL, 891823593UL, 2990167853UL, 3716581225UL, 3063486812UL, 2347504584UL, 1753181930UL, 1455926070UL, 3011806226UL, 3803364927UL, 3956554065UL, 4211525266UL, 3071102985UL, 3838244574UL, 3219174218UL, 2018597841UL, 774013898UL, 3679389549UL, 1558413907UL, 2211822428UL, 56072605UL, 2282783575UL, 76928699UL, 3174194320UL, 3920525151UL, 268031035UL, 3894905215UL, 3537133983UL, 1701410561UL, +3036563175UL, 366935627UL, 676262036UL, 159833659UL, 3406940095UL, 1041601178UL, 4125224603UL, 3470687799UL, 1728511107UL, 1496728329UL, 2359970426UL, 3570997128UL, 3081565689UL, 2550923758UL, 1450321218UL, 21682904UL, 604517910UL, 951873872UL, 3063256293UL, 3991708711UL, 986539283UL, 2414780630UL, 487381835UL, 747477232UL, 946349345UL, 1010022077UL, 3820353604UL, 2898848241UL, 2816843760UL, 1776005940UL, 2819738500UL, 1192624235UL, +2432683643UL, 3802193350UL, 1163036922UL, 645032560UL, 4050277201UL, 22749078UL, 3757073707UL, 2464258247UL, 1360425558UL, 1933406988UL, 3652130062UL, 411019237UL, 2248466094UL, 2878213113UL, 37869698UL, 811608089UL, 2526526309UL, 1093836264UL, 3819986000UL, 3999750910UL, 415809552UL, 1441137152UL, 1625850961UL, 1182084155UL, 1186617400UL, 202609936UL, 3923360808UL, 2439159233UL, 1623373213UL, 4226729056UL, 4149563237UL, 1040867254UL, +4208484711UL, 3489019765UL, 3728140516UL, 718806958UL, 970464748UL, 2970978888UL, 1376163015UL, 1307011711UL, 2307367700UL, 707915046UL, 4262557484UL, 3237019195UL, 4014387080UL, 1876395939UL, 1997174860UL, 3215512870UL, 2758022574UL, 1696763772UL, 2276158677UL, 3016017869UL, 2243997977UL, 1029293722UL, 1444214949UL, 3605618012UL, 4135403724UL, 299239527UL, 874620372UL, 1524158085UL, 872126519UL, 2431393692UL, 3470601754UL, 1809177571UL, +163166369UL, 2365355125UL, 675901368UL, 824297644UL, 239464654UL, 1626558353UL, 8139161UL, 1918718045UL, 1780659362UL, 114934718UL, 1885224714UL, 2424418256UL, 3566342809UL, 3487325492UL, 468742651UL, 1101039917UL, 542129690UL, 77797025UL, 3282693508UL, 978269731UL, 3659653445UL, 2963435579UL, 1455182612UL, 2356793330UL, 2228748670UL, 539062188UL, 2373300657UL, 1081984526UL, 2345218001UL, 3371637369UL, 2825652803UL, 2948610237UL, +4125413817UL, 509186599UL, 1399427071UL, 3197034620UL, 2870251133UL, 891823593UL, 2990167853UL, 3716581225UL, 3773712182UL, 2347504584UL, 1753181930UL, 1455926070UL, 3011806226UL, 3260276773UL, 3956554065UL, 4211525266UL, 3071102985UL, 3838244574UL, 201639236UL, 2018597841UL, 774013898UL, 3679389549UL, 1558413907UL, 2830702673UL, 56072605UL, 2282783575UL, 76928699UL, 3174194320UL, 1677734845UL, 268031035UL, 3894905215UL, 3537133983UL, +1701410561UL, 4240866153UL, 366935627UL, 676262036UL, 159833659UL, 3406940095UL, 4245889153UL, 4125224603UL, 3470687799UL, 1728511107UL, 1496728329UL, 3650277906UL, 3570997128UL, 3081565689UL, 2550923758UL, 1450321218UL, 3392011930UL, 604517910UL, 951873872UL, 3063256293UL, 3991708711UL, 2876003834UL, 2414780630UL, 487381835UL, 747477232UL, 946349345UL, 982266944UL, 3820353604UL, 2898848241UL, 2816843760UL, 1776005940UL, 3677715064UL, +1192624235UL, 2432683643UL, 3802193350UL, 1163036922UL, 1226669337UL, 4050277201UL, 22749078UL, 3757073707UL, 2464258247UL, 4197532785UL, 1933406988UL, 3652130062UL, 411019237UL, 2248466094UL, 3209426720UL, 37869698UL, 811608089UL, 2526526309UL, 1093836264UL, 535856568UL, 3999750910UL, 415809552UL, 1441137152UL, 1625850961UL, 2181491119UL, 1186617400UL, 202609936UL, 3923360808UL, 2439159233UL, 1823827533UL, 4226729056UL, 4149563237UL, +1040867254UL, 4208484711UL, 1101917521UL, 3728140516UL, 718806958UL, 970464748UL, 2970978888UL, 1574663259UL, 1307011711UL, 2307367700UL, 707915046UL, 4262557484UL, 2164217930UL, 4014387080UL, 1876395939UL, 1997174860UL, 3215512870UL, 1335157953UL, 1696763772UL, 2276158677UL, 3016017869UL, 2243997977UL, 324788481UL, 1444214949UL, 3605618012UL, 4135403724UL, 299239527UL, 4190629945UL, 1524158085UL, 872126519UL, 2431393692UL, 3470601754UL, +3701018280UL, 671547257UL, 4029965023UL, 1026428282UL, 1584875796UL, 3537698406UL, 3731126476UL, 2419795330UL, 993551117UL, 2126319514UL, 3557113304UL, 1014047757UL, 1407120210UL, 1977537539UL, 1338958570UL, 3249585389UL, 3661503659UL, 4240815680UL, 1866933898UL, 3205442033UL, 4247144816UL, 1422846419UL, 3847421981UL, 1383632066UL, 3589322376UL, 1816906043UL, 1310944471UL, 3646822098UL, 799529013UL, 3350558751UL, 2552899295UL, 4281235599UL, +4069668296UL, 4123814877UL, 3289565353UL, 1512974699UL, 111908081UL, 2535556715UL, 333570815UL, 3638041929UL, 1942569446UL, 20945397UL, 3784826827UL, 200406456UL, 2640512138UL, 38390336UL, 436784052UL, 3062106345UL, 1675333627UL, 709613078UL, 3479720979UL, 2726065658UL, 4072312748UL, 797389139UL, 3492082903UL, 3792395750UL, 983473383UL, 2984788349UL, 2030282907UL, 2246686378UL, 2451087141UL, 1799640566UL, 2182694041UL, 3226819076UL, +3573153299UL, 3658670545UL, 1197013516UL, 777601408UL, 4271704548UL, 1192713934UL, 1628497069UL, 681025927UL, 4078910773UL, 619496169UL, 1534725146UL, 1881987408UL, 2283881479UL, 1090218673UL, 4169123978UL, 2352195985UL, 2640116078UL, 3869558100UL, 2859177954UL, 3329803656UL, 4048903941UL, 1636589748UL, 2095007175UL, 4169840880UL, 2953611537UL, 2413740464UL, 3029624235UL, 778662441UL, 422412779UL, 412103280UL, 1701569571UL, 564088645UL, +469973310UL, 254302146UL, 3963642101UL, 555781470UL, 2983576224UL, 1757897888UL, 1420763962UL, 2176323176UL, 916790568UL, 3057610889UL, 196828641UL, 1435167402UL, 325046353UL, 1337309066UL, 2691769282UL, 3572566918UL, 2910149226UL, 3659418019UL, 2511762503UL, 3869838339UL, 1413312151UL, 1939339596UL, 801124461UL, 760477862UL, 2416958233UL, 3439465675UL, 3561763524UL, 1760392811UL, 1582406751UL, 1203071257UL, 755811399UL, 2675585013UL, +1150664766UL, 3515765747UL, 3419135844UL, 2076543342UL, 1191918544UL, 3644819073UL, 2195875022UL, 2909071148UL, 3385707813UL, 1151273265UL, 1467337419UL, 3570589492UL, 3742049917UL, 1609858615UL, 2964509119UL, 3747960348UL, 2825858640UL, 101501715UL, 1234710482UL, 750428334UL, 2870070395UL, 416615350UL, 4054039387UL, 3807926874UL, 3035407103UL, 1644560291UL, 2490941295UL, 963796562UL, 3233132139UL, 2590859502UL, 2845243609UL, 964355909UL, +}, +{ +2882980002UL, 2211288683UL, 872766101UL, 3713771728UL, 1429983118UL, 2069599564UL, 827699420UL, 1288565883UL, 2985727214UL, 3873174741UL, 2138389854UL, 3915615927UL, 2759028650UL, 3120611541UL, 385953581UL, 189931252UL, 2044235060UL, 4214733958UL, 1899137741UL, 1973215178UL, 494148492UL, 1550568689UL, 3646957712UL, 3764784141UL, 1114556979UL, 1411407684UL, 1194906295UL, 1718808623UL, 1809627046UL, 1413570172UL, 180837718UL, 2588730975UL, +1481586714UL, 2836300053UL, 1967135375UL, 4010897189UL, 3392273121UL, 3466021198UL, 1182364160UL, 1364130321UL, 1795412556UL, 330320182UL, 1165093128UL, 2125767818UL, 904192995UL, 51833064UL, 232302906UL, 1834422179UL, 476731510UL, 3484170517UL, 2373156680UL, 2610500049UL, 1688364249UL, 463611489UL, 3759685710UL, 62038708UL, 2357334250UL, 1230002441UL, 520303451UL, 3009758047UL, 1882263827UL, 2524779298UL, 1736323157UL, 3883037541UL, +1103650182UL, 1137565179UL, 3112310886UL, 3524287283UL, 3064002681UL, 4106308847UL, 3180534967UL, 2463036338UL, 1859639515UL, 1319061987UL, 354419222UL, 4108171950UL, 601260554UL, 705389180UL, 4081137445UL, 3461353436UL, 399768111UL, 3963945521UL, 2094962544UL, 630762046UL, 369047181UL, 3495709267UL, 3525452874UL, 314919391UL, 2152657907UL, 881476500UL, 3565507827UL, 2594931381UL, 579458905UL, 1767988684UL, 2678728511UL, 3416503939UL, +4150612567UL, 1015748208UL, 2059142720UL, 2725183490UL, 2998421769UL, 1644667445UL, 4221112143UL, 456578131UL, 3881530201UL, 190710543UL, 1721255927UL, 2274887963UL, 187713135UL, 2209254952UL, 2185750138UL, 2992229399UL, 482133467UL, 2758198810UL, 15147949UL, 536333711UL, 2296185346UL, 1103433779UL, 1573407789UL, 1357843567UL, 2927153963UL, 4157295398UL, 533935893UL, 3567030810UL, 1900900411UL, 509578395UL, 3810017456UL, 2134110040UL, +3347323570UL, 3497032747UL, 201278263UL, 3933249682UL, 3849960474UL, 2509123202UL, 3445521167UL, 1355284593UL, 2444811561UL, 2751112324UL, 1116246614UL, 511213077UL, 3412599909UL, 1712118363UL, 54054007UL, 442729047UL, 3077267414UL, 1532701769UL, 181534938UL, 1278069867UL, 3847149992UL, 2305860479UL, 4146252420UL, 2047690303UL, 361856758UL, 452490341UL, 636885000UL, 1733216839UL, 3788548638UL, 1094285639UL, 1349356222UL, 2760444511UL, +976767752UL, 2882980002UL, 2211288683UL, 872766101UL, 3713771728UL, 895830110UL, 2069599564UL, 827699420UL, 1288565883UL, 2985727214UL, 3377496544UL, 2138389854UL, 3915615927UL, 2759028650UL, 3120611541UL, 3254971483UL, 189931252UL, 2044235060UL, 4214733958UL, 1899137741UL, 2095055586UL, 494148492UL, 1550568689UL, 3646957712UL, 3764784141UL, 2869825005UL, 1411407684UL, 1194906295UL, 1718808623UL, 1809627046UL, 907760376UL, 180837718UL, +2588730975UL, 1481586714UL, 2836300053UL, 639229964UL, 4010897189UL, 3392273121UL, 3466021198UL, 1182364160UL, 3006792787UL, 1795412556UL, 330320182UL, 1165093128UL, 2125767818UL, 253264555UL, 51833064UL, 232302906UL, 1834422179UL, 476731510UL, 4284481518UL, 2373156680UL, 2610500049UL, 1688364249UL, 463611489UL, 4133115610UL, 62038708UL, 2357334250UL, 1230002441UL, 520303451UL, 1497001150UL, 1882263827UL, 2524779298UL, 1736323157UL, +3883037541UL, 3541909847UL, 1137565179UL, 3112310886UL, 3524287283UL, 3064002681UL, 3193060438UL, 3180534967UL, 2463036338UL, 1859639515UL, 1319061987UL, 111871878UL, 4108171950UL, 601260554UL, 705389180UL, 4081137445UL, 742999102UL, 399768111UL, 3963945521UL, 2094962544UL, 630762046UL, 3219207950UL, 3495709267UL, 3525452874UL, 314919391UL, 2152657907UL, 720863934UL, 3565507827UL, 2594931381UL, 579458905UL, 1767988684UL, 3958525287UL, +3416503939UL, 4150612567UL, 1015748208UL, 2059142720UL, 4227838648UL, 2998421769UL, 1644667445UL, 4221112143UL, 456578131UL, 302729329UL, 190710543UL, 1721255927UL, 2274887963UL, 187713135UL, 1293706587UL, 2185750138UL, 2992229399UL, 482133467UL, 2758198810UL, 2514965671UL, 536333711UL, 2296185346UL, 1103433779UL, 1573407789UL, 2237639577UL, 2927153963UL, 4157295398UL, 533935893UL, 3567030810UL, 3793156627UL, 509578395UL, 3810017456UL, +2134110040UL, 3347323570UL, 1358364UL, 201278263UL, 3933249682UL, 3849960474UL, 2509123202UL, 628476542UL, 1355284593UL, 2444811561UL, 2751112324UL, 1116246614UL, 3421170828UL, 3412599909UL, 1712118363UL, 54054007UL, 442729047UL, 325825294UL, 1532701769UL, 181534938UL, 1278069867UL, 3847149992UL, 2785457372UL, 4146252420UL, 2047690303UL, 361856758UL, 452490341UL, 1099532083UL, 1733216839UL, 3788548638UL, 1094285639UL, 1349356222UL, +3047068265UL, 976767752UL, 2882980002UL, 2211288683UL, 872766101UL, 366378371UL, 895830110UL, 2069599564UL, 827699420UL, 1288565883UL, 962962884UL, 3377496544UL, 2138389854UL, 3915615927UL, 2759028650UL, 3742489931UL, 3254971483UL, 189931252UL, 2044235060UL, 4214733958UL, 3073407497UL, 2095055586UL, 494148492UL, 1550568689UL, 3646957712UL, 758370067UL, 2869825005UL, 1411407684UL, 1194906295UL, 1718808623UL, 636166267UL, 907760376UL, +180837718UL, 2588730975UL, 1481586714UL, 705382583UL, 639229964UL, 4010897189UL, 3392273121UL, 3466021198UL, 3815622040UL, 3006792787UL, 1795412556UL, 330320182UL, 1165093128UL, 2956382339UL, 253264555UL, 51833064UL, 232302906UL, 1834422179UL, 3665645898UL, 4284481518UL, 2373156680UL, 2610500049UL, 1688364249UL, 2565987890UL, 4133115610UL, 62038708UL, 2357334250UL, 1230002441UL, 2397198293UL, 1497001150UL, 1882263827UL, 2524779298UL, +1736323157UL, 817630445UL, 3541909847UL, 1137565179UL, 3112310886UL, 3524287283UL, 1356492703UL, 3193060438UL, 3180534967UL, 2463036338UL, 1859639515UL, 3963974342UL, 111871878UL, 4108171950UL, 601260554UL, 705389180UL, 1776439965UL, 742999102UL, 399768111UL, 3963945521UL, 2094962544UL, 2007137733UL, 3219207950UL, 3495709267UL, 3525452874UL, 314919391UL, 3877039785UL, 720863934UL, 3565507827UL, 2594931381UL, 579458905UL, 2919403199UL, +3958525287UL, 3416503939UL, 4150612567UL, 1015748208UL, 960765392UL, 4227838648UL, 2998421769UL, 1644667445UL, 4221112143UL, 2402062799UL, 302729329UL, 190710543UL, 1721255927UL, 2274887963UL, 3958481548UL, 1293706587UL, 2185750138UL, 2992229399UL, 482133467UL, 3838280UL, 2514965671UL, 536333711UL, 2296185346UL, 1103433779UL, 3675282065UL, 2237639577UL, 2927153963UL, 4157295398UL, 533935893UL, 4172021805UL, 3793156627UL, 509578395UL, +3810017456UL, 2134110040UL, 3608998517UL, 1358364UL, 201278263UL, 3933249682UL, 3849960474UL, 2445690023UL, 628476542UL, 1355284593UL, 2444811561UL, 2751112324UL, 507378026UL, 3421170828UL, 3412599909UL, 1712118363UL, 54054007UL, 770634305UL, 325825294UL, 1532701769UL, 181534938UL, 1278069867UL, 4055596097UL, 2785457372UL, 4146252420UL, 2047690303UL, 361856758UL, 3439427065UL, 1099532083UL, 1733216839UL, 3788548638UL, 1094285639UL, +1633234274UL, 3047068265UL, 976767752UL, 2882980002UL, 2211288683UL, 3763615153UL, 366378371UL, 895830110UL, 2069599564UL, 827699420UL, 2457443913UL, 962962884UL, 3377496544UL, 2138389854UL, 3915615927UL, 3290989016UL, 3742489931UL, 3254971483UL, 189931252UL, 2044235060UL, 4275822963UL, 3073407497UL, 2095055586UL, 494148492UL, 1550568689UL, 1043420085UL, 758370067UL, 2869825005UL, 1411407684UL, 1194906295UL, 676378812UL, 636166267UL, +907760376UL, 180837718UL, 2588730975UL, 2971715054UL, 705382583UL, 639229964UL, 4010897189UL, 3392273121UL, 795184546UL, 3815622040UL, 3006792787UL, 1795412556UL, 330320182UL, 1990804460UL, 2956382339UL, 253264555UL, 51833064UL, 232302906UL, 836875615UL, 3665645898UL, 4284481518UL, 2373156680UL, 2610500049UL, 98106795UL, 2565987890UL, 4133115610UL, 62038708UL, 2357334250UL, 2761212145UL, 2397198293UL, 1497001150UL, 1882263827UL, +2524779298UL, 2381031747UL, 817630445UL, 3541909847UL, 1137565179UL, 3112310886UL, 2501374726UL, 1356492703UL, 3193060438UL, 3180534967UL, 2463036338UL, 3671733096UL, 3963974342UL, 111871878UL, 4108171950UL, 601260554UL, 1017043724UL, 1776439965UL, 742999102UL, 399768111UL, 3963945521UL, 2177838102UL, 2007137733UL, 3219207950UL, 3495709267UL, 3525452874UL, 3254054416UL, 3877039785UL, 720863934UL, 3565507827UL, 2594931381UL, 1994293489UL, +2919403199UL, 3958525287UL, 3416503939UL, 4150612567UL, 1976960210UL, 960765392UL, 4227838648UL, 2998421769UL, 1644667445UL, 2896792687UL, 2402062799UL, 302729329UL, 190710543UL, 1721255927UL, 2914584080UL, 3958481548UL, 1293706587UL, 2185750138UL, 2992229399UL, 810756083UL, 3838280UL, 2514965671UL, 536333711UL, 2296185346UL, 1776509588UL, 3675282065UL, 2237639577UL, 2927153963UL, 4157295398UL, 2048779551UL, 4172021805UL, 3793156627UL, +509578395UL, 3810017456UL, 3042185034UL, 3608998517UL, 1358364UL, 201278263UL, 3933249682UL, 3551449718UL, 2445690023UL, 628476542UL, 1355284593UL, 2444811561UL, 3480611728UL, 507378026UL, 3421170828UL, 3412599909UL, 1712118363UL, 1268921331UL, 770634305UL, 325825294UL, 1532701769UL, 181534938UL, 2645357587UL, 4055596097UL, 2785457372UL, 4146252420UL, 2047690303UL, 1994855609UL, 3439427065UL, 1099532083UL, 1733216839UL, 3788548638UL, +3516588243UL, 4058132193UL, 3940172101UL, 4043964688UL, 3377150021UL, 1381463736UL, 3320280180UL, 931260821UL, 2754727582UL, 1286176949UL, 1661126244UL, 2301263887UL, 2255977851UL, 1122646603UL, 1767549201UL, 162324152UL, 425506096UL, 3777762686UL, 13687528UL, 710105607UL, 1092739920UL, 2930179533UL, 568855389UL, 2476208631UL, 964360978UL, 2011445117UL, 3887128674UL, 2799005525UL, 2479086439UL, 814368438UL, 2018629666UL, 909662384UL, +231589584UL, 1422241284UL, 4035938208UL, 3570985552UL, 660700421UL, 603857869UL, 567385627UL, 3232044670UL, 291307502UL, 947817625UL, 3466590280UL, 3080261993UL, 947835229UL, 2925888682UL, 1817591844UL, 2652420575UL, 4150903445UL, 4055627313UL, 1715025966UL, 505331227UL, 1863531052UL, 2928506098UL, 947547681UL, 1117344443UL, 781457023UL, 607542746UL, 241559360UL, 3797150797UL, 105381589UL, 361541961UL, 3393121650UL, 3840152184UL, +2873171161UL, 3030026082UL, 1115171192UL, 1718221281UL, 96787532UL, 2556617898UL, 1237726058UL, 2876298621UL, 1052881200UL, 461661595UL, 2632346030UL, 1775614319UL, 2454951319UL, 3691637824UL, 4018448825UL, 1610472965UL, 3076493165UL, 1364200430UL, 2011206580UL, 1066672050UL, 706141458UL, 2064189273UL, 346938484UL, 2964350202UL, 3731612957UL, 2506635528UL, 2007045393UL, 3312126930UL, 2602035453UL, 988876930UL, 2960173442UL, 559685520UL, +2719943441UL, 891699839UL, 1151651090UL, 1223301894UL, 3666960271UL, 1330825927UL, 1681770552UL, 38877327UL, 3803211467UL, 4000053051UL, 3552560459UL, 3510286057UL, 2606732870UL, 721190747UL, 1933504723UL, 3110735238UL, 2333178561UL, 1577381363UL, 595257962UL, 4120745072UL, 960219089UL, 2591080970UL, 3354222743UL, 47827627UL, 3759509914UL, 304815919UL, 2643673615UL, 1381570381UL, 2103367217UL, 2440936991UL, 2376721005UL, 1483630814UL, +3137202706UL, 3075255640UL, 1743649605UL, 3649754571UL, 2550788713UL, 4281983459UL, 904183710UL, 4243944530UL, 2742129811UL, 3363501626UL, 3670239155UL, 4233018118UL, 2615012385UL, 1420298161UL, 1251344091UL, 2172588631UL, 1243035186UL, 1724496237UL, 762022558UL, 8747231UL, 334416849UL, 1219880856UL, 187900356UL, 2527057367UL, 1730455958UL, 3240238410UL, 906024910UL, 2351575735UL, 4207748622UL, 936139767UL, 1984289988UL, 285939331UL, +}, +{ +4246897171UL, 2217508286UL, 4117450683UL, 4110626546UL, 3753823387UL, 3977667932UL, 623718443UL, 2276396692UL, 3772091798UL, 2272323453UL, 710314822UL, 3733316262UL, 1497955597UL, 700242668UL, 3582720207UL, 1247731879UL, 336477088UL, 532374143UL, 1123157198UL, 123828173UL, 272472192UL, 2142741093UL, 2557920990UL, 4209595119UL, 2807266578UL, 1516814248UL, 4250883502UL, 1967663703UL, 215335417UL, 1252724071UL, 4267389372UL, 94668579UL, +1980152960UL, 968677393UL, 1237744359UL, 63833646UL, 2488747616UL, 700459471UL, 744977323UL, 40829823UL, 955400639UL, 37187948UL, 53133706UL, 2014551043UL, 1664982537UL, 3342787122UL, 1549278321UL, 1245110464UL, 3424539081UL, 2180485253UL, 2757636973UL, 3590044052UL, 2712703548UL, 1366894959UL, 1777449151UL, 1538653374UL, 168718075UL, 2435805251UL, 588815465UL, 3166271130UL, 3164200096UL, 417809976UL, 623036767UL, 340121872UL, +1792214783UL, 56330125UL, 3268029211UL, 1117100306UL, 345899179UL, 1547071836UL, 3657965225UL, 4109701299UL, 664937685UL, 2627187961UL, 149301108UL, 1764003230UL, 3177910586UL, 3081492846UL, 2295419724UL, 2553420882UL, 1506534805UL, 971284719UL, 3224921758UL, 3336906843UL, 1507395478UL, 1224379418UL, 4117299702UL, 1973783225UL, 3609783242UL, 4186900040UL, 3715175536UL, 3904547465UL, 459692505UL, 3546328518UL, 3071448159UL, 1300375875UL, +1805392236UL, 3072717072UL, 99113127UL, 4281059076UL, 1658649136UL, 1974081931UL, 3940966682UL, 2092428023UL, 4014384840UL, 1546542514UL, 1130620125UL, 4117533767UL, 3372991735UL, 3537429957UL, 2704347564UL, 2300583688UL, 915286167UL, 1553874575UL, 3466388216UL, 701000054UL, 349103195UL, 1554395274UL, 3140941933UL, 2874072684UL, 2630572105UL, 2794301280UL, 321399291UL, 1158058020UL, 3570908149UL, 122802750UL, 3012686842UL, 2588402967UL, +3420589812UL, 581016671UL, 193235885UL, 1558092297UL, 1233353728UL, 1080743465UL, 3292663441UL, 2188057155UL, 2715412992UL, 4274317234UL, 1657504087UL, 2554269340UL, 1079741964UL, 922252155UL, 569761460UL, 3215661310UL, 2450710288UL, 2491078689UL, 632504591UL, 2169581755UL, 2552457727UL, 2554414735UL, 3347573916UL, 681756629UL, 801451286UL, 3504956478UL, 1308297539UL, 3602650700UL, 3530372129UL, 4117441036UL, 1827438812UL, 2852602217UL, +570161747UL, 4246897171UL, 2217508286UL, 4117450683UL, 4110626546UL, 756072139UL, 3977667932UL, 623718443UL, 2276396692UL, 3772091798UL, 3829898369UL, 710314822UL, 3733316262UL, 1497955597UL, 700242668UL, 757539371UL, 1247731879UL, 336477088UL, 532374143UL, 1123157198UL, 2374238409UL, 272472192UL, 2142741093UL, 2557920990UL, 4209595119UL, 1632439709UL, 1516814248UL, 4250883502UL, 1967663703UL, 215335417UL, 1267642920UL, 4267389372UL, +94668579UL, 1980152960UL, 968677393UL, 2252616933UL, 63833646UL, 2488747616UL, 700459471UL, 744977323UL, 2711054317UL, 955400639UL, 37187948UL, 53133706UL, 2014551043UL, 1664498234UL, 3342787122UL, 1549278321UL, 1245110464UL, 3424539081UL, 496150741UL, 2757636973UL, 3590044052UL, 2712703548UL, 1366894959UL, 2066534443UL, 1538653374UL, 168718075UL, 2435805251UL, 588815465UL, 318307195UL, 3164200096UL, 417809976UL, 623036767UL, +340121872UL, 3426055217UL, 56330125UL, 3268029211UL, 1117100306UL, 345899179UL, 979486044UL, 3657965225UL, 4109701299UL, 664937685UL, 2627187961UL, 2747102301UL, 1764003230UL, 3177910586UL, 3081492846UL, 2295419724UL, 1088606857UL, 1506534805UL, 971284719UL, 3224921758UL, 3336906843UL, 984983218UL, 1224379418UL, 4117299702UL, 1973783225UL, 3609783242UL, 1044785427UL, 3715175536UL, 3904547465UL, 459692505UL, 3546328518UL, 2096978494UL, +1300375875UL, 1805392236UL, 3072717072UL, 99113127UL, 972796497UL, 1658649136UL, 1974081931UL, 3940966682UL, 2092428023UL, 2914458983UL, 1546542514UL, 1130620125UL, 4117533767UL, 3372991735UL, 947968718UL, 2704347564UL, 2300583688UL, 915286167UL, 1553874575UL, 2124709798UL, 701000054UL, 349103195UL, 1554395274UL, 3140941933UL, 2569019225UL, 2630572105UL, 2794301280UL, 321399291UL, 1158058020UL, 4051601694UL, 122802750UL, 3012686842UL, +2588402967UL, 3420589812UL, 1738150581UL, 193235885UL, 1558092297UL, 1233353728UL, 1080743465UL, 1527068788UL, 2188057155UL, 2715412992UL, 4274317234UL, 1657504087UL, 1543089352UL, 1079741964UL, 922252155UL, 569761460UL, 3215661310UL, 2869922986UL, 2491078689UL, 632504591UL, 2169581755UL, 2552457727UL, 2807462748UL, 3347573916UL, 681756629UL, 801451286UL, 3504956478UL, 3400676931UL, 3602650700UL, 3530372129UL, 4117441036UL, 1827438812UL, +4056234054UL, 570161747UL, 4246897171UL, 2217508286UL, 4117450683UL, 3321376103UL, 756072139UL, 3977667932UL, 623718443UL, 2276396692UL, 1340008665UL, 3829898369UL, 710314822UL, 3733316262UL, 1497955597UL, 2098292377UL, 757539371UL, 1247731879UL, 336477088UL, 532374143UL, 2210327641UL, 2374238409UL, 272472192UL, 2142741093UL, 2557920990UL, 3502520226UL, 1632439709UL, 1516814248UL, 4250883502UL, 1967663703UL, 499168780UL, 1267642920UL, +4267389372UL, 94668579UL, 1980152960UL, 2695928666UL, 2252616933UL, 63833646UL, 2488747616UL, 700459471UL, 4181471443UL, 2711054317UL, 955400639UL, 37187948UL, 53133706UL, 441944403UL, 1664498234UL, 3342787122UL, 1549278321UL, 1245110464UL, 2271611585UL, 496150741UL, 2757636973UL, 3590044052UL, 2712703548UL, 3009817799UL, 2066534443UL, 1538653374UL, 168718075UL, 2435805251UL, 734763537UL, 318307195UL, 3164200096UL, 417809976UL, +623036767UL, 4002728646UL, 3426055217UL, 56330125UL, 3268029211UL, 1117100306UL, 1435987728UL, 979486044UL, 3657965225UL, 4109701299UL, 664937685UL, 815527474UL, 2747102301UL, 1764003230UL, 3177910586UL, 3081492846UL, 63383766UL, 1088606857UL, 1506534805UL, 971284719UL, 3224921758UL, 2331024939UL, 984983218UL, 1224379418UL, 4117299702UL, 1973783225UL, 3998070267UL, 1044785427UL, 3715175536UL, 3904547465UL, 459692505UL, 2582830990UL, +2096978494UL, 1300375875UL, 1805392236UL, 3072717072UL, 321154403UL, 972796497UL, 1658649136UL, 1974081931UL, 3940966682UL, 3789726976UL, 2914458983UL, 1546542514UL, 1130620125UL, 4117533767UL, 3440681546UL, 947968718UL, 2704347564UL, 2300583688UL, 915286167UL, 474021937UL, 2124709798UL, 701000054UL, 349103195UL, 1554395274UL, 702752814UL, 2569019225UL, 2630572105UL, 2794301280UL, 321399291UL, 2406346046UL, 4051601694UL, 122802750UL, +3012686842UL, 2588402967UL, 1782259321UL, 1738150581UL, 193235885UL, 1558092297UL, 1233353728UL, 3935919190UL, 1527068788UL, 2188057155UL, 2715412992UL, 4274317234UL, 1722541048UL, 1543089352UL, 1079741964UL, 922252155UL, 569761460UL, 3384000986UL, 2869922986UL, 2491078689UL, 632504591UL, 2169581755UL, 3451609034UL, 2807462748UL, 3347573916UL, 681756629UL, 801451286UL, 2643408064UL, 3400676931UL, 3602650700UL, 3530372129UL, 4117441036UL, +3635077251UL, 4056234054UL, 570161747UL, 4246897171UL, 2217508286UL, 2364796923UL, 3321376103UL, 756072139UL, 3977667932UL, 623718443UL, 3792539489UL, 1340008665UL, 3829898369UL, 710314822UL, 3733316262UL, 876419217UL, 2098292377UL, 757539371UL, 1247731879UL, 336477088UL, 3307300788UL, 2210327641UL, 2374238409UL, 272472192UL, 2142741093UL, 4142392723UL, 3502520226UL, 1632439709UL, 1516814248UL, 4250883502UL, 3551852862UL, 499168780UL, +1267642920UL, 4267389372UL, 94668579UL, 1177286958UL, 2695928666UL, 2252616933UL, 63833646UL, 2488747616UL, 3571573975UL, 4181471443UL, 2711054317UL, 955400639UL, 37187948UL, 1485050393UL, 441944403UL, 1664498234UL, 3342787122UL, 1549278321UL, 518707274UL, 2271611585UL, 496150741UL, 2757636973UL, 3590044052UL, 305206687UL, 3009817799UL, 2066534443UL, 1538653374UL, 168718075UL, 1914032206UL, 734763537UL, 318307195UL, 3164200096UL, +417809976UL, 2062496275UL, 4002728646UL, 3426055217UL, 56330125UL, 3268029211UL, 1878869053UL, 1435987728UL, 979486044UL, 3657965225UL, 4109701299UL, 1558853775UL, 815527474UL, 2747102301UL, 1764003230UL, 3177910586UL, 681877401UL, 63383766UL, 1088606857UL, 1506534805UL, 971284719UL, 2546285777UL, 2331024939UL, 984983218UL, 1224379418UL, 4117299702UL, 539292757UL, 3998070267UL, 1044785427UL, 3715175536UL, 3904547465UL, 3854154565UL, +2582830990UL, 2096978494UL, 1300375875UL, 1805392236UL, 2586804198UL, 321154403UL, 972796497UL, 1658649136UL, 1974081931UL, 1718873863UL, 3789726976UL, 2914458983UL, 1546542514UL, 1130620125UL, 477866180UL, 3440681546UL, 947968718UL, 2704347564UL, 2300583688UL, 56071603UL, 474021937UL, 2124709798UL, 701000054UL, 349103195UL, 2431577249UL, 702752814UL, 2569019225UL, 2630572105UL, 2794301280UL, 211758134UL, 2406346046UL, 4051601694UL, +122802750UL, 3012686842UL, 2470642374UL, 1782259321UL, 1738150581UL, 193235885UL, 1558092297UL, 852353933UL, 3935919190UL, 1527068788UL, 2188057155UL, 2715412992UL, 543290606UL, 1722541048UL, 1543089352UL, 1079741964UL, 922252155UL, 1146820965UL, 3384000986UL, 2869922986UL, 2491078689UL, 632504591UL, 2936494996UL, 3451609034UL, 2807462748UL, 3347573916UL, 681756629UL, 3428474076UL, 2643408064UL, 3400676931UL, 3602650700UL, 3530372129UL, +3558016488UL, 304167301UL, 3073812276UL, 1253385329UL, 801639697UL, 1346336854UL, 3880416830UL, 1110804934UL, 2500585706UL, 1294233475UL, 1964132477UL, 1625651370UL, 2732590160UL, 310054807UL, 3350133555UL, 800839525UL, 3435579932UL, 2120216654UL, 407780291UL, 1228117799UL, 513334510UL, 1423091447UL, 3698882838UL, 2556406643UL, 1536483608UL, 998695315UL, 1619514015UL, 4197375975UL, 892985909UL, 993665758UL, 4160405430UL, 2379977763UL, +1423742790UL, 4286808034UL, 479280944UL, 3611297256UL, 3481820363UL, 1261889958UL, 455298115UL, 3955764756UL, 2406161837UL, 185873336UL, 3382956716UL, 3556168427UL, 3988426650UL, 2917586591UL, 1248672474UL, 2925146191UL, 1416331075UL, 290755159UL, 2845168299UL, 3301422441UL, 3771816588UL, 491352430UL, 2461746382UL, 1591975949UL, 604909111UL, 3595669760UL, 4079314041UL, 258321046UL, 1352583874UL, 999018951UL, 3150079914UL, 113122510UL, +743303046UL, 3205496412UL, 4267738054UL, 2567402806UL, 2181107494UL, 3266354249UL, 1941487496UL, 2742084900UL, 3758785335UL, 732694221UL, 2052988791UL, 1759288229UL, 1094292464UL, 1582835026UL, 2817864273UL, 666443657UL, 419482443UL, 2877435004UL, 2944696351UL, 2523539432UL, 301119182UL, 998264713UL, 2314419254UL, 3610447393UL, 1139414242UL, 1486351830UL, 3207929489UL, 384633091UL, 4056367270UL, 2348418835UL, 3773781885UL, 1963929818UL, +804929680UL, 1511023454UL, 3915948102UL, 1371942526UL, 2586212526UL, 130122933UL, 2030859646UL, 3730011315UL, 118408868UL, 632704878UL, 3559959612UL, 2926361713UL, 1401386286UL, 599210027UL, 2315051975UL, 157809758UL, 1148939942UL, 3060024350UL, 1464284678UL, 3209480975UL, 3961060416UL, 3481639206UL, 4113344379UL, 3475766200UL, 130581501UL, 1844026536UL, 2661594012UL, 3145812007UL, 3233175620UL, 2549419093UL, 2612966733UL, 1348260920UL, +740167863UL, 226231218UL, 2631972701UL, 2148020402UL, 3399479414UL, 1074946996UL, 30872114UL, 1342415612UL, 1071408471UL, 1141719547UL, 332346805UL, 1473336719UL, 4207932404UL, 3668838170UL, 3154502882UL, 3892070442UL, 2812790310UL, 13931822UL, 1150258251UL, 2369539473UL, 640926011UL, 2991135002UL, 2410382633UL, 548200125UL, 3977740663UL, 1245837867UL, 2378569399UL, 1561469990UL, 2437445882UL, 214387770UL, 3329587833UL, 281635893UL, +}, +{ +1720103319UL, 2201367526UL, 1415072072UL, 2446588589UL, 2195586017UL, 3817930623UL, 653121934UL, 2766514657UL, 765921436UL, 630082485UL, 2990883045UL, 3304472999UL, 471385134UL, 4097977544UL, 3749829028UL, 3587534772UL, 1064359851UL, 800061060UL, 2844220510UL, 389838005UL, 3681318140UL, 1515923235UL, 1885079324UL, 713031018UL, 1962734763UL, 2288160004UL, 1983331336UL, 1247350521UL, 4208372034UL, 1444837930UL, 3549494305UL, 4169715512UL, +701313302UL, 1118275019UL, 3118975645UL, 4153969630UL, 3516491181UL, 3601057044UL, 2509222288UL, 223064937UL, 899123842UL, 2574531231UL, 1386928111UL, 3790651401UL, 1300768348UL, 2038833061UL, 3736517792UL, 3850203561UL, 1679542285UL, 3391273474UL, 3862995487UL, 3118056386UL, 47128429UL, 2977525950UL, 3236389548UL, 1937040839UL, 4223233198UL, 2105119262UL, 721111284UL, 331726226UL, 68419013UL, 2575393464UL, 3648293304UL, 1448878851UL, +4186783614UL, 3696899986UL, 1270877069UL, 3351263117UL, 3918639273UL, 1472902162UL, 2767482392UL, 3549853842UL, 2353191576UL, 3353325530UL, 3072485271UL, 2689121900UL, 2335686695UL, 246689858UL, 2946177636UL, 1677728066UL, 1455723263UL, 3447540996UL, 2143976172UL, 1779511280UL, 3667361203UL, 1575502035UL, 849872082UL, 3527265600UL, 1443266215UL, 1320668722UL, 458373857UL, 3862342513UL, 699597603UL, 685707268UL, 948502001UL, 2501058653UL, +2254562046UL, 2210683894UL, 29088679UL, 1456231200UL, 2764392560UL, 4138068372UL, 3094591474UL, 1093749152UL, 1668875176UL, 3133003149UL, 4128702884UL, 652852832UL, 2211671337UL, 2231125160UL, 131729558UL, 3845605816UL, 3769660625UL, 1696592453UL, 728353643UL, 2751201502UL, 3496971733UL, 3349166522UL, 1005919830UL, 3411089601UL, 3754493523UL, 1994945529UL, 1604309774UL, 2083609686UL, 833983349UL, 2600153513UL, 1677348112UL, 207321473UL, +1051990507UL, 2135039620UL, 4239461390UL, 1574144998UL, 1070761856UL, 1990807569UL, 112704720UL, 2506523299UL, 2827487353UL, 4130754901UL, 1943274185UL, 3913701053UL, 1014850621UL, 3662772872UL, 4115124063UL, 1760146762UL, 3254829227UL, 800302547UL, 3602066837UL, 975658158UL, 2880018391UL, 714134831UL, 2696483406UL, 2351365577UL, 2811011071UL, 3505407160UL, 54109504UL, 424967367UL, 3759525737UL, 1726627246UL, 1110539071UL, 2339755764UL, +3356877114UL, 1720103319UL, 2201367526UL, 1415072072UL, 2446588589UL, 2499136377UL, 3817930623UL, 653121934UL, 2766514657UL, 765921436UL, 3794433488UL, 2990883045UL, 3304472999UL, 471385134UL, 4097977544UL, 3618516788UL, 3587534772UL, 1064359851UL, 800061060UL, 2844220510UL, 2319780070UL, 3681318140UL, 1515923235UL, 1885079324UL, 713031018UL, 11705290UL, 2288160004UL, 1983331336UL, 1247350521UL, 4208372034UL, 2508892029UL, 3549494305UL, +4169715512UL, 701313302UL, 1118275019UL, 1430522809UL, 4153969630UL, 3516491181UL, 3601057044UL, 2509222288UL, 1917025539UL, 899123842UL, 2574531231UL, 1386928111UL, 3790651401UL, 1219040401UL, 2038833061UL, 3736517792UL, 3850203561UL, 1679542285UL, 671522957UL, 3862995487UL, 3118056386UL, 47128429UL, 2977525950UL, 2762831063UL, 1937040839UL, 4223233198UL, 2105119262UL, 721111284UL, 1386688457UL, 68419013UL, 2575393464UL, 3648293304UL, +1448878851UL, 466405406UL, 3696899986UL, 1270877069UL, 3351263117UL, 3918639273UL, 94103836UL, 2767482392UL, 3549853842UL, 2353191576UL, 3353325530UL, 349361794UL, 2689121900UL, 2335686695UL, 246689858UL, 2946177636UL, 3232050945UL, 1455723263UL, 3447540996UL, 2143976172UL, 1779511280UL, 542837628UL, 1575502035UL, 849872082UL, 3527265600UL, 1443266215UL, 1867394883UL, 458373857UL, 3862342513UL, 699597603UL, 685707268UL, 4210562190UL, +2501058653UL, 2254562046UL, 2210683894UL, 29088679UL, 3647972960UL, 2764392560UL, 4138068372UL, 3094591474UL, 1093749152UL, 312511475UL, 3133003149UL, 4128702884UL, 652852832UL, 2211671337UL, 145492343UL, 131729558UL, 3845605816UL, 3769660625UL, 1696592453UL, 4223421915UL, 2751201502UL, 3496971733UL, 3349166522UL, 1005919830UL, 1656802049UL, 3754493523UL, 1994945529UL, 1604309774UL, 2083609686UL, 3032348100UL, 2600153513UL, 1677348112UL, +207321473UL, 1051990507UL, 3349078950UL, 4239461390UL, 1574144998UL, 1070761856UL, 1990807569UL, 2970449178UL, 2506523299UL, 2827487353UL, 4130754901UL, 1943274185UL, 445467699UL, 1014850621UL, 3662772872UL, 4115124063UL, 1760146762UL, 3738518624UL, 800302547UL, 3602066837UL, 975658158UL, 2880018391UL, 1553758240UL, 2696483406UL, 2351365577UL, 2811011071UL, 3505407160UL, 1259180427UL, 424967367UL, 3759525737UL, 1726627246UL, 1110539071UL, +2863575420UL, 3356877114UL, 1720103319UL, 2201367526UL, 1415072072UL, 1463388387UL, 2499136377UL, 3817930623UL, 653121934UL, 2766514657UL, 526940162UL, 3794433488UL, 2990883045UL, 3304472999UL, 471385134UL, 594057325UL, 3618516788UL, 3587534772UL, 1064359851UL, 800061060UL, 1001523010UL, 2319780070UL, 3681318140UL, 1515923235UL, 1885079324UL, 255576756UL, 11705290UL, 2288160004UL, 1983331336UL, 1247350521UL, 1108575113UL, 2508892029UL, +3549494305UL, 4169715512UL, 701313302UL, 524281295UL, 1430522809UL, 4153969630UL, 3516491181UL, 3601057044UL, 1816283752UL, 1917025539UL, 899123842UL, 2574531231UL, 1386928111UL, 1530966640UL, 1219040401UL, 2038833061UL, 3736517792UL, 3850203561UL, 1855689726UL, 671522957UL, 3862995487UL, 3118056386UL, 47128429UL, 1718476461UL, 2762831063UL, 1937040839UL, 4223233198UL, 2105119262UL, 176166283UL, 1386688457UL, 68419013UL, 2575393464UL, +3648293304UL, 4069820559UL, 466405406UL, 3696899986UL, 1270877069UL, 3351263117UL, 1645545933UL, 94103836UL, 2767482392UL, 3549853842UL, 2353191576UL, 4163887784UL, 349361794UL, 2689121900UL, 2335686695UL, 246689858UL, 1246040634UL, 3232050945UL, 1455723263UL, 3447540996UL, 2143976172UL, 2111249329UL, 542837628UL, 1575502035UL, 849872082UL, 3527265600UL, 1836050084UL, 1867394883UL, 458373857UL, 3862342513UL, 699597603UL, 3139537113UL, +4210562190UL, 2501058653UL, 2254562046UL, 2210683894UL, 3997617191UL, 3647972960UL, 2764392560UL, 4138068372UL, 3094591474UL, 2664795910UL, 312511475UL, 3133003149UL, 4128702884UL, 652852832UL, 1658020144UL, 145492343UL, 131729558UL, 3845605816UL, 3769660625UL, 2822578949UL, 4223421915UL, 2751201502UL, 3496971733UL, 3349166522UL, 1582873482UL, 1656802049UL, 3754493523UL, 1994945529UL, 1604309774UL, 1113569720UL, 3032348100UL, 2600153513UL, +1677348112UL, 207321473UL, 3169983987UL, 3349078950UL, 4239461390UL, 1574144998UL, 1070761856UL, 1308776367UL, 2970449178UL, 2506523299UL, 2827487353UL, 4130754901UL, 1403493846UL, 445467699UL, 1014850621UL, 3662772872UL, 4115124063UL, 340210579UL, 3738518624UL, 800302547UL, 3602066837UL, 975658158UL, 3367770843UL, 1553758240UL, 2696483406UL, 2351365577UL, 2811011071UL, 4162875353UL, 1259180427UL, 424967367UL, 3759525737UL, 1726627246UL, +1341806135UL, 2863575420UL, 3356877114UL, 1720103319UL, 2201367526UL, 2232383995UL, 1463388387UL, 2499136377UL, 3817930623UL, 653121934UL, 1756183481UL, 526940162UL, 3794433488UL, 2990883045UL, 3304472999UL, 2185125572UL, 594057325UL, 3618516788UL, 3587534772UL, 1064359851UL, 2933544964UL, 1001523010UL, 2319780070UL, 3681318140UL, 1515923235UL, 4147783641UL, 255576756UL, 11705290UL, 2288160004UL, 1983331336UL, 956739400UL, 1108575113UL, +2508892029UL, 3549494305UL, 4169715512UL, 142273913UL, 524281295UL, 1430522809UL, 4153969630UL, 3516491181UL, 986032639UL, 1816283752UL, 1917025539UL, 899123842UL, 2574531231UL, 1508271110UL, 1530966640UL, 1219040401UL, 2038833061UL, 3736517792UL, 458417668UL, 1855689726UL, 671522957UL, 3862995487UL, 3118056386UL, 284266432UL, 1718476461UL, 2762831063UL, 1937040839UL, 4223233198UL, 1605514069UL, 176166283UL, 1386688457UL, 68419013UL, +2575393464UL, 3650747541UL, 4069820559UL, 466405406UL, 3696899986UL, 1270877069UL, 678590674UL, 1645545933UL, 94103836UL, 2767482392UL, 3549853842UL, 398179945UL, 4163887784UL, 349361794UL, 2689121900UL, 2335686695UL, 3853658293UL, 1246040634UL, 3232050945UL, 1455723263UL, 3447540996UL, 2657693810UL, 2111249329UL, 542837628UL, 1575502035UL, 849872082UL, 2061659800UL, 1836050084UL, 1867394883UL, 458373857UL, 3862342513UL, 730568629UL, +3139537113UL, 4210562190UL, 2501058653UL, 2254562046UL, 449510786UL, 3997617191UL, 3647972960UL, 2764392560UL, 4138068372UL, 1939679536UL, 2664795910UL, 312511475UL, 3133003149UL, 4128702884UL, 4057510355UL, 1658020144UL, 145492343UL, 131729558UL, 3845605816UL, 3235632110UL, 2822578949UL, 4223421915UL, 2751201502UL, 3496971733UL, 4258920219UL, 1582873482UL, 1656802049UL, 3754493523UL, 1994945529UL, 1073499993UL, 1113569720UL, 3032348100UL, +2600153513UL, 1677348112UL, 3152835240UL, 3169983987UL, 3349078950UL, 4239461390UL, 1574144998UL, 2548972357UL, 1308776367UL, 2970449178UL, 2506523299UL, 2827487353UL, 2908066033UL, 1403493846UL, 445467699UL, 1014850621UL, 3662772872UL, 1685925089UL, 340210579UL, 3738518624UL, 800302547UL, 3602066837UL, 2264692610UL, 3367770843UL, 1553758240UL, 2696483406UL, 2351365577UL, 1686022564UL, 4162875353UL, 1259180427UL, 424967367UL, 3759525737UL, +70326173UL, 3028074555UL, 2568586198UL, 2513473964UL, 2923109510UL, 2265392251UL, 3760490867UL, 147487099UL, 386755149UL, 2152759137UL, 2716532213UL, 1153507474UL, 627929575UL, 847454712UL, 2426916452UL, 3861548980UL, 209825268UL, 1090299778UL, 1876886461UL, 976019203UL, 4290216337UL, 2278290065UL, 3302814528UL, 1567440061UL, 1874857224UL, 3794588915UL, 3218569451UL, 2335365199UL, 1959651923UL, 3366000689UL, 2374428382UL, 2126784887UL, +4123272655UL, 274837369UL, 1413111935UL, 1754627204UL, 1863684635UL, 4170025739UL, 2150019850UL, 4250751856UL, 3601214212UL, 2024081043UL, 334808859UL, 3921757513UL, 3870643644UL, 2864810945UL, 1004431888UL, 4283279830UL, 873365350UL, 2479791433UL, 3393478881UL, 3373502257UL, 1882140107UL, 2546676519UL, 1208428915UL, 268043238UL, 2292710623UL, 770651064UL, 2330160036UL, 2476488258UL, 2496037992UL, 118721504UL, 2289499985UL, 987994743UL, +3610346256UL, 3371795927UL, 2681434550UL, 2213200417UL, 3729194378UL, 1657623395UL, 402983380UL, 3618058500UL, 3487743585UL, 965523531UL, 819256729UL, 2544660729UL, 3273986506UL, 60894411UL, 1779152929UL, 3598159279UL, 3429317853UL, 2246402362UL, 3761392367UL, 3921798306UL, 947928110UL, 2394097908UL, 4004330264UL, 1180759989UL, 1624349051UL, 1750929499UL, 3889184770UL, 2052097704UL, 4092981046UL, 2913733578UL, 4241980897UL, 1127407450UL, +950788009UL, 2105033320UL, 473205730UL, 981905310UL, 2888856914UL, 798112239UL, 3377889612UL, 2273659507UL, 1157471194UL, 4269212574UL, 3575306012UL, 116024754UL, 1432668659UL, 1079598649UL, 3882002482UL, 3838480186UL, 823643071UL, 1244220618UL, 1227720039UL, 1343395654UL, 4277277976UL, 2612321540UL, 3013674017UL, 3658064522UL, 2573775167UL, 142767236UL, 2545708383UL, 1740478937UL, 809036862UL, 1492188594UL, 1294286248UL, 1093543858UL, +2944418375UL, 2981996479UL, 4067464923UL, 3071157685UL, 1938984450UL, 81707323UL, 337713546UL, 1849381296UL, 3447450393UL, 3551106302UL, 3394545269UL, 3167744716UL, 1815294624UL, 3244728913UL, 2462138247UL, 2286711732UL, 3023116169UL, 707366723UL, 1314169762UL, 1511231537UL, 2227622993UL, 2876600706UL, 4271030726UL, 2020521540UL, 2966596767UL, 3964589247UL, 1291306737UL, 883851756UL, 1355819080UL, 2834319249UL, 3825063450UL, 4205423325UL, +}, +{ +525214560UL, 1972466543UL, 1542775297UL, 3030388145UL, 2623763324UL, 1445252054UL, 2315649878UL, 2940376435UL, 1322155857UL, 2007925719UL, 899111545UL, 3946601974UL, 720416639UL, 566341007UL, 3830971140UL, 2379218430UL, 946001131UL, 324551023UL, 3792134824UL, 2419222364UL, 2507004728UL, 4050415702UL, 2934667964UL, 3435655480UL, 3738151878UL, 340092998UL, 429296098UL, 3804978739UL, 1547120540UL, 976306993UL, 1134820236UL, 288696971UL, +292350374UL, 423348923UL, 4250561112UL, 1380146522UL, 646098313UL, 3081299572UL, 3633231429UL, 2348008746UL, 3250735726UL, 3495239618UL, 1083361876UL, 2660545988UL, 97607299UL, 741626628UL, 2451882102UL, 607936604UL, 1566190301UL, 3752644837UL, 1626575269UL, 2569947980UL, 120166892UL, 1936167922UL, 2964570009UL, 2601765059UL, 2550590348UL, 1491574373UL, 1916644920UL, 2955888714UL, 3900360190UL, 396836243UL, 2417234534UL, 4219822777UL, +3017031315UL, 3848370775UL, 4113753945UL, 1038708316UL, 1227041843UL, 1287656330UL, 594136009UL, 1679465955UL, 1127853612UL, 445673212UL, 2491164616UL, 4234959779UL, 3670094401UL, 2810998507UL, 2091885715UL, 4213376041UL, 3724691332UL, 1428205363UL, 2351471476UL, 1863345709UL, 3172242044UL, 1435176883UL, 925973933UL, 3166951436UL, 2056462416UL, 489417029UL, 4029854347UL, 3002516723UL, 1597712463UL, 1200457469UL, 3909654542UL, 1352519428UL, +13398705UL, 3919269221UL, 371331154UL, 332347636UL, 3726033518UL, 2407091731UL, 2926199215UL, 3054175446UL, 3208807730UL, 584793525UL, 2706493003UL, 561190823UL, 2412132195UL, 2488492462UL, 3149885896UL, 3512276852UL, 2843032269UL, 2485506176UL, 4025325347UL, 4152622551UL, 4022346903UL, 331746013UL, 197533993UL, 3658414685UL, 2670729696UL, 3290854172UL, 2251426444UL, 3569225076UL, 2466203243UL, 658184940UL, 518096293UL, 52156682UL, +2398958685UL, 745491615UL, 3723004242UL, 2847276077UL, 1857504125UL, 633035220UL, 4057593658UL, 2783467746UL, 3122875931UL, 446601186UL, 2786851490UL, 261950076UL, 2843506874UL, 745391893UL, 1404094021UL, 2234513997UL, 315083019UL, 645865358UL, 2862243948UL, 1204315994UL, 3701151065UL, 663411328UL, 1924727700UL, 1905843757UL, 1483930049UL, 449616818UL, 3793968150UL, 1840668755UL, 1671024110UL, 4079375869UL, 4171670660UL, 2585904968UL, +3886777251UL, 525214560UL, 1972466543UL, 1542775297UL, 3030388145UL, 2530126952UL, 1445252054UL, 2315649878UL, 2940376435UL, 1322155857UL, 1599103627UL, 899111545UL, 3946601974UL, 720416639UL, 566341007UL, 4070101360UL, 2379218430UL, 946001131UL, 324551023UL, 3792134824UL, 2445126690UL, 2507004728UL, 4050415702UL, 2934667964UL, 3435655480UL, 2968121571UL, 340092998UL, 429296098UL, 3804978739UL, 1547120540UL, 3901803457UL, 1134820236UL, +288696971UL, 292350374UL, 423348923UL, 1589814289UL, 1380146522UL, 646098313UL, 3081299572UL, 3633231429UL, 670777956UL, 3250735726UL, 3495239618UL, 1083361876UL, 2660545988UL, 4050232394UL, 741626628UL, 2451882102UL, 607936604UL, 1566190301UL, 1132827700UL, 1626575269UL, 2569947980UL, 120166892UL, 1936167922UL, 1280520333UL, 2601765059UL, 2550590348UL, 1491574373UL, 1916644920UL, 1073889810UL, 3900360190UL, 396836243UL, 2417234534UL, +4219822777UL, 1754651820UL, 3848370775UL, 4113753945UL, 1038708316UL, 1227041843UL, 464826842UL, 594136009UL, 1679465955UL, 1127853612UL, 445673212UL, 4198686893UL, 4234959779UL, 3670094401UL, 2810998507UL, 2091885715UL, 416103731UL, 3724691332UL, 1428205363UL, 2351471476UL, 1863345709UL, 2637470915UL, 1435176883UL, 925973933UL, 3166951436UL, 2056462416UL, 2546319147UL, 4029854347UL, 3002516723UL, 1597712463UL, 1200457469UL, 681365672UL, +1352519428UL, 13398705UL, 3919269221UL, 371331154UL, 742849231UL, 3726033518UL, 2407091731UL, 2926199215UL, 3054175446UL, 1323833820UL, 584793525UL, 2706493003UL, 561190823UL, 2412132195UL, 3747238187UL, 3149885896UL, 3512276852UL, 2843032269UL, 2485506176UL, 3817319503UL, 4152622551UL, 4022346903UL, 331746013UL, 197533993UL, 99009902UL, 2670729696UL, 3290854172UL, 2251426444UL, 3569225076UL, 4199909720UL, 658184940UL, 518096293UL, +52156682UL, 2398958685UL, 1648201186UL, 3723004242UL, 2847276077UL, 1857504125UL, 633035220UL, 1394668680UL, 2783467746UL, 3122875931UL, 446601186UL, 2786851490UL, 2590549096UL, 2843506874UL, 745391893UL, 1404094021UL, 2234513997UL, 347299411UL, 645865358UL, 2862243948UL, 1204315994UL, 3701151065UL, 4028305509UL, 1924727700UL, 1905843757UL, 1483930049UL, 449616818UL, 2251238906UL, 1840668755UL, 1671024110UL, 4079375869UL, 4171670660UL, +4080554282UL, 3886777251UL, 525214560UL, 1972466543UL, 1542775297UL, 3280177496UL, 2530126952UL, 1445252054UL, 2315649878UL, 2940376435UL, 2094983509UL, 1599103627UL, 899111545UL, 3946601974UL, 720416639UL, 1446566513UL, 4070101360UL, 2379218430UL, 946001131UL, 324551023UL, 2945613775UL, 2445126690UL, 2507004728UL, 4050415702UL, 2934667964UL, 2815036731UL, 2968121571UL, 340092998UL, 429296098UL, 3804978739UL, 3298867574UL, 3901803457UL, +1134820236UL, 288696971UL, 292350374UL, 3280367987UL, 1589814289UL, 1380146522UL, 646098313UL, 3081299572UL, 2536311658UL, 670777956UL, 3250735726UL, 3495239618UL, 1083361876UL, 3726225049UL, 4050232394UL, 741626628UL, 2451882102UL, 607936604UL, 3460165725UL, 1132827700UL, 1626575269UL, 2569947980UL, 120166892UL, 2961109404UL, 1280520333UL, 2601765059UL, 2550590348UL, 1491574373UL, 755823086UL, 1073889810UL, 3900360190UL, 396836243UL, +2417234534UL, 3036027780UL, 1754651820UL, 3848370775UL, 4113753945UL, 1038708316UL, 3784147349UL, 464826842UL, 594136009UL, 1679465955UL, 1127853612UL, 2128970592UL, 4198686893UL, 4234959779UL, 3670094401UL, 2810998507UL, 421961324UL, 416103731UL, 3724691332UL, 1428205363UL, 2351471476UL, 3407618159UL, 2637470915UL, 1435176883UL, 925973933UL, 3166951436UL, 1274860184UL, 2546319147UL, 4029854347UL, 3002516723UL, 1597712463UL, 671480036UL, +681365672UL, 1352519428UL, 13398705UL, 3919269221UL, 1150967289UL, 742849231UL, 3726033518UL, 2407091731UL, 2926199215UL, 3106945136UL, 1323833820UL, 584793525UL, 2706493003UL, 561190823UL, 2013357219UL, 3747238187UL, 3149885896UL, 3512276852UL, 2843032269UL, 3595347994UL, 3817319503UL, 4152622551UL, 4022346903UL, 331746013UL, 367216863UL, 99009902UL, 2670729696UL, 3290854172UL, 2251426444UL, 3130148315UL, 4199909720UL, 658184940UL, +518096293UL, 52156682UL, 3004378899UL, 1648201186UL, 3723004242UL, 2847276077UL, 1857504125UL, 253542783UL, 1394668680UL, 2783467746UL, 3122875931UL, 446601186UL, 1228837642UL, 2590549096UL, 2843506874UL, 745391893UL, 1404094021UL, 1324404436UL, 347299411UL, 645865358UL, 2862243948UL, 1204315994UL, 1455458347UL, 4028305509UL, 1924727700UL, 1905843757UL, 1483930049UL, 330348422UL, 2251238906UL, 1840668755UL, 1671024110UL, 4079375869UL, +606568968UL, 4080554282UL, 3886777251UL, 525214560UL, 1972466543UL, 1703103913UL, 3280177496UL, 2530126952UL, 1445252054UL, 2315649878UL, 3946153427UL, 2094983509UL, 1599103627UL, 899111545UL, 3946601974UL, 2053673584UL, 1446566513UL, 4070101360UL, 2379218430UL, 946001131UL, 4184236551UL, 2945613775UL, 2445126690UL, 2507004728UL, 4050415702UL, 3890831500UL, 2815036731UL, 2968121571UL, 340092998UL, 429296098UL, 228493148UL, 3298867574UL, +3901803457UL, 1134820236UL, 288696971UL, 2321943990UL, 3280367987UL, 1589814289UL, 1380146522UL, 646098313UL, 1765624343UL, 2536311658UL, 670777956UL, 3250735726UL, 3495239618UL, 1772431608UL, 3726225049UL, 4050232394UL, 741626628UL, 2451882102UL, 3386124330UL, 3460165725UL, 1132827700UL, 1626575269UL, 2569947980UL, 860947846UL, 2961109404UL, 1280520333UL, 2601765059UL, 2550590348UL, 2298495740UL, 755823086UL, 1073889810UL, 3900360190UL, +396836243UL, 2702634902UL, 3036027780UL, 1754651820UL, 3848370775UL, 4113753945UL, 3836550212UL, 3784147349UL, 464826842UL, 594136009UL, 1679465955UL, 1500399122UL, 2128970592UL, 4198686893UL, 4234959779UL, 3670094401UL, 1632934875UL, 421961324UL, 416103731UL, 3724691332UL, 1428205363UL, 2330377177UL, 3407618159UL, 2637470915UL, 1435176883UL, 925973933UL, 2558479866UL, 1274860184UL, 2546319147UL, 4029854347UL, 3002516723UL, 1331271216UL, +671480036UL, 681365672UL, 1352519428UL, 13398705UL, 1532459856UL, 1150967289UL, 742849231UL, 3726033518UL, 2407091731UL, 1766120506UL, 3106945136UL, 1323833820UL, 584793525UL, 2706493003UL, 3817434387UL, 2013357219UL, 3747238187UL, 3149885896UL, 3512276852UL, 203757UL, 3595347994UL, 3817319503UL, 4152622551UL, 4022346903UL, 3438004885UL, 367216863UL, 99009902UL, 2670729696UL, 3290854172UL, 1092092654UL, 3130148315UL, 4199909720UL, +658184940UL, 518096293UL, 982576981UL, 3004378899UL, 1648201186UL, 3723004242UL, 2847276077UL, 33113683UL, 253542783UL, 1394668680UL, 2783467746UL, 3122875931UL, 3109404671UL, 1228837642UL, 2590549096UL, 2843506874UL, 745391893UL, 809710525UL, 1324404436UL, 347299411UL, 645865358UL, 2862243948UL, 3652256751UL, 1455458347UL, 4028305509UL, 1924727700UL, 1905843757UL, 2035132481UL, 330348422UL, 2251238906UL, 1840668755UL, 1671024110UL, +3593348393UL, 4151905045UL, 3398483770UL, 611142788UL, 1798029112UL, 2747225670UL, 2894981396UL, 2117120651UL, 3087941624UL, 416876364UL, 700011792UL, 63929447UL, 822005210UL, 3483417647UL, 3513365134UL, 3071572873UL, 1925919001UL, 2778688996UL, 3079943255UL, 1252316311UL, 91270196UL, 3469862149UL, 156659741UL, 1342755036UL, 3821302858UL, 1790046971UL, 289329863UL, 1357914395UL, 4143182690UL, 2590503919UL, 3242437796UL, 1341085928UL, +2685277054UL, 727602392UL, 2581493226UL, 3216496864UL, 2171373196UL, 3767765187UL, 1895767358UL, 1029452326UL, 851913526UL, 1746266839UL, 3370323171UL, 648118190UL, 3244211645UL, 2623946928UL, 3859087079UL, 384443034UL, 2026989771UL, 802104797UL, 2201121552UL, 725742304UL, 1673563239UL, 4045658814UL, 2682764476UL, 3032306650UL, 2725871420UL, 3467522540UL, 534803010UL, 1135606913UL, 871336950UL, 937160030UL, 3384357161UL, 641566845UL, +2267407903UL, 331847343UL, 787968740UL, 2673012251UL, 2066357778UL, 2740382722UL, 1638377946UL, 2260504282UL, 3513172717UL, 238548903UL, 2203496688UL, 630532448UL, 3702112076UL, 2635952931UL, 3344713216UL, 139406056UL, 2369004628UL, 3547213209UL, 2944858950UL, 1231203228UL, 616949630UL, 2619739101UL, 89360251UL, 2364353701UL, 1025345607UL, 4177965685UL, 62274372UL, 3059207586UL, 3303376016UL, 2919795870UL, 3676526103UL, 2689781822UL, +1062293263UL, 2684605838UL, 863975243UL, 723728777UL, 1057919510UL, 1708017843UL, 4264127977UL, 3013938022UL, 3958746896UL, 328415103UL, 1117948849UL, 751056929UL, 2442147201UL, 1781170563UL, 765377308UL, 961452970UL, 4247303973UL, 2233034754UL, 86997820UL, 3495561473UL, 3075957349UL, 3152032365UL, 1220657606UL, 708134514UL, 26714613UL, 3749542051UL, 1640668224UL, 2252760600UL, 1635050662UL, 947216628UL, 3612773344UL, 4089189500UL, +3647048119UL, 979491227UL, 4149824933UL, 3160885292UL, 2808843788UL, 998859510UL, 3903167193UL, 1728999561UL, 3673946130UL, 279338980UL, 2507635299UL, 1614929524UL, 302060483UL, 2874453052UL, 3798613814UL, 2013436766UL, 3514754020UL, 2923162106UL, 2658720327UL, 3498579091UL, 3292220096UL, 3796129102UL, 1907288796UL, 2820663603UL, 4276052248UL, 247755133UL, 2088596201UL, 3154955976UL, 3309397641UL, 3606171919UL, 1356791029UL, 1030266022UL, +}, +{ +3868946146UL, 1938156793UL, 1877502872UL, 1408917625UL, 1549117911UL, 2465501566UL, 4218547770UL, 2942249332UL, 2731789075UL, 2366036899UL, 1312641799UL, 2243363271UL, 2238839307UL, 384814263UL, 1552361757UL, 3521369641UL, 431721717UL, 3089625732UL, 1023760034UL, 53847139UL, 2240881978UL, 3178046414UL, 145135653UL, 1580878781UL, 3500228040UL, 3360910006UL, 3285542950UL, 3330062556UL, 2870158227UL, 1481496810UL, 4222704363UL, 2973046526UL, +435155769UL, 3234730070UL, 3306545960UL, 2539776908UL, 3991420334UL, 125389349UL, 2397544348UL, 2504790975UL, 886432257UL, 1804136430UL, 1506551086UL, 219847214UL, 890282686UL, 1489840806UL, 2536942497UL, 87527661UL, 1822718904UL, 3984956867UL, 2334419518UL, 4065487054UL, 992104547UL, 1566792845UL, 1068226712UL, 2622731799UL, 921431708UL, 2833392639UL, 640267449UL, 324907409UL, 3911698049UL, 2108189994UL, 1623761598UL, 52771719UL, +467926435UL, 2811768106UL, 3760723083UL, 906402727UL, 3438479463UL, 2064004404UL, 988123982UL, 563076447UL, 2979641383UL, 1366086397UL, 2078608605UL, 3868491514UL, 1077957067UL, 615363273UL, 1388831706UL, 1586480552UL, 4216838311UL, 3587550780UL, 2057048927UL, 2814838921UL, 2454041809UL, 180612020UL, 930406098UL, 4286819113UL, 2756562967UL, 3404265234UL, 3844482428UL, 467484533UL, 4122644954UL, 3517116598UL, 1887163240UL, 4217569180UL, +4191149652UL, 2756931330UL, 3702787956UL, 152166773UL, 146763911UL, 536678737UL, 481385008UL, 3681433244UL, 1194909733UL, 3713568496UL, 3927837202UL, 846842608UL, 687314083UL, 1144793694UL, 1062075916UL, 3017627145UL, 1296695243UL, 981862419UL, 2363304726UL, 3242788356UL, 3359957762UL, 4249190787UL, 1697910336UL, 3286799886UL, 1063822293UL, 3246091430UL, 743808559UL, 2137668568UL, 2812072749UL, 2303791182UL, 3161789548UL, 2911126624UL, +4087873192UL, 1813622227UL, 1272618849UL, 1882292328UL, 3861455677UL, 2921641470UL, 3079812494UL, 2814569163UL, 1975646942UL, 2826176621UL, 1896904368UL, 831552834UL, 2935863403UL, 449217054UL, 3688067832UL, 1048877596UL, 1613227043UL, 553867520UL, 3682575786UL, 3058863948UL, 4200858129UL, 4131625UL, 2434123776UL, 2235627905UL, 2905358693UL, 3429312266UL, 3363231514UL, 1182242507UL, 2792234422UL, 1843330053UL, 4192875151UL, 1088813348UL, +357805687UL, 3868946146UL, 1938156793UL, 1877502872UL, 1408917625UL, 30638250UL, 2465501566UL, 4218547770UL, 2942249332UL, 2731789075UL, 448998968UL, 1312641799UL, 2243363271UL, 2238839307UL, 384814263UL, 2229663001UL, 3521369641UL, 431721717UL, 3089625732UL, 1023760034UL, 790771414UL, 2240881978UL, 3178046414UL, 145135653UL, 1580878781UL, 847577516UL, 3360910006UL, 3285542950UL, 3330062556UL, 2870158227UL, 112738978UL, 4222704363UL, +2973046526UL, 435155769UL, 3234730070UL, 1135073835UL, 2539776908UL, 3991420334UL, 125389349UL, 2397544348UL, 1243128255UL, 886432257UL, 1804136430UL, 1506551086UL, 219847214UL, 875051553UL, 1489840806UL, 2536942497UL, 87527661UL, 1822718904UL, 1883615145UL, 2334419518UL, 4065487054UL, 992104547UL, 1566792845UL, 1037132511UL, 2622731799UL, 921431708UL, 2833392639UL, 640267449UL, 504304037UL, 3911698049UL, 2108189994UL, 1623761598UL, +52771719UL, 3969520254UL, 2811768106UL, 3760723083UL, 906402727UL, 3438479463UL, 3707538496UL, 988123982UL, 563076447UL, 2979641383UL, 1366086397UL, 3577913613UL, 3868491514UL, 1077957067UL, 615363273UL, 1388831706UL, 903353909UL, 4216838311UL, 3587550780UL, 2057048927UL, 2814838921UL, 3532304828UL, 180612020UL, 930406098UL, 4286819113UL, 2756562967UL, 1950528802UL, 3844482428UL, 467484533UL, 4122644954UL, 3517116598UL, 139409766UL, +4217569180UL, 4191149652UL, 2756931330UL, 3702787956UL, 504815033UL, 146763911UL, 536678737UL, 481385008UL, 3681433244UL, 2166865052UL, 3713568496UL, 3927837202UL, 846842608UL, 687314083UL, 135403542UL, 1062075916UL, 3017627145UL, 1296695243UL, 981862419UL, 2405232584UL, 3242788356UL, 3359957762UL, 4249190787UL, 1697910336UL, 3517294012UL, 1063822293UL, 3246091430UL, 743808559UL, 2137668568UL, 2962825355UL, 2303791182UL, 3161789548UL, +2911126624UL, 4087873192UL, 2344237973UL, 1272618849UL, 1882292328UL, 3861455677UL, 2921641470UL, 1062672856UL, 2814569163UL, 1975646942UL, 2826176621UL, 1896904368UL, 3172875195UL, 2935863403UL, 449217054UL, 3688067832UL, 1048877596UL, 983648949UL, 553867520UL, 3682575786UL, 3058863948UL, 4200858129UL, 2552994282UL, 2434123776UL, 2235627905UL, 2905358693UL, 3429312266UL, 461707508UL, 1182242507UL, 2792234422UL, 1843330053UL, 4192875151UL, +2557078297UL, 357805687UL, 3868946146UL, 1938156793UL, 1877502872UL, 1178921294UL, 30638250UL, 2465501566UL, 4218547770UL, 2942249332UL, 2597087237UL, 448998968UL, 1312641799UL, 2243363271UL, 2238839307UL, 3465588695UL, 2229663001UL, 3521369641UL, 431721717UL, 3089625732UL, 2420359327UL, 790771414UL, 2240881978UL, 3178046414UL, 145135653UL, 3411014139UL, 847577516UL, 3360910006UL, 3285542950UL, 3330062556UL, 4257518865UL, 112738978UL, +4222704363UL, 2973046526UL, 435155769UL, 1154160505UL, 1135073835UL, 2539776908UL, 3991420334UL, 125389349UL, 1396475349UL, 1243128255UL, 886432257UL, 1804136430UL, 1506551086UL, 3727497731UL, 875051553UL, 1489840806UL, 2536942497UL, 87527661UL, 2521823325UL, 1883615145UL, 2334419518UL, 4065487054UL, 992104547UL, 3431387970UL, 1037132511UL, 2622731799UL, 921431708UL, 2833392639UL, 780276883UL, 504304037UL, 3911698049UL, 2108189994UL, +1623761598UL, 1832564202UL, 3969520254UL, 2811768106UL, 3760723083UL, 906402727UL, 2319993554UL, 3707538496UL, 988123982UL, 563076447UL, 2979641383UL, 3703509163UL, 3577913613UL, 3868491514UL, 1077957067UL, 615363273UL, 3925135746UL, 903353909UL, 4216838311UL, 3587550780UL, 2057048927UL, 2129250845UL, 3532304828UL, 180612020UL, 930406098UL, 4286819113UL, 571849466UL, 1950528802UL, 3844482428UL, 467484533UL, 4122644954UL, 3696836546UL, +139409766UL, 4217569180UL, 4191149652UL, 2756931330UL, 84389584UL, 504815033UL, 146763911UL, 536678737UL, 481385008UL, 281139563UL, 2166865052UL, 3713568496UL, 3927837202UL, 846842608UL, 2123715146UL, 135403542UL, 1062075916UL, 3017627145UL, 1296695243UL, 4206227732UL, 2405232584UL, 3242788356UL, 3359957762UL, 4249190787UL, 2766470555UL, 3517294012UL, 1063822293UL, 3246091430UL, 743808559UL, 2821229002UL, 2962825355UL, 2303791182UL, +3161789548UL, 2911126624UL, 503886017UL, 2344237973UL, 1272618849UL, 1882292328UL, 3861455677UL, 4158985014UL, 1062672856UL, 2814569163UL, 1975646942UL, 2826176621UL, 4118784229UL, 3172875195UL, 2935863403UL, 449217054UL, 3688067832UL, 3556237148UL, 983648949UL, 553867520UL, 3682575786UL, 3058863948UL, 3200838331UL, 2552994282UL, 2434123776UL, 2235627905UL, 2905358693UL, 4178312045UL, 461707508UL, 1182242507UL, 2792234422UL, 1843330053UL, +3597816691UL, 2557078297UL, 357805687UL, 3868946146UL, 1938156793UL, 2168462050UL, 1178921294UL, 30638250UL, 2465501566UL, 4218547770UL, 4101101381UL, 2597087237UL, 448998968UL, 1312641799UL, 2243363271UL, 313553894UL, 3465588695UL, 2229663001UL, 3521369641UL, 431721717UL, 737541534UL, 2420359327UL, 790771414UL, 2240881978UL, 3178046414UL, 326569272UL, 3411014139UL, 847577516UL, 3360910006UL, 3285542950UL, 3098408987UL, 4257518865UL, +112738978UL, 4222704363UL, 2973046526UL, 3668411828UL, 1154160505UL, 1135073835UL, 2539776908UL, 3991420334UL, 2902976896UL, 1396475349UL, 1243128255UL, 886432257UL, 1804136430UL, 2162242501UL, 3727497731UL, 875051553UL, 1489840806UL, 2536942497UL, 2238214198UL, 2521823325UL, 1883615145UL, 2334419518UL, 4065487054UL, 1081167745UL, 3431387970UL, 1037132511UL, 2622731799UL, 921431708UL, 2612105434UL, 780276883UL, 504304037UL, 3911698049UL, +2108189994UL, 2518535877UL, 1832564202UL, 3969520254UL, 2811768106UL, 3760723083UL, 2894544992UL, 2319993554UL, 3707538496UL, 988123982UL, 563076447UL, 719340658UL, 3703509163UL, 3577913613UL, 3868491514UL, 1077957067UL, 2371417985UL, 3925135746UL, 903353909UL, 4216838311UL, 3587550780UL, 3146473377UL, 2129250845UL, 3532304828UL, 180612020UL, 930406098UL, 1054512059UL, 571849466UL, 1950528802UL, 3844482428UL, 467484533UL, 1437844285UL, +3696836546UL, 139409766UL, 4217569180UL, 4191149652UL, 1161452915UL, 84389584UL, 504815033UL, 146763911UL, 536678737UL, 3965987378UL, 281139563UL, 2166865052UL, 3713568496UL, 3927837202UL, 2566873330UL, 2123715146UL, 135403542UL, 1062075916UL, 3017627145UL, 3204726297UL, 4206227732UL, 2405232584UL, 3242788356UL, 3359957762UL, 2338319494UL, 2766470555UL, 3517294012UL, 1063822293UL, 3246091430UL, 1531757306UL, 2821229002UL, 2962825355UL, +2303791182UL, 3161789548UL, 2778326467UL, 503886017UL, 2344237973UL, 1272618849UL, 1882292328UL, 1725075819UL, 4158985014UL, 1062672856UL, 2814569163UL, 1975646942UL, 3822868823UL, 4118784229UL, 3172875195UL, 2935863403UL, 449217054UL, 2465297154UL, 3556237148UL, 983648949UL, 553867520UL, 3682575786UL, 4023654874UL, 3200838331UL, 2552994282UL, 2434123776UL, 2235627905UL, 3063253867UL, 4178312045UL, 461707508UL, 1182242507UL, 2792234422UL, +3673318927UL, 1249828417UL, 2772427670UL, 1052324962UL, 3106530204UL, 2843183862UL, 630633945UL, 4140139503UL, 1659674037UL, 1096812757UL, 1376150732UL, 2328468653UL, 1410746620UL, 4025107990UL, 3335632421UL, 2754906610UL, 1615859006UL, 285467698UL, 4013475548UL, 1287384555UL, 1191111485UL, 1999165134UL, 2396354947UL, 1628158236UL, 3586708909UL, 228664781UL, 2501369720UL, 2516229872UL, 2977432606UL, 1745869751UL, 750661412UL, 1142144084UL, +2705268946UL, 1728488244UL, 589587862UL, 3604281130UL, 3217245915UL, 2061424631UL, 1918958878UL, 1162850007UL, 438550637UL, 1774088146UL, 3237803593UL, 827476363UL, 404982536UL, 2344744845UL, 3416436851UL, 369597250UL, 287618335UL, 1349740180UL, 3489688427UL, 417859991UL, 3229729092UL, 3214122057UL, 3955335849UL, 3014669381UL, 2178319957UL, 1259991234UL, 2689513541UL, 2628816894UL, 3734652479UL, 4202568782UL, 3149274749UL, 497295490UL, +3427602420UL, 3229774907UL, 59257138UL, 856364156UL, 429586733UL, 1800559699UL, 1300239050UL, 1311125646UL, 257421988UL, 3749074142UL, 1648939149UL, 1914174865UL, 105489877UL, 3599116888UL, 2695725484UL, 1543985792UL, 3210070699UL, 1867126432UL, 3088920410UL, 953084407UL, 2185095866UL, 1427606476UL, 1572442276UL, 3322674991UL, 3578824788UL, 1156246244UL, 2938200612UL, 3409545464UL, 215820858UL, 2279282461UL, 3861049095UL, 1589517366UL, +208707366UL, 2741570297UL, 440313302UL, 864288468UL, 1564945290UL, 1050929272UL, 3037450392UL, 1101323242UL, 1200278943UL, 3005564105UL, 3847988630UL, 3251750599UL, 2608433412UL, 3106720723UL, 1522694503UL, 3857782840UL, 4282681349UL, 2229263718UL, 4106780914UL, 125648941UL, 1933617693UL, 2971178569UL, 3537872030UL, 448962137UL, 652123777UL, 2393871920UL, 3938047691UL, 244410098UL, 3110791961UL, 3122318189UL, 877378106UL, 3683644255UL, +4279094311UL, 3638987055UL, 667681197UL, 1679868535UL, 1938378101UL, 1331340184UL, 734163051UL, 3409564713UL, 955108672UL, 3969637663UL, 156515523UL, 1871394552UL, 590275639UL, 3237133664UL, 898438533UL, 2291347006UL, 644781653UL, 3575493549UL, 1206698159UL, 2484805619UL, 2931447110UL, 2411269190UL, 3866437145UL, 161562563UL, 3077166456UL, 792874130UL, 3193406610UL, 2500233218UL, 596837225UL, 3667458052UL, 3239960816UL, 2271901243UL, +}, +{ +3975736867UL, 2402230281UL, 4092718962UL, 3100052505UL, 3277909563UL, 2827154828UL, 1067483357UL, 3495429909UL, 426635932UL, 2702495453UL, 725679489UL, 3705541400UL, 1308182381UL, 27549785UL, 3000675918UL, 2982141597UL, 1090931027UL, 755020243UL, 3986354189UL, 2529541113UL, 452574019UL, 2384876926UL, 2147764179UL, 1360907484UL, 2072364695UL, 3034185952UL, 2765119653UL, 3279755577UL, 3828140333UL, 582568392UL, 4228353628UL, 701214306UL, +2460043371UL, 3943376509UL, 2443090800UL, 2481277520UL, 859309333UL, 2928621220UL, 1933644685UL, 3803162893UL, 3310629548UL, 2361261213UL, 790233558UL, 2517540072UL, 2823327610UL, 2952921690UL, 3295251862UL, 1089451775UL, 2637751681UL, 1648031370UL, 1343061717UL, 2355026672UL, 67684812UL, 4019593497UL, 2636283634UL, 1051433451UL, 51111285UL, 15338687UL, 3779021741UL, 3987886044UL, 70037785UL, 2009147353UL, 4236701871UL, 928261128UL, +2185183571UL, 2793993680UL, 2975111058UL, 3730415022UL, 3316612678UL, 823585671UL, 4153354125UL, 509071385UL, 2056228251UL, 4034784810UL, 96820040UL, 169863045UL, 932848332UL, 2282651407UL, 747279843UL, 1387211022UL, 2410099142UL, 3394315084UL, 3191572807UL, 4073182500UL, 3768455462UL, 3712420663UL, 3000991259UL, 249137656UL, 2477445202UL, 3952155443UL, 392730170UL, 4208559971UL, 24751401UL, 661761054UL, 1574175475UL, 2715927647UL, +985309803UL, 2570053358UL, 619269634UL, 3890591314UL, 1129119636UL, 3133886450UL, 328788870UL, 3449809720UL, 1380118080UL, 2719792059UL, 691527418UL, 3487733607UL, 3819095050UL, 3367871088UL, 709089170UL, 1057897966UL, 1938975941UL, 4082466714UL, 251564920UL, 3083496965UL, 1040123365UL, 295024253UL, 2788334176UL, 3430095934UL, 3641758945UL, 2029993123UL, 3231254260UL, 150555625UL, 2270671577UL, 2032382533UL, 2088497043UL, 1392075576UL, +644811077UL, 2122632989UL, 3224165725UL, 1571908345UL, 2558692460UL, 1493305706UL, 4064652450UL, 448105905UL, 699188129UL, 2017324335UL, 4286307548UL, 2415725473UL, 3976741021UL, 3526784185UL, 2882973520UL, 3420335125UL, 2034028744UL, 1425242390UL, 982315917UL, 2614735561UL, 2439972944UL, 2518992720UL, 3792239985UL, 3260669732UL, 2586472751UL, 3432756715UL, 1318634102UL, 3722487277UL, 3037304631UL, 433233786UL, 3750002877UL, 2504731459UL, +1111327015UL, 3975736867UL, 2402230281UL, 4092718962UL, 3100052505UL, 3521430425UL, 2827154828UL, 1067483357UL, 3495429909UL, 426635932UL, 2034644068UL, 725679489UL, 3705541400UL, 1308182381UL, 27549785UL, 3001720496UL, 2982141597UL, 1090931027UL, 755020243UL, 3986354189UL, 307638580UL, 452574019UL, 2384876926UL, 2147764179UL, 1360907484UL, 1701580099UL, 3034185952UL, 2765119653UL, 3279755577UL, 3828140333UL, 2659043235UL, 4228353628UL, +701214306UL, 2460043371UL, 3943376509UL, 2084857792UL, 2481277520UL, 859309333UL, 2928621220UL, 1933644685UL, 4152646669UL, 3310629548UL, 2361261213UL, 790233558UL, 2517540072UL, 481283060UL, 2952921690UL, 3295251862UL, 1089451775UL, 2637751681UL, 2915212660UL, 1343061717UL, 2355026672UL, 67684812UL, 4019593497UL, 3290479436UL, 1051433451UL, 51111285UL, 15338687UL, 3779021741UL, 1430944862UL, 70037785UL, 2009147353UL, 4236701871UL, +928261128UL, 2063919641UL, 2793993680UL, 2975111058UL, 3730415022UL, 3316612678UL, 2373806232UL, 4153354125UL, 509071385UL, 2056228251UL, 4034784810UL, 1912268707UL, 169863045UL, 932848332UL, 2282651407UL, 747279843UL, 3712980941UL, 2410099142UL, 3394315084UL, 3191572807UL, 4073182500UL, 4262344652UL, 3712420663UL, 3000991259UL, 249137656UL, 2477445202UL, 3374467273UL, 392730170UL, 4208559971UL, 24751401UL, 661761054UL, 1670592959UL, +2715927647UL, 985309803UL, 2570053358UL, 619269634UL, 830547082UL, 1129119636UL, 3133886450UL, 328788870UL, 3449809720UL, 202644333UL, 2719792059UL, 691527418UL, 3487733607UL, 3819095050UL, 1400269159UL, 709089170UL, 1057897966UL, 1938975941UL, 4082466714UL, 3393893128UL, 3083496965UL, 1040123365UL, 295024253UL, 2788334176UL, 1219456UL, 3641758945UL, 2029993123UL, 3231254260UL, 150555625UL, 3713963210UL, 2032382533UL, 2088497043UL, +1392075576UL, 644811077UL, 3733090890UL, 3224165725UL, 1571908345UL, 2558692460UL, 1493305706UL, 1678929187UL, 448105905UL, 699188129UL, 2017324335UL, 4286307548UL, 3368868963UL, 3976741021UL, 3526784185UL, 2882973520UL, 3420335125UL, 3233347584UL, 1425242390UL, 982315917UL, 2614735561UL, 2439972944UL, 4172908214UL, 3792239985UL, 3260669732UL, 2586472751UL, 3432756715UL, 1926157640UL, 3722487277UL, 3037304631UL, 433233786UL, 3750002877UL, +625648993UL, 1111327015UL, 3975736867UL, 2402230281UL, 4092718962UL, 1349560774UL, 3521430425UL, 2827154828UL, 1067483357UL, 3495429909UL, 2808148912UL, 2034644068UL, 725679489UL, 3705541400UL, 1308182381UL, 212242504UL, 3001720496UL, 2982141597UL, 1090931027UL, 755020243UL, 2510536004UL, 307638580UL, 452574019UL, 2384876926UL, 2147764179UL, 3227931749UL, 1701580099UL, 3034185952UL, 2765119653UL, 3279755577UL, 1054678914UL, 2659043235UL, +4228353628UL, 701214306UL, 2460043371UL, 381309305UL, 2084857792UL, 2481277520UL, 859309333UL, 2928621220UL, 891630344UL, 4152646669UL, 3310629548UL, 2361261213UL, 790233558UL, 1490030690UL, 481283060UL, 2952921690UL, 3295251862UL, 1089451775UL, 2025962691UL, 2915212660UL, 1343061717UL, 2355026672UL, 67684812UL, 2217081575UL, 3290479436UL, 1051433451UL, 51111285UL, 15338687UL, 3455020635UL, 1430944862UL, 70037785UL, 2009147353UL, +4236701871UL, 1155691935UL, 2063919641UL, 2793993680UL, 2975111058UL, 3730415022UL, 403147571UL, 2373806232UL, 4153354125UL, 509071385UL, 2056228251UL, 444685935UL, 1912268707UL, 169863045UL, 932848332UL, 2282651407UL, 2077207745UL, 3712980941UL, 2410099142UL, 3394315084UL, 3191572807UL, 640536184UL, 4262344652UL, 3712420663UL, 3000991259UL, 249137656UL, 368243227UL, 3374467273UL, 392730170UL, 4208559971UL, 24751401UL, 495648080UL, +1670592959UL, 2715927647UL, 985309803UL, 2570053358UL, 2181488546UL, 830547082UL, 1129119636UL, 3133886450UL, 328788870UL, 2497762979UL, 202644333UL, 2719792059UL, 691527418UL, 3487733607UL, 1976943620UL, 1400269159UL, 709089170UL, 1057897966UL, 1938975941UL, 2071351862UL, 3393893128UL, 3083496965UL, 1040123365UL, 295024253UL, 1440317859UL, 1219456UL, 3641758945UL, 2029993123UL, 3231254260UL, 952956380UL, 3713963210UL, 2032382533UL, +2088497043UL, 1392075576UL, 4180475645UL, 3733090890UL, 3224165725UL, 1571908345UL, 2558692460UL, 3482549931UL, 1678929187UL, 448105905UL, 699188129UL, 2017324335UL, 2431113987UL, 3368868963UL, 3976741021UL, 3526784185UL, 2882973520UL, 1900625235UL, 3233347584UL, 1425242390UL, 982315917UL, 2614735561UL, 1128074864UL, 4172908214UL, 3792239985UL, 3260669732UL, 2586472751UL, 4095880420UL, 1926157640UL, 3722487277UL, 3037304631UL, 433233786UL, +2927295412UL, 625648993UL, 1111327015UL, 3975736867UL, 2402230281UL, 259216032UL, 1349560774UL, 3521430425UL, 2827154828UL, 1067483357UL, 989690947UL, 2808148912UL, 2034644068UL, 725679489UL, 3705541400UL, 588787520UL, 212242504UL, 3001720496UL, 2982141597UL, 1090931027UL, 1235811382UL, 2510536004UL, 307638580UL, 452574019UL, 2384876926UL, 3536994565UL, 3227931749UL, 1701580099UL, 3034185952UL, 2765119653UL, 463890041UL, 1054678914UL, +2659043235UL, 4228353628UL, 701214306UL, 3085494195UL, 381309305UL, 2084857792UL, 2481277520UL, 859309333UL, 3760199179UL, 891630344UL, 4152646669UL, 3310629548UL, 2361261213UL, 2550680915UL, 1490030690UL, 481283060UL, 2952921690UL, 3295251862UL, 4195487760UL, 2025962691UL, 2915212660UL, 1343061717UL, 2355026672UL, 339445869UL, 2217081575UL, 3290479436UL, 1051433451UL, 51111285UL, 1113202216UL, 3455020635UL, 1430944862UL, 70037785UL, +2009147353UL, 3982848623UL, 1155691935UL, 2063919641UL, 2793993680UL, 2975111058UL, 1725337613UL, 403147571UL, 2373806232UL, 4153354125UL, 509071385UL, 1474832043UL, 444685935UL, 1912268707UL, 169863045UL, 932848332UL, 1500855137UL, 2077207745UL, 3712980941UL, 2410099142UL, 3394315084UL, 2800379966UL, 640536184UL, 4262344652UL, 3712420663UL, 3000991259UL, 1028021485UL, 368243227UL, 3374467273UL, 392730170UL, 4208559971UL, 108468246UL, +495648080UL, 1670592959UL, 2715927647UL, 985309803UL, 61959589UL, 2181488546UL, 830547082UL, 1129119636UL, 3133886450UL, 3912020361UL, 2497762979UL, 202644333UL, 2719792059UL, 691527418UL, 1984193076UL, 1976943620UL, 1400269159UL, 709089170UL, 1057897966UL, 2381612490UL, 2071351862UL, 3393893128UL, 3083496965UL, 1040123365UL, 391784014UL, 1440317859UL, 1219456UL, 3641758945UL, 2029993123UL, 2260373342UL, 952956380UL, 3713963210UL, +2032382533UL, 2088497043UL, 135943164UL, 4180475645UL, 3733090890UL, 3224165725UL, 1571908345UL, 2660287325UL, 3482549931UL, 1678929187UL, 448105905UL, 699188129UL, 4104693318UL, 2431113987UL, 3368868963UL, 3976741021UL, 3526784185UL, 113762138UL, 1900625235UL, 3233347584UL, 1425242390UL, 982315917UL, 599246177UL, 1128074864UL, 4172908214UL, 3792239985UL, 3260669732UL, 2309689974UL, 4095880420UL, 1926157640UL, 3722487277UL, 3037304631UL, +3765223460UL, 866296319UL, 1169380319UL, 2919436659UL, 3370646420UL, 1866719277UL, 3226685069UL, 4252262342UL, 1835269960UL, 1170376930UL, 1357078768UL, 269175192UL, 3826888026UL, 3430363541UL, 1920758494UL, 51532769UL, 2919489927UL, 1568325914UL, 3184357856UL, 43519013UL, 2108988015UL, 1398495041UL, 2844640139UL, 2317092036UL, 1774750014UL, 2690907136UL, 1834465421UL, 1106469655UL, 2149810726UL, 4265420439UL, 2048218411UL, 1399986034UL, +1361619115UL, 2504769226UL, 913700780UL, 2382994726UL, 4292849877UL, 1381838410UL, 250258264UL, 1828569640UL, 1732718872UL, 1869949326UL, 835188347UL, 4180489913UL, 3049522050UL, 535168392UL, 3972173823UL, 2763844722UL, 3401884753UL, 3750694101UL, 851518496UL, 1015521371UL, 1511969218UL, 1597622074UL, 3810841601UL, 3326003776UL, 3141062630UL, 552856274UL, 4059179808UL, 175647012UL, 3893497501UL, 1805118717UL, 1064213711UL, 2310866839UL, +1397146463UL, 1798096676UL, 279868399UL, 1926726615UL, 2773068510UL, 347721208UL, 4099183723UL, 509136218UL, 2833615756UL, 3960499694UL, 4236258712UL, 1765641675UL, 535748563UL, 354515646UL, 3307314159UL, 3160079941UL, 3252681800UL, 2568363625UL, 3818514182UL, 3738662353UL, 899056999UL, 2531772068UL, 647726503UL, 2895823632UL, 393777910UL, 1759531813UL, 2363148604UL, 2931477989UL, 3381169914UL, 3877595131UL, 2375539210UL, 557544627UL, +273611522UL, 2717517554UL, 1935966767UL, 1738732887UL, 29153600UL, 20993454UL, 3758163226UL, 1692844400UL, 2176938194UL, 378940221UL, 2888599759UL, 1173120554UL, 2732575460UL, 3912766812UL, 522606644UL, 1925230852UL, 3887440328UL, 2111843275UL, 3549473366UL, 922916775UL, 2889744544UL, 2970467682UL, 3039277863UL, 990580154UL, 55435595UL, 1665634070UL, 3043418336UL, 2792050230UL, 2762503138UL, 1402344059UL, 2099263558UL, 3945248675UL, +3925566467UL, 2413979948UL, 463637252UL, 3768636616UL, 3374572388UL, 2217956879UL, 791988933UL, 382210765UL, 1715859444UL, 3462446413UL, 971427992UL, 3255404695UL, 2001750035UL, 2214129237UL, 320812374UL, 3688098101UL, 920365480UL, 2819401059UL, 2932570681UL, 3749857130UL, 523943786UL, 1271514748UL, 4078439472UL, 3501181265UL, 2475869985UL, 1797996951UL, 2300820710UL, 3994893924UL, 1739992082UL, 2475950326UL, 3780826558UL, 1018851411UL, +}, + +}; +#endif +CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS unsigned int precalc_xorwow_offset_matrix[32][800] = { +{ +0UL, 0UL, 0UL, 0UL, 3UL, 0UL, 0UL, 0UL, 0UL, 6UL, 0UL, 0UL, 0UL, 0UL, 15UL, 0UL, 0UL, 0UL, 0UL, 30UL, 0UL, 0UL, 0UL, 0UL, 60UL, 0UL, 0UL, 0UL, 0UL, 120UL, 0UL, 0UL, +0UL, 0UL, 240UL, 0UL, 0UL, 0UL, 0UL, 480UL, 0UL, 0UL, 0UL, 0UL, 960UL, 0UL, 0UL, 0UL, 0UL, 1920UL, 0UL, 0UL, 0UL, 0UL, 3840UL, 0UL, 0UL, 0UL, 0UL, 7680UL, 0UL, 0UL, 0UL, 0UL, +15360UL, 0UL, 0UL, 0UL, 0UL, 30720UL, 0UL, 0UL, 0UL, 0UL, 61440UL, 0UL, 0UL, 0UL, 0UL, 122880UL, 0UL, 0UL, 0UL, 0UL, 245760UL, 0UL, 0UL, 0UL, 0UL, 491520UL, 0UL, 0UL, 0UL, 0UL, 983040UL, 0UL, +0UL, 0UL, 0UL, 1966080UL, 0UL, 0UL, 0UL, 0UL, 3932160UL, 0UL, 0UL, 0UL, 0UL, 7864320UL, 0UL, 0UL, 0UL, 0UL, 15728640UL, 0UL, 0UL, 0UL, 0UL, 31457280UL, 0UL, 0UL, 0UL, 0UL, 62914560UL, 0UL, 0UL, 0UL, +0UL, 125829120UL, 0UL, 0UL, 0UL, 0UL, 251658240UL, 0UL, 0UL, 0UL, 0UL, 503316480UL, 0UL, 0UL, 0UL, 0UL, 1006632960UL, 0UL, 0UL, 0UL, 0UL, 2013265920UL, 0UL, 0UL, 0UL, 0UL, 4026531840UL, 0UL, 0UL, 0UL, 0UL, 3758096384UL, +1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, 64UL, 0UL, +0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, 0UL, 0UL, +0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, 0UL, 524288UL, +0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, 0UL, 0UL, +0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, 0UL, 0UL, +0UL, 1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, 64UL, +0UL, 0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, 0UL, +0UL, 0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, 0UL, +524288UL, 0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, 0UL, +0UL, 0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, 0UL, +0UL, 0UL, 1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, +64UL, 0UL, 0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, +0UL, 0UL, 0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, +0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, +0UL, 0UL, 0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, +0UL, 0UL, 0UL, 1UL, 17UL, 0UL, 0UL, 0UL, 2UL, 34UL, 0UL, 0UL, 0UL, 4UL, 68UL, 0UL, 0UL, 0UL, 8UL, 136UL, 0UL, 0UL, 0UL, 16UL, 272UL, 0UL, 0UL, 0UL, 32UL, 544UL, 0UL, 0UL, +0UL, 64UL, 1088UL, 0UL, 0UL, 0UL, 128UL, 2176UL, 0UL, 0UL, 0UL, 256UL, 4352UL, 0UL, 0UL, 0UL, 512UL, 8704UL, 0UL, 0UL, 0UL, 1024UL, 17408UL, 0UL, 0UL, 0UL, 2048UL, 34816UL, 0UL, 0UL, 0UL, 4096UL, +69632UL, 0UL, 0UL, 0UL, 8192UL, 139264UL, 0UL, 0UL, 0UL, 16384UL, 278528UL, 0UL, 0UL, 0UL, 32768UL, 557056UL, 0UL, 0UL, 0UL, 65536UL, 1114112UL, 0UL, 0UL, 0UL, 131072UL, 2228224UL, 0UL, 0UL, 0UL, 262144UL, 4456448UL, 0UL, +0UL, 0UL, 524288UL, 8912896UL, 0UL, 0UL, 0UL, 1048576UL, 17825792UL, 0UL, 0UL, 0UL, 2097152UL, 35651584UL, 0UL, 0UL, 0UL, 4194304UL, 71303168UL, 0UL, 0UL, 0UL, 8388608UL, 142606336UL, 0UL, 0UL, 0UL, 16777216UL, 285212672UL, 0UL, 0UL, 0UL, +33554432UL, 570425344UL, 0UL, 0UL, 0UL, 67108864UL, 1140850688UL, 0UL, 0UL, 0UL, 134217728UL, 2281701376UL, 0UL, 0UL, 0UL, 268435456UL, 268435456UL, 0UL, 0UL, 0UL, 536870912UL, 536870912UL, 0UL, 0UL, 0UL, 1073741824UL, 1073741824UL, 0UL, 0UL, 0UL, 2147483648UL, 2147483648UL, +}, +{ +0UL, 3UL, 51UL, 771UL, 13107UL, 0UL, 6UL, 102UL, 1542UL, 26214UL, 0UL, 15UL, 255UL, 3855UL, 65535UL, 0UL, 30UL, 510UL, 7710UL, 131070UL, 0UL, 60UL, 1020UL, 15420UL, 262140UL, 0UL, 120UL, 2040UL, 30840UL, 524280UL, 0UL, 240UL, +4080UL, 61680UL, 1048560UL, 0UL, 480UL, 8160UL, 123360UL, 2097120UL, 0UL, 960UL, 16320UL, 246720UL, 4194240UL, 0UL, 1920UL, 32640UL, 493440UL, 8388480UL, 0UL, 3840UL, 65280UL, 986880UL, 16776960UL, 0UL, 7680UL, 130560UL, 1973760UL, 33553920UL, 0UL, 15360UL, 261120UL, 3947520UL, +67107840UL, 0UL, 30720UL, 522240UL, 7895040UL, 134215680UL, 0UL, 61440UL, 1044480UL, 15790080UL, 268431360UL, 0UL, 122880UL, 2088960UL, 31580160UL, 536862720UL, 0UL, 245760UL, 4177920UL, 63160320UL, 1073725440UL, 0UL, 491520UL, 8355840UL, 126320640UL, 2147450880UL, 0UL, 983040UL, 16711680UL, 252641280UL, 4294901760UL, 0UL, +1966080UL, 33423360UL, 505282560UL, 4294836224UL, 0UL, 3932160UL, 66846720UL, 1010565120UL, 4294705152UL, 0UL, 7864320UL, 133693440UL, 2021130240UL, 4294443008UL, 0UL, 15728640UL, 267386880UL, 4042260480UL, 4293918720UL, 0UL, 31457280UL, 534773760UL, 3789553664UL, 4292870144UL, 0UL, 62914560UL, 1069547520UL, 3284140032UL, 4290772992UL, 0UL, 125829120UL, 2139095040UL, +2273312768UL, 4286578688UL, 0UL, 251658240UL, 4278190080UL, 251658240UL, 4278190080UL, 0UL, 503316480UL, 4261412864UL, 503316480UL, 4261412864UL, 0UL, 1006632960UL, 4227858432UL, 1006632960UL, 4227858432UL, 0UL, 2013265920UL, 4160749568UL, 2013265920UL, 4160749568UL, 0UL, 4026531840UL, 4026531840UL, 4026531840UL, 4026531840UL, 0UL, 3758096384UL, 3758096384UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 3UL, 51UL, 771UL, 0UL, 0UL, 6UL, 102UL, 1542UL, 0UL, 0UL, 15UL, 255UL, 3855UL, 0UL, 0UL, 30UL, 510UL, 7710UL, 0UL, 0UL, 60UL, 1020UL, 15420UL, 0UL, 0UL, 120UL, 2040UL, 30840UL, 0UL, 0UL, +240UL, 4080UL, 61680UL, 0UL, 0UL, 480UL, 8160UL, 123360UL, 0UL, 0UL, 960UL, 16320UL, 246720UL, 0UL, 0UL, 1920UL, 32640UL, 493440UL, 0UL, 0UL, 3840UL, 65280UL, 986880UL, 0UL, 0UL, 7680UL, 130560UL, 1973760UL, 0UL, 0UL, 15360UL, 261120UL, +3947520UL, 0UL, 0UL, 30720UL, 522240UL, 7895040UL, 0UL, 0UL, 61440UL, 1044480UL, 15790080UL, 0UL, 0UL, 122880UL, 2088960UL, 31580160UL, 0UL, 0UL, 245760UL, 4177920UL, 63160320UL, 0UL, 0UL, 491520UL, 8355840UL, 126320640UL, 0UL, 0UL, 983040UL, 16711680UL, 252641280UL, 0UL, +0UL, 1966080UL, 33423360UL, 505282560UL, 0UL, 0UL, 3932160UL, 66846720UL, 1010565120UL, 0UL, 0UL, 7864320UL, 133693440UL, 2021130240UL, 0UL, 0UL, 15728640UL, 267386880UL, 4042260480UL, 0UL, 0UL, 31457280UL, 534773760UL, 3789553664UL, 0UL, 0UL, 62914560UL, 1069547520UL, 3284140032UL, 0UL, 0UL, 125829120UL, +2139095040UL, 2273312768UL, 0UL, 0UL, 251658240UL, 4278190080UL, 251658240UL, 0UL, 0UL, 503316480UL, 4261412864UL, 503316480UL, 0UL, 0UL, 1006632960UL, 4227858432UL, 1006632960UL, 0UL, 0UL, 2013265920UL, 4160749568UL, 2013265920UL, 0UL, 0UL, 4026531840UL, 4026531840UL, 4026531840UL, 0UL, 0UL, 3758096384UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 0UL, 3UL, 51UL, 0UL, 0UL, 0UL, 6UL, 102UL, 0UL, 0UL, 0UL, 15UL, 255UL, 0UL, 0UL, 0UL, 30UL, 510UL, 0UL, 0UL, 0UL, 60UL, 1020UL, 0UL, 0UL, 0UL, 120UL, 2040UL, 0UL, 0UL, +0UL, 240UL, 4080UL, 0UL, 0UL, 0UL, 480UL, 8160UL, 0UL, 0UL, 0UL, 960UL, 16320UL, 0UL, 0UL, 0UL, 1920UL, 32640UL, 0UL, 0UL, 0UL, 3840UL, 65280UL, 0UL, 0UL, 0UL, 7680UL, 130560UL, 0UL, 0UL, 0UL, 15360UL, +261120UL, 0UL, 0UL, 0UL, 30720UL, 522240UL, 0UL, 0UL, 0UL, 61440UL, 1044480UL, 0UL, 0UL, 0UL, 122880UL, 2088960UL, 0UL, 0UL, 0UL, 245760UL, 4177920UL, 0UL, 0UL, 0UL, 491520UL, 8355840UL, 0UL, 0UL, 0UL, 983040UL, 16711680UL, 0UL, +0UL, 0UL, 1966080UL, 33423360UL, 0UL, 0UL, 0UL, 3932160UL, 66846720UL, 0UL, 0UL, 0UL, 7864320UL, 133693440UL, 0UL, 0UL, 0UL, 15728640UL, 267386880UL, 0UL, 0UL, 0UL, 31457280UL, 534773760UL, 0UL, 0UL, 0UL, 62914560UL, 1069547520UL, 0UL, 0UL, 0UL, +125829120UL, 2139095040UL, 0UL, 0UL, 0UL, 251658240UL, 4278190080UL, 0UL, 0UL, 0UL, 503316480UL, 4261412864UL, 0UL, 0UL, 0UL, 1006632960UL, 4227858432UL, 0UL, 0UL, 0UL, 2013265920UL, 4160749568UL, 0UL, 0UL, 0UL, 4026531840UL, 4026531840UL, 0UL, 0UL, 0UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 0UL, 0UL, 3UL, 0UL, 0UL, 0UL, 0UL, 6UL, 0UL, 0UL, 0UL, 0UL, 15UL, 0UL, 0UL, 0UL, 0UL, 30UL, 0UL, 0UL, 0UL, 0UL, 60UL, 0UL, 0UL, 0UL, 0UL, 120UL, 0UL, 0UL, +0UL, 0UL, 240UL, 0UL, 0UL, 0UL, 0UL, 480UL, 0UL, 0UL, 0UL, 0UL, 960UL, 0UL, 0UL, 0UL, 0UL, 1920UL, 0UL, 0UL, 0UL, 0UL, 3840UL, 0UL, 0UL, 0UL, 0UL, 7680UL, 0UL, 0UL, 0UL, 0UL, +15360UL, 0UL, 0UL, 0UL, 0UL, 30720UL, 0UL, 0UL, 0UL, 0UL, 61440UL, 0UL, 0UL, 0UL, 0UL, 122880UL, 0UL, 0UL, 0UL, 0UL, 245760UL, 0UL, 0UL, 0UL, 0UL, 491520UL, 0UL, 0UL, 0UL, 0UL, 983040UL, 0UL, +0UL, 0UL, 0UL, 1966080UL, 0UL, 0UL, 0UL, 0UL, 3932160UL, 0UL, 0UL, 0UL, 0UL, 7864320UL, 0UL, 0UL, 0UL, 0UL, 15728640UL, 0UL, 0UL, 0UL, 0UL, 31457280UL, 0UL, 0UL, 0UL, 0UL, 62914560UL, 0UL, 0UL, 0UL, +0UL, 125829120UL, 0UL, 0UL, 0UL, 0UL, 251658240UL, 0UL, 0UL, 0UL, 0UL, 503316480UL, 0UL, 0UL, 0UL, 0UL, 1006632960UL, 0UL, 0UL, 0UL, 0UL, 2013265920UL, 0UL, 0UL, 0UL, 0UL, 4026531840UL, 0UL, 0UL, 0UL, 0UL, 3758096384UL, +1UL, 17UL, 257UL, 4369UL, 65537UL, 2UL, 34UL, 514UL, 8738UL, 131074UL, 4UL, 68UL, 1028UL, 17476UL, 262148UL, 8UL, 136UL, 2056UL, 34952UL, 524296UL, 16UL, 272UL, 4112UL, 69904UL, 1048592UL, 32UL, 544UL, 8224UL, 139808UL, 2097184UL, 64UL, 1088UL, +16448UL, 279616UL, 4194368UL, 128UL, 2176UL, 32896UL, 559232UL, 8388736UL, 256UL, 4352UL, 65792UL, 1118464UL, 16777472UL, 512UL, 8704UL, 131584UL, 2236928UL, 33554944UL, 1024UL, 17408UL, 263168UL, 4473856UL, 67109888UL, 2048UL, 34816UL, 526336UL, 8947712UL, 134219776UL, 4096UL, 69632UL, 1052672UL, 17895424UL, +268439552UL, 8192UL, 139264UL, 2105344UL, 35790848UL, 536879104UL, 16384UL, 278528UL, 4210688UL, 71581696UL, 1073758208UL, 32768UL, 557056UL, 8421376UL, 143163392UL, 2147516416UL, 65536UL, 1114112UL, 16842752UL, 286326784UL, 65536UL, 131072UL, 2228224UL, 33685504UL, 572653568UL, 131072UL, 262144UL, 4456448UL, 67371008UL, 1145307136UL, 262144UL, 524288UL, +8912896UL, 134742016UL, 2290614272UL, 524288UL, 1048576UL, 17825792UL, 269484032UL, 286261248UL, 1048576UL, 2097152UL, 35651584UL, 538968064UL, 572522496UL, 2097152UL, 4194304UL, 71303168UL, 1077936128UL, 1145044992UL, 4194304UL, 8388608UL, 142606336UL, 2155872256UL, 2290089984UL, 8388608UL, 16777216UL, 285212672UL, 16777216UL, 285212672UL, 16777216UL, 33554432UL, 570425344UL, 33554432UL, +570425344UL, 33554432UL, 67108864UL, 1140850688UL, 67108864UL, 1140850688UL, 67108864UL, 134217728UL, 2281701376UL, 134217728UL, 2281701376UL, 134217728UL, 268435456UL, 268435456UL, 268435456UL, 268435456UL, 268435456UL, 536870912UL, 536870912UL, 536870912UL, 536870912UL, 536870912UL, 1073741824UL, 1073741824UL, 1073741824UL, 1073741824UL, 1073741824UL, 2147483648UL, 2147483648UL, 2147483648UL, 2147483648UL, 2147483648UL, +}, +{ +85009117UL, 335741939UL, 1412632518UL, 386859243UL, 1741437244UL, 152139416UL, 403047142UL, 2556825231UL, 505087203UL, 4287193174UL, 335609039UL, 336528191UL, 1425998811UL, 456920088UL, 2832198590UL, 724748988UL, 3625845630UL, 1509824181UL, 3330088197UL, 2710488401UL, 1431742057UL, 1077674236UL, 1140592489UL, 2096905276UL, 3007294393UL, 2863484114UL, 1081606648UL, 1207443154UL, 972585080UL, 2793363314UL, 1432000919UL, 1089470704UL, +1341132452UL, 3019109363UL, 2362285522UL, 1790260014UL, 2178941408UL, 2682264904UL, 1743251430UL, 429603751UL, 359294556UL, 62915520UL, 1069562512UL, 3486502860UL, 859207501UL, 3939814584UL, 125831040UL, 2139125024UL, 2678038424UL, 1718415002UL, 363436400UL, 251662080UL, 4278250048UL, 1061109552UL, 3436830004UL, 3948098272UL, 503324160UL, 4261532800UL, 2122219104UL, 2310257256UL, 380003776UL, 1006648320UL, 4228098304UL, 4244438208UL, +3278337232UL, 3981233024UL, 2013296640UL, 4161229312UL, 4193909120UL, 2530142624UL, 446273280UL, 4026593280UL, 4027491328UL, 871625472UL, 4254978880UL, 4113772032UL, 3758219264UL, 3760015360UL, 2011686400UL, 3946555008UL, 711351296UL, 3221471232UL, 3225063424UL, 4291808256UL, 108481792UL, 2496444416UL, 2147975168UL, 2155159552UL, 4020213760UL, 485399040UL, 3919147008UL, 983040UL, 15351808UL, 255799296UL, 3923588096UL, 322101248UL, +1966080UL, 299139072UL, 511598592UL, 3283773440UL, 3865427968UL, 3932160UL, 4087939072UL, 1023197184UL, 1467273216UL, 214663168UL, 7864320UL, 4149346304UL, 2046394368UL, 3202981888UL, 3650551808UL, 3236954112UL, 1050935296UL, 871563264UL, 2916302848UL, 1932394496UL, 2447376384UL, 1833435136UL, 2011561984UL, 2342944768UL, 643563520UL, 868220928UL, 177209344UL, 4291559424UL, 122486784UL, 2360868864UL, 2004877312UL, 85983232UL, +4019716096UL, 3734634496UL, 3647995904UL, 1056964608UL, 3661627392UL, 254803968UL, 2905866240UL, 1658847232UL, 2113929216UL, 3028287488UL, 3730833408UL, 2322071552UL, 3586129920UL, 4227858432UL, 1761607680UL, 2092957696UL, 80740352UL, 2071986176UL, 4160749568UL, 3523215360UL, 964689920UL, 429916160UL, 3875536896UL, 4026531840UL, 2751463424UL, 1929379840UL, 4081057792UL, 503316480UL, 3758096384UL, 2281701376UL, 4127195136UL, 3397386240UL, +1316635UL, 85009117UL, 335741939UL, 1412632518UL, 386859243UL, 1580547UL, 152139416UL, 403047142UL, 2556825231UL, 505087203UL, 1317672UL, 335609039UL, 336528191UL, 1425998811UL, 456920088UL, 1574501UL, 724748988UL, 3625845630UL, 1509824181UL, 3330088197UL, 15612UL, 1431742057UL, 1077674236UL, 1140592489UL, 2096905276UL, 31224UL, 2863484114UL, 1081606648UL, 1207443154UL, 972585080UL, 62451UL, 1432000919UL, +1089470704UL, 1341132452UL, 3019109363UL, 124902UL, 1790260014UL, 2178941408UL, 2682264904UL, 1743251430UL, 249804UL, 359294556UL, 62915520UL, 1069562512UL, 3486502860UL, 499608UL, 3939814584UL, 125831040UL, 2139125024UL, 2678038424UL, 999216UL, 363436400UL, 251662080UL, 4278250048UL, 1061109552UL, 3223223904UL, 3948098272UL, 503324160UL, 4261532800UL, 2122219104UL, 1077738688UL, 380003776UL, 1006648320UL, 4228098304UL, +4244438208UL, 1081735552UL, 3981233024UL, 2013296640UL, 4161229312UL, 4193909120UL, 1089729280UL, 446273280UL, 4026593280UL, 4027491328UL, 871625472UL, 2179458560UL, 4113772032UL, 3758219264UL, 3760015360UL, 2011686400UL, 63949824UL, 711351296UL, 3221471232UL, 3225063424UL, 4291808256UL, 127899648UL, 2496444416UL, 2147975168UL, 2155159552UL, 4020213760UL, 255799296UL, 3919147008UL, 983040UL, 15351808UL, 255799296UL, 3732824064UL, +322101248UL, 1966080UL, 299139072UL, 511598592UL, 2096939008UL, 3865427968UL, 3932160UL, 4087939072UL, 1023197184UL, 972652544UL, 214663168UL, 7864320UL, 4149346304UL, 2046394368UL, 3019046912UL, 3650551808UL, 3236954112UL, 1050935296UL, 871563264UL, 1743126528UL, 1932394496UL, 2447376384UL, 1833435136UL, 2011561984UL, 3486253056UL, 643563520UL, 868220928UL, 177209344UL, 4291559424UL, 2677538816UL, 2360868864UL, 2004877312UL, +85983232UL, 4019716096UL, 1060110336UL, 3647995904UL, 1056964608UL, 3661627392UL, 254803968UL, 3193962496UL, 1658847232UL, 2113929216UL, 3028287488UL, 3730833408UL, 3166699520UL, 3586129920UL, 4227858432UL, 1761607680UL, 2092957696UL, 3112173568UL, 2071986176UL, 4160749568UL, 3523215360UL, 964689920UL, 1929379840UL, 3875536896UL, 4026531840UL, 2751463424UL, 1929379840UL, 4127195136UL, 503316480UL, 3758096384UL, 2281701376UL, 4127195136UL, +332854UL, 1316635UL, 85009117UL, 335741939UL, 1412632518UL, 596079UL, 1580547UL, 152139416UL, 403047142UL, 2556825231UL, 1316075UL, 1317672UL, 335609039UL, 336528191UL, 1425998811UL, 2824661UL, 1574501UL, 724748988UL, 3625845630UL, 1509824181UL, 5571497UL, 15612UL, 1431742057UL, 1077674236UL, 1140592489UL, 11142994UL, 31224UL, 2863484114UL, 1081606648UL, 1207443154UL, 22285988UL, 62451UL, +1432000919UL, 1089470704UL, 1341132452UL, 44571976UL, 124902UL, 1790260014UL, 2178941408UL, 2682264904UL, 89143952UL, 249804UL, 359294556UL, 62915520UL, 1069562512UL, 178287904UL, 499608UL, 3939814584UL, 125831040UL, 2139125024UL, 356575808UL, 999216UL, 363436400UL, 251662080UL, 4278250048UL, 713151616UL, 3223223904UL, 3948098272UL, 503324160UL, 4261532800UL, 1426303232UL, 1077738688UL, 380003776UL, 1006648320UL, +4228098304UL, 2852606464UL, 1081735552UL, 3981233024UL, 2013296640UL, 4161229312UL, 1410245632UL, 1089729280UL, 446273280UL, 4026593280UL, 4027491328UL, 1746749440UL, 2179458560UL, 4113772032UL, 3758219264UL, 3760015360UL, 272273408UL, 63949824UL, 711351296UL, 3221471232UL, 3225063424UL, 3765772288UL, 127899648UL, 2496444416UL, 2147975168UL, 2155159552UL, 15351808UL, 255799296UL, 3919147008UL, 983040UL, 15351808UL, 3251929088UL, +3732824064UL, 322101248UL, 1966080UL, 299139072UL, 1135149056UL, 2096939008UL, 3865427968UL, 3932160UL, 4087939072UL, 1196556288UL, 972652544UL, 214663168UL, 7864320UL, 4149346304UL, 1319370752UL, 3019046912UL, 3650551808UL, 3236954112UL, 1050935296UL, 2638741504UL, 1743126528UL, 1932394496UL, 2447376384UL, 1833435136UL, 982515712UL, 3486253056UL, 643563520UL, 868220928UL, 177209344UL, 1965031424UL, 2677538816UL, 2360868864UL, +2004877312UL, 85983232UL, 3930062848UL, 1060110336UL, 3647995904UL, 1056964608UL, 3661627392UL, 3565158400UL, 3193962496UL, 1658847232UL, 2113929216UL, 3028287488UL, 2835349504UL, 3166699520UL, 3586129920UL, 4227858432UL, 1761607680UL, 1375731712UL, 3112173568UL, 2071986176UL, 4160749568UL, 3523215360UL, 2751463424UL, 1929379840UL, 3875536896UL, 4026531840UL, 2751463424UL, 2281701376UL, 4127195136UL, 503316480UL, 3758096384UL, 2281701376UL, +5123UL, 332854UL, 1316635UL, 85009117UL, 335741939UL, 6150UL, 596079UL, 1580547UL, 152139416UL, 403047142UL, 5135UL, 1316075UL, 1317672UL, 335609039UL, 336528191UL, 6174UL, 2824661UL, 1574501UL, 724748988UL, 3625845630UL, 60UL, 5571497UL, 15612UL, 1431742057UL, 1077674236UL, 120UL, 11142994UL, 31224UL, 2863484114UL, 1081606648UL, 240UL, 22285988UL, +62451UL, 1432000919UL, 1089470704UL, 480UL, 44571976UL, 124902UL, 1790260014UL, 2178941408UL, 960UL, 89143952UL, 249804UL, 359294556UL, 62915520UL, 1920UL, 178287904UL, 499608UL, 3939814584UL, 125831040UL, 3840UL, 356575808UL, 999216UL, 363436400UL, 251662080UL, 7680UL, 713151616UL, 3223223904UL, 3948098272UL, 503324160UL, 15360UL, 1426303232UL, 1077738688UL, 380003776UL, +1006648320UL, 30720UL, 2852606464UL, 1081735552UL, 3981233024UL, 2013296640UL, 61440UL, 1410245632UL, 1089729280UL, 446273280UL, 4026593280UL, 122880UL, 1746749440UL, 2179458560UL, 4113772032UL, 3758219264UL, 245760UL, 272273408UL, 63949824UL, 711351296UL, 3221471232UL, 491520UL, 3765772288UL, 127899648UL, 2496444416UL, 2147975168UL, 983040UL, 15351808UL, 255799296UL, 3919147008UL, 983040UL, 3223191552UL, +3251929088UL, 3732824064UL, 322101248UL, 1966080UL, 1077673984UL, 1135149056UL, 2096939008UL, 3865427968UL, 3932160UL, 1081606144UL, 1196556288UL, 972652544UL, 214663168UL, 7864320UL, 1089470464UL, 1319370752UL, 3019046912UL, 3650551808UL, 3236954112UL, 2178940928UL, 2638741504UL, 1743126528UL, 1932394496UL, 2447376384UL, 62914560UL, 982515712UL, 3486253056UL, 643563520UL, 868220928UL, 125829120UL, 1965031424UL, 2677538816UL, +2360868864UL, 2004877312UL, 251658240UL, 3930062848UL, 1060110336UL, 3647995904UL, 1056964608UL, 503316480UL, 3565158400UL, 3193962496UL, 1658847232UL, 2113929216UL, 1006632960UL, 2835349504UL, 3166699520UL, 3586129920UL, 4227858432UL, 2013265920UL, 1375731712UL, 3112173568UL, 2071986176UL, 4160749568UL, 4026531840UL, 2751463424UL, 1929379840UL, 3875536896UL, 4026531840UL, 3758096384UL, 2281701376UL, 4127195136UL, 503316480UL, 3758096384UL, +201392209UL, 3423671362UL, 218366296UL, 3713336838UL, 206572594UL, 402785186UL, 2552372100UL, 436928947UL, 3130605370UL, 463476848UL, 262468UL, 4461835UL, 68158800UL, 1158700908UL, 20971524UL, 524680UL, 8919318UL, 136513955UL, 2316537326UL, 25165852UL, 3222274064UL, 3239051564UL, 3494187077UL, 3558090985UL, 3221225500UL, 2149580832UL, 2183135832UL, 2693406858UL, 2821214674UL, 2147483704UL, 4194368UL, 71304368UL, +1091846420UL, 1347462055UL, 64UL, 8388736UL, 142608736UL, 2183692840UL, 2694924110UL, 3221225600UL, 16777472UL, 285217472UL, 72418384UL, 1094880924UL, 1342177536UL, 33554944UL, 570434944UL, 144836768UL, 2189761848UL, 2684355072UL, 67109888UL, 1140869888UL, 289673536UL, 84556400UL, 1073742848UL, 134219776UL, 2281739776UL, 579347072UL, 169112800UL, 2147485696UL, 268439552UL, 268512256UL, 1158694144UL, 69790144UL, +4096UL, 536879104UL, 537024512UL, 2317388288UL, 3360805760UL, 8192UL, 1073758208UL, 1074049024UL, 339809280UL, 1352902400UL, 16384UL, 2147516416UL, 2148098048UL, 3900844032UL, 1632062976UL, 32768UL, 65536UL, 1228800UL, 17059840UL, 311335936UL, 65536UL, 131072UL, 2457600UL, 34119680UL, 622671872UL, 131072UL, 262144UL, 4915200UL, 68239360UL, 1245343744UL, 262144UL, 524288UL, +9830400UL, 136478720UL, 2490687488UL, 524288UL, 1048576UL, 288096256UL, 272957440UL, 954843136UL, 3222274048UL, 2097152UL, 3797417984UL, 545914880UL, 2983428096UL, 2149580800UL, 4194304UL, 78643200UL, 1091829760UL, 2745630720UL, 4194304UL, 3229614080UL, 3378511872UL, 1109917696UL, 2270035968UL, 8388608UL, 1358954496UL, 1119879168UL, 1414529024UL, 513540096UL, 16777216UL, 2717908992UL, 2239758336UL, 2829058048UL, +1027080192UL, 33554432UL, 1140850688UL, 184549376UL, 1363148800UL, 2054160384UL, 3288334336UL, 2281701376UL, 369098752UL, 2726297600UL, 4108320768UL, 2281701376UL, 268435456UL, 738197504UL, 2231369728UL, 968884224UL, 3959422976UL, 536870912UL, 1476395008UL, 167772160UL, 3011510272UL, 3355443200UL, 1073741824UL, 2952790016UL, 335544320UL, 1728053248UL, 2147483648UL, 2147483648UL, 1610612736UL, 3892314112UL, 503316480UL, 0UL, +}, +{ +1939838472UL, 1412147404UL, 166205219UL, 1757484276UL, 2905930693UL, 2345662040UL, 2845657161UL, 253454719UL, 2661974169UL, 303781080UL, 4075331504UL, 31014156UL, 244538930UL, 3752264221UL, 992575155UL, 219309525UL, 246620060UL, 215640989UL, 4125020723UL, 2016731730UL, 3236558869UL, 297169276UL, 3293566751UL, 1867504216UL, 210423272UL, 2531663658UL, 499723753UL, 1730625896UL, 189236880UL, 3388575408UL, 2433358422UL, 1368961148UL, +3134096848UL, 2827836415UL, 3888822753UL, 4172043647UL, 3379360748UL, 2651760955UL, 1345081091UL, 627692776UL, 189423917UL, 1927379456UL, 4004336944UL, 2995932065UL, 1882016234UL, 2551113616UL, 1576396048UL, 1299792730UL, 2151240795UL, 2154814108UL, 4292139924UL, 3555849728UL, 943986992UL, 3169912733UL, 2631635779UL, 3478094562UL, 1285558544UL, 3716074330UL, 2780749859UL, 3911106510UL, 4175656994UL, 1731832828UL, 1275401375UL, 937322456UL, +3802094750UL, 1145506936UL, 1008905193UL, 1718801768UL, 645739137UL, 1356219146UL, 827886816UL, 1722154800UL, 2242776733UL, 754630810UL, 772070504UL, 249481170UL, 2608123425UL, 2087201889UL, 3200968096UL, 3292110026UL, 841433255UL, 477543427UL, 1878882709UL, 705347364UL, 4003860146UL, 3194913138UL, 2616490007UL, 357561212UL, 2446098297UL, 2955680594UL, 2512991743UL, 637464579UL, 1209132455UL, 1341312804UL, 612108672UL, 2455017713UL, +1749147666UL, 4020226825UL, 2873924220UL, 499405095UL, 1837614076UL, 1227604028UL, 714577577UL, 165950208UL, 442290261UL, 489077752UL, 216760440UL, 42151250UL, 426862080UL, 2810242474UL, 4112075489UL, 3514761468UL, 4101921371UL, 982512636UL, 500792667UL, 4286077681UL, 198050301UL, 1858712743UL, 2913642493UL, 3547545255UL, 3981929169UL, 2944140287UL, 2286578015UL, 3422343167UL, 1239123295UL, 2026367394UL, 3269986302UL, 3028402878UL, +2709637886UL, 1096011710UL, 294584132UL, 3086749695UL, 3324400975UL, 1164394495UL, 4290155855UL, 543687304UL, 4008517630UL, 836370334UL, 1876426750UL, 2362048414UL, 3578325264UL, 3221487612UL, 2671154748UL, 3395518460UL, 2018383420UL, 2131029536UL, 2165829624UL, 697661816UL, 1336049656UL, 3309365624UL, 4259639360UL, 3423548400UL, 2416417776UL, 1633698800UL, 1630071792UL, 41950336UL, 3423478496UL, 2885608160UL, 3943744224UL, 677380832UL, +4179285363UL, 1939838472UL, 1412147404UL, 166205219UL, 1757484276UL, 3838244595UL, 2345662040UL, 2845657161UL, 253454719UL, 2661974169UL, 138737288UL, 4075331504UL, 31014156UL, 244538930UL, 3752264221UL, 1503392345UL, 219309525UL, 246620060UL, 215640989UL, 4125020723UL, 1759481152UL, 3236558869UL, 297169276UL, 3293566751UL, 1867504216UL, 3898070400UL, 2531663658UL, 499723753UL, 1730625896UL, 189236880UL, 2610231010UL, 2433358422UL, +1368961148UL, 3134096848UL, 2827836415UL, 3903474593UL, 4172043647UL, 3379360748UL, 2651760955UL, 1345081091UL, 1267864331UL, 189423917UL, 1927379456UL, 4004336944UL, 2995932065UL, 3452816347UL, 2551113616UL, 1576396048UL, 1299792730UL, 2151240795UL, 1222520631UL, 4292139924UL, 3555849728UL, 943986992UL, 3169912733UL, 3260130211UL, 3478094562UL, 1285558544UL, 3716074330UL, 2780749859UL, 3039362306UL, 4175656994UL, 1731832828UL, 1275401375UL, +937322456UL, 3236754932UL, 1145506936UL, 1008905193UL, 1718801768UL, 645739137UL, 1358079399UL, 827886816UL, 1722154800UL, 2242776733UL, 754630810UL, 1748663943UL, 249481170UL, 2608123425UL, 2087201889UL, 3200968096UL, 698076610UL, 841433255UL, 477543427UL, 1878882709UL, 705347364UL, 3692794996UL, 3194913138UL, 2616490007UL, 357561212UL, 2446098297UL, 2771068186UL, 2512991743UL, 637464579UL, 1209132455UL, 1341312804UL, 27937268UL, +2455017713UL, 1749147666UL, 4020226825UL, 2873924220UL, 1673040956UL, 1837614076UL, 1227604028UL, 714577577UL, 165950208UL, 528340088UL, 489077752UL, 216760440UL, 42151250UL, 426862080UL, 1646215396UL, 4112075489UL, 3514761468UL, 4101921371UL, 982512636UL, 2095821304UL, 4286077681UL, 198050301UL, 1858712743UL, 2913642493UL, 277300160UL, 3981929169UL, 2944140287UL, 2286578015UL, 3422343167UL, 1178044288UL, 2026367394UL, 3269986302UL, +3028402878UL, 2709637886UL, 2234191616UL, 294584132UL, 3086749695UL, 3324400975UL, 1164394495UL, 136978944UL, 543687304UL, 4008517630UL, 836370334UL, 1876426750UL, 3275253760UL, 3578325264UL, 3221487612UL, 2671154748UL, 3395518460UL, 3942394880UL, 2131029536UL, 2165829624UL, 697661816UL, 1336049656UL, 3265045504UL, 4259639360UL, 3423548400UL, 2416417776UL, 1633698800UL, 3943712768UL, 41950336UL, 3423478496UL, 2885608160UL, 3943744224UL, +2293593009UL, 4179285363UL, 1939838472UL, 1412147404UL, 166205219UL, 715714152UL, 3838244595UL, 2345662040UL, 2845657161UL, 253454719UL, 3758048260UL, 138737288UL, 4075331504UL, 31014156UL, 244538930UL, 370671650UL, 1503392345UL, 219309525UL, 246620060UL, 215640989UL, 2219162331UL, 1759481152UL, 3236558869UL, 297169276UL, 3293566751UL, 135243402UL, 3898070400UL, 2531663658UL, 499723753UL, 1730625896UL, 3142293713UL, 2610231010UL, +2433358422UL, 1368961148UL, 3134096848UL, 486949791UL, 3903474593UL, 4172043647UL, 3379360748UL, 2651760955UL, 3172880550UL, 1267864331UL, 189423917UL, 1927379456UL, 4004336944UL, 191463910UL, 3452816347UL, 2551113616UL, 1576396048UL, 1299792730UL, 4411574UL, 1222520631UL, 4292139924UL, 3555849728UL, 943986992UL, 3073348038UL, 3260130211UL, 3478094562UL, 1285558544UL, 3716074330UL, 3098363790UL, 3039362306UL, 4175656994UL, 1731832828UL, +1275401375UL, 468159532UL, 3236754932UL, 1145506936UL, 1008905193UL, 1718801768UL, 1092964081UL, 1358079399UL, 827886816UL, 1722154800UL, 2242776733UL, 53128947UL, 1748663943UL, 249481170UL, 2608123425UL, 2087201889UL, 1960144614UL, 698076610UL, 841433255UL, 477543427UL, 1878882709UL, 1505419004UL, 3692794996UL, 3194913138UL, 2616490007UL, 357561212UL, 2823143358UL, 2771068186UL, 2512991743UL, 637464579UL, 1209132455UL, 1991737212UL, +27937268UL, 2455017713UL, 1749147666UL, 4020226825UL, 2907896812UL, 1673040956UL, 1837614076UL, 1227604028UL, 714577577UL, 3633969112UL, 528340088UL, 489077752UL, 216760440UL, 42151250UL, 2886728356UL, 1646215396UL, 4112075489UL, 3514761468UL, 4101921371UL, 3507686008UL, 2095821304UL, 4286077681UL, 198050301UL, 1858712743UL, 1463806912UL, 277300160UL, 3981929169UL, 2944140287UL, 2286578015UL, 4137888640UL, 1178044288UL, 2026367394UL, +3269986302UL, 3028402878UL, 1276820224UL, 2234191616UL, 294584132UL, 3086749695UL, 3324400975UL, 4274031104UL, 136978944UL, 543687304UL, 4008517630UL, 836370334UL, 2978609152UL, 3275253760UL, 3578325264UL, 3221487612UL, 2671154748UL, 2296777728UL, 3942394880UL, 2131029536UL, 2165829624UL, 697661816UL, 1086645248UL, 3265045504UL, 4259639360UL, 3423548400UL, 2416417776UL, 2295121920UL, 3943712768UL, 41950336UL, 3423478496UL, 2885608160UL, +3290486993UL, 2293593009UL, 4179285363UL, 1939838472UL, 1412147404UL, 3718742914UL, 715714152UL, 3838244595UL, 2345662040UL, 2845657161UL, 3251034248UL, 3758048260UL, 138737288UL, 4075331504UL, 31014156UL, 2257801369UL, 370671650UL, 1503392345UL, 219309525UL, 246620060UL, 1375177854UL, 2219162331UL, 1759481152UL, 3236558869UL, 297169276UL, 2981812236UL, 135243402UL, 3898070400UL, 2531663658UL, 499723753UL, 1103465850UL, 3142293713UL, +2610231010UL, 2433358422UL, 1368961148UL, 2570001060UL, 486949791UL, 3903474593UL, 4172043647UL, 3379360748UL, 1922171925UL, 3172880550UL, 1267864331UL, 189423917UL, 1927379456UL, 1359812359UL, 191463910UL, 3452816347UL, 2551113616UL, 1576396048UL, 2518549525UL, 4411574UL, 1222520631UL, 4292139924UL, 3555849728UL, 949028615UL, 3073348038UL, 3260130211UL, 3478094562UL, 1285558544UL, 4113039486UL, 3098363790UL, 3039362306UL, 4175656994UL, +1731832828UL, 1827471372UL, 468159532UL, 3236754932UL, 1145506936UL, 1008905193UL, 1626341859UL, 1092964081UL, 1358079399UL, 827886816UL, 1722154800UL, 1069547583UL, 53128947UL, 1748663943UL, 249481170UL, 2608123425UL, 3162506114UL, 1960144614UL, 698076610UL, 841433255UL, 477543427UL, 3641706484UL, 1505419004UL, 3692794996UL, 3194913138UL, 2616490007UL, 3623882586UL, 2823143358UL, 2771068186UL, 2512991743UL, 637464579UL, 16785012UL, +1991737212UL, 27937268UL, 2455017713UL, 1749147666UL, 2348825660UL, 2907896812UL, 1673040956UL, 1837614076UL, 1227604028UL, 2579527800UL, 3633969112UL, 528340088UL, 489077752UL, 216760440UL, 3628134628UL, 2886728356UL, 1646215396UL, 4112075489UL, 3514761468UL, 1602085368UL, 3507686008UL, 2095821304UL, 4286077681UL, 198050301UL, 2501362624UL, 1463806912UL, 277300160UL, 3981929169UL, 2944140287UL, 4112467840UL, 4137888640UL, 1178044288UL, +2026367394UL, 3269986302UL, 3356184320UL, 1276820224UL, 2234191616UL, 294584132UL, 3086749695UL, 366387712UL, 4274031104UL, 136978944UL, 543687304UL, 4008517630UL, 1006135296UL, 2978609152UL, 3275253760UL, 3578325264UL, 3221487612UL, 3104844800UL, 2296777728UL, 3942394880UL, 2131029536UL, 2165829624UL, 1874371584UL, 1086645248UL, 3265045504UL, 4259639360UL, 3423548400UL, 2975352832UL, 2295121920UL, 3943712768UL, 41950336UL, 3423478496UL, +989898496UL, 3410688577UL, 2331788830UL, 3546482013UL, 813828841UL, 1865093068UL, 3265457506UL, 3795669738UL, 2119696024UL, 4285651426UL, 3333834629UL, 3451487261UL, 2090324595UL, 1816963648UL, 932961512UL, 2470761029UL, 3401764108UL, 3421619354UL, 4199624502UL, 589386372UL, 879396240UL, 3372470254UL, 2693109296UL, 2424215996UL, 38442268UL, 1882087724UL, 171397600UL, 2024561281UL, 183095586UL, 3282207272UL, 3402177296UL, 1859195498UL, +413109947UL, 2839537944UL, 1632143648UL, 3742715856UL, 388696500UL, 1748703733UL, 3563198567UL, 3826785440UL, 2896086528UL, 3989037829UL, 1478787788UL, 1390277813UL, 2123320736UL, 3416516800UL, 2056564203UL, 2584895011UL, 1605192736UL, 2475623616UL, 3856499712UL, 3439657984UL, 708088129UL, 1501395566UL, 1302184960UL, 1360092352UL, 1645630430UL, 1425230387UL, 3369488824UL, 2979863936UL, 869212432UL, 150548847UL, 1097557362UL, 655939640UL, +316553344UL, 3761918508UL, 3958338094UL, 141744600UL, 1412214640UL, 1859689984UL, 3200680981UL, 3883058679UL, 999801880UL, 3946079738UL, 1876072704UL, 194381849UL, 2177533995UL, 1584707624UL, 3053768410UL, 2593051904UL, 3458076673UL, 4047442835UL, 3545972808UL, 3441793178UL, 194975744UL, 1731731470UL, 4168755162UL, 2628944732UL, 2125675784UL, 3119906816UL, 960774145UL, 2646626078UL, 2152793157UL, 3049156634UL, 672464896UL, 3046932493UL, +3700727536UL, 2152335477UL, 575986696UL, 671940608UL, 2208366608UL, 1454456125UL, 937760016UL, 4103979069UL, 2737668096UL, 1179779104UL, 1030912634UL, 1041902112UL, 2032909434UL, 2274230272UL, 2089025605UL, 3050632421UL, 2428784965UL, 140658149UL, 4254138368UL, 1745354889UL, 711584249UL, 2746523017UL, 2551006457UL, 1100808192UL, 1494221073UL, 3422999489UL, 2696954129UL, 976716737UL, 2653421568UL, 3806331426UL, 3690047362UL, 1481392674UL, +3817015170UL, 2353004544UL, 286262340UL, 2300534532UL, 4206449732UL, 15339268UL, 2894069760UL, 488376456UL, 1489927688UL, 1196583048UL, 652746248UL, 2214592512UL, 69904UL, 1006205200UL, 2322628880UL, 1229515024UL, 2617245696UL, 3423527456UL, 1964953120UL, 4260938272UL, 386199072UL, 1744830464UL, 1342444608UL, 1069330496UL, 2138592320UL, 3185897536UL, 1073741824UL, 1342493824UL, 3780942976UL, 1771066496UL, 2189433984UL, 2147483648UL, +}, +{ +1804684571UL, 2106089606UL, 1533056158UL, 2870216110UL, 3618155659UL, 3789871366UL, 4246691682UL, 3667072763UL, 1212241769UL, 3152390668UL, 2973497449UL, 2958641966UL, 2088805328UL, 717518631UL, 2401090860UL, 3606967204UL, 952637656UL, 59827581UL, 1291486682UL, 1499453515UL, 2053994857UL, 563998083UL, 4094000396UL, 1163546899UL, 1003843565UL, 654565639UL, 1070907026UL, 4217851863UL, 426034251UL, 1721352737UL, 278404469UL, 3899800390UL, +1063362170UL, 1162348262UL, 3153545093UL, 3249996223UL, 186674553UL, 2616406148UL, 3137968354UL, 1282784965UL, 1495068058UL, 3033760361UL, 2278144523UL, 3192245769UL, 719586342UL, 2602548287UL, 3386583150UL, 355354345UL, 3252815848UL, 2178056037UL, 2283016801UL, 3005955037UL, 3340254490UL, 802791670UL, 251122316UL, 3705188626UL, 1252262272UL, 3989036796UL, 3527490452UL, 2047131255UL, 1447170583UL, 3373930285UL, 2895037457UL, 209341805UL, +1820357643UL, 3712392731UL, 685796521UL, 1322920440UL, 814388470UL, 1357857147UL, 434430265UL, 2650681935UL, 1371566728UL, 58783716UL, 2273435933UL, 3498513198UL, 792571900UL, 1447808772UL, 3513385860UL, 99175889UL, 1105434360UL, 1484146625UL, 3327194068UL, 242672513UL, 3552105593UL, 1425844616UL, 2871928454UL, 1124633561UL, 607610433UL, 2130018608UL, 1610235673UL, 2844230432UL, 2748082340UL, 994392866UL, 450823250UL, 2912535126UL, +2574390988UL, 3974009252UL, 78696582UL, 649682891UL, 3980917176UL, 3221419689UL, 960695436UL, 729221508UL, 358358845UL, 3392407691UL, 472711005UL, 295914899UL, 3005191796UL, 3078521977UL, 3370011868UL, 509135340UL, 1965939519UL, 2086465877UL, 2457949822UL, 1324152522UL, 762289386UL, 3618693997UL, 233730715UL, 2873984650UL, 31168606UL, 3367142977UL, 2851851305UL, 3251660053UL, 4209768406UL, 3298190175UL, 901235185UL, 1564391510UL, +2352686527UL, 1008150482UL, 578573310UL, 3462447127UL, 2482873876UL, 1790221257UL, 2255375608UL, 2335345651UL, 1381450613UL, 2866805101UL, 1495073163UL, 519905259UL, 3184556473UL, 1076378339UL, 2692926127UL, 970097715UL, 4013407916UL, 4014350363UL, 2476927059UL, 1989070516UL, 2640060069UL, 1987784589UL, 1880989003UL, 3861138803UL, 451743296UL, 1987067871UL, 1975657871UL, 3397816882UL, 2309900530UL, 4108425851UL, 4063867233UL, 3319482186UL, +2621772886UL, 1804684571UL, 2106089606UL, 1533056158UL, 2870216110UL, 611557097UL, 3789871366UL, 4246691682UL, 3667072763UL, 1212241769UL, 3389551988UL, 2973497449UL, 2958641966UL, 2088805328UL, 717518631UL, 2460955430UL, 3606967204UL, 952637656UL, 59827581UL, 1291486682UL, 3531087304UL, 2053994857UL, 563998083UL, 4094000396UL, 1163546899UL, 1242934125UL, 654565639UL, 1070907026UL, 4217851863UL, 426034251UL, 3034416129UL, 278404469UL, +3899800390UL, 1063362170UL, 1162348262UL, 4258714417UL, 3249996223UL, 186674553UL, 2616406148UL, 3137968354UL, 639885806UL, 1495068058UL, 3033760361UL, 2278144523UL, 3192245769UL, 4159910300UL, 2602548287UL, 3386583150UL, 355354345UL, 3252815848UL, 1555885880UL, 2283016801UL, 3005955037UL, 3340254490UL, 802791670UL, 2948774612UL, 3705188626UL, 1252262272UL, 3989036796UL, 3527490452UL, 2107826711UL, 1447170583UL, 3373930285UL, 2895037457UL, +209341805UL, 3763367196UL, 3712392731UL, 685796521UL, 1322920440UL, 814388470UL, 1986168339UL, 434430265UL, 2650681935UL, 1371566728UL, 58783716UL, 1423189187UL, 3498513198UL, 792571900UL, 1447808772UL, 3513385860UL, 315969823UL, 1105434360UL, 1484146625UL, 3327194068UL, 242672513UL, 3336228275UL, 1425844616UL, 2871928454UL, 1124633561UL, 607610433UL, 1762052458UL, 1610235673UL, 2844230432UL, 2748082340UL, 994392866UL, 3771702243UL, +2912535126UL, 2574390988UL, 3974009252UL, 78696582UL, 1626628844UL, 3980917176UL, 3221419689UL, 960695436UL, 729221508UL, 382092233UL, 3392407691UL, 472711005UL, 295914899UL, 3005191796UL, 514297204UL, 3370011868UL, 509135340UL, 1965939519UL, 2086465877UL, 3975975091UL, 1324152522UL, 762289386UL, 3618693997UL, 233730715UL, 455322516UL, 31168606UL, 3367142977UL, 2851851305UL, 3251660053UL, 3952189603UL, 3298190175UL, 901235185UL, +1564391510UL, 2352686527UL, 826181452UL, 578573310UL, 3462447127UL, 2482873876UL, 1790221257UL, 1529242773UL, 2335345651UL, 1381450613UL, 2866805101UL, 1495073163UL, 877718651UL, 3184556473UL, 1076378339UL, 2692926127UL, 970097715UL, 299344245UL, 4014350363UL, 2476927059UL, 1989070516UL, 2640060069UL, 3844531327UL, 1880989003UL, 3861138803UL, 451743296UL, 1987067871UL, 3272848161UL, 3397816882UL, 2309900530UL, 4108425851UL, 4063867233UL, +834288064UL, 2621772886UL, 1804684571UL, 2106089606UL, 1533056158UL, 304865970UL, 611557097UL, 3789871366UL, 4246691682UL, 3667072763UL, 2728206193UL, 3389551988UL, 2973497449UL, 2958641966UL, 2088805328UL, 3895037582UL, 2460955430UL, 3606967204UL, 952637656UL, 59827581UL, 2349212526UL, 3531087304UL, 2053994857UL, 563998083UL, 4094000396UL, 4028900485UL, 1242934125UL, 654565639UL, 1070907026UL, 4217851863UL, 1663452176UL, 3034416129UL, +278404469UL, 3899800390UL, 1063362170UL, 2721441405UL, 4258714417UL, 3249996223UL, 186674553UL, 2616406148UL, 4228837490UL, 639885806UL, 1495068058UL, 3033760361UL, 2278144523UL, 2820661772UL, 4159910300UL, 2602548287UL, 3386583150UL, 355354345UL, 1815256314UL, 1555885880UL, 2283016801UL, 3005955037UL, 3340254490UL, 2166514144UL, 2948774612UL, 3705188626UL, 1252262272UL, 3989036796UL, 751187322UL, 2107826711UL, 1447170583UL, 3373930285UL, +2895037457UL, 2809311944UL, 3763367196UL, 3712392731UL, 685796521UL, 1322920440UL, 936300677UL, 1986168339UL, 434430265UL, 2650681935UL, 1371566728UL, 1308015359UL, 1423189187UL, 3498513198UL, 792571900UL, 1447808772UL, 3065349526UL, 315969823UL, 1105434360UL, 1484146625UL, 3327194068UL, 1038676789UL, 3336228275UL, 1425844616UL, 2871928454UL, 1124633561UL, 2956422231UL, 1762052458UL, 1610235673UL, 2844230432UL, 2748082340UL, 3603862093UL, +3771702243UL, 2912535126UL, 2574390988UL, 3974009252UL, 1691332448UL, 1626628844UL, 3980917176UL, 3221419689UL, 960695436UL, 3120142427UL, 382092233UL, 3392407691UL, 472711005UL, 295914899UL, 4101686983UL, 514297204UL, 3370011868UL, 509135340UL, 1965939519UL, 3015736706UL, 3975975091UL, 1324152522UL, 762289386UL, 3618693997UL, 2395097989UL, 455322516UL, 31168606UL, 3367142977UL, 2851851305UL, 30511955UL, 3952189603UL, 3298190175UL, +901235185UL, 1564391510UL, 2606298633UL, 826181452UL, 578573310UL, 3462447127UL, 2482873876UL, 4159642946UL, 1529242773UL, 2335345651UL, 1381450613UL, 2866805101UL, 1782913669UL, 877718651UL, 3184556473UL, 1076378339UL, 2692926127UL, 1730328819UL, 299344245UL, 4014350363UL, 2476927059UL, 1989070516UL, 1425685614UL, 3844531327UL, 1880989003UL, 3861138803UL, 451743296UL, 889237383UL, 3272848161UL, 3397816882UL, 2309900530UL, 4108425851UL, +1155723231UL, 834288064UL, 2621772886UL, 1804684571UL, 2106089606UL, 2387009004UL, 304865970UL, 611557097UL, 3789871366UL, 4246691682UL, 1405709661UL, 2728206193UL, 3389551988UL, 2973497449UL, 2958641966UL, 3183906006UL, 3895037582UL, 2460955430UL, 3606967204UL, 952637656UL, 1345432763UL, 2349212526UL, 3531087304UL, 2053994857UL, 563998083UL, 3749011414UL, 4028900485UL, 1242934125UL, 654565639UL, 1070907026UL, 1072342672UL, 1663452176UL, +3034416129UL, 278404469UL, 3899800390UL, 3566652188UL, 2721441405UL, 4258714417UL, 3249996223UL, 186674553UL, 4001263143UL, 4228837490UL, 639885806UL, 1495068058UL, 3033760361UL, 4278332644UL, 2820661772UL, 4159910300UL, 2602548287UL, 3386583150UL, 838831089UL, 1815256314UL, 1555885880UL, 2283016801UL, 3005955037UL, 3377397178UL, 2166514144UL, 2948774612UL, 3705188626UL, 1252262272UL, 2414422575UL, 751187322UL, 2107826711UL, 1447170583UL, +3373930285UL, 1253755033UL, 2809311944UL, 3763367196UL, 3712392731UL, 685796521UL, 3238624475UL, 936300677UL, 1986168339UL, 434430265UL, 2650681935UL, 1642290570UL, 1308015359UL, 1423189187UL, 3498513198UL, 792571900UL, 173318140UL, 3065349526UL, 315969823UL, 1105434360UL, 1484146625UL, 4103797777UL, 1038676789UL, 3336228275UL, 1425844616UL, 2871928454UL, 1797745765UL, 2956422231UL, 1762052458UL, 1610235673UL, 2844230432UL, 2180656608UL, +3603862093UL, 3771702243UL, 2912535126UL, 2574390988UL, 1183098390UL, 1691332448UL, 1626628844UL, 3980917176UL, 3221419689UL, 2645203959UL, 3120142427UL, 382092233UL, 3392407691UL, 472711005UL, 1659659070UL, 4101686983UL, 514297204UL, 3370011868UL, 509135340UL, 483888155UL, 3015736706UL, 3975975091UL, 1324152522UL, 762289386UL, 1259948064UL, 2395097989UL, 455322516UL, 31168606UL, 3367142977UL, 339990414UL, 30511955UL, 3952189603UL, +3298190175UL, 901235185UL, 3097920065UL, 2606298633UL, 826181452UL, 578573310UL, 3462447127UL, 1548039839UL, 4159642946UL, 1529242773UL, 2335345651UL, 1381450613UL, 2173079994UL, 1782913669UL, 877718651UL, 3184556473UL, 1076378339UL, 1570275057UL, 1730328819UL, 299344245UL, 4014350363UL, 2476927059UL, 1845882881UL, 1425685614UL, 3844531327UL, 1880989003UL, 3861138803UL, 1322409081UL, 889237383UL, 3272848161UL, 3397816882UL, 2309900530UL, +3505447982UL, 3430136873UL, 1319796589UL, 4202423979UL, 3184732284UL, 2910356648UL, 2534615223UL, 3854465731UL, 768821792UL, 2205052576UL, 1348983754UL, 1300250188UL, 2919181738UL, 2520178732UL, 3967243685UL, 2646012002UL, 1784678658UL, 741302051UL, 3464753547UL, 194213376UL, 1482799064UL, 3009673860UL, 680824208UL, 741966796UL, 2381283369UL, 3022877171UL, 1619439814UL, 3961433610UL, 1331297670UL, 1100110820UL, 1311672539UL, 1122110615UL, +4056004850UL, 3413790176UL, 3148768822UL, 1242592694UL, 2925975727UL, 1879285134UL, 334328879UL, 1318235222UL, 3140739559UL, 401691770UL, 3604288404UL, 3686496908UL, 770670945UL, 199139043UL, 2092710473UL, 3914528993UL, 700991333UL, 2375775811UL, 858137308UL, 3490050165UL, 2389078291UL, 1615607459UL, 3027969809UL, 820012549UL, 2085659484UL, 2654485136UL, 2630408646UL, 196481396UL, 1119673274UL, 1026209692UL, 726501622UL, 2940737143UL, +3559571163UL, 2288027726UL, 1039212708UL, 929664536UL, 1061981465UL, 186058675UL, 3537656152UL, 844176796UL, 2996217992UL, 1545798611UL, 3031020656UL, 2248030435UL, 1665857580UL, 2905758082UL, 1269201312UL, 3031275084UL, 4034872841UL, 983632400UL, 4188503190UL, 757119675UL, 2105920865UL, 4281032819UL, 2917801076UL, 3900010013UL, 3910997169UL, 1729751422UL, 562313247UL, 3070846353UL, 2564238664UL, 4050540186UL, 4258833501UL, 2270666053UL, +2207128401UL, 2990540001UL, 797768898UL, 2288390225UL, 3230323685UL, 1974727440UL, 3327301426UL, 289857826UL, 3565889868UL, 2791014422UL, 2021097820UL, 3350378271UL, 3673707591UL, 2610067927UL, 4255789547UL, 2682856590UL, 12563128UL, 1397542366UL, 237149400UL, 2233707508UL, 3875573245UL, 2097374144UL, 175320773UL, 4103445984UL, 4089284323UL, 3610168130UL, 3084915964UL, 680145366UL, 2571684685UL, 1132894909UL, 104640024UL, 193765521UL, +2338202907UL, 895271448UL, 11499099UL, 1798066417UL, 1297412626UL, 2511347162UL, 3140535007UL, 2129963538UL, 700683199UL, 2609700278UL, 2953463279UL, 2290844145UL, 1871316353UL, 3993801787UL, 2219413182UL, 2954453701UL, 231283580UL, 1375331115UL, 207723994UL, 1799562537UL, 2056553564UL, 2513609799UL, 3542459627UL, 3173012714UL, 3923404932UL, 217877755UL, 2095124912UL, 192024370UL, 1168134987UL, 1889598668UL, 3014873069UL, 2033573343UL, +}, +{ +3465348660UL, 3623545008UL, 3505902593UL, 838034830UL, 1338018789UL, 2595329276UL, 3367746385UL, 3197935201UL, 1439351946UL, 3585085571UL, 4165798087UL, 3634792639UL, 2359485974UL, 2772582925UL, 1110186203UL, 3771562484UL, 1508694157UL, 1564641206UL, 2801985736UL, 2446107936UL, 3849126897UL, 1842973671UL, 944408104UL, 2624631280UL, 2729080685UL, 3737368614UL, 858809173UL, 2289802345UL, 2428186575UL, 3114742765UL, 716011303UL, 3443810690UL, +814132610UL, 517432787UL, 614445393UL, 2930433345UL, 291178098UL, 2117644502UL, 2749446703UL, 311745701UL, 365684723UL, 1705418876UL, 2213749318UL, 4011417220UL, 1842575651UL, 988348831UL, 94258998UL, 2771150272UL, 498058526UL, 1344827813UL, 2961955291UL, 262703473UL, 1404034822UL, 1566595865UL, 2522381203UL, 1706522206UL, 1203054806UL, 1273801539UL, 2070583465UL, 3913449936UL, 3231505231UL, 619636751UL, 3746997351UL, 4103027837UL, +1205468203UL, 3355878253UL, 3433356888UL, 107785753UL, 2779092609UL, 1869691566UL, 2555219983UL, 903319808UL, 3273374169UL, 2538926990UL, 979533870UL, 1356500860UL, 1661983738UL, 1380761625UL, 2919458459UL, 1041142798UL, 1430817627UL, 517007606UL, 1421570516UL, 2371447300UL, 2985632691UL, 3684889351UL, 3873926653UL, 788770697UL, 1854750277UL, 209332297UL, 1137299679UL, 848527832UL, 3850486924UL, 4179307312UL, 2764470693UL, 1353191605UL, +4166891919UL, 2074703841UL, 3373997532UL, 2013528640UL, 701389744UL, 841917592UL, 2065742268UL, 2721848192UL, 2566956680UL, 3122896007UL, 1090761479UL, 921859028UL, 4086736376UL, 1837462309UL, 2579826431UL, 2436217134UL, 839037727UL, 1072086642UL, 614518622UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601407381UL, 2899014005UL, 3268308948UL, 3337564231UL, 1986911578UL, 3379194930UL, 1950365753UL, 2098537451UL, 51515980UL, 1176526086UL, +3213391582UL, 1059745735UL, 2273586703UL, 376085505UL, 1493749800UL, 3970342143UL, 1620925244UL, 2165301314UL, 2332030190UL, 1864098798UL, 276747442UL, 2776569227UL, 2992780663UL, 3027279789UL, 1074555384UL, 3481518659UL, 2499703783UL, 661805703UL, 3782305562UL, 9186074UL, 2357407210UL, 2355922343UL, 2024733363UL, 485434612UL, 862379913UL, 1029706268UL, 1512726310UL, 3834948354UL, 1435892840UL, 3297980694UL, 2831553800UL, 2111416471UL, +711321697UL, 3465348660UL, 3623545008UL, 3505902593UL, 838034830UL, 1553436793UL, 2595329276UL, 3367746385UL, 3197935201UL, 1439351946UL, 3198044157UL, 4165798087UL, 3634792639UL, 2359485974UL, 2772582925UL, 836042976UL, 3771562484UL, 1508694157UL, 1564641206UL, 2801985736UL, 1190371491UL, 3849126897UL, 1842973671UL, 944408104UL, 2624631280UL, 410746791UL, 3737368614UL, 858809173UL, 2289802345UL, 2428186575UL, 1542325976UL, 716011303UL, +3443810690UL, 814132610UL, 517432787UL, 1649301063UL, 2930433345UL, 291178098UL, 2117644502UL, 2749446703UL, 3955511579UL, 365684723UL, 1705418876UL, 2213749318UL, 4011417220UL, 2753632862UL, 988348831UL, 94258998UL, 2771150272UL, 498058526UL, 3314106168UL, 2961955291UL, 262703473UL, 1404034822UL, 1566595865UL, 3590367097UL, 1706522206UL, 1203054806UL, 1273801539UL, 2070583465UL, 2340683261UL, 3231505231UL, 619636751UL, 3746997351UL, +4103027837UL, 2785398766UL, 3355878253UL, 3433356888UL, 107785753UL, 2779092609UL, 1608451840UL, 2555219983UL, 903319808UL, 3273374169UL, 2538926990UL, 645164419UL, 1356500860UL, 1661983738UL, 1380761625UL, 2919458459UL, 2260224548UL, 1430817627UL, 517007606UL, 1421570516UL, 2371447300UL, 1636004496UL, 3684889351UL, 3873926653UL, 788770697UL, 1854750277UL, 1345251011UL, 1137299679UL, 848527832UL, 3850486924UL, 4179307312UL, 3576574608UL, +1353191605UL, 4166891919UL, 2074703841UL, 3373997532UL, 183447754UL, 701389744UL, 841917592UL, 2065742268UL, 2721848192UL, 2109289891UL, 3122896007UL, 1090761479UL, 921859028UL, 4086736376UL, 2212730874UL, 2579826431UL, 2436217134UL, 839037727UL, 1072086642UL, 55934784UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601407381UL, 516550987UL, 3268308948UL, 3337564231UL, 1986911578UL, 3379194930UL, 3973484473UL, 2098537451UL, 51515980UL, +1176526086UL, 3213391582UL, 4251661633UL, 2273586703UL, 376085505UL, 1493749800UL, 3970342143UL, 3190791788UL, 2165301314UL, 2332030190UL, 1864098798UL, 276747442UL, 2991976613UL, 2992780663UL, 3027279789UL, 1074555384UL, 3481518659UL, 1399789494UL, 661805703UL, 3782305562UL, 9186074UL, 2357407210UL, 1942736967UL, 2024733363UL, 485434612UL, 862379913UL, 1029706268UL, 4122704494UL, 3834948354UL, 1435892840UL, 3297980694UL, 2831553800UL, +1210092654UL, 711321697UL, 3465348660UL, 3623545008UL, 3505902593UL, 3443231198UL, 1553436793UL, 2595329276UL, 3367746385UL, 3197935201UL, 1304974987UL, 3198044157UL, 4165798087UL, 3634792639UL, 2359485974UL, 3518323362UL, 836042976UL, 3771562484UL, 1508694157UL, 1564641206UL, 3577633375UL, 1190371491UL, 3849126897UL, 1842973671UL, 944408104UL, 1854555112UL, 410746791UL, 3737368614UL, 858809173UL, 2289802345UL, 3622671731UL, 1542325976UL, +716011303UL, 3443810690UL, 814132610UL, 296197011UL, 1649301063UL, 2930433345UL, 291178098UL, 2117644502UL, 1056271538UL, 3955511579UL, 365684723UL, 1705418876UL, 2213749318UL, 1258535671UL, 2753632862UL, 988348831UL, 94258998UL, 2771150272UL, 3669902097UL, 3314106168UL, 2961955291UL, 262703473UL, 1404034822UL, 1654433938UL, 3590367097UL, 1706522206UL, 1203054806UL, 1273801539UL, 2448138887UL, 2340683261UL, 3231505231UL, 619636751UL, +3746997351UL, 1454088394UL, 2785398766UL, 3355878253UL, 3433356888UL, 107785753UL, 689323470UL, 1608451840UL, 2555219983UL, 903319808UL, 3273374169UL, 1603842392UL, 645164419UL, 1356500860UL, 1661983738UL, 1380761625UL, 2814639423UL, 2260224548UL, 1430817627UL, 517007606UL, 1421570516UL, 1938805701UL, 1636004496UL, 3684889351UL, 3873926653UL, 788770697UL, 4238900666UL, 1345251011UL, 1137299679UL, 848527832UL, 3850486924UL, 108793827UL, +3576574608UL, 1353191605UL, 4166891919UL, 2074703841UL, 3780897861UL, 183447754UL, 701389744UL, 841917592UL, 2065742268UL, 3036602746UL, 2109289891UL, 3122896007UL, 1090761479UL, 921859028UL, 3499985398UL, 2212730874UL, 2579826431UL, 2436217134UL, 839037727UL, 3520354700UL, 55934784UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601010847UL, 516550987UL, 3268308948UL, 3337564231UL, 1986911578UL, 2704241781UL, 3973484473UL, 2098537451UL, +51515980UL, 1176526086UL, 3602010532UL, 4251661633UL, 2273586703UL, 376085505UL, 1493749800UL, 2922957328UL, 3190791788UL, 2165301314UL, 2332030190UL, 1864098798UL, 1649666443UL, 2991976613UL, 2992780663UL, 3027279789UL, 1074555384UL, 2848531519UL, 1399789494UL, 661805703UL, 3782305562UL, 9186074UL, 320781315UL, 1942736967UL, 2024733363UL, 485434612UL, 862379913UL, 3598892066UL, 4122704494UL, 3834948354UL, 1435892840UL, 3297980694UL, +545184652UL, 1210092654UL, 711321697UL, 3465348660UL, 3623545008UL, 1173753045UL, 3443231198UL, 1553436793UL, 2595329276UL, 3367746385UL, 2444634476UL, 1304974987UL, 3198044157UL, 4165798087UL, 3634792639UL, 1837035806UL, 3518323362UL, 836042976UL, 3771562484UL, 1508694157UL, 2899021294UL, 3577633375UL, 1190371491UL, 3849126897UL, 1842973671UL, 1614215215UL, 1854555112UL, 410746791UL, 3737368614UL, 858809173UL, 525745365UL, 3622671731UL, +1542325976UL, 716011303UL, 3443810690UL, 566299749UL, 296197011UL, 1649301063UL, 2930433345UL, 291178098UL, 1987532525UL, 1056271538UL, 3955511579UL, 365684723UL, 1705418876UL, 2321222760UL, 1258535671UL, 2753632862UL, 988348831UL, 94258998UL, 2986060366UL, 3669902097UL, 3314106168UL, 2961955291UL, 262703473UL, 604452796UL, 1654433938UL, 3590367097UL, 1706522206UL, 1203054806UL, 1894894069UL, 2448138887UL, 2340683261UL, 3231505231UL, +619636751UL, 6680729UL, 1454088394UL, 2785398766UL, 3355878253UL, 3433356888UL, 2025591660UL, 689323470UL, 1608451840UL, 2555219983UL, 903319808UL, 3430384385UL, 1603842392UL, 645164419UL, 1356500860UL, 1661983738UL, 2108736152UL, 2814639423UL, 2260224548UL, 1430817627UL, 517007606UL, 2973658959UL, 1938805701UL, 1636004496UL, 3684889351UL, 3873926653UL, 2283691941UL, 4238900666UL, 1345251011UL, 1137299679UL, 848527832UL, 45551112UL, +108793827UL, 3576574608UL, 1353191605UL, 4166891919UL, 3776615962UL, 3780897861UL, 183447754UL, 701389744UL, 841917592UL, 3830639316UL, 3036602746UL, 2109289891UL, 3122896007UL, 1090761479UL, 1931255897UL, 3499985398UL, 2212730874UL, 2579826431UL, 2436217134UL, 3272166055UL, 3520354700UL, 55934784UL, 3764758228UL, 1501128342UL, 1567864246UL, 1601010847UL, 516550987UL, 3268308948UL, 3337564231UL, 3918802424UL, 2704241781UL, 3973484473UL, +2098537451UL, 51515980UL, 3551394489UL, 3602010532UL, 4251661633UL, 2273586703UL, 376085505UL, 885459498UL, 2922957328UL, 3190791788UL, 2165301314UL, 2332030190UL, 3197056515UL, 1649666443UL, 2991976613UL, 2992780663UL, 3027279789UL, 2385348906UL, 2848531519UL, 1399789494UL, 661805703UL, 3782305562UL, 2163075465UL, 320781315UL, 1942736967UL, 2024733363UL, 485434612UL, 2680597981UL, 3598892066UL, 4122704494UL, 3834948354UL, 1435892840UL, +2499644163UL, 2704575422UL, 2579557838UL, 673530532UL, 493730767UL, 1124557747UL, 1908629439UL, 2821949504UL, 1743112513UL, 2849457841UL, 2344409314UL, 3479159262UL, 4260973770UL, 2991970754UL, 3812641863UL, 2229319917UL, 2466968521UL, 1766353737UL, 3216591612UL, 2113272648UL, 364370737UL, 1893001758UL, 2608875275UL, 4224057183UL, 3546705413UL, 1999778009UL, 348872225UL, 2470564216UL, 1417878284UL, 2709790112UL, 3579129936UL, 2137971615UL, +4046639861UL, 2841156930UL, 391544737UL, 2056567354UL, 737657378UL, 3877904725UL, 578930752UL, 1759172471UL, 3383278785UL, 1047197514UL, 649468151UL, 3452867243UL, 1792089520UL, 63936215UL, 3909143729UL, 3753489875UL, 734314122UL, 2490530916UL, 3043874586UL, 1504812057UL, 59001199UL, 2493748676UL, 2552438622UL, 1889694845UL, 3715397860UL, 2817245010UL, 3841049206UL, 816106718UL, 2176130406UL, 640254735UL, 12376903UL, 3000264936UL, +3304116079UL, 1620334094UL, 2109391765UL, 1348210951UL, 2237645681UL, 1207768272UL, 1562894669UL, 2156631655UL, 1387193235UL, 3154858817UL, 633510901UL, 2312190757UL, 402878244UL, 2501565021UL, 2984409334UL, 4167491216UL, 3614267292UL, 3078552271UL, 971722322UL, 3065543880UL, 2307584190UL, 491480322UL, 2068673112UL, 1929780632UL, 178549964UL, 983979983UL, 2769314886UL, 4214442042UL, 2977609682UL, 25450683UL, 3075212658UL, 1571149568UL, +3531670561UL, 42782504UL, 425601306UL, 428715214UL, 497250251UL, 693520802UL, 166426814UL, 1786382125UL, 2712003995UL, 3610802197UL, 2076490757UL, 404822980UL, 3953184772UL, 1655231947UL, 3594351577UL, 3068232274UL, 3771730346UL, 4110519574UL, 3534704897UL, 2375277865UL, 3597780202UL, 3472676002UL, 1350276449UL, 3218248239UL, 3589255283UL, 3253132633UL, 1769885529UL, 3792812294UL, 120332643UL, 1219374788UL, 3608889019UL, 2386099811UL, +858495304UL, 1284785543UL, 331370962UL, 2259419662UL, 2519864134UL, 3194739432UL, 2669074511UL, 2565559140UL, 3378072004UL, 2647801475UL, 265068954UL, 1464416963UL, 1232787612UL, 4160089759UL, 2510685972UL, 670300081UL, 2509357766UL, 1981891975UL, 4161588397UL, 1371924626UL, 44760868UL, 634955171UL, 1187096933UL, 3324788972UL, 3576888559UL, 2801347752UL, 3730298395UL, 1702170762UL, 4206083415UL, 741409141UL, 3649731355UL, 1025429529UL, +}, +{ +91444490UL, 628576944UL, 4069219862UL, 2253058925UL, 492354082UL, 1191182242UL, 1565180119UL, 2257613723UL, 456055162UL, 605712223UL, 953365104UL, 3104638527UL, 1133984729UL, 2662828416UL, 2134948274UL, 1921384447UL, 843719355UL, 588432962UL, 1734575434UL, 2924140067UL, 483396548UL, 3848838894UL, 3155476556UL, 1760928304UL, 4168059840UL, 3279827269UL, 2644461735UL, 4168565656UL, 3951563569UL, 1276805504UL, 1708974143UL, 1878547888UL, +3465220024UL, 3062086782UL, 2801401651UL, 1510428126UL, 716404149UL, 1646021208UL, 3534932385UL, 1186585561UL, 651997355UL, 282914223UL, 352224857UL, 3764407517UL, 1059868753UL, 1971798134UL, 978904005UL, 976413661UL, 4039544152UL, 498989693UL, 2565125471UL, 2782642813UL, 3537961025UL, 1194967362UL, 169217024UL, 3491609UL, 1319592872UL, 1630206561UL, 2497130840UL, 1685008996UL, 2828944016UL, 3301346775UL, 2893072371UL, 2606559798UL, +4026138031UL, 2664450619UL, 691091062UL, 1079640113UL, 1417637732UL, 4081852209UL, 2197910648UL, 2310382370UL, 1000957047UL, 959936499UL, 2844551811UL, 2272766890UL, 31122394UL, 2742925483UL, 1121884686UL, 57929089UL, 2468361281UL, 2982007782UL, 2371576893UL, 177782593UL, 3603584577UL, 672057044UL, 2108452841UL, 1671338057UL, 3386908223UL, 1243029765UL, 805157552UL, 1271858417UL, 1621249501UL, 1804851492UL, 1321010403UL, 751773221UL, +1517221627UL, 822709871UL, 104533154UL, 3578182264UL, 640541709UL, 421086624UL, 4233576392UL, 3729339369UL, 197460644UL, 773140636UL, 2158026018UL, 1756785611UL, 4011575991UL, 3569445500UL, 736117181UL, 2456162322UL, 1168189787UL, 3651312675UL, 1070291988UL, 268231205UL, 541474497UL, 3316168972UL, 3546990856UL, 830417208UL, 725960194UL, 2044207227UL, 3188997938UL, 2383298579UL, 3350316374UL, 3575011225UL, 1553111865UL, 1285013027UL, +749371711UL, 766611716UL, 598195098UL, 2139882719UL, 2062405428UL, 3634702446UL, 3015263295UL, 223311969UL, 2622859522UL, 3888492701UL, 2955257225UL, 582625650UL, 3563756446UL, 2886083960UL, 1907546514UL, 454650902UL, 3287277541UL, 625828138UL, 2991888140UL, 1935326370UL, 4031152256UL, 702881509UL, 1427632724UL, 1345475301UL, 2577560804UL, 2858595147UL, 2533191188UL, 185662179UL, 536505093UL, 3747894147UL, 111551030UL, 370373207UL, +2293908590UL, 91444490UL, 628576944UL, 4069219862UL, 2253058925UL, 1671484924UL, 1191182242UL, 1565180119UL, 2257613723UL, 456055162UL, 3411094744UL, 953365104UL, 3104638527UL, 1133984729UL, 2662828416UL, 2000630022UL, 1921384447UL, 843719355UL, 588432962UL, 1734575434UL, 3293926122UL, 483396548UL, 3848838894UL, 3155476556UL, 1760928304UL, 146876953UL, 3279827269UL, 2644461735UL, 4168565656UL, 3951563569UL, 3976156700UL, 1708974143UL, +1878547888UL, 3465220024UL, 3062086782UL, 1999154400UL, 1510428126UL, 716404149UL, 1646021208UL, 3534932385UL, 2479551429UL, 651997355UL, 282914223UL, 352224857UL, 3764407517UL, 1275979651UL, 1971798134UL, 978904005UL, 976413661UL, 4039544152UL, 300654823UL, 2565125471UL, 2782642813UL, 3537961025UL, 1194967362UL, 3123973648UL, 3491609UL, 1319592872UL, 1630206561UL, 2497130840UL, 1437913158UL, 2828944016UL, 3301346775UL, 2893072371UL, +2606559798UL, 2153172585UL, 2664450619UL, 691091062UL, 1079640113UL, 1417637732UL, 17137237UL, 2197910648UL, 2310382370UL, 1000957047UL, 959936499UL, 802137134UL, 2272766890UL, 31122394UL, 2742925483UL, 1121884686UL, 3909775167UL, 2468361281UL, 2982007782UL, 2371576893UL, 177782593UL, 3319492525UL, 672057044UL, 2108452841UL, 1671338057UL, 3386908223UL, 1878151473UL, 805157552UL, 1271858417UL, 1621249501UL, 1804851492UL, 3215921223UL, +751773221UL, 1517221627UL, 822709871UL, 104533154UL, 361845001UL, 640541709UL, 421086624UL, 4233576392UL, 3729339369UL, 2655936801UL, 773140636UL, 2158026018UL, 1756785611UL, 4011575991UL, 587202971UL, 736117181UL, 2456162322UL, 1168189787UL, 3651312675UL, 2517883370UL, 268231205UL, 541474497UL, 3316168972UL, 3546990856UL, 2037251305UL, 725960194UL, 2044207227UL, 3188997938UL, 2383298579UL, 2665008587UL, 3575011225UL, 1553111865UL, +1285013027UL, 749371711UL, 2163964019UL, 598195098UL, 2139882719UL, 2062405428UL, 3634702446UL, 2788202059UL, 223311969UL, 2622859522UL, 3888492701UL, 2955257225UL, 740986174UL, 3563756446UL, 2886083960UL, 1907546514UL, 454650902UL, 2426323587UL, 625828138UL, 2991888140UL, 1935326370UL, 4031152256UL, 1831149435UL, 1427632724UL, 1345475301UL, 2577560804UL, 2858595147UL, 3977153945UL, 185662179UL, 536505093UL, 3747894147UL, 111551030UL, +4131587422UL, 2293908590UL, 91444490UL, 628576944UL, 4069219862UL, 2408189350UL, 1671484924UL, 1191182242UL, 1565180119UL, 2257613723UL, 1338069254UL, 3411094744UL, 953365104UL, 3104638527UL, 1133984729UL, 631497759UL, 2000630022UL, 1921384447UL, 843719355UL, 588432962UL, 3280318959UL, 3293926122UL, 483396548UL, 3848838894UL, 3155476556UL, 1777918163UL, 146876953UL, 3279827269UL, 2644461735UL, 4168565656UL, 2786264663UL, 3976156700UL, +1708974143UL, 1878547888UL, 3465220024UL, 2793923820UL, 1999154400UL, 1510428126UL, 716404149UL, 1646021208UL, 3102243824UL, 2479551429UL, 651997355UL, 282914223UL, 352224857UL, 3767702588UL, 1275979651UL, 1971798134UL, 978904005UL, 976413661UL, 1951622548UL, 300654823UL, 2565125471UL, 2782642813UL, 3537961025UL, 2186817324UL, 3123973648UL, 3491609UL, 1319592872UL, 1630206561UL, 1075424534UL, 1437913158UL, 2828944016UL, 3301346775UL, +2893072371UL, 207992406UL, 2153172585UL, 2664450619UL, 691091062UL, 1079640113UL, 3114255216UL, 17137237UL, 2197910648UL, 2310382370UL, 1000957047UL, 2548008553UL, 802137134UL, 2272766890UL, 31122394UL, 2742925483UL, 4069482373UL, 3909775167UL, 2468361281UL, 2982007782UL, 2371576893UL, 2807823912UL, 3319492525UL, 672057044UL, 2108452841UL, 1671338057UL, 12831353UL, 1878151473UL, 805157552UL, 1271858417UL, 1621249501UL, 461887094UL, +3215921223UL, 751773221UL, 1517221627UL, 822709871UL, 1317394918UL, 361845001UL, 640541709UL, 421086624UL, 4233576392UL, 3385587450UL, 2655936801UL, 773140636UL, 2158026018UL, 1756785611UL, 1475601973UL, 587202971UL, 736117181UL, 2456162322UL, 1168189787UL, 911455077UL, 2517883370UL, 268231205UL, 541474497UL, 3316168972UL, 1500275507UL, 2037251305UL, 725960194UL, 2044207227UL, 3188997938UL, 2036633808UL, 2665008587UL, 3575011225UL, +1553111865UL, 1285013027UL, 87868216UL, 2163964019UL, 598195098UL, 2139882719UL, 2062405428UL, 517907301UL, 2788202059UL, 223311969UL, 2622859522UL, 3888492701UL, 3926046234UL, 740986174UL, 3563756446UL, 2886083960UL, 1907546514UL, 1911066215UL, 2426323587UL, 625828138UL, 2991888140UL, 1935326370UL, 2031853435UL, 1831149435UL, 1427632724UL, 1345475301UL, 2577560804UL, 3509674153UL, 3977153945UL, 185662179UL, 536505093UL, 3747894147UL, +1711714600UL, 4131587422UL, 2293908590UL, 91444490UL, 628576944UL, 3370678255UL, 2408189350UL, 1671484924UL, 1191182242UL, 1565180119UL, 3786239592UL, 1338069254UL, 3411094744UL, 953365104UL, 3104638527UL, 3659647225UL, 631497759UL, 2000630022UL, 1921384447UL, 843719355UL, 3364831282UL, 3280318959UL, 3293926122UL, 483396548UL, 3848838894UL, 3131266478UL, 1777918163UL, 146876953UL, 3279827269UL, 2644461735UL, 4156372383UL, 2786264663UL, +3976156700UL, 1708974143UL, 1878547888UL, 2168041590UL, 2793923820UL, 1999154400UL, 1510428126UL, 716404149UL, 3392113666UL, 3102243824UL, 2479551429UL, 651997355UL, 282914223UL, 2085613514UL, 3767702588UL, 1275979651UL, 1971798134UL, 978904005UL, 503506384UL, 1951622548UL, 300654823UL, 2565125471UL, 2782642813UL, 1458431750UL, 2186817324UL, 3123973648UL, 3491609UL, 1319592872UL, 452433679UL, 1075424534UL, 1437913158UL, 2828944016UL, +3301346775UL, 2333281307UL, 207992406UL, 2153172585UL, 2664450619UL, 691091062UL, 3553502652UL, 3114255216UL, 17137237UL, 2197910648UL, 2310382370UL, 3153689868UL, 2548008553UL, 802137134UL, 2272766890UL, 31122394UL, 468580641UL, 4069482373UL, 3909775167UL, 2468361281UL, 2982007782UL, 1445286890UL, 2807823912UL, 3319492525UL, 672057044UL, 2108452841UL, 1755577669UL, 12831353UL, 1878151473UL, 805157552UL, 1271858417UL, 2623540912UL, +461887094UL, 3215921223UL, 751773221UL, 1517221627UL, 3922191946UL, 1317394918UL, 361845001UL, 640541709UL, 421086624UL, 2173849516UL, 3385587450UL, 2655936801UL, 773140636UL, 2158026018UL, 1085377158UL, 1475601973UL, 587202971UL, 736117181UL, 2456162322UL, 2158960374UL, 911455077UL, 2517883370UL, 268231205UL, 541474497UL, 943191315UL, 1500275507UL, 2037251305UL, 725960194UL, 2044207227UL, 2481150802UL, 2036633808UL, 2665008587UL, +3575011225UL, 1553111865UL, 2301231777UL, 87868216UL, 2163964019UL, 598195098UL, 2139882719UL, 2007840238UL, 517907301UL, 2788202059UL, 223311969UL, 2622859522UL, 151920263UL, 3926046234UL, 740986174UL, 3563756446UL, 2886083960UL, 1338937928UL, 1911066215UL, 2426323587UL, 625828138UL, 2991888140UL, 2652286195UL, 2031853435UL, 1831149435UL, 1427632724UL, 1345475301UL, 289801789UL, 3509674153UL, 3977153945UL, 185662179UL, 536505093UL, +2727322952UL, 3980498348UL, 2529622213UL, 1903052964UL, 3564714651UL, 2281240568UL, 533384122UL, 277613480UL, 1815540358UL, 282763841UL, 3669112623UL, 2572859425UL, 195220178UL, 1210883545UL, 2359703600UL, 1187537824UL, 675732974UL, 325036095UL, 708091465UL, 2556854604UL, 701006284UL, 2378459191UL, 1863513103UL, 2690918197UL, 4237307694UL, 1356483501UL, 2160905652UL, 521809106UL, 974368613UL, 3136010957UL, 2722488678UL, 3711515637UL, +2296341459UL, 4233729945UL, 1196247571UL, 3031398071UL, 515543502UL, 1314129776UL, 3235373306UL, 1303165859UL, 1820568009UL, 559099351UL, 186876368UL, 1076102111UL, 1218809551UL, 1790301111UL, 4130210229UL, 768125358UL, 1132864749UL, 4262563773UL, 2294411020UL, 4092943985UL, 2558108246UL, 3737664949UL, 2219923393UL, 724326159UL, 4134105682UL, 4188752746UL, 3615233671UL, 1526018731UL, 2281637916UL, 2459490295UL, 3637342666UL, 777862587UL, +39962002UL, 3772005832UL, 997473319UL, 574843584UL, 3356551974UL, 1265234427UL, 1698059437UL, 534747571UL, 1465532164UL, 3263029035UL, 534512444UL, 2343092827UL, 2375685652UL, 2497926141UL, 2377933621UL, 2212335180UL, 261114084UL, 172755755UL, 2737085495UL, 2225257145UL, 148605658UL, 1353911796UL, 357753009UL, 1778732943UL, 497635558UL, 4136467976UL, 2837964962UL, 4045039047UL, 2485296762UL, 1587587183UL, 4042904168UL, 3184240963UL, +2393293696UL, 915444966UL, 2299938515UL, 3351580749UL, 506575598UL, 1541916825UL, 3465300401UL, 525927458UL, 681152801UL, 331660975UL, 3624685846UL, 2994172100UL, 3274369082UL, 3638287602UL, 815689760UL, 1710961092UL, 2775607076UL, 2175058103UL, 3252688367UL, 2936890483UL, 2746319120UL, 2736754UL, 1646031035UL, 2448701214UL, 2886833213UL, 3689830606UL, 3292798106UL, 300773646UL, 3125160783UL, 1247453205UL, 2746275624UL, 4011063775UL, +904135764UL, 876847374UL, 366267234UL, 2541269205UL, 131376648UL, 1805948133UL, 3383589530UL, 2350119829UL, 2513170439UL, 4096158499UL, 4229211520UL, 2992048272UL, 1338522080UL, 1187391335UL, 2898563453UL, 2163088451UL, 1417971677UL, 2047421551UL, 902282791UL, 1143943232UL, 3568431811UL, 4059861993UL, 193362198UL, 2509297125UL, 3968551582UL, 2175686117UL, 3568936881UL, 1853177468UL, 2134063169UL, 2919389416UL, 1124914545UL, 1209806738UL, +}, +{ +1199972651UL, 1035834631UL, 3177798370UL, 860834162UL, 3741677748UL, 3780327829UL, 1693730265UL, 1643429511UL, 559568669UL, 2758650294UL, 647308222UL, 3901603996UL, 1778653821UL, 3618523672UL, 2154201067UL, 4261179460UL, 3285764480UL, 3334002738UL, 3215795953UL, 91368462UL, 1883994950UL, 1506873376UL, 1527780962UL, 4046354597UL, 4081676034UL, 2389066602UL, 1574939945UL, 427845396UL, 2714836263UL, 1259019491UL, 2493238133UL, 2584034689UL, +3151382431UL, 2171033919UL, 176883719UL, 2031844862UL, 1272380790UL, 1298975901UL, 4087222847UL, 1524000054UL, 311436877UL, 3627785554UL, 1889491722UL, 2938069193UL, 2771940687UL, 2756955968UL, 4289348777UL, 263514583UL, 887207028UL, 3522902525UL, 2273246349UL, 835377715UL, 2897243319UL, 204645450UL, 1775911983UL, 639470242UL, 2856296318UL, 3032942383UL, 2845501282UL, 1979082575UL, 202834023UL, 1876303820UL, 1434703409UL, 4240524132UL, +848853780UL, 4188621628UL, 928095314UL, 876412914UL, 3446576392UL, 3235688990UL, 4021419931UL, 2483628986UL, 3155781890UL, 399997246UL, 1642535200UL, 3872575068UL, 1577956550UL, 3606228634UL, 609914462UL, 653194726UL, 4048067248UL, 2500767965UL, 1125167825UL, 3707628088UL, 1819135158UL, 1875618971UL, 3865851141UL, 328215079UL, 1695889194UL, 2040280471UL, 3384684457UL, 2540504961UL, 293050253UL, 525570078UL, 2655676443UL, 1392199429UL, +3370444585UL, 1937915855UL, 2229636250UL, 247937142UL, 2534538765UL, 365841057UL, 2449431033UL, 2456532429UL, 101910696UL, 1247069485UL, 1523958293UL, 2473285670UL, 473709728UL, 3026667113UL, 2071968844UL, 324025193UL, 423064436UL, 3870800061UL, 3977393138UL, 3632553233UL, 352757977UL, 1584833348UL, 3173248650UL, 1159857686UL, 1501841977UL, 1751860798UL, 617281070UL, 1958012761UL, 4031667102UL, 3232142321UL, 3087428595UL, 2380824676UL, +1194087757UL, 1542961747UL, 4163350364UL, 1721646249UL, 1672791861UL, 2900511710UL, 24973500UL, 1705444176UL, 713642505UL, 3017719513UL, 2090715200UL, 3521434070UL, 37117223UL, 1948295454UL, 3055840561UL, 3476120789UL, 3994249388UL, 527899063UL, 4285770666UL, 1075524023UL, 2594223535UL, 392943522UL, 171012646UL, 3515750082UL, 3414659054UL, 3501852926UL, 1493283737UL, 2662104279UL, 2033464928UL, 90134967UL, 363058647UL, 3289266998UL, +2470752727UL, 1199972651UL, 1035834631UL, 3177798370UL, 860834162UL, 1791097822UL, 3780327829UL, 1693730265UL, 1643429511UL, 559568669UL, 3503319486UL, 647308222UL, 3901603996UL, 1778653821UL, 3618523672UL, 4294594427UL, 4261179460UL, 3285764480UL, 3334002738UL, 3215795953UL, 212518363UL, 1883994950UL, 1506873376UL, 1527780962UL, 4046354597UL, 2398655600UL, 2389066602UL, 1574939945UL, 427845396UL, 2714836263UL, 2744363872UL, 2493238133UL, +2584034689UL, 3151382431UL, 2171033919UL, 2787053497UL, 2031844862UL, 1272380790UL, 1298975901UL, 4087222847UL, 2342953154UL, 311436877UL, 3627785554UL, 1889491722UL, 2938069193UL, 2026656505UL, 2756955968UL, 4289348777UL, 263514583UL, 887207028UL, 2097276163UL, 2273246349UL, 835377715UL, 2897243319UL, 204645450UL, 4233399907UL, 639470242UL, 2856296318UL, 3032942383UL, 2845501282UL, 28260330UL, 202834023UL, 1876303820UL, 1434703409UL, +4240524132UL, 2455670466UL, 4188621628UL, 928095314UL, 876412914UL, 3446576392UL, 117581687UL, 4021419931UL, 2483628986UL, 3155781890UL, 399997246UL, 4254101087UL, 3872575068UL, 1577956550UL, 3606228634UL, 609914462UL, 4003279048UL, 4048067248UL, 2500767965UL, 1125167825UL, 3707628088UL, 922020515UL, 1875618971UL, 3865851141UL, 328215079UL, 1695889194UL, 625773097UL, 3384684457UL, 2540504961UL, 293050253UL, 525570078UL, 2592805114UL, +1392199429UL, 3370444585UL, 1937915855UL, 2229636250UL, 3190958614UL, 2534538765UL, 365841057UL, 2449431033UL, 2456532429UL, 3778669305UL, 1247069485UL, 1523958293UL, 2473285670UL, 473709728UL, 720895889UL, 2071968844UL, 324025193UL, 423064436UL, 3870800061UL, 3535536111UL, 3632553233UL, 352757977UL, 1584833348UL, 3173248650UL, 2649344603UL, 1501841977UL, 1751860798UL, 617281070UL, 1958012761UL, 778965559UL, 3232142321UL, 3087428595UL, +2380824676UL, 1194087757UL, 3880222002UL, 4163350364UL, 1721646249UL, 1672791861UL, 2900511710UL, 702936770UL, 1705444176UL, 713642505UL, 3017719513UL, 2090715200UL, 1477858694UL, 37117223UL, 1948295454UL, 3055840561UL, 3476120789UL, 464173532UL, 527899063UL, 4285770666UL, 1075524023UL, 2594223535UL, 2872629966UL, 171012646UL, 3515750082UL, 3414659054UL, 3501852926UL, 1631555059UL, 2662104279UL, 2033464928UL, 90134967UL, 363058647UL, +4112991722UL, 2470752727UL, 1199972651UL, 1035834631UL, 3177798370UL, 4152098951UL, 1791097822UL, 3780327829UL, 1693730265UL, 1643429511UL, 153020604UL, 3503319486UL, 647308222UL, 3901603996UL, 1778653821UL, 221887019UL, 4294594427UL, 4261179460UL, 3285764480UL, 3334002738UL, 3340918862UL, 212518363UL, 1883994950UL, 1506873376UL, 1527780962UL, 430180116UL, 2398655600UL, 2389066602UL, 1574939945UL, 427845396UL, 1683639957UL, 2744363872UL, +2493238133UL, 2584034689UL, 3151382431UL, 752704472UL, 2787053497UL, 2031844862UL, 1272380790UL, 1298975901UL, 1528220628UL, 2342953154UL, 311436877UL, 3627785554UL, 1889491722UL, 2576495467UL, 2026656505UL, 2756955968UL, 4289348777UL, 263514583UL, 3778019638UL, 2097276163UL, 2273246349UL, 835377715UL, 2897243319UL, 1060067446UL, 4233399907UL, 639470242UL, 2856296318UL, 3032942383UL, 2351047932UL, 28260330UL, 202834023UL, 1876303820UL, +1434703409UL, 3094305336UL, 2455670466UL, 4188621628UL, 928095314UL, 876412914UL, 3785385583UL, 117581687UL, 4021419931UL, 2483628986UL, 3155781890UL, 1867816730UL, 4254101087UL, 3872575068UL, 1577956550UL, 3606228634UL, 3081878598UL, 4003279048UL, 4048067248UL, 2500767965UL, 1125167825UL, 928465955UL, 922020515UL, 1875618971UL, 3865851141UL, 328215079UL, 173810260UL, 625773097UL, 3384684457UL, 2540504961UL, 293050253UL, 2645143254UL, +2592805114UL, 1392199429UL, 3370444585UL, 1937915855UL, 162781360UL, 3190958614UL, 2534538765UL, 365841057UL, 2449431033UL, 3105377832UL, 3778669305UL, 1247069485UL, 1523958293UL, 2473285670UL, 800971948UL, 720895889UL, 2071968844UL, 324025193UL, 423064436UL, 52577992UL, 3535536111UL, 3632553233UL, 352757977UL, 1584833348UL, 3305908059UL, 2649344603UL, 1501841977UL, 1751860798UL, 617281070UL, 264880505UL, 778965559UL, 3232142321UL, +3087428595UL, 2380824676UL, 1127761012UL, 3880222002UL, 4163350364UL, 1721646249UL, 1672791861UL, 2368512339UL, 702936770UL, 1705444176UL, 713642505UL, 3017719513UL, 197200752UL, 1477858694UL, 37117223UL, 1948295454UL, 3055840561UL, 1588372042UL, 464173532UL, 527899063UL, 4285770666UL, 1075524023UL, 2124039914UL, 2872629966UL, 171012646UL, 3515750082UL, 3414659054UL, 818571456UL, 1631555059UL, 2662104279UL, 2033464928UL, 90134967UL, +952712086UL, 4112991722UL, 2470752727UL, 1199972651UL, 1035834631UL, 888975816UL, 4152098951UL, 1791097822UL, 3780327829UL, 1693730265UL, 3406785510UL, 153020604UL, 3503319486UL, 647308222UL, 3901603996UL, 3753248472UL, 221887019UL, 4294594427UL, 4261179460UL, 3285764480UL, 1861431346UL, 3340918862UL, 212518363UL, 1883994950UL, 1506873376UL, 2695939612UL, 430180116UL, 2398655600UL, 2389066602UL, 1574939945UL, 2852159074UL, 1683639957UL, +2744363872UL, 2493238133UL, 2584034689UL, 1952065633UL, 752704472UL, 2787053497UL, 2031844862UL, 1272380790UL, 3530505866UL, 1528220628UL, 2342953154UL, 311436877UL, 3627785554UL, 3410473245UL, 2576495467UL, 2026656505UL, 2756955968UL, 4289348777UL, 2856163034UL, 3778019638UL, 2097276163UL, 2273246349UL, 835377715UL, 3127280755UL, 1060067446UL, 4233399907UL, 639470242UL, 2856296318UL, 2615775011UL, 2351047932UL, 28260330UL, 202834023UL, +1876303820UL, 619308202UL, 3094305336UL, 2455670466UL, 4188621628UL, 928095314UL, 3764894047UL, 3785385583UL, 117581687UL, 4021419931UL, 2483628986UL, 3759839215UL, 1867816730UL, 4254101087UL, 3872575068UL, 1577956550UL, 1687107439UL, 3081878598UL, 4003279048UL, 4048067248UL, 2500767965UL, 2804044146UL, 928465955UL, 922020515UL, 1875618971UL, 3865851141UL, 2359176389UL, 173810260UL, 625773097UL, 3384684457UL, 2540504961UL, 3665420733UL, +2645143254UL, 2592805114UL, 1392199429UL, 3370444585UL, 1604709429UL, 162781360UL, 3190958614UL, 2534538765UL, 365841057UL, 3843585067UL, 3105377832UL, 3778669305UL, 1247069485UL, 1523958293UL, 293374051UL, 800971948UL, 720895889UL, 2071968844UL, 324025193UL, 3342361801UL, 52577992UL, 3535536111UL, 3632553233UL, 352757977UL, 1386594581UL, 3305908059UL, 2649344603UL, 1501841977UL, 1751860798UL, 3160423601UL, 264880505UL, 778965559UL, +3232142321UL, 3087428595UL, 3814775120UL, 1127761012UL, 3880222002UL, 4163350364UL, 1721646249UL, 3640773034UL, 2368512339UL, 702936770UL, 1705444176UL, 713642505UL, 1717761787UL, 197200752UL, 1477858694UL, 37117223UL, 1948295454UL, 896215772UL, 1588372042UL, 464173532UL, 527899063UL, 4285770666UL, 3441409029UL, 2124039914UL, 2872629966UL, 171012646UL, 3515750082UL, 2216687886UL, 818571456UL, 1631555059UL, 2662104279UL, 2033464928UL, +369438400UL, 329003658UL, 1503365029UL, 4215790910UL, 3264377550UL, 733526983UL, 2935318632UL, 1792331479UL, 608347530UL, 392723097UL, 1330445854UL, 3473004271UL, 1267636682UL, 2150566972UL, 2664910943UL, 2591861637UL, 409769584UL, 2943326880UL, 3746302819UL, 3162268832UL, 1028663260UL, 3206607045UL, 832105292UL, 2119405275UL, 538318455UL, 2981192295UL, 861775416UL, 609718403UL, 3531204230UL, 1904759571UL, 1262633751UL, 2375133081UL, +460454984UL, 946700253UL, 3763898311UL, 1571175213UL, 3124410107UL, 2413420216UL, 2664177543UL, 3241803820UL, 3968067371UL, 1234860999UL, 1130471500UL, 772727786UL, 247203117UL, 576455235UL, 246297007UL, 2027348597UL, 764933887UL, 3812479771UL, 1825807084UL, 4072281412UL, 2156865781UL, 1286484847UL, 1966749063UL, 2479269303UL, 423506843UL, 3070938758UL, 653091413UL, 2267423132UL, 2004263526UL, 1374490719UL, 3871990628UL, 841138314UL, +1260317857UL, 3887432433UL, 4025147569UL, 764233331UL, 1794763428UL, 3005903468UL, 877926770UL, 2466593927UL, 2971729561UL, 3203070565UL, 4198500026UL, 815665759UL, 2434508139UL, 1840456368UL, 2279000427UL, 17077200UL, 3178380570UL, 990304199UL, 3578008580UL, 1965763660UL, 1640352477UL, 750159594UL, 2047409402UL, 3576308245UL, 544920564UL, 1730124869UL, 1194761386UL, 3280315505UL, 147334027UL, 2870674244UL, 2076860776UL, 1100947675UL, +2482772161UL, 401966468UL, 1610650855UL, 193868446UL, 3808157106UL, 1509130117UL, 1324484736UL, 3852893217UL, 1059179497UL, 4053543778UL, 2557844172UL, 3282312002UL, 682550058UL, 4281899173UL, 137171998UL, 3239159214UL, 2258610918UL, 426724741UL, 3502660993UL, 135977383UL, 429929363UL, 3984458137UL, 964026748UL, 2182019070UL, 3836562946UL, 515026869UL, 359030455UL, 1301694917UL, 2300414803UL, 2364654981UL, 3804876710UL, 171119249UL, +2646785698UL, 4283509387UL, 3628087763UL, 1748227044UL, 3037141234UL, 3000413256UL, 23007314UL, 3598880509UL, 4160517314UL, 112205578UL, 1677675411UL, 734881643UL, 2830770338UL, 3470317145UL, 3306806569UL, 2635040943UL, 2671367560UL, 3528996498UL, 3878886478UL, 3114253828UL, 2721384408UL, 3175226991UL, 1393767271UL, 2651623266UL, 3767978376UL, 1269699398UL, 1100964192UL, 4169085845UL, 2086718107UL, 1286251099UL, 764751784UL, 3006878591UL, +}, +{ +2565473087UL, 1149521056UL, 3529037691UL, 630435548UL, 73598765UL, 1467331930UL, 3988027050UL, 2771962200UL, 91261543UL, 980989218UL, 2227515435UL, 236831608UL, 2872772569UL, 2330469327UL, 1654035853UL, 2883791516UL, 4170143763UL, 126418114UL, 127789935UL, 2114249438UL, 2933346767UL, 639483386UL, 1532399845UL, 2182422151UL, 741069317UL, 2376371063UL, 3398508789UL, 3828295651UL, 3963199356UL, 4156483769UL, 4206759111UL, 1266176088UL, +3210273687UL, 432131993UL, 667709537UL, 874477513UL, 2304714957UL, 629309008UL, 116453438UL, 3051811727UL, 3490241985UL, 3355968243UL, 2304043871UL, 2724990029UL, 1095724699UL, 2408437363UL, 1433161037UL, 3245468546UL, 2494529842UL, 4204170637UL, 1966342448UL, 3092333073UL, 1861880941UL, 3990012367UL, 3710334908UL, 2526395471UL, 1884691351UL, 2145882162UL, 2561288457UL, 2253122309UL, 1154858044UL, 1643256991UL, 3172857504UL, 1096492713UL, +2848827103UL, 799826424UL, 3094672168UL, 3535834360UL, 4213256737UL, 1131757994UL, 520495112UL, 575315345UL, 3823364867UL, 2424349582UL, 3604795017UL, 310789314UL, 4207205257UL, 553462404UL, 2918228443UL, 2568360580UL, 3863565851UL, 874197736UL, 3329267685UL, 1186352580UL, 3928193054UL, 1780200631UL, 4088289456UL, 3323217870UL, 2758854947UL, 3111637417UL, 990374143UL, 2080149357UL, 4047813631UL, 2019887940UL, 578660736UL, 2145680301UL, +2328411541UL, 1572704242UL, 405739686UL, 1869350271UL, 2046317220UL, 4021497634UL, 1385163990UL, 1935250885UL, 1132987169UL, 581690993UL, 3172043012UL, 628071512UL, 2851125739UL, 2735324847UL, 2847267504UL, 3408334906UL, 3352976111UL, 706277272UL, 2971786942UL, 2811957324UL, 3578703606UL, 1126685543UL, 2671169997UL, 31952251UL, 2802110464UL, 2391618856UL, 3031260674UL, 1165714541UL, 2411388800UL, 2825634835UL, 101928462UL, 477629709UL, +4257022506UL, 3281706767UL, 2576087732UL, 736533968UL, 2543083137UL, 3430523686UL, 3272172013UL, 3056925798UL, 341993500UL, 406782950UL, 1770032304UL, 125786076UL, 1321359723UL, 2901696227UL, 1890958265UL, 3610842776UL, 1772227311UL, 1564088598UL, 914173231UL, 3734092059UL, 1652333721UL, 2386645282UL, 329706426UL, 1022239203UL, 1832393502UL, 4064995802UL, 3497852986UL, 1046436763UL, 366391010UL, 2237068647UL, 2887356463UL, 304718827UL, +3969799795UL, 2565473087UL, 1149521056UL, 3529037691UL, 630435548UL, 3758124054UL, 1467331930UL, 3988027050UL, 2771962200UL, 91261543UL, 836545831UL, 2227515435UL, 236831608UL, 2872772569UL, 2330469327UL, 3439193753UL, 2883791516UL, 4170143763UL, 126418114UL, 127789935UL, 1648940583UL, 2933346767UL, 639483386UL, 1532399845UL, 2182422151UL, 2470139222UL, 2376371063UL, 3398508789UL, 3828295651UL, 3963199356UL, 2997263135UL, 4206759111UL, +1266176088UL, 3210273687UL, 432131993UL, 2416600665UL, 874477513UL, 2304714957UL, 629309008UL, 116453438UL, 2586542760UL, 3490241985UL, 3355968243UL, 2304043871UL, 2724990029UL, 452934545UL, 2408437363UL, 1433161037UL, 3245468546UL, 2494529842UL, 2244403710UL, 1966342448UL, 3092333073UL, 1861880941UL, 3990012367UL, 2774994234UL, 2526395471UL, 1884691351UL, 2145882162UL, 2561288457UL, 2303702146UL, 1154858044UL, 1643256991UL, 3172857504UL, +1096492713UL, 130979316UL, 799826424UL, 3094672168UL, 3535834360UL, 4213256737UL, 935499492UL, 520495112UL, 575315345UL, 3823364867UL, 2424349582UL, 2272973265UL, 310789314UL, 4207205257UL, 553462404UL, 2918228443UL, 2613016888UL, 3863565851UL, 874197736UL, 3329267685UL, 1186352580UL, 4106984978UL, 1780200631UL, 4088289456UL, 3323217870UL, 2758854947UL, 1559861146UL, 990374143UL, 2080149357UL, 4047813631UL, 2019887940UL, 1133329900UL, +2145680301UL, 2328411541UL, 1572704242UL, 405739686UL, 63633520UL, 2046317220UL, 4021497634UL, 1385163990UL, 1935250885UL, 1762959503UL, 581690993UL, 3172043012UL, 628071512UL, 2851125739UL, 3726073981UL, 2847267504UL, 3408334906UL, 3352976111UL, 706277272UL, 3817450114UL, 2811957324UL, 3578703606UL, 1126685543UL, 2671169997UL, 2749086326UL, 2802110464UL, 2391618856UL, 3031260674UL, 1165714541UL, 2210258428UL, 2825634835UL, 101928462UL, +477629709UL, 4257022506UL, 2679409844UL, 2576087732UL, 736533968UL, 2543083137UL, 3430523686UL, 1122549807UL, 3056925798UL, 341993500UL, 406782950UL, 1770032304UL, 2617760292UL, 1321359723UL, 2901696227UL, 1890958265UL, 3610842776UL, 2666109620UL, 1564088598UL, 914173231UL, 3734092059UL, 1652333721UL, 3456779008UL, 329706426UL, 1022239203UL, 1832393502UL, 4064995802UL, 4006865520UL, 1046436763UL, 366391010UL, 2237068647UL, 2887356463UL, +1479646555UL, 3969799795UL, 2565473087UL, 1149521056UL, 3529037691UL, 2379195579UL, 3758124054UL, 1467331930UL, 3988027050UL, 2771962200UL, 1796797949UL, 836545831UL, 2227515435UL, 236831608UL, 2872772569UL, 544017308UL, 3439193753UL, 2883791516UL, 4170143763UL, 126418114UL, 3811390247UL, 1648940583UL, 2933346767UL, 639483386UL, 1532399845UL, 4165970043UL, 2470139222UL, 2376371063UL, 3398508789UL, 3828295651UL, 4066952157UL, 2997263135UL, +4206759111UL, 1266176088UL, 3210273687UL, 560560354UL, 2416600665UL, 874477513UL, 2304714957UL, 629309008UL, 2010844440UL, 2586542760UL, 3490241985UL, 3355968243UL, 2304043871UL, 855615381UL, 452934545UL, 2408437363UL, 1433161037UL, 3245468546UL, 3813880871UL, 2244403710UL, 1966342448UL, 3092333073UL, 1861880941UL, 3334256651UL, 2774994234UL, 2526395471UL, 1884691351UL, 2145882162UL, 3500193798UL, 2303702146UL, 1154858044UL, 1643256991UL, +3172857504UL, 3480843206UL, 130979316UL, 799826424UL, 3094672168UL, 3535834360UL, 915442396UL, 935499492UL, 520495112UL, 575315345UL, 3823364867UL, 2876158574UL, 2272973265UL, 310789314UL, 4207205257UL, 553462404UL, 2184663001UL, 2613016888UL, 3863565851UL, 874197736UL, 3329267685UL, 3447734684UL, 4106984978UL, 1780200631UL, 4088289456UL, 3323217870UL, 2748493470UL, 1559861146UL, 990374143UL, 2080149357UL, 4047813631UL, 2728282767UL, +1133329900UL, 2145680301UL, 2328411541UL, 1572704242UL, 3396987326UL, 63633520UL, 2046317220UL, 4021497634UL, 1385163990UL, 1582181054UL, 1762959503UL, 581690993UL, 3172043012UL, 628071512UL, 2790170929UL, 3726073981UL, 2847267504UL, 3408334906UL, 3352976111UL, 1211075015UL, 3817450114UL, 2811957324UL, 3578703606UL, 1126685543UL, 1946225412UL, 2749086326UL, 2802110464UL, 2391618856UL, 3031260674UL, 453222948UL, 2210258428UL, 2825634835UL, +101928462UL, 477629709UL, 410621659UL, 2679409844UL, 2576087732UL, 736533968UL, 2543083137UL, 1101977922UL, 1122549807UL, 3056925798UL, 341993500UL, 406782950UL, 3057489804UL, 2617760292UL, 1321359723UL, 2901696227UL, 1890958265UL, 4035843698UL, 2666109620UL, 1564088598UL, 914173231UL, 3734092059UL, 908525903UL, 3456779008UL, 329706426UL, 1022239203UL, 1832393502UL, 4024857205UL, 4006865520UL, 1046436763UL, 366391010UL, 2237068647UL, +1564059380UL, 1479646555UL, 3969799795UL, 2565473087UL, 1149521056UL, 2808155917UL, 2379195579UL, 3758124054UL, 1467331930UL, 3988027050UL, 810008243UL, 1796797949UL, 836545831UL, 2227515435UL, 236831608UL, 608273331UL, 544017308UL, 3439193753UL, 2883791516UL, 4170143763UL, 3309288977UL, 3811390247UL, 1648940583UL, 2933346767UL, 639483386UL, 1685761277UL, 4165970043UL, 2470139222UL, 2376371063UL, 3398508789UL, 4275493636UL, 4066952157UL, +2997263135UL, 4206759111UL, 1266176088UL, 333592630UL, 560560354UL, 2416600665UL, 874477513UL, 2304714957UL, 1438974661UL, 2010844440UL, 2586542760UL, 3490241985UL, 3355968243UL, 2556368068UL, 855615381UL, 452934545UL, 2408437363UL, 1433161037UL, 4061232080UL, 3813880871UL, 2244403710UL, 1966342448UL, 3092333073UL, 3412770364UL, 3334256651UL, 2774994234UL, 2526395471UL, 1884691351UL, 1414627588UL, 3500193798UL, 2303702146UL, 1154858044UL, +1643256991UL, 2245958719UL, 3480843206UL, 130979316UL, 799826424UL, 3094672168UL, 2214560871UL, 915442396UL, 935499492UL, 520495112UL, 575315345UL, 3894763683UL, 2876158574UL, 2272973265UL, 310789314UL, 4207205257UL, 3203740771UL, 2184663001UL, 2613016888UL, 3863565851UL, 874197736UL, 3371653768UL, 3447734684UL, 4106984978UL, 1780200631UL, 4088289456UL, 378312754UL, 2748493470UL, 1559861146UL, 990374143UL, 2080149357UL, 554816113UL, +2728282767UL, 1133329900UL, 2145680301UL, 2328411541UL, 4249979994UL, 3396987326UL, 63633520UL, 2046317220UL, 4021497634UL, 4185731269UL, 1582181054UL, 1762959503UL, 581690993UL, 3172043012UL, 3142596028UL, 2790170929UL, 3726073981UL, 2847267504UL, 3408334906UL, 2556911142UL, 1211075015UL, 3817450114UL, 2811957324UL, 3578703606UL, 1480672978UL, 1946225412UL, 2749086326UL, 2802110464UL, 2391618856UL, 3986823297UL, 453222948UL, 2210258428UL, +2825634835UL, 101928462UL, 26373721UL, 410621659UL, 2679409844UL, 2576087732UL, 736533968UL, 888001208UL, 1101977922UL, 1122549807UL, 3056925798UL, 341993500UL, 3243663736UL, 3057489804UL, 2617760292UL, 1321359723UL, 2901696227UL, 1652018736UL, 4035843698UL, 2666109620UL, 1564088598UL, 914173231UL, 1857869366UL, 908525903UL, 3456779008UL, 329706426UL, 1022239203UL, 2622178179UL, 4024857205UL, 4006865520UL, 1046436763UL, 366391010UL, +3722250905UL, 2880126367UL, 4102186560UL, 1642831571UL, 2222486636UL, 2572764729UL, 2046028516UL, 3507603612UL, 1703451134UL, 89818497UL, 1961701523UL, 3704300476UL, 3563143931UL, 1609575644UL, 1599081111UL, 1047838539UL, 2779312926UL, 2065354728UL, 956677756UL, 2073145924UL, 726634994UL, 119064196UL, 2046275296UL, 2105141632UL, 1023267361UL, 1204528080UL, 623740611UL, 1419328884UL, 933734693UL, 2030900835UL, 2556538268UL, 1672647866UL, +3125658368UL, 2221217376UL, 1097330641UL, 3214790630UL, 4276041578UL, 2397216525UL, 3916900004UL, 330223096UL, 3915966823UL, 2646760259UL, 1724289351UL, 4015221358UL, 2338587000UL, 110922222UL, 2314933196UL, 4026908935UL, 3272487985UL, 2685115305UL, 84271650UL, 731354215UL, 2358136447UL, 1069348214UL, 2676811333UL, 1386266810UL, 1364512901UL, 4154449904UL, 3469122709UL, 54276972UL, 560967905UL, 2363475740UL, 331250049UL, 3024074455UL, +186605617UL, 389582566UL, 1258386782UL, 703909543UL, 3968367083UL, 1553533794UL, 3699576213UL, 1145761343UL, 921983735UL, 3573813763UL, 1280477631UL, 3365842435UL, 1618458494UL, 2621328991UL, 1534006198UL, 2307669227UL, 4192335609UL, 1338050203UL, 785284052UL, 4227164890UL, 2874735332UL, 3655821191UL, 2911684671UL, 3266454200UL, 2679968625UL, 1191162601UL, 456550349UL, 1143881236UL, 3560103440UL, 2253437876UL, 3683014001UL, 1087142366UL, +1462192975UL, 1076595768UL, 3227872159UL, 1842092988UL, 148227073UL, 3812110998UL, 1317300278UL, 3068446245UL, 3376284001UL, 3164402992UL, 2730404635UL, 2848239579UL, 3008959791UL, 2901849226UL, 1234485739UL, 869158554UL, 245101118UL, 1724974650UL, 3851803199UL, 922411232UL, 3046280696UL, 3284392523UL, 3528264590UL, 2802364078UL, 381450957UL, 1741009694UL, 4222244451UL, 102929888UL, 1668474417UL, 3881791214UL, 1429483134UL, 1938365051UL, +1023690708UL, 3333855520UL, 3238705869UL, 2602245525UL, 3059586169UL, 720438965UL, 2120786297UL, 453980990UL, 1048501876UL, 4060576583UL, 3537810796UL, 3892882814UL, 691572481UL, 3899584121UL, 1582529013UL, 3260326865UL, 2358704826UL, 1607030801UL, 1035900449UL, 3442507859UL, 1406737127UL, 249758705UL, 1535363329UL, 893329207UL, 51912312UL, 3440532856UL, 3736385218UL, 295452658UL, 2379709553UL, 1647382020UL, 2363679860UL, 2998779887UL, +}, +{ +4209102573UL, 2387104994UL, 1221484586UL, 1726143957UL, 3263877318UL, 3362559187UL, 282442925UL, 2418524976UL, 3196072648UL, 3174695999UL, 2072047145UL, 2985823503UL, 2132951745UL, 2298545297UL, 2495977670UL, 1397656146UL, 2086257884UL, 3834366725UL, 3862532368UL, 3583329522UL, 1543996818UL, 2192688115UL, 3081427696UL, 2656520743UL, 8772004UL, 2476324234UL, 3600148050UL, 1168683794UL, 3219143568UL, 108768238UL, 1339513738UL, 447593731UL, +2742877256UL, 2488536667UL, 4189834432UL, 808657962UL, 2422880287UL, 390864786UL, 3381554683UL, 760628048UL, 353395922UL, 3577556262UL, 2482413928UL, 507756643UL, 839344953UL, 3505184848UL, 3945044582UL, 2414915836UL, 2313624497UL, 1832728088UL, 2036999647UL, 1369090013UL, 3264575895UL, 1096327239UL, 3483440128UL, 3999302048UL, 2761563885UL, 2882627112UL, 3126073009UL, 1749658776UL, 3152482044UL, 3040022505UL, 3249451214UL, 2933713956UL, +2861715096UL, 1314806730UL, 932941454UL, 4276317539UL, 343449784UL, 1913556027UL, 1493892363UL, 2539517630UL, 2046391233UL, 3046108187UL, 28742917UL, 4009448584UL, 530945117UL, 3165875131UL, 1018448712UL, 110256395UL, 3550192264UL, 1279873435UL, 2276349621UL, 517650895UL, 1957973772UL, 619869608UL, 4260458157UL, 2281748739UL, 2489253174UL, 2220997989UL, 3787481606UL, 508630251UL, 3761850170UL, 3992979014UL, 2298047038UL, 3506428315UL, +1279341556UL, 3293496518UL, 1313470495UL, 1021100687UL, 3113171268UL, 798494760UL, 2981622008UL, 4152623583UL, 576409629UL, 2312811213UL, 992326282UL, 261645450UL, 1818084365UL, 3357150904UL, 144093UL, 1937589359UL, 2016990596UL, 4273422066UL, 588267732UL, 3592151118UL, 3846596932UL, 1198111464UL, 944363907UL, 1288613766UL, 1707163456UL, 4020906747UL, 1161127694UL, 2303844076UL, 2632591611UL, 3877442490UL, 2453788473UL, 1725876694UL, +1193989740UL, 2650581453UL, 1937459187UL, 361099994UL, 3566745727UL, 3658112707UL, 3612317412UL, 2684702277UL, 2880928862UL, 2044313931UL, 1866044828UL, 3528429465UL, 130421713UL, 2658878825UL, 1566180833UL, 1572228417UL, 531947625UL, 3774861000UL, 1894712110UL, 1319199233UL, 865634052UL, 2602102379UL, 3389730171UL, 3878969250UL, 107983959UL, 1601930856UL, 2511728925UL, 2146946013UL, 497511195UL, 720616881UL, 699892123UL, 2404505137UL, +2656498433UL, 4209102573UL, 2387104994UL, 1221484586UL, 1726143957UL, 1267363185UL, 3362559187UL, 282442925UL, 2418524976UL, 3196072648UL, 2942944206UL, 2072047145UL, 2985823503UL, 2132951745UL, 2298545297UL, 4079341490UL, 1397656146UL, 2086257884UL, 3834366725UL, 3862532368UL, 3991197972UL, 1543996818UL, 2192688115UL, 3081427696UL, 2656520743UL, 825853576UL, 2476324234UL, 3600148050UL, 1168683794UL, 3219143568UL, 528751585UL, 1339513738UL, +447593731UL, 2742877256UL, 2488536667UL, 4025362081UL, 808657962UL, 2422880287UL, 390864786UL, 3381554683UL, 2682225618UL, 353395922UL, 3577556262UL, 2482413928UL, 507756643UL, 3979211244UL, 3505184848UL, 3945044582UL, 2414915836UL, 2313624497UL, 1841224078UL, 2036999647UL, 1369090013UL, 3264575895UL, 1096327239UL, 607843308UL, 3999302048UL, 2761563885UL, 2882627112UL, 3126073009UL, 1241524975UL, 3152482044UL, 3040022505UL, 3249451214UL, +2933713956UL, 420486142UL, 1314806730UL, 932941454UL, 4276317539UL, 343449784UL, 2231505736UL, 1493892363UL, 2539517630UL, 2046391233UL, 3046108187UL, 2351652097UL, 4009448584UL, 530945117UL, 3165875131UL, 1018448712UL, 1683392491UL, 3550192264UL, 1279873435UL, 2276349621UL, 517650895UL, 4036312766UL, 619869608UL, 4260458157UL, 2281748739UL, 2489253174UL, 1686790154UL, 3787481606UL, 508630251UL, 3761850170UL, 3992979014UL, 1745325013UL, +3506428315UL, 1279341556UL, 3293496518UL, 1313470495UL, 3066312306UL, 3113171268UL, 798494760UL, 2981622008UL, 4152623583UL, 3871822467UL, 2312811213UL, 992326282UL, 261645450UL, 1818084365UL, 3681154045UL, 144093UL, 1937589359UL, 2016990596UL, 4273422066UL, 2361898985UL, 3592151118UL, 3846596932UL, 1198111464UL, 944363907UL, 2866279694UL, 1707163456UL, 4020906747UL, 1161127694UL, 2303844076UL, 3044280908UL, 3877442490UL, 2453788473UL, +1725876694UL, 1193989740UL, 2049617934UL, 1937459187UL, 361099994UL, 3566745727UL, 3658112707UL, 934740227UL, 2684702277UL, 2880928862UL, 2044313931UL, 1866044828UL, 1814569183UL, 130421713UL, 2658878825UL, 1566180833UL, 1572228417UL, 1784679035UL, 3774861000UL, 1894712110UL, 1319199233UL, 865634052UL, 283642947UL, 3389730171UL, 3878969250UL, 107983959UL, 1601930856UL, 3698217362UL, 2146946013UL, 497511195UL, 720616881UL, 699892123UL, +2117385156UL, 2656498433UL, 4209102573UL, 2387104994UL, 1221484586UL, 3495886368UL, 1267363185UL, 3362559187UL, 282442925UL, 2418524976UL, 3489510655UL, 2942944206UL, 2072047145UL, 2985823503UL, 2132951745UL, 885541635UL, 4079341490UL, 1397656146UL, 2086257884UL, 3834366725UL, 1049969755UL, 3991197972UL, 1543996818UL, 2192688115UL, 3081427696UL, 2141948440UL, 825853576UL, 2476324234UL, 3600148050UL, 1168683794UL, 5160254UL, 528751585UL, +1339513738UL, 447593731UL, 2742877256UL, 3033397497UL, 4025362081UL, 808657962UL, 2422880287UL, 390864786UL, 3191593886UL, 2682225618UL, 353395922UL, 3577556262UL, 2482413928UL, 1185107868UL, 3979211244UL, 3505184848UL, 3945044582UL, 2414915836UL, 3030493909UL, 1841224078UL, 2036999647UL, 1369090013UL, 3264575895UL, 3054343366UL, 607843308UL, 3999302048UL, 2761563885UL, 2882627112UL, 3912854189UL, 1241524975UL, 3152482044UL, 3040022505UL, +3249451214UL, 55140065UL, 420486142UL, 1314806730UL, 932941454UL, 4276317539UL, 1055315026UL, 2231505736UL, 1493892363UL, 2539517630UL, 2046391233UL, 4174985470UL, 2351652097UL, 4009448584UL, 530945117UL, 3165875131UL, 2168411768UL, 1683392491UL, 3550192264UL, 1279873435UL, 2276349621UL, 1875092822UL, 4036312766UL, 619869608UL, 4260458157UL, 2281748739UL, 98823023UL, 1686790154UL, 3787481606UL, 508630251UL, 3761850170UL, 2636025017UL, +1745325013UL, 3506428315UL, 1279341556UL, 3293496518UL, 978338993UL, 3066312306UL, 3113171268UL, 798494760UL, 2981622008UL, 2712384846UL, 3871822467UL, 2312811213UL, 992326282UL, 261645450UL, 66982935UL, 3681154045UL, 144093UL, 1937589359UL, 2016990596UL, 3390191329UL, 2361898985UL, 3592151118UL, 3846596932UL, 1198111464UL, 1857959320UL, 2866279694UL, 1707163456UL, 4020906747UL, 1161127694UL, 913091437UL, 3044280908UL, 3877442490UL, +2453788473UL, 1725876694UL, 4254455215UL, 2049617934UL, 1937459187UL, 361099994UL, 3566745727UL, 2914687409UL, 934740227UL, 2684702277UL, 2880928862UL, 2044313931UL, 1515195925UL, 1814569183UL, 130421713UL, 2658878825UL, 1566180833UL, 2753417020UL, 1784679035UL, 3774861000UL, 1894712110UL, 1319199233UL, 287161774UL, 283642947UL, 3389730171UL, 3878969250UL, 107983959UL, 3057929912UL, 3698217362UL, 2146946013UL, 497511195UL, 720616881UL, +3570251850UL, 2117385156UL, 2656498433UL, 4209102573UL, 2387104994UL, 2940868252UL, 3495886368UL, 1267363185UL, 3362559187UL, 282442925UL, 2510419746UL, 3489510655UL, 2942944206UL, 2072047145UL, 2985823503UL, 978430777UL, 885541635UL, 4079341490UL, 1397656146UL, 2086257884UL, 134380865UL, 1049969755UL, 3991197972UL, 1543996818UL, 2192688115UL, 1205081471UL, 2141948440UL, 825853576UL, 2476324234UL, 3600148050UL, 228461601UL, 5160254UL, +528751585UL, 1339513738UL, 447593731UL, 2852356745UL, 3033397497UL, 4025362081UL, 808657962UL, 2422880287UL, 3287655095UL, 3191593886UL, 2682225618UL, 353395922UL, 3577556262UL, 2542841784UL, 1185107868UL, 3979211244UL, 3505184848UL, 3945044582UL, 2905156498UL, 3030493909UL, 1841224078UL, 2036999647UL, 1369090013UL, 4246605417UL, 3054343366UL, 607843308UL, 3999302048UL, 2761563885UL, 3611911899UL, 3912854189UL, 1241524975UL, 3152482044UL, +3040022505UL, 3215633820UL, 55140065UL, 420486142UL, 1314806730UL, 932941454UL, 2708752494UL, 1055315026UL, 2231505736UL, 1493892363UL, 2539517630UL, 962728637UL, 4174985470UL, 2351652097UL, 4009448584UL, 530945117UL, 3370859357UL, 2168411768UL, 1683392491UL, 3550192264UL, 1279873435UL, 3028448904UL, 1875092822UL, 4036312766UL, 619869608UL, 4260458157UL, 199178828UL, 98823023UL, 1686790154UL, 3787481606UL, 508630251UL, 4205010983UL, +2636025017UL, 1745325013UL, 3506428315UL, 1279341556UL, 683127445UL, 978338993UL, 3066312306UL, 3113171268UL, 798494760UL, 2823693013UL, 2712384846UL, 3871822467UL, 2312811213UL, 992326282UL, 3701928286UL, 66982935UL, 3681154045UL, 144093UL, 1937589359UL, 1117717039UL, 3390191329UL, 2361898985UL, 3592151118UL, 3846596932UL, 1072660054UL, 1857959320UL, 2866279694UL, 1707163456UL, 4020906747UL, 2503116219UL, 913091437UL, 3044280908UL, +3877442490UL, 2453788473UL, 1815274499UL, 4254455215UL, 2049617934UL, 1937459187UL, 361099994UL, 3771108073UL, 2914687409UL, 934740227UL, 2684702277UL, 2880928862UL, 3591322975UL, 1515195925UL, 1814569183UL, 130421713UL, 2658878825UL, 354587729UL, 2753417020UL, 1784679035UL, 3774861000UL, 1894712110UL, 1799044969UL, 287161774UL, 283642947UL, 3389730171UL, 3878969250UL, 1229815186UL, 3057929912UL, 3698217362UL, 2146946013UL, 497511195UL, +3121882901UL, 426537369UL, 3852284416UL, 4050544256UL, 3148944089UL, 878474231UL, 1369575859UL, 2206199765UL, 870626886UL, 494668165UL, 613011290UL, 3246772867UL, 1040178461UL, 2396959353UL, 2105449571UL, 456758967UL, 4134137960UL, 3525051481UL, 3633445497UL, 2895048060UL, 2008411846UL, 2194012253UL, 2326112129UL, 2956901044UL, 2297039362UL, 3400824024UL, 42139718UL, 4212208866UL, 3874761488UL, 2361955811UL, 1890446075UL, 864533345UL, +474524842UL, 2283847731UL, 283971243UL, 3607219686UL, 280870706UL, 4188549522UL, 659660119UL, 2460943922UL, 4252134362UL, 922033031UL, 3615474721UL, 1691563300UL, 3002653770UL, 2414043617UL, 2251931324UL, 752654714UL, 4188343161UL, 305594960UL, 1320443323UL, 797027061UL, 2347530104UL, 3608843538UL, 2717312892UL, 1841295453UL, 1574467161UL, 823626340UL, 2244853583UL, 2648217758UL, 141742826UL, 1605436472UL, 745763543UL, 3275460028UL, +3166960370UL, 2655678693UL, 3964037210UL, 945054703UL, 998173049UL, 1014527437UL, 3424443612UL, 281835352UL, 826817508UL, 260462513UL, 2849967970UL, 3447294061UL, 3670173947UL, 2430650055UL, 4134905457UL, 3798172627UL, 2156572681UL, 2600148034UL, 2773013892UL, 3290397106UL, 1740507705UL, 3450254627UL, 3613087060UL, 440045928UL, 1230555006UL, 980805434UL, 2107958250UL, 526555374UL, 3150741277UL, 4283672024UL, 193019043UL, 786035243UL, +3002832578UL, 3938336183UL, 4209865002UL, 1005950967UL, 3533346582UL, 3196886974UL, 83962845UL, 1882902787UL, 3595687446UL, 2927597311UL, 2728550762UL, 2750900392UL, 1474254316UL, 1509832112UL, 1763262792UL, 2706181276UL, 538294991UL, 353565565UL, 18133995UL, 1719731406UL, 3311085516UL, 2018821960UL, 300367686UL, 2628312935UL, 1151449661UL, 2178805970UL, 3288321196UL, 535051857UL, 1623270973UL, 2761151808UL, 2701048972UL, 317681607UL, +2281427601UL, 719748170UL, 351452298UL, 2191958596UL, 4000232015UL, 335837771UL, 4158081521UL, 3779404077UL, 1998444133UL, 3849605095UL, 1532231791UL, 2930266419UL, 4203951289UL, 748423654UL, 1993082867UL, 451159852UL, 488781053UL, 2438982775UL, 2222815270UL, 543209242UL, 1241562465UL, 2868868009UL, 4201052877UL, 2438841764UL, 2151708682UL, 2426958921UL, 1520654642UL, 1990098337UL, 1070792755UL, 2308394635UL, 1442389785UL, 705615044UL, +}, +{ +973368008UL, 1221885324UL, 2086331970UL, 2323744198UL, 280145759UL, 1795442656UL, 2984366093UL, 3532172763UL, 323888669UL, 851950179UL, 4198638255UL, 899943985UL, 4087912561UL, 2935341503UL, 1443752852UL, 3991058999UL, 3547259355UL, 35779889UL, 1076308344UL, 4075444807UL, 186174448UL, 3542284780UL, 660388677UL, 2777400132UL, 1092226205UL, 2418702276UL, 1307933032UL, 1940510003UL, 1932005362UL, 4016036211UL, 387339882UL, 2969593895UL, +3453134349UL, 1382709098UL, 1795814140UL, 1588159469UL, 1216733801UL, 2227378121UL, 2063027627UL, 582454582UL, 3364657275UL, 3466973302UL, 484564303UL, 1489261596UL, 2270291560UL, 2008178784UL, 2284268924UL, 2229317366UL, 644797709UL, 1213921542UL, 99331403UL, 3027640949UL, 1137722852UL, 2991506109UL, 1432805987UL, 931795812UL, 1075567424UL, 28963219UL, 1462245461UL, 3781444706UL, 521233400UL, 1891915904UL, 3774338085UL, 1635359313UL, +2356111795UL, 4121073768UL, 1045110727UL, 2822507066UL, 1087914587UL, 3744509525UL, 911370656UL, 181884066UL, 1944539735UL, 290356444UL, 3598887471UL, 4236934380UL, 3224468239UL, 457546246UL, 4119337570UL, 37700432UL, 655783844UL, 1423101410UL, 1693002969UL, 3287768267UL, 928748421UL, 4074128009UL, 3081088543UL, 2882833790UL, 3180154875UL, 1094657682UL, 2388253717UL, 4173455215UL, 794709427UL, 3363292346UL, 67786868UL, 3786597763UL, +380587236UL, 2345941620UL, 560232318UL, 2137123833UL, 619747082UL, 1050293267UL, 2537845069UL, 1407302835UL, 433399526UL, 1083185007UL, 1893842085UL, 3711748584UL, 4225838280UL, 3863317129UL, 2043467942UL, 2799650657UL, 3590486611UL, 1231938950UL, 215905995UL, 155811669UL, 806806587UL, 2732631168UL, 1621659281UL, 632403616UL, 401165422UL, 2661074778UL, 4156963191UL, 3691812937UL, 3767271627UL, 2834948318UL, 2877210497UL, 2420260153UL, +733172233UL, 1771708940UL, 3102718549UL, 2468707423UL, 1857088312UL, 3176535032UL, 1908570295UL, 3966666208UL, 605079895UL, 2982506620UL, 3721694730UL, 1640691570UL, 3764975545UL, 3257514114UL, 1826578604UL, 1358557411UL, 4049610348UL, 615820785UL, 3355718142UL, 1734641780UL, 2958744617UL, 274522187UL, 3198436002UL, 4077346785UL, 2890101344UL, 4012464346UL, 1288365365UL, 96583076UL, 2656389382UL, 1858181040UL, 2717010340UL, 2032153178UL, +349324012UL, 973368008UL, 1221885324UL, 2086331970UL, 2323744198UL, 253685576UL, 1795442656UL, 2984366093UL, 3532172763UL, 323888669UL, 248935329UL, 4198638255UL, 899943985UL, 4087912561UL, 2935341503UL, 3213394756UL, 3991058999UL, 3547259355UL, 35779889UL, 1076308344UL, 1987715385UL, 186174448UL, 3542284780UL, 660388677UL, 2777400132UL, 2071022105UL, 2418702276UL, 1307933032UL, 1940510003UL, 1932005362UL, 144370664UL, 387339882UL, +2969593895UL, 3453134349UL, 1382709098UL, 2394736611UL, 1588159469UL, 1216733801UL, 2227378121UL, 2063027627UL, 4064263898UL, 3364657275UL, 3466973302UL, 484564303UL, 1489261596UL, 3405101812UL, 2008178784UL, 2284268924UL, 2229317366UL, 644797709UL, 2560273821UL, 99331403UL, 3027640949UL, 1137722852UL, 2991506109UL, 1446442417UL, 931795812UL, 1075567424UL, 28963219UL, 1462245461UL, 1201513613UL, 521233400UL, 1891915904UL, 3774338085UL, +1635359313UL, 2815447944UL, 4121073768UL, 1045110727UL, 2822507066UL, 1087914587UL, 2485035329UL, 911370656UL, 181884066UL, 1944539735UL, 290356444UL, 2078819341UL, 4236934380UL, 3224468239UL, 457546246UL, 4119337570UL, 2666895496UL, 655783844UL, 1423101410UL, 1693002969UL, 3287768267UL, 3595439673UL, 4074128009UL, 3081088543UL, 2882833790UL, 3180154875UL, 872453917UL, 2388253717UL, 4173455215UL, 794709427UL, 3363292346UL, 4188764388UL, +3786597763UL, 380587236UL, 2345941620UL, 560232318UL, 625538006UL, 619747082UL, 1050293267UL, 2537845069UL, 1407302835UL, 2128289331UL, 1083185007UL, 1893842085UL, 3711748584UL, 4225838280UL, 2486133065UL, 2043467942UL, 2799650657UL, 3590486611UL, 1231938950UL, 928582681UL, 155811669UL, 806806587UL, 2732631168UL, 1621659281UL, 1163969880UL, 401165422UL, 2661074778UL, 4156963191UL, 3691812937UL, 2322579561UL, 2834948318UL, 2877210497UL, +2420260153UL, 733172233UL, 170239236UL, 3102718549UL, 2468707423UL, 1857088312UL, 3176535032UL, 3868693408UL, 3966666208UL, 605079895UL, 2982506620UL, 3721694730UL, 2066859537UL, 3764975545UL, 3257514114UL, 1826578604UL, 1358557411UL, 2964604045UL, 615820785UL, 3355718142UL, 1734641780UL, 2958744617UL, 4091225681UL, 3198436002UL, 4077346785UL, 2890101344UL, 4012464346UL, 2612861218UL, 96583076UL, 2656389382UL, 1858181040UL, 2717010340UL, +3639170895UL, 349324012UL, 973368008UL, 1221885324UL, 2086331970UL, 2258432445UL, 253685576UL, 1795442656UL, 2984366093UL, 3532172763UL, 3831166882UL, 248935329UL, 4198638255UL, 899943985UL, 4087912561UL, 715173523UL, 3213394756UL, 3991058999UL, 3547259355UL, 35779889UL, 2393072396UL, 1987715385UL, 186174448UL, 3542284780UL, 660388677UL, 3731857267UL, 2071022105UL, 2418702276UL, 1307933032UL, 1940510003UL, 4262274779UL, 144370664UL, +387339882UL, 2969593895UL, 3453134349UL, 1923698215UL, 2394736611UL, 1588159469UL, 1216733801UL, 2227378121UL, 2907069566UL, 4064263898UL, 3364657275UL, 3466973302UL, 484564303UL, 2234542580UL, 3405101812UL, 2008178784UL, 2284268924UL, 2229317366UL, 1349323372UL, 2560273821UL, 99331403UL, 3027640949UL, 1137722852UL, 4200786664UL, 1446442417UL, 931795812UL, 1075567424UL, 28963219UL, 1659632304UL, 1201513613UL, 521233400UL, 1891915904UL, +3774338085UL, 763590809UL, 2815447944UL, 4121073768UL, 1045110727UL, 2822507066UL, 4131040734UL, 2485035329UL, 911370656UL, 181884066UL, 1944539735UL, 4104473807UL, 2078819341UL, 4236934380UL, 3224468239UL, 457546246UL, 1241850776UL, 2666895496UL, 655783844UL, 1423101410UL, 1693002969UL, 2025898966UL, 3595439673UL, 4074128009UL, 3081088543UL, 2882833790UL, 218474476UL, 872453917UL, 2388253717UL, 4173455215UL, 794709427UL, 250328312UL, +4188764388UL, 3786597763UL, 380587236UL, 2345941620UL, 1937652040UL, 625538006UL, 619747082UL, 1050293267UL, 2537845069UL, 1140055765UL, 2128289331UL, 1083185007UL, 1893842085UL, 3711748584UL, 2298055548UL, 2486133065UL, 2043467942UL, 2799650657UL, 3590486611UL, 1235949580UL, 928582681UL, 155811669UL, 806806587UL, 2732631168UL, 4046198728UL, 1163969880UL, 401165422UL, 2661074778UL, 4156963191UL, 2003518762UL, 2322579561UL, 2834948318UL, +2877210497UL, 2420260153UL, 326741418UL, 170239236UL, 3102718549UL, 2468707423UL, 1857088312UL, 3936056808UL, 3868693408UL, 3966666208UL, 605079895UL, 2982506620UL, 2354705582UL, 2066859537UL, 3764975545UL, 3257514114UL, 1826578604UL, 3017501686UL, 2964604045UL, 615820785UL, 3355718142UL, 1734641780UL, 1681548103UL, 4091225681UL, 3198436002UL, 4077346785UL, 2890101344UL, 416470693UL, 2612861218UL, 96583076UL, 2656389382UL, 1858181040UL, +3104217288UL, 3639170895UL, 349324012UL, 973368008UL, 1221885324UL, 601524567UL, 2258432445UL, 253685576UL, 1795442656UL, 2984366093UL, 1875491903UL, 3831166882UL, 248935329UL, 4198638255UL, 899943985UL, 2182697927UL, 715173523UL, 3213394756UL, 3991058999UL, 3547259355UL, 1472237612UL, 2393072396UL, 1987715385UL, 186174448UL, 3542284780UL, 2160848139UL, 3731857267UL, 2071022105UL, 2418702276UL, 1307933032UL, 3815354311UL, 4262274779UL, +144370664UL, 387339882UL, 2969593895UL, 4240850623UL, 1923698215UL, 2394736611UL, 1588159469UL, 1216733801UL, 322523795UL, 2907069566UL, 4064263898UL, 3364657275UL, 3466973302UL, 2920715858UL, 2234542580UL, 3405101812UL, 2008178784UL, 2284268924UL, 1936025139UL, 1349323372UL, 2560273821UL, 99331403UL, 3027640949UL, 859541953UL, 4200786664UL, 1446442417UL, 931795812UL, 1075567424UL, 1876635772UL, 1659632304UL, 1201513613UL, 521233400UL, +1891915904UL, 3949233865UL, 763590809UL, 2815447944UL, 4121073768UL, 1045110727UL, 2522258582UL, 4131040734UL, 2485035329UL, 911370656UL, 181884066UL, 2467886009UL, 4104473807UL, 2078819341UL, 4236934380UL, 3224468239UL, 603014155UL, 1241850776UL, 2666895496UL, 655783844UL, 1423101410UL, 673119756UL, 2025898966UL, 3595439673UL, 4074128009UL, 3081088543UL, 4100445818UL, 218474476UL, 872453917UL, 2388253717UL, 4173455215UL, 2395519424UL, +250328312UL, 4188764388UL, 3786597763UL, 380587236UL, 4292608797UL, 1937652040UL, 625538006UL, 619747082UL, 1050293267UL, 2989616803UL, 1140055765UL, 2128289331UL, 1083185007UL, 1893842085UL, 3313934002UL, 2298055548UL, 2486133065UL, 2043467942UL, 2799650657UL, 1804808801UL, 1235949580UL, 928582681UL, 155811669UL, 806806587UL, 2864892828UL, 4046198728UL, 1163969880UL, 401165422UL, 2661074778UL, 2946769376UL, 2003518762UL, 2322579561UL, +2834948318UL, 2877210497UL, 2647485275UL, 326741418UL, 170239236UL, 3102718549UL, 2468707423UL, 2520336801UL, 3936056808UL, 3868693408UL, 3966666208UL, 605079895UL, 2949706551UL, 2354705582UL, 2066859537UL, 3764975545UL, 3257514114UL, 495003693UL, 3017501686UL, 2964604045UL, 615820785UL, 3355718142UL, 3799230297UL, 1681548103UL, 4091225681UL, 3198436002UL, 4077346785UL, 258363842UL, 416470693UL, 2612861218UL, 96583076UL, 2656389382UL, +2198085634UL, 1607235362UL, 694172175UL, 4194347563UL, 2665732891UL, 3419430286UL, 597070176UL, 2749480905UL, 3937535348UL, 3639873850UL, 2050067843UL, 4045290683UL, 2964298196UL, 3631595287UL, 1409808193UL, 121765438UL, 2129412744UL, 2497437101UL, 2664102876UL, 1773441464UL, 1708052456UL, 2923764322UL, 3350385352UL, 1592204280UL, 1118221370UL, 3416016313UL, 116121364UL, 1179473397UL, 1497519022UL, 902569114UL, 3840281863UL, 2783662797UL, +1712084322UL, 1982884601UL, 3625797892UL, 4222938993UL, 3231134134UL, 3046745397UL, 446484563UL, 1133869192UL, 2622178726UL, 3881085862UL, 4012894217UL, 391734322UL, 2089696890UL, 1304197030UL, 2663978386UL, 1685998658UL, 4238620912UL, 448351665UL, 2724524045UL, 1038754164UL, 413586547UL, 3107681687UL, 1454664365UL, 3353731192UL, 128440996UL, 565817989UL, 127978294UL, 1043863326UL, 1747369107UL, 2772246481UL, 172569313UL, 2740699699UL, +3417082503UL, 2103702630UL, 2139566116UL, 1378864710UL, 2444170529UL, 3234220221UL, 3974870858UL, 1965162347UL, 956763257UL, 3932467825UL, 1077337271UL, 4084837149UL, 3699147465UL, 1882164226UL, 236113740UL, 3116302858UL, 2730529598UL, 3449804672UL, 4002370655UL, 2011573068UL, 1551746089UL, 3917496971UL, 2852603UL, 1682999535UL, 2764817908UL, 2489487254UL, 261936311UL, 3122421452UL, 1199382345UL, 2617247590UL, 1909026938UL, 3156073069UL, +1492533764UL, 97847107UL, 1260892586UL, 187242945UL, 1286471861UL, 1763024967UL, 127723419UL, 210606273UL, 228546401UL, 3249879676UL, 482069954UL, 383075106UL, 3263105259UL, 2242748676UL, 1105681409UL, 4033144425UL, 4017983282UL, 1670425353UL, 4040882785UL, 1780687273UL, 1405678015UL, 3076115981UL, 2713472488UL, 286336494UL, 3664225263UL, 502759060UL, 777620620UL, 635590826UL, 132236203UL, 1866406173UL, 1235046453UL, 2859554298UL, +121814656UL, 944976320UL, 1946494170UL, 2548097575UL, 415384946UL, 3934685646UL, 1507032178UL, 1383654007UL, 2906269630UL, 566005756UL, 3118733139UL, 2969075870UL, 1834096359UL, 3263358416UL, 1322979710UL, 904583023UL, 3582075094UL, 2298898632UL, 2491891941UL, 660351763UL, 2548592542UL, 3009200751UL, 2116595110UL, 2623212287UL, 4167133624UL, 196759529UL, 3038645579UL, 1769704552UL, 1713233322UL, 2127497999UL, 3849458221UL, 3769872265UL, +}, +{ +51082211UL, 3347503176UL, 3221768777UL, 2986163981UL, 3937460013UL, 1716372908UL, 4132024211UL, 3035957293UL, 1791036224UL, 4214815056UL, 1645540011UL, 2629793790UL, 3185505897UL, 1855718954UL, 495459467UL, 1728339314UL, 2318396341UL, 3396602050UL, 3273624616UL, 2625973148UL, 1762905939UL, 1706358553UL, 1088424264UL, 2764318930UL, 1026127380UL, 1128004134UL, 2724553694UL, 41981087UL, 2304966004UL, 1342745986UL, 3425554050UL, 3537673465UL, +752263676UL, 280905885UL, 929399589UL, 4090689526UL, 2141254732UL, 1469491656UL, 2593100469UL, 1096008340UL, 3316809312UL, 1698245188UL, 1656427920UL, 3081873338UL, 1750515301UL, 3850483440UL, 4081834419UL, 1225164947UL, 1244139942UL, 1972663124UL, 116832506UL, 3097397897UL, 961156503UL, 1899056660UL, 1659173175UL, 1890464921UL, 1891872926UL, 191259956UL, 1735304734UL, 4246751855UL, 4285601625UL, 1495519933UL, 3398829761UL, 997567482UL, +2277782972UL, 1286922996UL, 3120709698UL, 15569196UL, 191501283UL, 3916619528UL, 1552075789UL, 4259725643UL, 2837166910UL, 2231584792UL, 1912204495UL, 2597304083UL, 4147585653UL, 1021482843UL, 2003417305UL, 186794491UL, 3608172979UL, 1991038123UL, 97515853UL, 34341352UL, 4163491231UL, 1046079304UL, 4105813389UL, 3589099183UL, 3970004064UL, 3899560802UL, 4148331147UL, 2267137817UL, 85024486UL, 3019925981UL, 3069231953UL, 1563669137UL, +314080592UL, 2943111861UL, 2838243982UL, 726216848UL, 2621853102UL, 2355885175UL, 3359668856UL, 1111296541UL, 2330283124UL, 3626558972UL, 4290084148UL, 1632078UL, 1047440803UL, 1350377197UL, 2490578842UL, 2366345698UL, 1628128899UL, 860259543UL, 1937956234UL, 2833820527UL, 329818923UL, 648489148UL, 1791961202UL, 1652322723UL, 1513419073UL, 149629345UL, 2468961221UL, 3711837973UL, 2377333831UL, 1434755773UL, 3808719305UL, 2513270108UL, +2701064683UL, 3097011724UL, 303393137UL, 1346302239UL, 1852307302UL, 850106025UL, 2473124483UL, 2853497268UL, 3786573704UL, 2604101162UL, 1446573486UL, 506925220UL, 3138967488UL, 2973528682UL, 2752811123UL, 2890321579UL, 1037196362UL, 1335670403UL, 1560253777UL, 1437495434UL, 2700525242UL, 4259933972UL, 3870707795UL, 4141538580UL, 3375331039UL, 3081538601UL, 3129978494UL, 3689191993UL, 1933431212UL, 2196145886UL, 87814045UL, 878611347UL, +812542698UL, 51082211UL, 3347503176UL, 3221768777UL, 2986163981UL, 277257023UL, 1716372908UL, 4132024211UL, 3035957293UL, 1791036224UL, 2713916211UL, 1645540011UL, 2629793790UL, 3185505897UL, 1855718954UL, 3800150234UL, 1728339314UL, 2318396341UL, 3396602050UL, 3273624616UL, 2530282967UL, 1762905939UL, 1706358553UL, 1088424264UL, 2764318930UL, 4224669506UL, 1128004134UL, 2724553694UL, 41981087UL, 2304966004UL, 484289311UL, 3425554050UL, +3537673465UL, 752263676UL, 280905885UL, 657028134UL, 4090689526UL, 2141254732UL, 1469491656UL, 2593100469UL, 2089385540UL, 3316809312UL, 1698245188UL, 1656427920UL, 3081873338UL, 2750354264UL, 3850483440UL, 4081834419UL, 1225164947UL, 1244139942UL, 3432605739UL, 116832506UL, 3097397897UL, 961156503UL, 1899056660UL, 2234120716UL, 1890464921UL, 1891872926UL, 191259956UL, 1735304734UL, 125359575UL, 4285601625UL, 1495519933UL, 3398829761UL, +997567482UL, 4034254942UL, 1286922996UL, 3120709698UL, 15569196UL, 191501283UL, 2090684174UL, 1552075789UL, 4259725643UL, 2837166910UL, 2231584792UL, 3412758413UL, 2597304083UL, 4147585653UL, 1021482843UL, 2003417305UL, 2464533361UL, 3608172979UL, 1991038123UL, 97515853UL, 34341352UL, 2634732952UL, 1046079304UL, 4105813389UL, 3589099183UL, 3970004064UL, 4263828421UL, 4148331147UL, 2267137817UL, 85024486UL, 3019925981UL, 3229477751UL, +1563669137UL, 314080592UL, 2943111861UL, 2838243982UL, 1274664774UL, 2621853102UL, 2355885175UL, 3359668856UL, 1111296541UL, 1615234696UL, 3626558972UL, 4290084148UL, 1632078UL, 1047440803UL, 623898652UL, 2490578842UL, 2366345698UL, 1628128899UL, 860259543UL, 2097114662UL, 2833820527UL, 329818923UL, 648489148UL, 1791961202UL, 1730000077UL, 1513419073UL, 149629345UL, 2468961221UL, 3711837973UL, 3255238414UL, 1434755773UL, 3808719305UL, +2513270108UL, 2701064683UL, 1635042488UL, 303393137UL, 1346302239UL, 1852307302UL, 850106025UL, 3523245944UL, 2853497268UL, 3786573704UL, 2604101162UL, 1446573486UL, 1011238489UL, 3138967488UL, 2973528682UL, 2752811123UL, 2890321579UL, 1044586909UL, 1335670403UL, 1560253777UL, 1437495434UL, 2700525242UL, 608940900UL, 3870707795UL, 4141538580UL, 3375331039UL, 3081538601UL, 728626935UL, 3689191993UL, 1933431212UL, 2196145886UL, 87814045UL, +646732047UL, 812542698UL, 51082211UL, 3347503176UL, 3221768777UL, 1783601443UL, 277257023UL, 1716372908UL, 4132024211UL, 3035957293UL, 3363442238UL, 2713916211UL, 1645540011UL, 2629793790UL, 3185505897UL, 2066587565UL, 3800150234UL, 1728339314UL, 2318396341UL, 3396602050UL, 2279941522UL, 2530282967UL, 1762905939UL, 1706358553UL, 1088424264UL, 2989326347UL, 4224669506UL, 1128004134UL, 2724553694UL, 41981087UL, 2348931916UL, 484289311UL, +3425554050UL, 3537673465UL, 752263676UL, 3169550883UL, 657028134UL, 4090689526UL, 2141254732UL, 1469491656UL, 1152943917UL, 2089385540UL, 3316809312UL, 1698245188UL, 1656427920UL, 1808689833UL, 2750354264UL, 3850483440UL, 4081834419UL, 1225164947UL, 2422106046UL, 3432605739UL, 116832506UL, 3097397897UL, 961156503UL, 1581804167UL, 2234120716UL, 1890464921UL, 1891872926UL, 191259956UL, 4113708001UL, 125359575UL, 4285601625UL, 1495519933UL, +3398829761UL, 3473435310UL, 4034254942UL, 1286922996UL, 3120709698UL, 15569196UL, 3122200488UL, 2090684174UL, 1552075789UL, 4259725643UL, 2837166910UL, 2838170407UL, 3412758413UL, 2597304083UL, 4147585653UL, 1021482843UL, 954000150UL, 2464533361UL, 3608172979UL, 1991038123UL, 97515853UL, 3832321348UL, 2634732952UL, 1046079304UL, 4105813389UL, 3589099183UL, 1288675572UL, 4263828421UL, 4148331147UL, 2267137817UL, 85024486UL, 1080403742UL, +3229477751UL, 1563669137UL, 314080592UL, 2943111861UL, 3357655593UL, 1274664774UL, 2621853102UL, 2355885175UL, 3359668856UL, 3722440291UL, 1615234696UL, 3626558972UL, 4290084148UL, 1632078UL, 4263556325UL, 623898652UL, 2490578842UL, 2366345698UL, 1628128899UL, 3623136669UL, 2097114662UL, 2833820527UL, 329818923UL, 648489148UL, 592747007UL, 1730000077UL, 1513419073UL, 149629345UL, 2468961221UL, 3766709284UL, 3255238414UL, 1434755773UL, +3808719305UL, 2513270108UL, 1958651003UL, 1635042488UL, 303393137UL, 1346302239UL, 1852307302UL, 579487408UL, 3523245944UL, 2853497268UL, 3786573704UL, 2604101162UL, 4183724981UL, 1011238489UL, 3138967488UL, 2973528682UL, 2752811123UL, 3074709397UL, 1044586909UL, 1335670403UL, 1560253777UL, 1437495434UL, 1237099522UL, 608940900UL, 3870707795UL, 4141538580UL, 3375331039UL, 2032507604UL, 728626935UL, 3689191993UL, 1933431212UL, 2196145886UL, +4008131891UL, 646732047UL, 812542698UL, 51082211UL, 3347503176UL, 3622107037UL, 1783601443UL, 277257023UL, 1716372908UL, 4132024211UL, 1264285659UL, 3363442238UL, 2713916211UL, 1645540011UL, 2629793790UL, 2179309595UL, 2066587565UL, 3800150234UL, 1728339314UL, 2318396341UL, 580990822UL, 2279941522UL, 2530282967UL, 1762905939UL, 1706358553UL, 2826056883UL, 2989326347UL, 4224669506UL, 1128004134UL, 2724553694UL, 1486392636UL, 2348931916UL, +484289311UL, 3425554050UL, 3537673465UL, 2497657189UL, 3169550883UL, 657028134UL, 4090689526UL, 2141254732UL, 1019244016UL, 1152943917UL, 2089385540UL, 3316809312UL, 1698245188UL, 2921739456UL, 1808689833UL, 2750354264UL, 3850483440UL, 4081834419UL, 108425527UL, 2422106046UL, 3432605739UL, 116832506UL, 3097397897UL, 3902994002UL, 1581804167UL, 2234120716UL, 1890464921UL, 1891872926UL, 3428861050UL, 4113708001UL, 125359575UL, 4285601625UL, +1495519933UL, 3350053832UL, 3473435310UL, 4034254942UL, 1286922996UL, 3120709698UL, 2906201347UL, 3122200488UL, 2090684174UL, 1552075789UL, 4259725643UL, 1965598685UL, 2838170407UL, 3412758413UL, 2597304083UL, 4147585653UL, 3335631208UL, 954000150UL, 2464533361UL, 3608172979UL, 1991038123UL, 3788034599UL, 3832321348UL, 2634732952UL, 1046079304UL, 4105813389UL, 2362460804UL, 1288675572UL, 4263828421UL, 4148331147UL, 2267137817UL, 2767331798UL, +1080403742UL, 3229477751UL, 1563669137UL, 314080592UL, 1737897403UL, 3357655593UL, 1274664774UL, 2621853102UL, 2355885175UL, 57997639UL, 3722440291UL, 1615234696UL, 3626558972UL, 4290084148UL, 3703113369UL, 4263556325UL, 623898652UL, 2490578842UL, 2366345698UL, 73788443UL, 3623136669UL, 2097114662UL, 2833820527UL, 329818923UL, 253042650UL, 592747007UL, 1730000077UL, 1513419073UL, 149629345UL, 4248302934UL, 3766709284UL, 3255238414UL, +1434755773UL, 3808719305UL, 3698431827UL, 1958651003UL, 1635042488UL, 303393137UL, 1346302239UL, 3872433842UL, 579487408UL, 3523245944UL, 2853497268UL, 3786573704UL, 3459185849UL, 4183724981UL, 1011238489UL, 3138967488UL, 2973528682UL, 2605373899UL, 3074709397UL, 1044586909UL, 1335670403UL, 1560253777UL, 4069724875UL, 1237099522UL, 608940900UL, 3870707795UL, 4141538580UL, 2550307954UL, 2032507604UL, 728626935UL, 3689191993UL, 1933431212UL, +1177640824UL, 4168589688UL, 1361487780UL, 2649612520UL, 2181448948UL, 2176288560UL, 947907377UL, 3772487849UL, 2002599877UL, 3353450532UL, 2013145251UL, 2357912348UL, 2316997609UL, 2355480213UL, 255142205UL, 751273749UL, 4049362748UL, 1434168014UL, 2069693747UL, 6910933UL, 1352778547UL, 2413649875UL, 4238683558UL, 484497407UL, 522555106UL, 1848417180UL, 3001805499UL, 2264939603UL, 3606143565UL, 1782482647UL, 2955918436UL, 3471474379UL, +2814133839UL, 3779337475UL, 3522102195UL, 1551792178UL, 3742001759UL, 3433504551UL, 472918932UL, 3835854229UL, 4259163014UL, 4103952359UL, 1989474190UL, 1792448078UL, 1517735224UL, 1958036884UL, 2277922531UL, 2856192348UL, 4294188732UL, 2674247971UL, 643649427UL, 3847742408UL, 1512435795UL, 4236693554UL, 1749045838UL, 397093640UL, 2940663643UL, 4156440725UL, 188785143UL, 3894740830UL, 897618321UL, 3333498692UL, 1623924612UL, 4111607062UL, +2242558573UL, 1565861815UL, 1177957654UL, 4129621176UL, 2232443247UL, 3216995984UL, 3313294700UL, 791442469UL, 1782204490UL, 2452634246UL, 1288014576UL, 1347365377UL, 112254281UL, 2044140398UL, 2479591984UL, 3293701920UL, 1062335151UL, 1397230369UL, 2460086085UL, 2412349474UL, 1252633202UL, 3704541545UL, 2132499200UL, 2202058121UL, 1981543691UL, 2683673516UL, 1198109770UL, 4279157703UL, 2224504258UL, 2188868731UL, 769314834UL, 601313429UL, +3595357440UL, 561383123UL, 3444949507UL, 2127327734UL, 2865252582UL, 4181002098UL, 2408426518UL, 309361635UL, 2377703815UL, 1109219406UL, 406287309UL, 1750179098UL, 3619129839UL, 937928728UL, 884423945UL, 928407281UL, 4173634172UL, 1492070114UL, 2706943441UL, 1365883971UL, 3076484301UL, 744370087UL, 4004118884UL, 2199449568UL, 879458863UL, 3197725005UL, 3590586547UL, 59693002UL, 3614114662UL, 1499386564UL, 2914582708UL, 3751842429UL, +947438603UL, 1986129491UL, 3747112289UL, 833777768UL, 2231649410UL, 1841607849UL, 3526253103UL, 3797105813UL, 1291185911UL, 3188408549UL, 3311027691UL, 3983681758UL, 2246511800UL, 1271525377UL, 2996265908UL, 2396071405UL, 902427181UL, 164636454UL, 2459631341UL, 635349368UL, 463309029UL, 1409367654UL, 849052250UL, 3221786769UL, 2310288531UL, 2919204855UL, 1263130532UL, 1215722704UL, 3497322658UL, 2840687222UL, 2185004161UL, 1507335864UL, +}, +{ +2052557448UL, 2879065999UL, 22933757UL, 2160014758UL, 3736092460UL, 3556641619UL, 1350613766UL, 2107757927UL, 309323868UL, 3452852627UL, 3424626316UL, 545651740UL, 1935764720UL, 2349926457UL, 3546577033UL, 862046434UL, 167198649UL, 338290297UL, 1145807303UL, 1571276102UL, 883549156UL, 907871968UL, 638566313UL, 678764227UL, 3795356864UL, 3306095271UL, 1452688488UL, 621126888UL, 1838613968UL, 2054107827UL, 1785040579UL, 454879400UL, +1952849106UL, 1907701866UL, 1639495252UL, 1623968604UL, 2997422000UL, 2633878652UL, 1036670775UL, 2191465943UL, 3053533585UL, 1654709920UL, 1950620393UL, 4177745509UL, 1742007818UL, 2888573892UL, 2825965566UL, 1399790365UL, 1307674482UL, 310692416UL, 384880529UL, 3497622676UL, 1024664651UL, 1541456182UL, 1904670217UL, 1008618602UL, 2816673160UL, 684112698UL, 3332034744UL, 3646613828UL, 962627614UL, 3072103948UL, 3713153075UL, 476323310UL, +3243124597UL, 126319837UL, 2155412848UL, 228580793UL, 2142696490UL, 3442722759UL, 2689599232UL, 426191419UL, 3157759186UL, 100239709UL, 494534049UL, 1259677734UL, 2889209278UL, 1754641396UL, 1057778427UL, 2133253617UL, 1298500018UL, 3340348062UL, 3967049659UL, 2927469144UL, 1503854147UL, 2271956463UL, 3004309866UL, 260248338UL, 2570702480UL, 2067671015UL, 3168497089UL, 361311552UL, 2123195373UL, 2825457193UL, 2599488181UL, 507483626UL, +1201669979UL, 910763802UL, 4158584821UL, 3116016424UL, 3375736126UL, 2857697336UL, 3112473104UL, 2683465481UL, 1495348009UL, 681020485UL, 4044713962UL, 2443109893UL, 129994063UL, 1710251126UL, 820410567UL, 601527649UL, 1007603132UL, 2096580480UL, 1942768885UL, 1984297765UL, 1888157243UL, 960265104UL, 527990410UL, 1572910026UL, 1106822080UL, 1472807331UL, 2465011897UL, 3139401215UL, 3705452371UL, 393081842UL, 3826516196UL, 2576499701UL, +4130037087UL, 4155028170UL, 2188282304UL, 2949056849UL, 1138928618UL, 858751984UL, 3735375571UL, 496972334UL, 830265621UL, 1355757111UL, 909444416UL, 1337622259UL, 2616327935UL, 2337227347UL, 2139876075UL, 4269663356UL, 796316592UL, 1893005585UL, 3958551664UL, 1746456069UL, 2430709714UL, 4025417573UL, 3333292799UL, 1833607331UL, 3864559081UL, 3415700826UL, 3291421244UL, 1987321873UL, 1792851165UL, 505718946UL, 3755903648UL, 3351468604UL, +4035552813UL, 2052557448UL, 2879065999UL, 22933757UL, 2160014758UL, 2321387515UL, 3556641619UL, 1350613766UL, 2107757927UL, 309323868UL, 1850700415UL, 3424626316UL, 545651740UL, 1935764720UL, 2349926457UL, 979047283UL, 862046434UL, 167198649UL, 338290297UL, 1145807303UL, 4201635137UL, 883549156UL, 907871968UL, 638566313UL, 678764227UL, 2637527083UL, 3306095271UL, 1452688488UL, 621126888UL, 1838613968UL, 117966344UL, 1785040579UL, +454879400UL, 1952849106UL, 1907701866UL, 733998186UL, 1623968604UL, 2997422000UL, 2633878652UL, 1036670775UL, 3360491537UL, 3053533585UL, 1654709920UL, 1950620393UL, 4177745509UL, 1716078578UL, 2888573892UL, 2825965566UL, 1399790365UL, 1307674482UL, 2776111761UL, 384880529UL, 3497622676UL, 1024664651UL, 1541456182UL, 618916624UL, 1008618602UL, 2816673160UL, 684112698UL, 3332034744UL, 3340690804UL, 962627614UL, 3072103948UL, 3713153075UL, +476323310UL, 902990902UL, 126319837UL, 2155412848UL, 228580793UL, 2142696490UL, 4254301999UL, 2689599232UL, 426191419UL, 3157759186UL, 100239709UL, 3216403640UL, 1259677734UL, 2889209278UL, 1754641396UL, 1057778427UL, 3221479262UL, 1298500018UL, 3340348062UL, 3967049659UL, 2927469144UL, 3926654939UL, 2271956463UL, 3004309866UL, 260248338UL, 2570702480UL, 1879451653UL, 3168497089UL, 361311552UL, 2123195373UL, 2825457193UL, 341920668UL, +507483626UL, 1201669979UL, 910763802UL, 4158584821UL, 3748705813UL, 3375736126UL, 2857697336UL, 3112473104UL, 2683465481UL, 3336305747UL, 681020485UL, 4044713962UL, 2443109893UL, 129994063UL, 2578353596UL, 820410567UL, 601527649UL, 1007603132UL, 2096580480UL, 3155251071UL, 1984297765UL, 1888157243UL, 960265104UL, 527990410UL, 2548692624UL, 1106822080UL, 1472807331UL, 2465011897UL, 3139401215UL, 736629379UL, 393081842UL, 3826516196UL, +2576499701UL, 4130037087UL, 2440227627UL, 2188282304UL, 2949056849UL, 1138928618UL, 858751984UL, 191805249UL, 496972334UL, 830265621UL, 1355757111UL, 909444416UL, 396738554UL, 2616327935UL, 2337227347UL, 2139876075UL, 4269663356UL, 3932761947UL, 1893005585UL, 3958551664UL, 1746456069UL, 2430709714UL, 3171160829UL, 3333292799UL, 1833607331UL, 3864559081UL, 3415700826UL, 1332800826UL, 1987321873UL, 1792851165UL, 505718946UL, 3755903648UL, +1770588062UL, 4035552813UL, 2052557448UL, 2879065999UL, 22933757UL, 3159941473UL, 2321387515UL, 3556641619UL, 1350613766UL, 2107757927UL, 2669366188UL, 1850700415UL, 3424626316UL, 545651740UL, 1935764720UL, 3252475208UL, 979047283UL, 862046434UL, 167198649UL, 338290297UL, 771814471UL, 4201635137UL, 883549156UL, 907871968UL, 638566313UL, 184144160UL, 2637527083UL, 3306095271UL, 1452688488UL, 621126888UL, 4275587594UL, 117966344UL, +1785040579UL, 454879400UL, 1952849106UL, 3806424990UL, 733998186UL, 1623968604UL, 2997422000UL, 2633878652UL, 2670843077UL, 3360491537UL, 3053533585UL, 1654709920UL, 1950620393UL, 3541927406UL, 1716078578UL, 2888573892UL, 2825965566UL, 1399790365UL, 3184295779UL, 2776111761UL, 384880529UL, 3497622676UL, 1024664651UL, 723804135UL, 618916624UL, 1008618602UL, 2816673160UL, 684112698UL, 3275521308UL, 3340690804UL, 962627614UL, 3072103948UL, +3713153075UL, 2023106558UL, 902990902UL, 126319837UL, 2155412848UL, 228580793UL, 3978575748UL, 4254301999UL, 2689599232UL, 426191419UL, 3157759186UL, 2446138116UL, 3216403640UL, 1259677734UL, 2889209278UL, 1754641396UL, 1706032491UL, 3221479262UL, 1298500018UL, 3340348062UL, 3967049659UL, 3805001240UL, 3926654939UL, 2271956463UL, 3004309866UL, 260248338UL, 294480880UL, 1879451653UL, 3168497089UL, 361311552UL, 2123195373UL, 2080604411UL, +341920668UL, 507483626UL, 1201669979UL, 910763802UL, 2012149356UL, 3748705813UL, 3375736126UL, 2857697336UL, 3112473104UL, 2935748807UL, 3336305747UL, 681020485UL, 4044713962UL, 2443109893UL, 2862982895UL, 2578353596UL, 820410567UL, 601527649UL, 1007603132UL, 1890290066UL, 3155251071UL, 1984297765UL, 1888157243UL, 960265104UL, 41870487UL, 2548692624UL, 1106822080UL, 1472807331UL, 2465011897UL, 2382974023UL, 736629379UL, 393081842UL, +3826516196UL, 2576499701UL, 4219335149UL, 2440227627UL, 2188282304UL, 2949056849UL, 1138928618UL, 3785297102UL, 191805249UL, 496972334UL, 830265621UL, 1355757111UL, 3962907313UL, 396738554UL, 2616327935UL, 2337227347UL, 2139876075UL, 552154011UL, 3932761947UL, 1893005585UL, 3958551664UL, 1746456069UL, 895507243UL, 3171160829UL, 3333292799UL, 1833607331UL, 3864559081UL, 3564325554UL, 1332800826UL, 1987321873UL, 1792851165UL, 505718946UL, +3245448088UL, 1770588062UL, 4035552813UL, 2052557448UL, 2879065999UL, 3602157977UL, 3159941473UL, 2321387515UL, 3556641619UL, 1350613766UL, 4101259055UL, 2669366188UL, 1850700415UL, 3424626316UL, 545651740UL, 2873707882UL, 3252475208UL, 979047283UL, 862046434UL, 167198649UL, 654196140UL, 771814471UL, 4201635137UL, 883549156UL, 907871968UL, 191965184UL, 184144160UL, 2637527083UL, 3306095271UL, 1452688488UL, 1562736568UL, 4275587594UL, +117966344UL, 1785040579UL, 454879400UL, 3484019450UL, 3806424990UL, 733998186UL, 1623968604UL, 2997422000UL, 273316614UL, 2670843077UL, 3360491537UL, 3053533585UL, 1654709920UL, 591311873UL, 3541927406UL, 1716078578UL, 2888573892UL, 2825965566UL, 2277117038UL, 3184295779UL, 2776111761UL, 384880529UL, 3497622676UL, 1086566797UL, 723804135UL, 618916624UL, 1008618602UL, 2816673160UL, 3344392942UL, 3275521308UL, 3340690804UL, 962627614UL, +3072103948UL, 2910444460UL, 2023106558UL, 902990902UL, 126319837UL, 2155412848UL, 337119596UL, 3978575748UL, 4254301999UL, 2689599232UL, 426191419UL, 3471778695UL, 2446138116UL, 3216403640UL, 1259677734UL, 2889209278UL, 4102983766UL, 1706032491UL, 3221479262UL, 1298500018UL, 3340348062UL, 2940293024UL, 3805001240UL, 3926654939UL, 2271956463UL, 3004309866UL, 3634668003UL, 294480880UL, 1879451653UL, 3168497089UL, 361311552UL, 3417679321UL, +2080604411UL, 341920668UL, 507483626UL, 1201669979UL, 3174274528UL, 2012149356UL, 3748705813UL, 3375736126UL, 2857697336UL, 3929686609UL, 2935748807UL, 3336305747UL, 681020485UL, 4044713962UL, 405011299UL, 2862982895UL, 2578353596UL, 820410567UL, 601527649UL, 4281957726UL, 1890290066UL, 3155251071UL, 1984297765UL, 1888157243UL, 1978308818UL, 41870487UL, 2548692624UL, 1106822080UL, 1472807331UL, 3701147046UL, 2382974023UL, 736629379UL, +393081842UL, 3826516196UL, 3225163595UL, 4219335149UL, 2440227627UL, 2188282304UL, 2949056849UL, 3894577191UL, 3785297102UL, 191805249UL, 496972334UL, 830265621UL, 4293577013UL, 3962907313UL, 396738554UL, 2616327935UL, 2337227347UL, 3701032380UL, 552154011UL, 3932761947UL, 1893005585UL, 3958551664UL, 4148575672UL, 895507243UL, 3171160829UL, 3333292799UL, 1833607331UL, 1596419195UL, 3564325554UL, 1332800826UL, 1987321873UL, 1792851165UL, +3663406943UL, 3892533309UL, 247565591UL, 953356243UL, 4103354183UL, 1908418768UL, 3915294912UL, 2390669489UL, 3865260287UL, 1818313429UL, 557880278UL, 2499771815UL, 2618380525UL, 732785004UL, 1414011135UL, 2858311749UL, 3871596970UL, 2428464498UL, 645476041UL, 683035653UL, 4079609082UL, 2404111028UL, 3332056297UL, 3054547484UL, 3616426087UL, 1311379849UL, 3682136336UL, 3795847093UL, 1509718393UL, 541389178UL, 1103876446UL, 2549442278UL, +3656600574UL, 3019560735UL, 523610761UL, 3889482885UL, 3080739216UL, 2359120072UL, 1034857006UL, 63567637UL, 1520176098UL, 1741685274UL, 2330217396UL, 1429674399UL, 517809884UL, 2653145241UL, 868296581UL, 646514407UL, 3166145188UL, 3023629813UL, 2333851648UL, 2967365394UL, 1828821737UL, 3333092181UL, 445460259UL, 2682093551UL, 3655100102UL, 2592872076UL, 1588368999UL, 3964958220UL, 755397374UL, 1912970603UL, 396253754UL, 4260038354UL, +1530898510UL, 2396805917UL, 3327501452UL, 4235709361UL, 2762163349UL, 553869167UL, 3162483580UL, 1611891352UL, 248738605UL, 3403092967UL, 2194464420UL, 113420452UL, 1752444845UL, 3770903547UL, 2397481985UL, 2866414964UL, 2555678075UL, 2796010061UL, 762034588UL, 2679383682UL, 1848516655UL, 3857720381UL, 1119111363UL, 1829110546UL, 2183620391UL, 1743838702UL, 3363053704UL, 2212810289UL, 966205413UL, 3897281091UL, 2148139678UL, 2690229390UL, +427450194UL, 3516115778UL, 1864991059UL, 134448489UL, 3397232480UL, 3999530682UL, 1927036992UL, 3170864927UL, 3879295489UL, 134554462UL, 3447324105UL, 86678510UL, 1656551206UL, 2844494044UL, 2469678938UL, 2885597732UL, 2715483555UL, 3566904604UL, 462585182UL, 1922457093UL, 3035264235UL, 2866504077UL, 2031456720UL, 1598555964UL, 2569915450UL, 3947972758UL, 290683210UL, 2465427488UL, 3504862176UL, 793156806UL, 1722326752UL, 2706215067UL, +3818976191UL, 2007064241UL, 552144413UL, 2692866408UL, 3975075075UL, 4293828741UL, 1123460373UL, 960845744UL, 1855626484UL, 1876934434UL, 1343778249UL, 912185207UL, 127278206UL, 4168930635UL, 340393978UL, 65814528UL, 2552086271UL, 2507474816UL, 1240220220UL, 1761964455UL, 2204917500UL, 4088965101UL, 1079310398UL, 3071460742UL, 2188549805UL, 1064733776UL, 4191719087UL, 3221046115UL, 3772395288UL, 883516842UL, 2077853840UL, 229484673UL, +}, +{ +448889887UL, 3508620909UL, 4164289950UL, 155254859UL, 298319697UL, 980080883UL, 3500794888UL, 3974907245UL, 682778656UL, 382798811UL, 1500342771UL, 3942535492UL, 1039809505UL, 2126581011UL, 561192171UL, 4046277638UL, 840733718UL, 1694555864UL, 241216466UL, 4182349979UL, 2525929010UL, 386794637UL, 349755829UL, 2959959729UL, 686974318UL, 3243688353UL, 3911051908UL, 3917458620UL, 441833800UL, 3164548257UL, 584185450UL, 450132281UL, +3528356519UL, 4275666503UL, 1317069624UL, 817077137UL, 2945430988UL, 1532878265UL, 2542155552UL, 3348614029UL, 1419611574UL, 1245233100UL, 1981161828UL, 1161647342UL, 2781439556UL, 3896025436UL, 2349200248UL, 1213899699UL, 860301545UL, 1590934964UL, 3371591516UL, 2850926464UL, 2774569126UL, 907316453UL, 3541736952UL, 3572719697UL, 278602945UL, 4257620354UL, 3396349537UL, 3144949411UL, 191271983UL, 2974056951UL, 2743594803UL, 1119054633UL, +815666748UL, 920991498UL, 187861899UL, 2008325469UL, 1548504646UL, 3749744762UL, 993523345UL, 1171349070UL, 4105576982UL, 1559471848UL, 2656434170UL, 2795453957UL, 3357293755UL, 4260164297UL, 2211998873UL, 1783238785UL, 2831224398UL, 1704939914UL, 2626903427UL, 1148581053UL, 849777796UL, 4219173763UL, 694869701UL, 1297370017UL, 3573985711UL, 1739242781UL, 3680794431UL, 400850360UL, 909653264UL, 1496585542UL, 460982606UL, 828640603UL, +3993062500UL, 2145047281UL, 1587836828UL, 912583500UL, 1234319994UL, 4276951314UL, 485282908UL, 1903750880UL, 1667769214UL, 3950976882UL, 3711912938UL, 3626058764UL, 627857875UL, 436470402UL, 1753727232UL, 50241405UL, 206782941UL, 612110492UL, 954016857UL, 2567547031UL, 3360482779UL, 820704062UL, 412722485UL, 2044763466UL, 1915626743UL, 2703000434UL, 2755090057UL, 53587450UL, 2457122208UL, 1397065983UL, 2822294224UL, 3024827428UL, +2201149820UL, 699377793UL, 157099022UL, 2792298089UL, 3927835437UL, 1095494739UL, 1230723791UL, 2740420278UL, 2518077381UL, 3674832547UL, 2375246835UL, 923451748UL, 3665432731UL, 1577970518UL, 2643388181UL, 4050379756UL, 1145072065UL, 1632232822UL, 2365350332UL, 1126185680UL, 930842061UL, 3816331201UL, 1624573114UL, 3809118349UL, 1187817320UL, 945407897UL, 63630679UL, 1852369563UL, 971772965UL, 2229069035UL, 2320405193UL, 3474864049UL, +1666937976UL, 448889887UL, 3508620909UL, 4164289950UL, 155254859UL, 3157319819UL, 980080883UL, 3500794888UL, 3974907245UL, 682778656UL, 3201604042UL, 1500342771UL, 3942535492UL, 1039809505UL, 2126581011UL, 3235144326UL, 4046277638UL, 840733718UL, 1694555864UL, 241216466UL, 2728337326UL, 2525929010UL, 386794637UL, 349755829UL, 2959959729UL, 20820947UL, 3243688353UL, 3911051908UL, 3917458620UL, 441833800UL, 4143649787UL, 584185450UL, +450132281UL, 3528356519UL, 4275666503UL, 3541347868UL, 817077137UL, 2945430988UL, 1532878265UL, 2542155552UL, 3199458552UL, 1419611574UL, 1245233100UL, 1981161828UL, 1161647342UL, 958085276UL, 3896025436UL, 2349200248UL, 1213899699UL, 860301545UL, 1701089635UL, 3371591516UL, 2850926464UL, 2774569126UL, 907316453UL, 1529987826UL, 3572719697UL, 278602945UL, 4257620354UL, 3396349537UL, 4120000342UL, 191271983UL, 2974056951UL, 2743594803UL, +1119054633UL, 4255116655UL, 920991498UL, 187861899UL, 2008325469UL, 1548504646UL, 100038488UL, 993523345UL, 1171349070UL, 4105576982UL, 1559471848UL, 2523523381UL, 2795453957UL, 3357293755UL, 4260164297UL, 2211998873UL, 3644225670UL, 2831224398UL, 1704939914UL, 2626903427UL, 1148581053UL, 1292003378UL, 4219173763UL, 694869701UL, 1297370017UL, 3573985711UL, 2510138592UL, 3680794431UL, 400850360UL, 909653264UL, 1496585542UL, 1738256576UL, +828640603UL, 3993062500UL, 2145047281UL, 1587836828UL, 3478998519UL, 1234319994UL, 4276951314UL, 485282908UL, 1903750880UL, 746205619UL, 3950976882UL, 3711912938UL, 3626058764UL, 627857875UL, 954627753UL, 1753727232UL, 50241405UL, 206782941UL, 612110492UL, 2251018875UL, 2567547031UL, 3360482779UL, 820704062UL, 412722485UL, 2120077037UL, 1915626743UL, 2703000434UL, 2755090057UL, 53587450UL, 2696843657UL, 1397065983UL, 2822294224UL, +3024827428UL, 2201149820UL, 3308142895UL, 157099022UL, 2792298089UL, 3927835437UL, 1095494739UL, 730099534UL, 2740420278UL, 2518077381UL, 3674832547UL, 2375246835UL, 2126745526UL, 3665432731UL, 1577970518UL, 2643388181UL, 4050379756UL, 2987545029UL, 1632232822UL, 2365350332UL, 1126185680UL, 930842061UL, 3140947362UL, 1624573114UL, 3809118349UL, 1187817320UL, 945407897UL, 1282799903UL, 1852369563UL, 971772965UL, 2229069035UL, 2320405193UL, +670134249UL, 1666937976UL, 448889887UL, 3508620909UL, 4164289950UL, 127045110UL, 3157319819UL, 980080883UL, 3500794888UL, 3974907245UL, 2740953010UL, 3201604042UL, 1500342771UL, 3942535492UL, 1039809505UL, 306788856UL, 3235144326UL, 4046277638UL, 840733718UL, 1694555864UL, 2260304655UL, 2728337326UL, 2525929010UL, 386794637UL, 349755829UL, 3842816805UL, 20820947UL, 3243688353UL, 3911051908UL, 3917458620UL, 3398227861UL, 4143649787UL, +584185450UL, 450132281UL, 3528356519UL, 550401017UL, 3541347868UL, 817077137UL, 2945430988UL, 1532878265UL, 1045681234UL, 3199458552UL, 1419611574UL, 1245233100UL, 1981161828UL, 1153297031UL, 958085276UL, 3896025436UL, 2349200248UL, 1213899699UL, 1451842347UL, 1701089635UL, 3371591516UL, 2850926464UL, 2774569126UL, 1269128107UL, 1529987826UL, 3572719697UL, 278602945UL, 4257620354UL, 2479560493UL, 4120000342UL, 191271983UL, 2974056951UL, +2743594803UL, 4081110580UL, 4255116655UL, 920991498UL, 187861899UL, 2008325469UL, 1300371976UL, 100038488UL, 993523345UL, 1171349070UL, 4105576982UL, 3010753279UL, 2523523381UL, 2795453957UL, 3357293755UL, 4260164297UL, 207153762UL, 3644225670UL, 2831224398UL, 1704939914UL, 2626903427UL, 916783095UL, 1292003378UL, 4219173763UL, 694869701UL, 1297370017UL, 3388725608UL, 2510138592UL, 3680794431UL, 400850360UL, 909653264UL, 2421730678UL, +1738256576UL, 828640603UL, 3993062500UL, 2145047281UL, 2123619770UL, 3478998519UL, 1234319994UL, 4276951314UL, 485282908UL, 4002661777UL, 746205619UL, 3950976882UL, 3711912938UL, 3626058764UL, 1230937254UL, 954627753UL, 1753727232UL, 50241405UL, 206782941UL, 460314337UL, 2251018875UL, 2567547031UL, 3360482779UL, 820704062UL, 1339598718UL, 2120077037UL, 1915626743UL, 2703000434UL, 2755090057UL, 660730207UL, 2696843657UL, 1397065983UL, +2822294224UL, 3024827428UL, 126840648UL, 3308142895UL, 157099022UL, 2792298089UL, 3927835437UL, 2192535935UL, 730099534UL, 2740420278UL, 2518077381UL, 3674832547UL, 1879512787UL, 2126745526UL, 3665432731UL, 1577970518UL, 2643388181UL, 832572764UL, 2987545029UL, 1632232822UL, 2365350332UL, 1126185680UL, 3248646182UL, 3140947362UL, 1624573114UL, 3809118349UL, 1187817320UL, 4270855000UL, 1282799903UL, 1852369563UL, 971772965UL, 2229069035UL, +3735782785UL, 670134249UL, 1666937976UL, 448889887UL, 3508620909UL, 3681408470UL, 127045110UL, 3157319819UL, 980080883UL, 3500794888UL, 3967872553UL, 2740953010UL, 3201604042UL, 1500342771UL, 3942535492UL, 613854690UL, 306788856UL, 3235144326UL, 4046277638UL, 840733718UL, 3957877023UL, 2260304655UL, 2728337326UL, 2525929010UL, 386794637UL, 1779451936UL, 3842816805UL, 20820947UL, 3243688353UL, 3911051908UL, 688470429UL, 3398227861UL, +4143649787UL, 584185450UL, 450132281UL, 3381050556UL, 550401017UL, 3541347868UL, 817077137UL, 2945430988UL, 1859551669UL, 1045681234UL, 3199458552UL, 1419611574UL, 1245233100UL, 53681099UL, 1153297031UL, 958085276UL, 3896025436UL, 2349200248UL, 1796144514UL, 1451842347UL, 1701089635UL, 3371591516UL, 2850926464UL, 1337394836UL, 1269128107UL, 1529987826UL, 3572719697UL, 278602945UL, 46913829UL, 2479560493UL, 4120000342UL, 191271983UL, +2974056951UL, 1361976701UL, 4081110580UL, 4255116655UL, 920991498UL, 187861899UL, 1237191391UL, 1300371976UL, 100038488UL, 993523345UL, 1171349070UL, 3168325479UL, 3010753279UL, 2523523381UL, 2795453957UL, 3357293755UL, 2142853843UL, 207153762UL, 3644225670UL, 2831224398UL, 1704939914UL, 2369686128UL, 916783095UL, 1292003378UL, 4219173763UL, 694869701UL, 4150182218UL, 3388725608UL, 2510138592UL, 3680794431UL, 400850360UL, 654034492UL, +2421730678UL, 1738256576UL, 828640603UL, 3993062500UL, 84735560UL, 2123619770UL, 3478998519UL, 1234319994UL, 4276951314UL, 2545204994UL, 4002661777UL, 746205619UL, 3950976882UL, 3711912938UL, 426068544UL, 1230937254UL, 954627753UL, 1753727232UL, 50241405UL, 589286339UL, 460314337UL, 2251018875UL, 2567547031UL, 3360482779UL, 3279873953UL, 1339598718UL, 2120077037UL, 1915626743UL, 2703000434UL, 2720159887UL, 660730207UL, 2696843657UL, +1397065983UL, 2822294224UL, 3536645029UL, 126840648UL, 3308142895UL, 157099022UL, 2792298089UL, 485214530UL, 2192535935UL, 730099534UL, 2740420278UL, 2518077381UL, 418832171UL, 1879512787UL, 2126745526UL, 3665432731UL, 1577970518UL, 721018UL, 832572764UL, 2987545029UL, 1632232822UL, 2365350332UL, 1769688764UL, 3248646182UL, 3140947362UL, 1624573114UL, 3809118349UL, 3561012744UL, 4270855000UL, 1282799903UL, 1852369563UL, 971772965UL, +2160782957UL, 105464019UL, 2131462864UL, 335205049UL, 3271229551UL, 1374396416UL, 4269753677UL, 1984596635UL, 37563880UL, 3956352262UL, 2168603656UL, 311623712UL, 1593371323UL, 351020595UL, 3439337532UL, 3130874657UL, 3613343327UL, 695789539UL, 609797513UL, 53642143UL, 1479027519UL, 1588831722UL, 262810641UL, 3418379977UL, 530167431UL, 1962487963UL, 2410103328UL, 3360114680UL, 3548827677UL, 2735238248UL, 2136058369UL, 4013192489UL, +4106245442UL, 2155966460UL, 3653971354UL, 1230293148UL, 3966689348UL, 3455336684UL, 3594979856UL, 3178937309UL, 3983796170UL, 3617590004UL, 1727358326UL, 1121418876UL, 1022562029UL, 2437823131UL, 2733424381UL, 452731958UL, 2983755220UL, 1674750403UL, 3110921909UL, 3514365950UL, 2193238341UL, 2073801740UL, 669573402UL, 1824298084UL, 22336337UL, 3366446304UL, 1536043612UL, 2502297553UL, 1409641611UL, 2399583184UL, 2593245170UL, 716832039UL, +4286149460UL, 814849965UL, 4239224908UL, 2453627262UL, 976385355UL, 1846129423UL, 52096201UL, 88835472UL, 2621770794UL, 2491757130UL, 1849417480UL, 576668065UL, 2186701850UL, 3357019214UL, 442191324UL, 3662645846UL, 3653766782UL, 2254203663UL, 1169821059UL, 3735427676UL, 2246044748UL, 2635264668UL, 2647842566UL, 1435695450UL, 1658777934UL, 2927080369UL, 1341088646UL, 3565982642UL, 221661496UL, 3246988243UL, 2718455491UL, 483517148UL, +4181332651UL, 1143646375UL, 1720449423UL, 331164544UL, 539836322UL, 3485371630UL, 1110077273UL, 4088985694UL, 145720169UL, 2382276586UL, 4276410795UL, 2051956774UL, 936524156UL, 15415192UL, 1815949694UL, 272696290UL, 1495465483UL, 3102030383UL, 3546078241UL, 3272619595UL, 759699322UL, 1161486824UL, 1146281812UL, 4194130649UL, 3936306436UL, 4077338125UL, 2127551216UL, 2995077453UL, 209698652UL, 3836657987UL, 1782152220UL, 1642490089UL, +3695579542UL, 537862234UL, 1696168156UL, 4022607UL, 3642864269UL, 54404878UL, 2925910542UL, 3444042482UL, 1931288691UL, 2269375687UL, 614870298UL, 1139082272UL, 3672546472UL, 3255845763UL, 2987873616UL, 3436501734UL, 380553853UL, 750118352UL, 750708138UL, 488564982UL, 2936846643UL, 3460652101UL, 3085496886UL, 3734224010UL, 523359404UL, 2751912206UL, 3302219188UL, 2729509827UL, 1995554251UL, 2288103059UL, 3289667468UL, 2860301591UL, +}, +{ +3481653941UL, 2111903071UL, 3569014882UL, 1149634763UL, 4206972571UL, 2948781360UL, 2576820949UL, 2587099571UL, 3987042644UL, 4255777336UL, 2829594348UL, 3832744490UL, 3554499754UL, 787920018UL, 695635693UL, 2746034685UL, 2078139227UL, 1144320548UL, 4020978225UL, 449503505UL, 3004993826UL, 2045843139UL, 1604631401UL, 148449881UL, 457819243UL, 4089112489UL, 1713441237UL, 1790909556UL, 3334464951UL, 3070008305UL, 811825474UL, 4089105370UL, +708239097UL, 1494832299UL, 2074902973UL, 468898217UL, 1722559700UL, 2499754488UL, 2267939270UL, 650114709UL, 549502184UL, 4040463514UL, 4228169080UL, 4094284819UL, 1599334548UL, 2992525399UL, 2107053637UL, 197348940UL, 1669884894UL, 3982326753UL, 4259099320UL, 1862793542UL, 1751219817UL, 2701271514UL, 2507353222UL, 1488339939UL, 4246544316UL, 3978321870UL, 132720476UL, 3020305599UL, 154822619UL, 2595474066UL, 1654579304UL, 1997335204UL, +891320674UL, 3153502700UL, 601607977UL, 2695457160UL, 4137981809UL, 37584248UL, 1674050253UL, 1805619463UL, 676369068UL, 2294902904UL, 658143166UL, 141452045UL, 2383327493UL, 1222336195UL, 2628962123UL, 2378299402UL, 2724274090UL, 1783957650UL, 453206569UL, 3190116972UL, 1480368955UL, 1145768764UL, 3628222572UL, 3108689607UL, 182547022UL, 360165920UL, 3378423016UL, 1443723222UL, 2843274258UL, 1597581683UL, 664283285UL, 258077235UL, +3071875976UL, 240688930UL, 988895736UL, 2965351284UL, 91332032UL, 941306162UL, 2464278288UL, 3493666272UL, 2437043750UL, 2356658919UL, 24726067UL, 3025656863UL, 1343636659UL, 2408295270UL, 3097408183UL, 461428710UL, 2449005423UL, 3220070834UL, 1418517867UL, 907095008UL, 428073188UL, 1938061314UL, 2094361729UL, 2570445990UL, 346999411UL, 990247709UL, 1630488660UL, 2574142591UL, 1466590284UL, 1906935236UL, 1592544037UL, 4168163186UL, +2773942807UL, 939392801UL, 1610069434UL, 1935303983UL, 2962954128UL, 2490925509UL, 4103025390UL, 3614258069UL, 174125899UL, 4113855120UL, 2449365101UL, 3384244363UL, 4115219971UL, 3187664453UL, 4021992190UL, 2959372973UL, 2946571025UL, 2144945539UL, 388172915UL, 1125615727UL, 881693338UL, 3313110562UL, 859388069UL, 177786360UL, 4134747901UL, 616417204UL, 2104495620UL, 783302897UL, 512784708UL, 1295821322UL, 3810209448UL, 2966899912UL, +2390608767UL, 3481653941UL, 2111903071UL, 3569014882UL, 1149634763UL, 1385372463UL, 2948781360UL, 2576820949UL, 2587099571UL, 3987042644UL, 2251144849UL, 2829594348UL, 3832744490UL, 3554499754UL, 787920018UL, 73007125UL, 2746034685UL, 2078139227UL, 1144320548UL, 4020978225UL, 2729117517UL, 3004993826UL, 2045843139UL, 1604631401UL, 148449881UL, 3343221736UL, 4089112489UL, 1713441237UL, 1790909556UL, 3334464951UL, 1920962856UL, 811825474UL, +4089105370UL, 708239097UL, 1494832299UL, 2485576001UL, 468898217UL, 1722559700UL, 2499754488UL, 2267939270UL, 2271486862UL, 549502184UL, 4040463514UL, 4228169080UL, 4094284819UL, 3177940420UL, 2992525399UL, 2107053637UL, 197348940UL, 1669884894UL, 3596140613UL, 4259099320UL, 1862793542UL, 1751219817UL, 2701271514UL, 1357847339UL, 1488339939UL, 4246544316UL, 3978321870UL, 132720476UL, 344033794UL, 154822619UL, 2595474066UL, 1654579304UL, +1997335204UL, 1849659590UL, 3153502700UL, 601607977UL, 2695457160UL, 4137981809UL, 3559496104UL, 1674050253UL, 1805619463UL, 676369068UL, 2294902904UL, 1583197657UL, 141452045UL, 2383327493UL, 1222336195UL, 2628962123UL, 3486106126UL, 2724274090UL, 1783957650UL, 453206569UL, 3190116972UL, 1939413704UL, 1145768764UL, 3628222572UL, 3108689607UL, 182547022UL, 2911760834UL, 3378423016UL, 1443723222UL, 2843274258UL, 1597581683UL, 3599911248UL, +258077235UL, 3071875976UL, 240688930UL, 988895736UL, 4263328855UL, 91332032UL, 941306162UL, 2464278288UL, 3493666272UL, 1561559932UL, 2356658919UL, 24726067UL, 3025656863UL, 1343636659UL, 257301433UL, 3097408183UL, 461428710UL, 2449005423UL, 3220070834UL, 3544357262UL, 907095008UL, 428073188UL, 1938061314UL, 2094361729UL, 4112109825UL, 346999411UL, 990247709UL, 1630488660UL, 2574142591UL, 1466763688UL, 1906935236UL, 1592544037UL, +4168163186UL, 2773942807UL, 3608227467UL, 1610069434UL, 1935303983UL, 2962954128UL, 2490925509UL, 825197245UL, 3614258069UL, 174125899UL, 4113855120UL, 2449365101UL, 167881680UL, 4115219971UL, 3187664453UL, 4021992190UL, 2959372973UL, 1971633162UL, 2144945539UL, 388172915UL, 1125615727UL, 881693338UL, 223946687UL, 859388069UL, 177786360UL, 4134747901UL, 616417204UL, 722598357UL, 783302897UL, 512784708UL, 1295821322UL, 3810209448UL, +1589703161UL, 2390608767UL, 3481653941UL, 2111903071UL, 3569014882UL, 2520719089UL, 1385372463UL, 2948781360UL, 2576820949UL, 2587099571UL, 1427210741UL, 2251144849UL, 2829594348UL, 3832744490UL, 3554499754UL, 1257461820UL, 73007125UL, 2746034685UL, 2078139227UL, 1144320548UL, 3065859797UL, 2729117517UL, 3004993826UL, 2045843139UL, 1604631401UL, 36092756UL, 3343221736UL, 4089112489UL, 1713441237UL, 1790909556UL, 1504385586UL, 1920962856UL, +811825474UL, 4089105370UL, 708239097UL, 4135459720UL, 2485576001UL, 468898217UL, 1722559700UL, 2499754488UL, 1392696606UL, 2271486862UL, 549502184UL, 4040463514UL, 4228169080UL, 2521060775UL, 3177940420UL, 2992525399UL, 2107053637UL, 197348940UL, 4225425195UL, 3596140613UL, 4259099320UL, 1862793542UL, 1751219817UL, 3752827533UL, 1357847339UL, 1488339939UL, 4246544316UL, 3978321870UL, 270743120UL, 344033794UL, 154822619UL, 2595474066UL, +1654579304UL, 986127123UL, 1849659590UL, 3153502700UL, 601607977UL, 2695457160UL, 437034992UL, 3559496104UL, 1674050253UL, 1805619463UL, 676369068UL, 956939381UL, 1583197657UL, 141452045UL, 2383327493UL, 1222336195UL, 3287498300UL, 3486106126UL, 2724274090UL, 1783957650UL, 453206569UL, 3610364652UL, 1939413704UL, 1145768764UL, 3628222572UL, 3108689607UL, 708259891UL, 2911760834UL, 3378423016UL, 1443723222UL, 2843274258UL, 1498209005UL, +3599911248UL, 258077235UL, 3071875976UL, 240688930UL, 3815218922UL, 4263328855UL, 91332032UL, 941306162UL, 2464278288UL, 3018835600UL, 1561559932UL, 2356658919UL, 24726067UL, 3025656863UL, 368313673UL, 257301433UL, 3097408183UL, 461428710UL, 2449005423UL, 3690066046UL, 3544357262UL, 907095008UL, 428073188UL, 1938061314UL, 2274317748UL, 4112109825UL, 346999411UL, 990247709UL, 1630488660UL, 1584471638UL, 1466763688UL, 1906935236UL, +1592544037UL, 4168163186UL, 473837206UL, 3608227467UL, 1610069434UL, 1935303983UL, 2962954128UL, 391171548UL, 825197245UL, 3614258069UL, 174125899UL, 4113855120UL, 2095676907UL, 167881680UL, 4115219971UL, 3187664453UL, 4021992190UL, 4246237180UL, 1971633162UL, 2144945539UL, 388172915UL, 1125615727UL, 3158677395UL, 223946687UL, 859388069UL, 177786360UL, 4134747901UL, 4017781965UL, 722598357UL, 783302897UL, 512784708UL, 1295821322UL, +3908594844UL, 1589703161UL, 2390608767UL, 3481653941UL, 2111903071UL, 2713757719UL, 2520719089UL, 1385372463UL, 2948781360UL, 2576820949UL, 638075690UL, 1427210741UL, 2251144849UL, 2829594348UL, 3832744490UL, 2871270139UL, 1257461820UL, 73007125UL, 2746034685UL, 2078139227UL, 1974062189UL, 3065859797UL, 2729117517UL, 3004993826UL, 2045843139UL, 772058252UL, 36092756UL, 3343221736UL, 4089112489UL, 1713441237UL, 2172680702UL, 1504385586UL, +1920962856UL, 811825474UL, 4089105370UL, 1822881146UL, 4135459720UL, 2485576001UL, 468898217UL, 1722559700UL, 3429640856UL, 1392696606UL, 2271486862UL, 549502184UL, 4040463514UL, 3072935276UL, 2521060775UL, 3177940420UL, 2992525399UL, 2107053637UL, 1114377646UL, 4225425195UL, 3596140613UL, 4259099320UL, 1862793542UL, 1439724658UL, 3752827533UL, 1357847339UL, 1488339939UL, 4246544316UL, 1051119047UL, 270743120UL, 344033794UL, 154822619UL, +2595474066UL, 3143800435UL, 986127123UL, 1849659590UL, 3153502700UL, 601607977UL, 2334441739UL, 437034992UL, 3559496104UL, 1674050253UL, 1805619463UL, 455274178UL, 956939381UL, 1583197657UL, 141452045UL, 2383327493UL, 1520979444UL, 3287498300UL, 3486106126UL, 2724274090UL, 1783957650UL, 2212706740UL, 3610364652UL, 1939413704UL, 1145768764UL, 3628222572UL, 2719501850UL, 708259891UL, 2911760834UL, 3378423016UL, 1443723222UL, 2678486648UL, +1498209005UL, 3599911248UL, 258077235UL, 3071875976UL, 513762712UL, 3815218922UL, 4263328855UL, 91332032UL, 941306162UL, 3000922309UL, 3018835600UL, 1561559932UL, 2356658919UL, 24726067UL, 3626352172UL, 368313673UL, 257301433UL, 3097408183UL, 461428710UL, 2370224855UL, 3690066046UL, 3544357262UL, 907095008UL, 428073188UL, 2279237523UL, 2274317748UL, 4112109825UL, 346999411UL, 990247709UL, 896290404UL, 1584471638UL, 1466763688UL, +1906935236UL, 1592544037UL, 2387522308UL, 473837206UL, 3608227467UL, 1610069434UL, 1935303983UL, 4120978868UL, 391171548UL, 825197245UL, 3614258069UL, 174125899UL, 2940674123UL, 2095676907UL, 167881680UL, 4115219971UL, 3187664453UL, 456143482UL, 4246237180UL, 1971633162UL, 2144945539UL, 388172915UL, 4041481385UL, 3158677395UL, 223946687UL, 859388069UL, 177786360UL, 3094936989UL, 4017781965UL, 722598357UL, 783302897UL, 512784708UL, +4078350595UL, 2002159085UL, 3374931831UL, 1327513052UL, 4231642441UL, 2398594140UL, 2750176655UL, 2377078716UL, 3051451207UL, 2923556938UL, 392203913UL, 970480700UL, 1611278056UL, 1212903807UL, 85815670UL, 2398261756UL, 1052760308UL, 175807153UL, 2617028873UL, 1862087601UL, 1824020594UL, 3770624867UL, 141863380UL, 2090619424UL, 3994019338UL, 2363183556UL, 3095139522UL, 1792884692UL, 3026343485UL, 2320955816UL, 145789343UL, 214170401UL, +2926373126UL, 3858640613UL, 2188241463UL, 459887603UL, 2117474937UL, 2514234285UL, 1454156613UL, 1675396814UL, 4188979068UL, 1584843874UL, 3594779833UL, 563029256UL, 28681425UL, 446949770UL, 3498545218UL, 435874305UL, 3448653884UL, 863509898UL, 2247299904UL, 4211345429UL, 971855563UL, 1475394960UL, 3401692834UL, 167361776UL, 496249436UL, 1465278889UL, 780336162UL, 2108770597UL, 1806981510UL, 3677875653UL, 1890122303UL, 16399665UL, +2747394159UL, 2098019492UL, 1597583332UL, 1763649529UL, 1286079969UL, 1846278877UL, 1016796923UL, 959676917UL, 3091540766UL, 1626192266UL, 780987350UL, 1102963422UL, 2507002232UL, 691766944UL, 193328868UL, 981596600UL, 2384820612UL, 3149668778UL, 1691569420UL, 2852237957UL, 893819979UL, 2572584243UL, 216077070UL, 1267249886UL, 2572508880UL, 1706489454UL, 2391561733UL, 2608477467UL, 209783612UL, 765896849UL, 3617020328UL, 3488800100UL, +2237655981UL, 2095308189UL, 963275857UL, 3563488318UL, 1865487834UL, 480006810UL, 18562439UL, 1025913188UL, 3368592397UL, 374648713UL, 2421713724UL, 2705651398UL, 3098059650UL, 1109934605UL, 3085839620UL, 3184266772UL, 2359972463UL, 862934481UL, 3624479194UL, 3574284465UL, 2700143837UL, 2468083868UL, 3798800988UL, 4116964911UL, 1832002264UL, 4276154871UL, 3256889524UL, 4036954281UL, 697729046UL, 886223984UL, 2196986730UL, 1157617208UL, +1995907944UL, 398452318UL, 3523714364UL, 613570866UL, 2962430983UL, 1408814780UL, 892117129UL, 4173164219UL, 3894076479UL, 2721348430UL, 555734931UL, 1869034419UL, 336114876UL, 3142554871UL, 3349604636UL, 3450290892UL, 955122895UL, 2202902910UL, 2558366468UL, 1701182712UL, 283197682UL, 1865942385UL, 2027648778UL, 2285857699UL, 880475184UL, 958651279UL, 169534250UL, 3842420528UL, 1568559789UL, 2986618464UL, 2568345525UL, 3081082692UL, +}, +{ +575494427UL, 2773243709UL, 4009191487UL, 3877909663UL, 2252044261UL, 1328043370UL, 1407136778UL, 3204434425UL, 3881653592UL, 1481049819UL, 2939203697UL, 889352935UL, 628666312UL, 165199023UL, 2949092155UL, 1116804589UL, 998930334UL, 4144153491UL, 4191022348UL, 9022505UL, 4033326555UL, 2329569601UL, 824756145UL, 3501916851UL, 1481410328UL, 1970954319UL, 4022176157UL, 2356841052UL, 3783173734UL, 3649102345UL, 3205430658UL, 1460938436UL, +280282398UL, 3262135457UL, 4055383786UL, 28522973UL, 1100901182UL, 4048609665UL, 994490185UL, 2888527367UL, 3591919750UL, 65093467UL, 399797207UL, 3377740861UL, 3103183487UL, 3696509979UL, 866353724UL, 3847992271UL, 2821933890UL, 1491144079UL, 1702442928UL, 1271285504UL, 636444475UL, 2465430290UL, 2440306765UL, 2651443172UL, 2895101023UL, 43843628UL, 518479547UL, 3708355608UL, 2313400729UL, 3786408564UL, 2823763904UL, 3267560272UL, +524168411UL, 2580824843UL, 2687886610UL, 785942949UL, 2624395631UL, 3713348903UL, 4104123478UL, 2234056629UL, 2683158959UL, 1805382347UL, 1645702909UL, 382688861UL, 2843792951UL, 39122499UL, 2765954033UL, 3033237617UL, 784228054UL, 1680611136UL, 2306036746UL, 892707919UL, 3825738103UL, 1289362844UL, 3462989616UL, 484526950UL, 178560970UL, 1863413515UL, 71290794UL, 1716785670UL, 3881310302UL, 2826977504UL, 2312744076UL, 1000001815UL, +1580868938UL, 3808984884UL, 2521899773UL, 738699928UL, 2244576791UL, 1833964269UL, 1361345793UL, 2934763305UL, 2944705940UL, 2334116476UL, 674208214UL, 587191877UL, 271361277UL, 1639419136UL, 2742744205UL, 2556530506UL, 3764115510UL, 861410771UL, 3473658359UL, 2879790483UL, 1497452846UL, 1101855458UL, 2268199923UL, 1766359872UL, 480532790UL, 2926891626UL, 1366888524UL, 2262816900UL, 620045088UL, 2279182738UL, 2479688463UL, 427385986UL, +271096497UL, 1999040724UL, 1980388138UL, 3104550456UL, 2496325717UL, 2941450111UL, 1784373495UL, 4020221165UL, 2567325850UL, 2636190539UL, 2764516078UL, 2285887821UL, 2395930109UL, 1867061176UL, 665795763UL, 3869868300UL, 4033135159UL, 2589983679UL, 682593183UL, 1254600537UL, 1701095863UL, 3738080583UL, 369734429UL, 2231641462UL, 1866531599UL, 1317004965UL, 466053171UL, 2320346625UL, 485850108UL, 1279183025UL, 423884362UL, 1878291714UL, +228799661UL, 575494427UL, 2773243709UL, 4009191487UL, 3877909663UL, 1392246100UL, 1328043370UL, 1407136778UL, 3204434425UL, 3881653592UL, 303018213UL, 2939203697UL, 889352935UL, 628666312UL, 165199023UL, 691563049UL, 1116804589UL, 998930334UL, 4144153491UL, 4191022348UL, 2882458100UL, 4033326555UL, 2329569601UL, 824756145UL, 3501916851UL, 3512382126UL, 1970954319UL, 4022176157UL, 2356841052UL, 3783173734UL, 3277915742UL, 3205430658UL, +1460938436UL, 280282398UL, 3262135457UL, 416160861UL, 28522973UL, 1100901182UL, 4048609665UL, 994490185UL, 2206150488UL, 3591919750UL, 65093467UL, 399797207UL, 3377740861UL, 3954301001UL, 3696509979UL, 866353724UL, 3847992271UL, 2821933890UL, 482325742UL, 1702442928UL, 1271285504UL, 636444475UL, 2465430290UL, 476965483UL, 2651443172UL, 2895101023UL, 43843628UL, 518479547UL, 2354104222UL, 2313400729UL, 3786408564UL, 2823763904UL, +3267560272UL, 1682576095UL, 2580824843UL, 2687886610UL, 785942949UL, 2624395631UL, 3219885224UL, 4104123478UL, 2234056629UL, 2683158959UL, 1805382347UL, 4143809855UL, 382688861UL, 2843792951UL, 39122499UL, 2765954033UL, 2870716981UL, 784228054UL, 1680611136UL, 2306036746UL, 892707919UL, 2648492467UL, 1289362844UL, 3462989616UL, 484526950UL, 178560970UL, 3047404165UL, 71290794UL, 1716785670UL, 3881310302UL, 2826977504UL, 2439325884UL, +1000001815UL, 1580868938UL, 3808984884UL, 2521899773UL, 2222792732UL, 2244576791UL, 1833964269UL, 1361345793UL, 2934763305UL, 655108124UL, 2334116476UL, 674208214UL, 587191877UL, 271361277UL, 1403491312UL, 2742744205UL, 2556530506UL, 3764115510UL, 861410771UL, 2748819627UL, 2879790483UL, 1497452846UL, 1101855458UL, 2268199923UL, 2646753562UL, 480532790UL, 2926891626UL, 1366888524UL, 2262816900UL, 691077353UL, 2279182738UL, 2479688463UL, +427385986UL, 271096497UL, 357444234UL, 1980388138UL, 3104550456UL, 2496325717UL, 2941450111UL, 717953620UL, 4020221165UL, 2567325850UL, 2636190539UL, 2764516078UL, 588189150UL, 2395930109UL, 1867061176UL, 665795763UL, 3869868300UL, 2245339306UL, 2589983679UL, 682593183UL, 1254600537UL, 1701095863UL, 3193417815UL, 369734429UL, 2231641462UL, 1866531599UL, 1317004965UL, 1295326133UL, 2320346625UL, 485850108UL, 1279183025UL, 423884362UL, +1310342080UL, 228799661UL, 575494427UL, 2773243709UL, 4009191487UL, 3178129190UL, 1392246100UL, 1328043370UL, 1407136778UL, 3204434425UL, 558594993UL, 303018213UL, 2939203697UL, 889352935UL, 628666312UL, 3995857198UL, 691563049UL, 1116804589UL, 998930334UL, 4144153491UL, 2375099047UL, 2882458100UL, 4033326555UL, 2329569601UL, 824756145UL, 3031828205UL, 3512382126UL, 1970954319UL, 4022176157UL, 2356841052UL, 1599294097UL, 3277915742UL, +3205430658UL, 1460938436UL, 280282398UL, 2438973535UL, 416160861UL, 28522973UL, 1100901182UL, 4048609665UL, 2989609671UL, 2206150488UL, 3591919750UL, 65093467UL, 399797207UL, 183644195UL, 3954301001UL, 3696509979UL, 866353724UL, 3847992271UL, 1244421011UL, 482325742UL, 1702442928UL, 1271285504UL, 636444475UL, 3659422961UL, 476965483UL, 2651443172UL, 2895101023UL, 43843628UL, 2230230933UL, 2354104222UL, 2313400729UL, 3786408564UL, +2823763904UL, 4146329709UL, 1682576095UL, 2580824843UL, 2687886610UL, 785942949UL, 126345381UL, 3219885224UL, 4104123478UL, 2234056629UL, 2683158959UL, 1734650983UL, 4143809855UL, 382688861UL, 2843792951UL, 39122499UL, 3527484969UL, 2870716981UL, 784228054UL, 1680611136UL, 2306036746UL, 1606477743UL, 2648492467UL, 1289362844UL, 3462989616UL, 484526950UL, 3730796296UL, 3047404165UL, 71290794UL, 1716785670UL, 3881310302UL, 4233965062UL, +2439325884UL, 1000001815UL, 1580868938UL, 3808984884UL, 1228341642UL, 2222792732UL, 2244576791UL, 1833964269UL, 1361345793UL, 3313812192UL, 655108124UL, 2334116476UL, 674208214UL, 587191877UL, 1531247446UL, 1403491312UL, 2742744205UL, 2556530506UL, 3764115510UL, 2419989900UL, 2748819627UL, 2879790483UL, 1497452846UL, 1101855458UL, 1430402656UL, 2646753562UL, 480532790UL, 2926891626UL, 1366888524UL, 1848714433UL, 691077353UL, 2279182738UL, +2479688463UL, 427385986UL, 3906690631UL, 357444234UL, 1980388138UL, 3104550456UL, 2496325717UL, 2272350403UL, 717953620UL, 4020221165UL, 2567325850UL, 2636190539UL, 1950604113UL, 588189150UL, 2395930109UL, 1867061176UL, 665795763UL, 1735147895UL, 2245339306UL, 2589983679UL, 682593183UL, 1254600537UL, 1518037357UL, 3193417815UL, 369734429UL, 2231641462UL, 1866531599UL, 1751783137UL, 1295326133UL, 2320346625UL, 485850108UL, 1279183025UL, +149835864UL, 1310342080UL, 228799661UL, 575494427UL, 2773243709UL, 1505829825UL, 3178129190UL, 1392246100UL, 1328043370UL, 1407136778UL, 856233019UL, 558594993UL, 303018213UL, 2939203697UL, 889352935UL, 625515593UL, 3995857198UL, 691563049UL, 1116804589UL, 998930334UL, 3264640128UL, 2375099047UL, 2882458100UL, 4033326555UL, 2329569601UL, 1824812377UL, 3031828205UL, 3512382126UL, 1970954319UL, 4022176157UL, 3682468973UL, 1599294097UL, +3277915742UL, 3205430658UL, 1460938436UL, 2034940270UL, 2438973535UL, 416160861UL, 28522973UL, 1100901182UL, 3534874298UL, 2989609671UL, 2206150488UL, 3591919750UL, 65093467UL, 2231373121UL, 183644195UL, 3954301001UL, 3696509979UL, 866353724UL, 1479968372UL, 1244421011UL, 482325742UL, 1702442928UL, 1271285504UL, 3834022401UL, 3659422961UL, 476965483UL, 2651443172UL, 2895101023UL, 1042443120UL, 2230230933UL, 2354104222UL, 2313400729UL, +3786408564UL, 2940290545UL, 4146329709UL, 1682576095UL, 2580824843UL, 2687886610UL, 895602439UL, 126345381UL, 3219885224UL, 4104123478UL, 2234056629UL, 3633565082UL, 1734650983UL, 4143809855UL, 382688861UL, 2843792951UL, 3076342354UL, 3527484969UL, 2870716981UL, 784228054UL, 1680611136UL, 3667923304UL, 1606477743UL, 2648492467UL, 1289362844UL, 3462989616UL, 1338592032UL, 3730796296UL, 3047404165UL, 71290794UL, 1716785670UL, 995728648UL, +4233965062UL, 2439325884UL, 1000001815UL, 1580868938UL, 1245957136UL, 1228341642UL, 2222792732UL, 2244576791UL, 1833964269UL, 2899552190UL, 3313812192UL, 655108124UL, 2334116476UL, 674208214UL, 1154789946UL, 1531247446UL, 1403491312UL, 2742744205UL, 2556530506UL, 1668620496UL, 2419989900UL, 2748819627UL, 2879790483UL, 1497452846UL, 177853954UL, 1430402656UL, 2646753562UL, 480532790UL, 2926891626UL, 3179057526UL, 1848714433UL, 691077353UL, +2279182738UL, 2479688463UL, 1988854710UL, 3906690631UL, 357444234UL, 1980388138UL, 3104550456UL, 1772857305UL, 2272350403UL, 717953620UL, 4020221165UL, 2567325850UL, 3129906484UL, 1950604113UL, 588189150UL, 2395930109UL, 1867061176UL, 2248975336UL, 1735147895UL, 2245339306UL, 2589983679UL, 682593183UL, 3087155398UL, 1518037357UL, 3193417815UL, 369734429UL, 2231641462UL, 1858424931UL, 1751783137UL, 1295326133UL, 2320346625UL, 485850108UL, +2471611230UL, 107369761UL, 2623559579UL, 4256589070UL, 2365810185UL, 907910243UL, 3901832478UL, 2068079364UL, 2072842987UL, 401440347UL, 1707255913UL, 1450112231UL, 2618898012UL, 600446000UL, 788321632UL, 4119629235UL, 2648781584UL, 1927659116UL, 171372782UL, 1789511950UL, 2648296999UL, 3558619514UL, 1819608632UL, 1392007708UL, 2918513974UL, 2270003900UL, 784021820UL, 1379044539UL, 591935962UL, 1638390839UL, 10832053UL, 3946625290UL, +2916913801UL, 2718331169UL, 1595482738UL, 1294279402UL, 19889234UL, 1374364843UL, 571354125UL, 3357938719UL, 2337506269UL, 905453029UL, 2504232400UL, 258673393UL, 2590342355UL, 3308443353UL, 3359617898UL, 2686453711UL, 932545954UL, 509832408UL, 820508114UL, 431186194UL, 3434866166UL, 1108455121UL, 2802986572UL, 893446102UL, 3248197798UL, 1797985531UL, 3952804303UL, 558601278UL, 1813674114UL, 311050994UL, 425175161UL, 1125527204UL, +1597986581UL, 2282580210UL, 1659733126UL, 2080660004UL, 4121079137UL, 3373787661UL, 1902252724UL, 2669993847UL, 2450915273UL, 2155525933UL, 2139535914UL, 274595185UL, 1890506924UL, 2631794527UL, 1423530517UL, 4027031002UL, 1085427968UL, 2402514206UL, 3591455043UL, 2513094696UL, 2338347202UL, 1168222597UL, 3922339535UL, 3991725466UL, 2774598759UL, 3478721168UL, 3676766916UL, 179748891UL, 2911159372UL, 191101265UL, 3389843262UL, 3093358663UL, +2333576084UL, 1056514165UL, 2987497874UL, 2502331872UL, 2027710028UL, 2338525812UL, 3904906078UL, 806669884UL, 596300960UL, 1993055778UL, 1541809402UL, 3578865742UL, 652348267UL, 3332532764UL, 2656602623UL, 2037214047UL, 323260312UL, 3310408133UL, 4037617529UL, 137297627UL, 1236501991UL, 495817051UL, 481150309UL, 3067841968UL, 3120347176UL, 714354848UL, 1554632062UL, 2522324107UL, 4274051212UL, 2180914534UL, 1261686356UL, 3569290041UL, +1801431819UL, 4286755560UL, 2749452442UL, 829235089UL, 2243153325UL, 2525168177UL, 1486881882UL, 585653228UL, 3288336688UL, 2734161045UL, 30430534UL, 714492313UL, 2582732426UL, 595577790UL, 1463554287UL, 1949506865UL, 4210942156UL, 2008105540UL, 4055753132UL, 2530320603UL, 319064177UL, 2305067982UL, 3825716413UL, 1543867515UL, 108979478UL, 3089716545UL, 2921391708UL, 2403595525UL, 3783697766UL, 2313991047UL, 3302598706UL, 1318323763UL, +}, +{ +1470380360UL, 3057428612UL, 2756676297UL, 1633786556UL, 4246459918UL, 2557524017UL, 1857180133UL, 618903690UL, 2475611092UL, 2621430634UL, 2084292404UL, 1698607774UL, 1788956972UL, 3375072220UL, 1499167056UL, 1218814632UL, 3699503479UL, 588281768UL, 3603925285UL, 1187721841UL, 1307962320UL, 2562217840UL, 3882506958UL, 2387033730UL, 2097027049UL, 1593669125UL, 1899433035UL, 4039983902UL, 1546854551UL, 1073191673UL, 3368453769UL, 3074694838UL, +534637095UL, 1860006723UL, 3416402670UL, 802354899UL, 3998709605UL, 3944315555UL, 3454226397UL, 1648185195UL, 488532673UL, 3063734121UL, 1318974867UL, 187087202UL, 200160693UL, 4170479404UL, 782764886UL, 4007973657UL, 1651636372UL, 3084151528UL, 2085263921UL, 2424937940UL, 230704223UL, 3342587983UL, 1093085714UL, 683877298UL, 3635026316UL, 3839461209UL, 2977567556UL, 3947448199UL, 3767172681UL, 1350679624UL, 3541409523UL, 3975162472UL, +2459379316UL, 3287828387UL, 1565768431UL, 3149625429UL, 1328627497UL, 2156355750UL, 112739894UL, 4052025045UL, 1396839113UL, 212349044UL, 110706825UL, 2185320852UL, 2540909191UL, 2129623107UL, 3515174750UL, 2669147508UL, 1243549180UL, 3996575850UL, 149304348UL, 2755670869UL, 930137412UL, 350687475UL, 1512442864UL, 3764389325UL, 3489308665UL, 276147411UL, 2268414314UL, 30674096UL, 3202650841UL, 3446821592UL, 3341145621UL, 3749209259UL, +674361204UL, 1384681012UL, 2716655878UL, 454169262UL, 289282175UL, 966029495UL, 3052791893UL, 3111969089UL, 1151599976UL, 3620936019UL, 1877909034UL, 1953262994UL, 4240669039UL, 1857402256UL, 3337397349UL, 2392730459UL, 1158928694UL, 1757447952UL, 2682284750UL, 2796982914UL, 1203210173UL, 797579212UL, 1645601877UL, 3579805998UL, 797556690UL, 4106236617UL, 1379943929UL, 129105346UL, 3950170317UL, 723231430UL, 88997404UL, 2591283275UL, +359831168UL, 306903531UL, 1987846974UL, 2654779951UL, 3724360049UL, 1693615498UL, 1095306415UL, 3586751806UL, 2045807380UL, 2779363615UL, 2912940562UL, 1557518560UL, 3620536996UL, 1723152132UL, 4087191232UL, 1042907094UL, 3210303305UL, 1536493323UL, 4094765090UL, 575328723UL, 359319532UL, 2458971265UL, 3159207510UL, 387883436UL, 2521400838UL, 2359639886UL, 261289463UL, 2094643916UL, 2269112547UL, 2387198764UL, 3619233779UL, 3019052785UL, +2910774311UL, 1470380360UL, 3057428612UL, 2756676297UL, 1633786556UL, 386502519UL, 2557524017UL, 1857180133UL, 618903690UL, 2475611092UL, 30080431UL, 2084292404UL, 1698607774UL, 1788956972UL, 3375072220UL, 1158684464UL, 1218814632UL, 3699503479UL, 588281768UL, 3603925285UL, 238328161UL, 1307962320UL, 2562217840UL, 3882506958UL, 2387033730UL, 3010587639UL, 1593669125UL, 1899433035UL, 4039983902UL, 1546854551UL, 4192218972UL, 3368453769UL, +3074694838UL, 534637095UL, 1860006723UL, 652336168UL, 802354899UL, 3998709605UL, 3944315555UL, 3454226397UL, 1926499185UL, 488532673UL, 3063734121UL, 1318974867UL, 187087202UL, 1106075322UL, 4170479404UL, 782764886UL, 4007973657UL, 1651636372UL, 2404132022UL, 2085263921UL, 2424937940UL, 230704223UL, 3342587983UL, 918664020UL, 683877298UL, 3635026316UL, 3839461209UL, 2977567556UL, 1943458501UL, 3767172681UL, 1350679624UL, 3541409523UL, +3975162472UL, 276593262UL, 3287828387UL, 1565768431UL, 3149625429UL, 1328627497UL, 1428675465UL, 112739894UL, 4052025045UL, 1396839113UL, 212349044UL, 4056830215UL, 2185320852UL, 2540909191UL, 2129623107UL, 3515174750UL, 1542171596UL, 1243549180UL, 3996575850UL, 149304348UL, 2755670869UL, 3578672658UL, 350687475UL, 1512442864UL, 3764389325UL, 3489308665UL, 1546094236UL, 2268414314UL, 30674096UL, 3202650841UL, 3446821592UL, 2954172575UL, +3749209259UL, 674361204UL, 1384681012UL, 2716655878UL, 3784818668UL, 289282175UL, 966029495UL, 3052791893UL, 3111969089UL, 4157356036UL, 3620936019UL, 1877909034UL, 1953262994UL, 4240669039UL, 558548232UL, 3337397349UL, 2392730459UL, 1158928694UL, 1757447952UL, 2764253876UL, 2796982914UL, 1203210173UL, 797579212UL, 1645601877UL, 1754284241UL, 797556690UL, 4106236617UL, 1379943929UL, 129105346UL, 1072954804UL, 723231430UL, 88997404UL, +2591283275UL, 359831168UL, 3790749526UL, 1987846974UL, 2654779951UL, 3724360049UL, 1693615498UL, 529478744UL, 3586751806UL, 2045807380UL, 2779363615UL, 2912940562UL, 3883779003UL, 3620536996UL, 1723152132UL, 4087191232UL, 1042907094UL, 2510614710UL, 1536493323UL, 4094765090UL, 575328723UL, 359319532UL, 4185709932UL, 3159207510UL, 387883436UL, 2521400838UL, 2359639886UL, 143795416UL, 2094643916UL, 2269112547UL, 2387198764UL, 3619233779UL, +2856133500UL, 2910774311UL, 1470380360UL, 3057428612UL, 2756676297UL, 1184346658UL, 386502519UL, 2557524017UL, 1857180133UL, 618903690UL, 113530176UL, 30080431UL, 2084292404UL, 1698607774UL, 1788956972UL, 1446640841UL, 1158684464UL, 1218814632UL, 3699503479UL, 588281768UL, 145530757UL, 238328161UL, 1307962320UL, 2562217840UL, 3882506958UL, 2145494995UL, 3010587639UL, 1593669125UL, 1899433035UL, 4039983902UL, 1668183055UL, 4192218972UL, +3368453769UL, 3074694838UL, 534637095UL, 1759744354UL, 652336168UL, 802354899UL, 3998709605UL, 3944315555UL, 3058692249UL, 1926499185UL, 488532673UL, 3063734121UL, 1318974867UL, 728549366UL, 1106075322UL, 4170479404UL, 782764886UL, 4007973657UL, 3270440405UL, 2404132022UL, 2085263921UL, 2424937940UL, 230704223UL, 3329510499UL, 918664020UL, 683877298UL, 3635026316UL, 3839461209UL, 79335966UL, 1943458501UL, 3767172681UL, 1350679624UL, +3541409523UL, 925084463UL, 276593262UL, 3287828387UL, 1565768431UL, 3149625429UL, 3775346659UL, 1428675465UL, 112739894UL, 4052025045UL, 1396839113UL, 865124022UL, 4056830215UL, 2185320852UL, 2540909191UL, 2129623107UL, 408329043UL, 1542171596UL, 1243549180UL, 3996575850UL, 149304348UL, 3549625626UL, 3578672658UL, 350687475UL, 1512442864UL, 3764389325UL, 2745315161UL, 1546094236UL, 2268414314UL, 30674096UL, 3202650841UL, 1591955495UL, +2954172575UL, 3749209259UL, 674361204UL, 1384681012UL, 4064148122UL, 3784818668UL, 289282175UL, 966029495UL, 3052791893UL, 1370867977UL, 4157356036UL, 3620936019UL, 1877909034UL, 1953262994UL, 4021792514UL, 558548232UL, 3337397349UL, 2392730459UL, 1158928694UL, 3155295174UL, 2764253876UL, 2796982914UL, 1203210173UL, 797579212UL, 3928348491UL, 1754284241UL, 797556690UL, 4106236617UL, 1379943929UL, 535801204UL, 1072954804UL, 723231430UL, +88997404UL, 2591283275UL, 3834650337UL, 3790749526UL, 1987846974UL, 2654779951UL, 3724360049UL, 1042046499UL, 529478744UL, 3586751806UL, 2045807380UL, 2779363615UL, 1125934487UL, 3883779003UL, 3620536996UL, 1723152132UL, 4087191232UL, 234512721UL, 2510614710UL, 1536493323UL, 4094765090UL, 575328723UL, 3997395999UL, 4185709932UL, 3159207510UL, 387883436UL, 2521400838UL, 3125399953UL, 143795416UL, 2094643916UL, 2269112547UL, 2387198764UL, +652167990UL, 2856133500UL, 2910774311UL, 1470380360UL, 3057428612UL, 2132157457UL, 1184346658UL, 386502519UL, 2557524017UL, 1857180133UL, 4131611047UL, 113530176UL, 30080431UL, 2084292404UL, 1698607774UL, 391246724UL, 1446640841UL, 1158684464UL, 1218814632UL, 3699503479UL, 2411874184UL, 145530757UL, 238328161UL, 1307962320UL, 2562217840UL, 2812151676UL, 2145494995UL, 3010587639UL, 1593669125UL, 1899433035UL, 2422208371UL, 1668183055UL, +4192218972UL, 3368453769UL, 3074694838UL, 2148785858UL, 1759744354UL, 652336168UL, 802354899UL, 3998709605UL, 1781938823UL, 3058692249UL, 1926499185UL, 488532673UL, 3063734121UL, 3539633540UL, 728549366UL, 1106075322UL, 4170479404UL, 782764886UL, 2780824417UL, 3270440405UL, 2404132022UL, 2085263921UL, 2424937940UL, 1908513596UL, 3329510499UL, 918664020UL, 683877298UL, 3635026316UL, 2918953355UL, 79335966UL, 1943458501UL, 3767172681UL, +1350679624UL, 341369607UL, 925084463UL, 276593262UL, 3287828387UL, 1565768431UL, 1957429498UL, 3775346659UL, 1428675465UL, 112739894UL, 4052025045UL, 1847440090UL, 865124022UL, 4056830215UL, 2185320852UL, 2540909191UL, 3477402775UL, 408329043UL, 1542171596UL, 1243549180UL, 3996575850UL, 179432054UL, 3549625626UL, 3578672658UL, 350687475UL, 1512442864UL, 2118138924UL, 2745315161UL, 1546094236UL, 2268414314UL, 30674096UL, 2317064191UL, +1591955495UL, 2954172575UL, 3749209259UL, 674361204UL, 3286542168UL, 4064148122UL, 3784818668UL, 289282175UL, 966029495UL, 1327408800UL, 1370867977UL, 4157356036UL, 3620936019UL, 1877909034UL, 405707683UL, 4021792514UL, 558548232UL, 3337397349UL, 2392730459UL, 3244675609UL, 3155295174UL, 2764253876UL, 2796982914UL, 1203210173UL, 2274948223UL, 3928348491UL, 1754284241UL, 797556690UL, 4106236617UL, 2665938417UL, 535801204UL, 1072954804UL, +723231430UL, 88997404UL, 3006584290UL, 3834650337UL, 3790749526UL, 1987846974UL, 2654779951UL, 4271242910UL, 1042046499UL, 529478744UL, 3586751806UL, 2045807380UL, 2283867237UL, 1125934487UL, 3883779003UL, 3620536996UL, 1723152132UL, 1761178713UL, 234512721UL, 2510614710UL, 1536493323UL, 4094765090UL, 2361030279UL, 3997395999UL, 4185709932UL, 3159207510UL, 387883436UL, 3979684113UL, 3125399953UL, 143795416UL, 2094643916UL, 2269112547UL, +1499026790UL, 2673871071UL, 3817604600UL, 2996498142UL, 1211396713UL, 4016438754UL, 992969238UL, 2196610884UL, 1333868752UL, 2722471337UL, 2178395143UL, 533478044UL, 291720336UL, 3552502714UL, 1060260388UL, 1389737501UL, 3508724089UL, 3106493936UL, 2013154532UL, 3169850047UL, 3773175439UL, 3604033115UL, 4234678017UL, 2903156223UL, 3832188501UL, 2874956773UL, 4283805552UL, 3664062691UL, 1974738248UL, 925764827UL, 1750660924UL, 141239116UL, +3273085573UL, 2427940522UL, 1962727892UL, 2493949152UL, 1043482688UL, 2345076260UL, 2209086707UL, 3642865193UL, 3119873884UL, 571850463UL, 1599484831UL, 76923002UL, 3077572436UL, 4086821865UL, 1523654720UL, 480304732UL, 476538774UL, 2169116383UL, 4033618691UL, 2819753414UL, 2856326003UL, 747450871UL, 1851448547UL, 713503330UL, 3709263622UL, 781002495UL, 1968749577UL, 2933719965UL, 4057398020UL, 3406593497UL, 689436820UL, 2935729647UL, +2030357428UL, 2075940397UL, 1830631914UL, 1093330800UL, 1706624613UL, 1805612947UL, 4257097124UL, 3233604448UL, 159450674UL, 1050507045UL, 566046625UL, 2253420120UL, 904902042UL, 1830037922UL, 4081490982UL, 1427186514UL, 2535536470UL, 3869316947UL, 4097476542UL, 930420754UL, 2519255367UL, 49908928UL, 454325685UL, 888118139UL, 3453892181UL, 1263601461UL, 1236190782UL, 674943665UL, 1648077470UL, 429399730UL, 2904879506UL, 3718410520UL, +1802183310UL, 1872553091UL, 605480672UL, 774749173UL, 3200570514UL, 181210046UL, 2560898144UL, 3947027625UL, 1535243167UL, 324801283UL, 4234744788UL, 746560316UL, 2456297875UL, 3925756080UL, 533997731UL, 3919796086UL, 662975152UL, 864661066UL, 1070894403UL, 1020445801UL, 1511298602UL, 4221508348UL, 3577952702UL, 4122306502UL, 2012051572UL, 1616168260UL, 2456901413UL, 2717726537UL, 840264605UL, 2687215223UL, 2174960097UL, 1239122603UL, +2890231920UL, 3365350767UL, 3998868598UL, 563137220UL, 893868530UL, 3400632172UL, 1538627830UL, 2812510298UL, 496662288UL, 2317289974UL, 2252393722UL, 1221289032UL, 2418100559UL, 402670890UL, 1528570045UL, 3160531718UL, 1806492066UL, 3211663975UL, 3617025598UL, 3664580463UL, 1338638297UL, 341637330UL, 2097019728UL, 4031221207UL, 503636424UL, 3883416740UL, 1530237682UL, 1152125396UL, 2845384901UL, 332460372UL, 457364876UL, 1738239808UL, +}, +{ +1118787884UL, 1884590246UL, 1007052798UL, 3717680750UL, 1609263052UL, 2486654530UL, 2761168910UL, 163554565UL, 3928803020UL, 2632714628UL, 1386788970UL, 2621928183UL, 2855206157UL, 2989018213UL, 1836814260UL, 4197635108UL, 1030118238UL, 2789863793UL, 2063944689UL, 1647608366UL, 255485979UL, 3657534664UL, 1317185871UL, 2410074449UL, 3971156607UL, 907575923UL, 4132859581UL, 416269582UL, 877554291UL, 633895348UL, 2236014545UL, 992386759UL, +3971362318UL, 2173597771UL, 1673339632UL, 1371742490UL, 2033574313UL, 3809530180UL, 319182848UL, 1562235776UL, 463522324UL, 1482338913UL, 1816432405UL, 3278626272UL, 1335179249UL, 171265751UL, 2249118654UL, 1153849045UL, 3013179633UL, 1450352108UL, 1267908572UL, 1138658121UL, 623675874UL, 3608469129UL, 978093004UL, 1283228910UL, 1810859539UL, 1179125634UL, 2939039286UL, 3862213960UL, 1168357273UL, 376788629UL, 314507445UL, 219039712UL, +463080619UL, 2994990779UL, 1035692306UL, 2228303916UL, 1280244913UL, 1965417315UL, 1815095408UL, 939691799UL, 3080056566UL, 3741305118UL, 1495905100UL, 65327713UL, 3884301346UL, 2536445014UL, 1503280354UL, 3398924419UL, 3678532805UL, 2616964783UL, 3168581019UL, 3553322118UL, 3023259169UL, 480342712UL, 451634742UL, 3562778450UL, 1943708078UL, 660077747UL, 434714388UL, 2369278293UL, 2894425895UL, 1919542250UL, 2469130567UL, 551196237UL, +4193980239UL, 2952382875UL, 3311173667UL, 2856797012UL, 2845888917UL, 1669184098UL, 3928626091UL, 2491577076UL, 3719464032UL, 2151963814UL, 3474431449UL, 3971510537UL, 3695841119UL, 2215238146UL, 3668152847UL, 1974578319UL, 2328185090UL, 2096356935UL, 3973692455UL, 3954842437UL, 422675402UL, 477894725UL, 3398641827UL, 1366451030UL, 1354642198UL, 3029840461UL, 35700837UL, 2937170986UL, 1336296570UL, 3508313874UL, 587724229UL, 2051237478UL, +3539754304UL, 1946154432UL, 2463932452UL, 144772179UL, 353408424UL, 3493806256UL, 3782958493UL, 1957797444UL, 228084488UL, 192277278UL, 3612092522UL, 2235069734UL, 467407503UL, 3391861572UL, 847810786UL, 1838763654UL, 2272109211UL, 3018265496UL, 4249218445UL, 1722760791UL, 3484353162UL, 3906437663UL, 4208966227UL, 2352549740UL, 714311566UL, 1346246305UL, 2865157059UL, 2989587005UL, 3946819548UL, 3109244860UL, 3885124598UL, 3314346978UL, +952826829UL, 1118787884UL, 1884590246UL, 1007052798UL, 3717680750UL, 1521451317UL, 2486654530UL, 2761168910UL, 163554565UL, 3928803020UL, 2299046195UL, 1386788970UL, 2621928183UL, 2855206157UL, 2989018213UL, 3048269905UL, 4197635108UL, 1030118238UL, 2789863793UL, 2063944689UL, 1814057352UL, 255485979UL, 3657534664UL, 1317185871UL, 2410074449UL, 4041610788UL, 907575923UL, 4132859581UL, 416269582UL, 877554291UL, 2338964683UL, 2236014545UL, +992386759UL, 3971362318UL, 2173597771UL, 579340117UL, 1371742490UL, 2033574313UL, 3809530180UL, 319182848UL, 3090313228UL, 463522324UL, 1482338913UL, 1816432405UL, 3278626272UL, 2418220643UL, 171265751UL, 2249118654UL, 1153849045UL, 3013179633UL, 2738647190UL, 1267908572UL, 1138658121UL, 623675874UL, 3608469129UL, 3096087202UL, 1283228910UL, 1810859539UL, 1179125634UL, 2939039286UL, 2601862091UL, 1168357273UL, 376788629UL, 314507445UL, +219039712UL, 1174181426UL, 2994990779UL, 1035692306UL, 2228303916UL, 1280244913UL, 752017703UL, 1815095408UL, 939691799UL, 3080056566UL, 3741305118UL, 126135654UL, 65327713UL, 3884301346UL, 2536445014UL, 1503280354UL, 955981361UL, 3678532805UL, 2616964783UL, 3168581019UL, 3553322118UL, 3772187171UL, 480342712UL, 451634742UL, 3562778450UL, 1943708078UL, 1466950454UL, 434714388UL, 2369278293UL, 2894425895UL, 1919542250UL, 317862862UL, +551196237UL, 4193980239UL, 2952382875UL, 3311173667UL, 12728591UL, 2845888917UL, 1669184098UL, 3928626091UL, 2491577076UL, 2742989641UL, 2151963814UL, 3474431449UL, 3971510537UL, 3695841119UL, 1005662613UL, 3668152847UL, 1974578319UL, 2328185090UL, 2096356935UL, 3629684995UL, 3954842437UL, 422675402UL, 477894725UL, 3398641827UL, 209352768UL, 1354642198UL, 3029840461UL, 35700837UL, 2937170986UL, 1660777984UL, 3508313874UL, 587724229UL, +2051237478UL, 3539754304UL, 3631430985UL, 2463932452UL, 144772179UL, 353408424UL, 3493806256UL, 3616422021UL, 1957797444UL, 228084488UL, 192277278UL, 3612092522UL, 3638977910UL, 467407503UL, 3391861572UL, 847810786UL, 1838763654UL, 2427237699UL, 3018265496UL, 4249218445UL, 1722760791UL, 3484353162UL, 2322365400UL, 4208966227UL, 2352549740UL, 714311566UL, 1346246305UL, 954101391UL, 2989587005UL, 3946819548UL, 3109244860UL, 3885124598UL, +420941376UL, 952826829UL, 1118787884UL, 1884590246UL, 1007052798UL, 539759724UL, 1521451317UL, 2486654530UL, 2761168910UL, 163554565UL, 1954997983UL, 2299046195UL, 1386788970UL, 2621928183UL, 2855206157UL, 3104695189UL, 3048269905UL, 4197635108UL, 1030118238UL, 2789863793UL, 3556473570UL, 1814057352UL, 255485979UL, 3657534664UL, 1317185871UL, 3004205219UL, 4041610788UL, 907575923UL, 4132859581UL, 416269582UL, 2980178044UL, 2338964683UL, +2236014545UL, 992386759UL, 3971362318UL, 2573125018UL, 579340117UL, 1371742490UL, 2033574313UL, 3809530180UL, 766585731UL, 3090313228UL, 463522324UL, 1482338913UL, 1816432405UL, 3101578277UL, 2418220643UL, 171265751UL, 2249118654UL, 1153849045UL, 2143267892UL, 2738647190UL, 1267908572UL, 1138658121UL, 623675874UL, 2944231951UL, 3096087202UL, 1283228910UL, 1810859539UL, 1179125634UL, 374714364UL, 2601862091UL, 1168357273UL, 376788629UL, +314507445UL, 1710922505UL, 1174181426UL, 2994990779UL, 1035692306UL, 2228303916UL, 3222680885UL, 752017703UL, 1815095408UL, 939691799UL, 3080056566UL, 1985366287UL, 126135654UL, 65327713UL, 3884301346UL, 2536445014UL, 3002467868UL, 955981361UL, 3678532805UL, 2616964783UL, 3168581019UL, 2173417616UL, 3772187171UL, 480342712UL, 451634742UL, 3562778450UL, 236095606UL, 1466950454UL, 434714388UL, 2369278293UL, 2894425895UL, 1766257461UL, +317862862UL, 551196237UL, 4193980239UL, 2952382875UL, 2416349742UL, 12728591UL, 2845888917UL, 1669184098UL, 3928626091UL, 2346338391UL, 2742989641UL, 2151963814UL, 3474431449UL, 3971510537UL, 942354812UL, 1005662613UL, 3668152847UL, 1974578319UL, 2328185090UL, 3234982376UL, 3629684995UL, 3954842437UL, 422675402UL, 477894725UL, 2931444539UL, 209352768UL, 1354642198UL, 3029840461UL, 35700837UL, 3388567298UL, 1660777984UL, 3508313874UL, +587724229UL, 2051237478UL, 1770178720UL, 3631430985UL, 2463932452UL, 144772179UL, 353408424UL, 3783114255UL, 3616422021UL, 1957797444UL, 228084488UL, 192277278UL, 611095909UL, 3638977910UL, 467407503UL, 3391861572UL, 847810786UL, 1413548572UL, 2427237699UL, 3018265496UL, 4249218445UL, 1722760791UL, 1487262638UL, 2322365400UL, 4208966227UL, 2352549740UL, 714311566UL, 1378213368UL, 954101391UL, 2989587005UL, 3946819548UL, 3109244860UL, +4183748384UL, 420941376UL, 952826829UL, 1118787884UL, 1884590246UL, 2199811809UL, 539759724UL, 1521451317UL, 2486654530UL, 2761168910UL, 1100080647UL, 1954997983UL, 2299046195UL, 1386788970UL, 2621928183UL, 916352763UL, 3104695189UL, 3048269905UL, 4197635108UL, 1030118238UL, 369866139UL, 3556473570UL, 1814057352UL, 255485979UL, 3657534664UL, 2916985473UL, 3004205219UL, 4041610788UL, 907575923UL, 4132859581UL, 3856599532UL, 2980178044UL, +2338964683UL, 2236014545UL, 992386759UL, 3393662326UL, 2573125018UL, 579340117UL, 1371742490UL, 2033574313UL, 1938766053UL, 766585731UL, 3090313228UL, 463522324UL, 1482338913UL, 2122086302UL, 3101578277UL, 2418220643UL, 171265751UL, 2249118654UL, 952602228UL, 2143267892UL, 2738647190UL, 1267908572UL, 1138658121UL, 1808026803UL, 2944231951UL, 3096087202UL, 1283228910UL, 1810859539UL, 3881666794UL, 374714364UL, 2601862091UL, 1168357273UL, +376788629UL, 728738466UL, 1710922505UL, 1174181426UL, 2994990779UL, 1035692306UL, 74930675UL, 3222680885UL, 752017703UL, 1815095408UL, 939691799UL, 3404352271UL, 1985366287UL, 126135654UL, 65327713UL, 3884301346UL, 1822629733UL, 3002467868UL, 955981361UL, 3678532805UL, 2616964783UL, 3865359567UL, 2173417616UL, 3772187171UL, 480342712UL, 451634742UL, 1099609112UL, 236095606UL, 1466950454UL, 434714388UL, 2369278293UL, 2671873359UL, +1766257461UL, 317862862UL, 551196237UL, 4193980239UL, 2006763654UL, 2416349742UL, 12728591UL, 2845888917UL, 1669184098UL, 2492983893UL, 2346338391UL, 2742989641UL, 2151963814UL, 3474431449UL, 2095232649UL, 942354812UL, 1005662613UL, 3668152847UL, 1974578319UL, 1748794756UL, 3234982376UL, 3629684995UL, 3954842437UL, 422675402UL, 2291986911UL, 2931444539UL, 209352768UL, 1354642198UL, 3029840461UL, 3772709822UL, 3388567298UL, 1660777984UL, +3508313874UL, 587724229UL, 2759789003UL, 1770178720UL, 3631430985UL, 2463932452UL, 144772179UL, 1572181309UL, 3783114255UL, 3616422021UL, 1957797444UL, 228084488UL, 4106643586UL, 611095909UL, 3638977910UL, 467407503UL, 3391861572UL, 927151111UL, 1413548572UL, 2427237699UL, 3018265496UL, 4249218445UL, 692575565UL, 1487262638UL, 2322365400UL, 4208966227UL, 2352549740UL, 1281886506UL, 1378213368UL, 954101391UL, 2989587005UL, 3946819548UL, +1861811740UL, 1484768905UL, 359662140UL, 4058479705UL, 1306547382UL, 514617018UL, 1685692791UL, 3370601554UL, 2920029077UL, 447798803UL, 3124262580UL, 1841693810UL, 583764638UL, 853545489UL, 2614348705UL, 1445696741UL, 4226719361UL, 1299450005UL, 7404137UL, 3158806368UL, 3487160245UL, 1410910965UL, 3697116584UL, 4272452035UL, 832215403UL, 4190877996UL, 2360539465UL, 1011144434UL, 546018244UL, 613443074UL, 2523894977UL, 998991923UL, +2569220540UL, 4221264346UL, 2627827148UL, 2606458015UL, 261584257UL, 4172552877UL, 1174774061UL, 1040006970UL, 2378868955UL, 1539192255UL, 1322624483UL, 3221782707UL, 3352886416UL, 3634686692UL, 65447704UL, 3962131218UL, 839088053UL, 4154193716UL, 1211888926UL, 319402483UL, 3922826413UL, 3799829447UL, 623726612UL, 1586183272UL, 1853729462UL, 2621029589UL, 708558605UL, 1618007233UL, 2784732545UL, 953859039UL, 921654620UL, 477148727UL, +3592256598UL, 2772318818UL, 1460772911UL, 1309227716UL, 3484274262UL, 3425161241UL, 1677052569UL, 2238155114UL, 2828087292UL, 2361598991UL, 4283732706UL, 1530059373UL, 1564048492UL, 243829114UL, 104328994UL, 3080249237UL, 2054985396UL, 408961407UL, 2978652320UL, 2412674552UL, 3794618070UL, 3644862703UL, 2095186402UL, 3294126752UL, 2970218740UL, 1800713612UL, 3806665216UL, 3990918051UL, 142666452UL, 531078813UL, 1079142774UL, 3437358350UL, +635943961UL, 255576894UL, 2991317718UL, 1208676456UL, 247449774UL, 454879171UL, 113230697UL, 3064123371UL, 336269028UL, 1137083842UL, 959568850UL, 2508623991UL, 3338418112UL, 2660268938UL, 1318010299UL, 3950178561UL, 1078499199UL, 1176289535UL, 3875152821UL, 1984420952UL, 1134199826UL, 2944539174UL, 3667625203UL, 2034152216UL, 1648355307UL, 2376447620UL, 2967418253UL, 185143450UL, 889002925UL, 3999315013UL, 661455858UL, 4026799358UL, +3626504428UL, 3544795311UL, 3642718771UL, 2467387138UL, 1034249749UL, 2051371333UL, 4251353248UL, 1575036366UL, 751400924UL, 2906720214UL, 1210002606UL, 916508568UL, 1728487600UL, 2478884914UL, 3081526615UL, 1867135009UL, 1955998382UL, 701713417UL, 512784398UL, 1255240210UL, 3665676113UL, 1771754697UL, 4000392442UL, 3342268855UL, 2677221913UL, 369054145UL, 4011912082UL, 748537647UL, 1626721797UL, 852497405UL, 168721778UL, 3091138383UL, +}, +{ +3781228998UL, 1787582256UL, 838267218UL, 2710632450UL, 690892139UL, 2484870604UL, 4151302318UL, 1844787776UL, 727768263UL, 1075391038UL, 1842903369UL, 2927332301UL, 3246688068UL, 1234715005UL, 2906526190UL, 3369636401UL, 3091858538UL, 3320767682UL, 920496809UL, 1406803705UL, 3163880457UL, 1540551653UL, 2733620168UL, 2588558057UL, 147277542UL, 803170440UL, 821275940UL, 3897549272UL, 151390608UL, 951639139UL, 904639695UL, 1106545578UL, +1514893712UL, 998760135UL, 2557458623UL, 4109877399UL, 578824730UL, 2174064027UL, 3352513900UL, 3206168298UL, 911932439UL, 2030004973UL, 3283902592UL, 3755877921UL, 250434692UL, 352122318UL, 977153640UL, 642640734UL, 2555395772UL, 2307695537UL, 2593565626UL, 3738143618UL, 734614254UL, 3276420511UL, 2636087597UL, 4157371578UL, 1082026387UL, 429736987UL, 3755125580UL, 1935957937UL, 3300547146UL, 3089498232UL, 4167244256UL, 1619189426UL, +1094447351UL, 1061842570UL, 3666470174UL, 810916769UL, 2263633079UL, 3863543843UL, 1804937521UL, 2774236887UL, 2858593613UL, 961498236UL, 1515309045UL, 1564424234UL, 2276602447UL, 2540994858UL, 78621171UL, 3575132456UL, 2958793283UL, 387554009UL, 688827573UL, 3833764146UL, 2611524056UL, 2296780370UL, 2411775612UL, 3790615886UL, 3399757437UL, 1385198595UL, 1005364336UL, 2093159919UL, 2091827252UL, 1461775197UL, 4225171212UL, 1185831033UL, +12264437UL, 1313835999UL, 556653278UL, 917105970UL, 1471530347UL, 2010243509UL, 3097827138UL, 1399987735UL, 273352191UL, 2505795417UL, 1336824946UL, 3358720963UL, 2874295267UL, 2282349617UL, 3478581038UL, 4027859424UL, 713597958UL, 4059691816UL, 2812811116UL, 2291324146UL, 932688463UL, 3001334051UL, 2028368589UL, 830582457UL, 3964293916UL, 4276849132UL, 1828058403UL, 1351688755UL, 2113265048UL, 42517349UL, 3100438883UL, 1137792178UL, +1479076106UL, 463377892UL, 3964913740UL, 2422362185UL, 436113863UL, 2044139049UL, 4197323265UL, 3275185975UL, 2655265571UL, 1674107588UL, 1496360114UL, 3642050139UL, 1739051417UL, 2393774399UL, 250035802UL, 10186306UL, 263338568UL, 3899157617UL, 3679157076UL, 2258085991UL, 1407319575UL, 899008067UL, 3679828833UL, 711086272UL, 2952963707UL, 3373894808UL, 445540851UL, 3405637490UL, 1343291195UL, 730888681UL, 507768703UL, 3473963321UL, +1779803564UL, 3781228998UL, 1787582256UL, 838267218UL, 2710632450UL, 2431224659UL, 2484870604UL, 4151302318UL, 1844787776UL, 727768263UL, 4012573268UL, 1842903369UL, 2927332301UL, 3246688068UL, 1234715005UL, 3405161215UL, 3369636401UL, 3091858538UL, 3320767682UL, 920496809UL, 400609988UL, 3163880457UL, 1540551653UL, 2733620168UL, 2588558057UL, 2137935937UL, 803170440UL, 821275940UL, 3897549272UL, 151390608UL, 194431797UL, 904639695UL, +1106545578UL, 1514893712UL, 998760135UL, 62528087UL, 4109877399UL, 578824730UL, 2174064027UL, 3352513900UL, 3495516649UL, 911932439UL, 2030004973UL, 3283902592UL, 3755877921UL, 1774462108UL, 352122318UL, 977153640UL, 642640734UL, 2555395772UL, 756528792UL, 2593565626UL, 3738143618UL, 734614254UL, 3276420511UL, 4086313763UL, 4157371578UL, 1082026387UL, 429736987UL, 3755125580UL, 526056489UL, 3300547146UL, 3089498232UL, 4167244256UL, +1619189426UL, 82235109UL, 1061842570UL, 3666470174UL, 810916769UL, 2263633079UL, 1110270726UL, 1804937521UL, 2774236887UL, 2858593613UL, 961498236UL, 1840197918UL, 1564424234UL, 2276602447UL, 2540994858UL, 78621171UL, 3690913528UL, 2958793283UL, 387554009UL, 688827573UL, 3833764146UL, 3626285597UL, 2296780370UL, 2411775612UL, 3790615886UL, 3399757437UL, 1561545830UL, 1005364336UL, 2093159919UL, 2091827252UL, 1461775197UL, 63358970UL, +1185831033UL, 12264437UL, 1313835999UL, 556653278UL, 3918754976UL, 1471530347UL, 2010243509UL, 3097827138UL, 1399987735UL, 2767111911UL, 2505795417UL, 1336824946UL, 3358720963UL, 2874295267UL, 902314853UL, 3478581038UL, 4027859424UL, 713597958UL, 4059691816UL, 1462989647UL, 2291324146UL, 932688463UL, 3001334051UL, 2028368589UL, 3594712587UL, 3964293916UL, 4276849132UL, 1828058403UL, 1351688755UL, 2571513800UL, 42517349UL, 3100438883UL, +1137792178UL, 1479076106UL, 140519541UL, 3964913740UL, 2422362185UL, 436113863UL, 2044139049UL, 226785542UL, 3275185975UL, 2655265571UL, 1674107588UL, 1496360114UL, 46428973UL, 1739051417UL, 2393774399UL, 250035802UL, 10186306UL, 4118320101UL, 3899157617UL, 3679157076UL, 2258085991UL, 1407319575UL, 4267866849UL, 3679828833UL, 711086272UL, 2952963707UL, 3373894808UL, 3662249794UL, 3405637490UL, 1343291195UL, 730888681UL, 507768703UL, +2930510271UL, 1779803564UL, 3781228998UL, 1787582256UL, 838267218UL, 1817693489UL, 2431224659UL, 2484870604UL, 4151302318UL, 1844787776UL, 1788220652UL, 4012573268UL, 1842903369UL, 2927332301UL, 3246688068UL, 2050648011UL, 3405161215UL, 3369636401UL, 3091858538UL, 3320767682UL, 241001958UL, 400609988UL, 3163880457UL, 1540551653UL, 2733620168UL, 3857223520UL, 2137935937UL, 803170440UL, 821275940UL, 3897549272UL, 1451986523UL, 194431797UL, +904639695UL, 1106545578UL, 1514893712UL, 4147878244UL, 62528087UL, 4109877399UL, 578824730UL, 2174064027UL, 461571251UL, 3495516649UL, 911932439UL, 2030004973UL, 3283902592UL, 1580354765UL, 1774462108UL, 352122318UL, 977153640UL, 642640734UL, 1019387737UL, 756528792UL, 2593565626UL, 3738143618UL, 734614254UL, 999431451UL, 4086313763UL, 4157371578UL, 1082026387UL, 429736987UL, 140091634UL, 526056489UL, 3300547146UL, 3089498232UL, +4167244256UL, 3202763095UL, 82235109UL, 1061842570UL, 3666470174UL, 810916769UL, 3663992550UL, 1110270726UL, 1804937521UL, 2774236887UL, 2858593613UL, 2203639366UL, 1840197918UL, 1564424234UL, 2276602447UL, 2540994858UL, 978199281UL, 3690913528UL, 2958793283UL, 387554009UL, 688827573UL, 375113876UL, 3626285597UL, 2296780370UL, 2411775612UL, 3790615886UL, 1277897939UL, 1561545830UL, 1005364336UL, 2093159919UL, 2091827252UL, 1631078873UL, +63358970UL, 1185831033UL, 12264437UL, 1313835999UL, 3872277948UL, 3918754976UL, 1471530347UL, 2010243509UL, 3097827138UL, 1291836608UL, 2767111911UL, 2505795417UL, 1336824946UL, 3358720963UL, 3954754615UL, 902314853UL, 3478581038UL, 4027859424UL, 713597958UL, 2198246306UL, 1462989647UL, 2291324146UL, 932688463UL, 3001334051UL, 2374736511UL, 3594712587UL, 3964293916UL, 4276849132UL, 1828058403UL, 3619038368UL, 2571513800UL, 42517349UL, +3100438883UL, 1137792178UL, 1146435746UL, 140519541UL, 3964913740UL, 2422362185UL, 436113863UL, 3460540392UL, 226785542UL, 3275185975UL, 2655265571UL, 1674107588UL, 1288223861UL, 46428973UL, 1739051417UL, 2393774399UL, 250035802UL, 1986226858UL, 4118320101UL, 3899157617UL, 3679157076UL, 2258085991UL, 551117761UL, 4267866849UL, 3679828833UL, 711086272UL, 2952963707UL, 1667866621UL, 3662249794UL, 3405637490UL, 1343291195UL, 730888681UL, +2381246695UL, 2930510271UL, 1779803564UL, 3781228998UL, 1787582256UL, 1236367773UL, 1817693489UL, 2431224659UL, 2484870604UL, 4151302318UL, 2902321811UL, 1788220652UL, 4012573268UL, 1842903369UL, 2927332301UL, 1185539274UL, 2050648011UL, 3405161215UL, 3369636401UL, 3091858538UL, 4240555382UL, 241001958UL, 400609988UL, 3163880457UL, 1540551653UL, 2539098607UL, 3857223520UL, 2137935937UL, 803170440UL, 821275940UL, 3485313735UL, 1451986523UL, +194431797UL, 904639695UL, 1106545578UL, 1633417190UL, 4147878244UL, 62528087UL, 4109877399UL, 578824730UL, 3671726812UL, 461571251UL, 3495516649UL, 911932439UL, 2030004973UL, 2002341352UL, 1580354765UL, 1774462108UL, 352122318UL, 977153640UL, 170033402UL, 1019387737UL, 756528792UL, 2593565626UL, 3738143618UL, 4160516213UL, 999431451UL, 4086313763UL, 4157371578UL, 1082026387UL, 1423352480UL, 140091634UL, 526056489UL, 3300547146UL, +3089498232UL, 4266971502UL, 3202763095UL, 82235109UL, 1061842570UL, 3666470174UL, 945994616UL, 3663992550UL, 1110270726UL, 1804937521UL, 2774236887UL, 3776581315UL, 2203639366UL, 1840197918UL, 1564424234UL, 2276602447UL, 928117829UL, 978199281UL, 3690913528UL, 2958793283UL, 387554009UL, 2817496615UL, 375113876UL, 3626285597UL, 2296780370UL, 2411775612UL, 1346030561UL, 1277897939UL, 1561545830UL, 1005364336UL, 2093159919UL, 821902776UL, +1631078873UL, 63358970UL, 1185831033UL, 12264437UL, 3192617499UL, 3872277948UL, 3918754976UL, 1471530347UL, 2010243509UL, 4011062105UL, 1291836608UL, 2767111911UL, 2505795417UL, 1336824946UL, 1593119272UL, 3954754615UL, 902314853UL, 3478581038UL, 4027859424UL, 1163079365UL, 2198246306UL, 1462989647UL, 2291324146UL, 932688463UL, 4018333691UL, 2374736511UL, 3594712587UL, 3964293916UL, 4276849132UL, 3902062310UL, 3619038368UL, 2571513800UL, +42517349UL, 3100438883UL, 1645455709UL, 1146435746UL, 140519541UL, 3964913740UL, 2422362185UL, 3338363150UL, 3460540392UL, 226785542UL, 3275185975UL, 2655265571UL, 3789582441UL, 1288223861UL, 46428973UL, 1739051417UL, 2393774399UL, 2257001236UL, 1986226858UL, 4118320101UL, 3899157617UL, 3679157076UL, 3707520907UL, 551117761UL, 4267866849UL, 3679828833UL, 711086272UL, 570153549UL, 1667866621UL, 3662249794UL, 3405637490UL, 1343291195UL, +112368058UL, 2615115584UL, 2865130041UL, 357584504UL, 528807633UL, 1816055434UL, 2854850066UL, 190222907UL, 1014915859UL, 3472967123UL, 2605782564UL, 3353130066UL, 540430076UL, 2087143725UL, 1571283916UL, 1604766425UL, 934199876UL, 3359569795UL, 4168578472UL, 1745876717UL, 277026333UL, 2679446726UL, 3582165485UL, 3954458991UL, 2615245404UL, 2410035461UL, 3442004248UL, 2814474875UL, 1734556428UL, 2653422310UL, 4033890533UL, 2373774914UL, +3011118469UL, 1276695464UL, 2995405818UL, 782363735UL, 2242531852UL, 4206829780UL, 1486885236UL, 3764707851UL, 1945614253UL, 1147926733UL, 701960774UL, 3435251514UL, 3626050187UL, 3587799538UL, 2399216643UL, 3217822006UL, 3600044386UL, 648239752UL, 2997947488UL, 1754097052UL, 4109638936UL, 3413714077UL, 1038375790UL, 3394259389UL, 2284776380UL, 2711956471UL, 1278424040UL, 1272230764UL, 3980809660UL, 1983901240UL, 894405781UL, 582621606UL, +1274260631UL, 763432985UL, 1862236664UL, 10249416UL, 3838574116UL, 1912270458UL, 3491686662UL, 2696669149UL, 312119069UL, 1812714569UL, 2729307370UL, 3045249652UL, 303684944UL, 503720764UL, 4029412414UL, 4101616421UL, 3484358948UL, 1261027935UL, 145713434UL, 2918444923UL, 2099546237UL, 3173693583UL, 3498398823UL, 3769717769UL, 2860220116UL, 2919562911UL, 1221047715UL, 1749384742UL, 1018968146UL, 2771587474UL, 2746107326UL, 1182859751UL, +2403805226UL, 2206395932UL, 1500348209UL, 1762634532UL, 3017223998UL, 2043185588UL, 2124568729UL, 1619852613UL, 3248258238UL, 3393223375UL, 644860154UL, 2465108160UL, 2358875673UL, 3643741304UL, 1891106916UL, 416443047UL, 3298583974UL, 1030877276UL, 2839390034UL, 4181398645UL, 1845333999UL, 3643365079UL, 1993116780UL, 1763857175UL, 1951718545UL, 3785659537UL, 4156412284UL, 4138026128UL, 3480291142UL, 54280556UL, 4169041146UL, 3130638398UL, +3236816184UL, 3559898998UL, 916420843UL, 938920758UL, 3425021599UL, 1528477728UL, 3597939783UL, 3516249439UL, 936528538UL, 4174817780UL, 2541489033UL, 3962368135UL, 2054336507UL, 2610093970UL, 3613025255UL, 3583905994UL, 2990129491UL, 332823408UL, 2505138276UL, 3811707598UL, 373987627UL, 4263703898UL, 1668946560UL, 3213253899UL, 2673819338UL, 1631405099UL, 3127443274UL, 549232331UL, 21447814UL, 1647238011UL, 3093799993UL, 1922712395UL, +}, +{ +4224788259UL, 3569487556UL, 1080137041UL, 2788623569UL, 856160888UL, 2195536417UL, 3030463035UL, 2906439247UL, 896055051UL, 1967105456UL, 2093562169UL, 2919742950UL, 546374698UL, 1372591815UL, 3773616637UL, 349073007UL, 1331102855UL, 3035367896UL, 1222622311UL, 2266618592UL, 74466398UL, 1140488004UL, 855606859UL, 3803728487UL, 3589743162UL, 2748402856UL, 1044387368UL, 1494850922UL, 2242660891UL, 3111566003UL, 2013737074UL, 163276737UL, +1526772858UL, 3047139947UL, 3150695453UL, 2583795468UL, 3628272447UL, 305282258UL, 2151108134UL, 2905708853UL, 1052800761UL, 3354632338UL, 1017036861UL, 2453680791UL, 2673902555UL, 1622154585UL, 2893733051UL, 3888482522UL, 306284440UL, 3245137245UL, 3480776670UL, 2865396581UL, 3571456526UL, 3284891766UL, 1393584874UL, 1057867320UL, 2888126310UL, 3302325443UL, 4135187530UL, 1770789166UL, 1615533805UL, 1438727397UL, 2921922012UL, 3156703516UL, +435047591UL, 2999350446UL, 575044884UL, 1001339111UL, 625824120UL, 2489346227UL, 2104489492UL, 2494528446UL, 1141458836UL, 4048430074UL, 2599022749UL, 2438694106UL, 1443850072UL, 3321658999UL, 87870515UL, 958195816UL, 380666771UL, 3062272732UL, 4178548642UL, 4274603044UL, 888566831UL, 3386636024UL, 1636806704UL, 2400069397UL, 3003029365UL, 1953620944UL, 3278772216UL, 1562778171UL, 2767090642UL, 14436957UL, 913966574UL, 1724553886UL, +2015261135UL, 4191296122UL, 1688939147UL, 110865735UL, 2913800286UL, 4131469475UL, 315962755UL, 1531174227UL, 1226678476UL, 3446400266UL, 3896297836UL, 539834883UL, 2871306264UL, 3333932675UL, 2229436010UL, 1928458456UL, 464682640UL, 1786180352UL, 162599143UL, 817038005UL, 3146256537UL, 1676400403UL, 2484731087UL, 702610427UL, 4005124049UL, 1691076958UL, 1268494739UL, 4093608833UL, 3757213737UL, 2627839929UL, 2884764386UL, 1548110665UL, +3361745333UL, 3955318088UL, 3264527857UL, 3969225726UL, 968269281UL, 2630991382UL, 2716444139UL, 1071781623UL, 3704437685UL, 1511193802UL, 843840414UL, 1277966236UL, 4141095880UL, 715016637UL, 1255888181UL, 1321941951UL, 1180174408UL, 1021629824UL, 3395369301UL, 3912221525UL, 2611782663UL, 4038117717UL, 2253029302UL, 974431991UL, 347200257UL, 886823557UL, 2275848777UL, 3732452739UL, 3708953729UL, 2688020866UL, 4185175489UL, 99605353UL, +2387945286UL, 4224788259UL, 3569487556UL, 1080137041UL, 2788623569UL, 238715294UL, 2195536417UL, 3030463035UL, 2906439247UL, 896055051UL, 3061240402UL, 2093562169UL, 2919742950UL, 546374698UL, 1372591815UL, 851057115UL, 349073007UL, 1331102855UL, 3035367896UL, 1222622311UL, 3305595574UL, 74466398UL, 1140488004UL, 855606859UL, 3803728487UL, 3838112757UL, 2748402856UL, 1044387368UL, 1494850922UL, 2242660891UL, 1038286760UL, 2013737074UL, +163276737UL, 1526772858UL, 3047139947UL, 3518918891UL, 2583795468UL, 3628272447UL, 305282258UL, 2151108134UL, 3555155951UL, 1052800761UL, 3354632338UL, 1017036861UL, 2453680791UL, 2394691836UL, 1622154585UL, 2893733051UL, 3888482522UL, 306284440UL, 2055552069UL, 3480776670UL, 2865396581UL, 3571456526UL, 3284891766UL, 1179339312UL, 1057867320UL, 2888126310UL, 3302325443UL, 4135187530UL, 683364318UL, 1615533805UL, 1438727397UL, 2921922012UL, +3156703516UL, 1333086260UL, 2999350446UL, 575044884UL, 1001339111UL, 625824120UL, 576119652UL, 2104489492UL, 2494528446UL, 1141458836UL, 4048430074UL, 786660788UL, 2438694106UL, 1443850072UL, 3321658999UL, 87870515UL, 457955380UL, 380666771UL, 3062272732UL, 4178548642UL, 4274603044UL, 2256710588UL, 3386636024UL, 1636806704UL, 2400069397UL, 3003029365UL, 3733049985UL, 3278772216UL, 1562778171UL, 2767090642UL, 14436957UL, 530062778UL, +1724553886UL, 2015261135UL, 4191296122UL, 1688939147UL, 2981240708UL, 2913800286UL, 4131469475UL, 315962755UL, 1531174227UL, 2433363617UL, 3446400266UL, 3896297836UL, 539834883UL, 2871306264UL, 2597546929UL, 2229436010UL, 1928458456UL, 464682640UL, 1786180352UL, 1165821797UL, 817038005UL, 3146256537UL, 1676400403UL, 2484731087UL, 3239493343UL, 4005124049UL, 1691076958UL, 1268494739UL, 4093608833UL, 2088690204UL, 2627839929UL, 2884764386UL, +1548110665UL, 3361745333UL, 1075350364UL, 3264527857UL, 3969225726UL, 968269281UL, 2630991382UL, 4103280359UL, 1071781623UL, 3704437685UL, 1511193802UL, 843840414UL, 1340474980UL, 4141095880UL, 715016637UL, 1255888181UL, 1321941951UL, 2512565938UL, 1021629824UL, 3395369301UL, 3912221525UL, 2611782663UL, 2287272047UL, 2253029302UL, 974431991UL, 347200257UL, 886823557UL, 3775715445UL, 3732452739UL, 3708953729UL, 2688020866UL, 4185175489UL, +2151114047UL, 2387945286UL, 4224788259UL, 3569487556UL, 1080137041UL, 879682447UL, 238715294UL, 2195536417UL, 3030463035UL, 2906439247UL, 3975397430UL, 3061240402UL, 2093562169UL, 2919742950UL, 546374698UL, 1928060945UL, 851057115UL, 349073007UL, 1331102855UL, 3035367896UL, 1148668613UL, 3305595574UL, 74466398UL, 1140488004UL, 855606859UL, 917923571UL, 3838112757UL, 2748402856UL, 1044387368UL, 1494850922UL, 995791756UL, 1038286760UL, +2013737074UL, 163276737UL, 1526772858UL, 1944370085UL, 3518918891UL, 2583795468UL, 3628272447UL, 305282258UL, 685261037UL, 3555155951UL, 1052800761UL, 3354632338UL, 1017036861UL, 1620076466UL, 2394691836UL, 1622154585UL, 2893733051UL, 3888482522UL, 4119309151UL, 2055552069UL, 3480776670UL, 2865396581UL, 3571456526UL, 4008552940UL, 1179339312UL, 1057867320UL, 2888126310UL, 3302325443UL, 2359989247UL, 683364318UL, 1615533805UL, 1438727397UL, +2921922012UL, 2092991022UL, 1333086260UL, 2999350446UL, 575044884UL, 1001339111UL, 2406217399UL, 576119652UL, 2104489492UL, 2494528446UL, 1141458836UL, 1856565466UL, 786660788UL, 2438694106UL, 1443850072UL, 3321658999UL, 2752588925UL, 457955380UL, 380666771UL, 3062272732UL, 4178548642UL, 1354877973UL, 2256710588UL, 3386636024UL, 1636806704UL, 2400069397UL, 2275777233UL, 3733049985UL, 3278772216UL, 1562778171UL, 2767090642UL, 3438624166UL, +530062778UL, 1724553886UL, 2015261135UL, 4191296122UL, 3842215040UL, 2981240708UL, 2913800286UL, 4131469475UL, 315962755UL, 2891870900UL, 2433363617UL, 3446400266UL, 3896297836UL, 539834883UL, 1390877376UL, 2597546929UL, 2229436010UL, 1928458456UL, 464682640UL, 1405678725UL, 1165821797UL, 817038005UL, 3146256537UL, 1676400403UL, 9522151UL, 3239493343UL, 4005124049UL, 1691076958UL, 1268494739UL, 4076978821UL, 2088690204UL, 2627839929UL, +2884764386UL, 1548110665UL, 3713129550UL, 1075350364UL, 3264527857UL, 3969225726UL, 968269281UL, 2669129178UL, 4103280359UL, 1071781623UL, 3704437685UL, 1511193802UL, 2032747975UL, 1340474980UL, 4141095880UL, 715016637UL, 1255888181UL, 1290704077UL, 2512565938UL, 1021629824UL, 3395369301UL, 3912221525UL, 767420943UL, 2287272047UL, 2253029302UL, 974431991UL, 347200257UL, 940587649UL, 3775715445UL, 3732452739UL, 3708953729UL, 2688020866UL, +1603856534UL, 2151114047UL, 2387945286UL, 4224788259UL, 3569487556UL, 4060395365UL, 879682447UL, 238715294UL, 2195536417UL, 3030463035UL, 774839173UL, 3975397430UL, 3061240402UL, 2093562169UL, 2919742950UL, 77503099UL, 1928060945UL, 851057115UL, 349073007UL, 1331102855UL, 4216140027UL, 1148668613UL, 3305595574UL, 74466398UL, 1140488004UL, 1728766104UL, 917923571UL, 3838112757UL, 2748402856UL, 1044387368UL, 1408900577UL, 995791756UL, +1038286760UL, 2013737074UL, 163276737UL, 936142172UL, 1944370085UL, 3518918891UL, 2583795468UL, 3628272447UL, 1701372078UL, 685261037UL, 3555155951UL, 1052800761UL, 3354632338UL, 2951922777UL, 1620076466UL, 2394691836UL, 1622154585UL, 2893733051UL, 2494523614UL, 4119309151UL, 2055552069UL, 3480776670UL, 2865396581UL, 3031455484UL, 4008552940UL, 1179339312UL, 1057867320UL, 2888126310UL, 2970791558UL, 2359989247UL, 683364318UL, 1615533805UL, +1438727397UL, 3697460033UL, 2092991022UL, 1333086260UL, 2999350446UL, 575044884UL, 2712063736UL, 2406217399UL, 576119652UL, 2104489492UL, 2494528446UL, 1096189230UL, 1856565466UL, 786660788UL, 2438694106UL, 1443850072UL, 3615481975UL, 2752588925UL, 457955380UL, 380666771UL, 3062272732UL, 2387056252UL, 1354877973UL, 2256710588UL, 3386636024UL, 1636806704UL, 517188972UL, 2275777233UL, 3733049985UL, 3278772216UL, 1562778171UL, 3436331606UL, +3438624166UL, 530062778UL, 1724553886UL, 2015261135UL, 1711407722UL, 3842215040UL, 2981240708UL, 2913800286UL, 4131469475UL, 878455086UL, 2891870900UL, 2433363617UL, 3446400266UL, 3896297836UL, 4251949215UL, 1390877376UL, 2597546929UL, 2229436010UL, 1928458456UL, 719826541UL, 1405678725UL, 1165821797UL, 817038005UL, 3146256537UL, 3883590627UL, 9522151UL, 3239493343UL, 4005124049UL, 1691076958UL, 893183073UL, 4076978821UL, 2088690204UL, +2627839929UL, 2884764386UL, 3312769297UL, 3713129550UL, 1075350364UL, 3264527857UL, 3969225726UL, 4161107579UL, 2669129178UL, 4103280359UL, 1071781623UL, 3704437685UL, 1400940789UL, 2032747975UL, 1340474980UL, 4141095880UL, 715016637UL, 1705234794UL, 1290704077UL, 2512565938UL, 1021629824UL, 3395369301UL, 2934074199UL, 767420943UL, 2287272047UL, 2253029302UL, 974431991UL, 3060035390UL, 940587649UL, 3775715445UL, 3732452739UL, 3708953729UL, +3489160434UL, 3200799223UL, 340420813UL, 2539294182UL, 2619616318UL, 456806966UL, 4272538790UL, 2994564124UL, 2757588894UL, 3493053179UL, 2946195469UL, 1402305257UL, 2266356503UL, 3512914478UL, 273195440UL, 3579761455UL, 862317458UL, 1894959361UL, 42596779UL, 376641729UL, 782820755UL, 716528645UL, 222675565UL, 4038035195UL, 311038326UL, 395780597UL, 2025474869UL, 404396572UL, 4138962756UL, 2441107014UL, 3525378401UL, 947085768UL, +3758218091UL, 3185789607UL, 638283508UL, 3802505926UL, 830259842UL, 1086400881UL, 3444485UL, 142418107UL, 4283468141UL, 1669846189UL, 955065888UL, 3864384467UL, 73139517UL, 136809048UL, 1444329434UL, 174974637UL, 3303183786UL, 282216656UL, 3114827080UL, 3811060015UL, 1610640996UL, 3824096289UL, 1123437514UL, 3826582808UL, 39407702UL, 2437666463UL, 2454206642UL, 830758422UL, 4190092654UL, 1941090912UL, 224373276UL, 3704201239UL, +3284012568UL, 4056152539UL, 1022047941UL, 1077111803UL, 3028336675UL, 3207391465UL, 3459202233UL, 1991240724UL, 4184491520UL, 1851863093UL, 1038639595UL, 1392247730UL, 2113875749UL, 1162388509UL, 2629935260UL, 3545260772UL, 991928712UL, 4064775043UL, 4180493781UL, 2134685922UL, 642853690UL, 290065503UL, 1629968UL, 3150373868UL, 3110755428UL, 2254306163UL, 421928533UL, 11426979UL, 3042809169UL, 786868170UL, 1287942583UL, 1851107769UL, +1444903906UL, 4150950197UL, 3737798306UL, 2848738554UL, 505924220UL, 2944131627UL, 2639930627UL, 1339887691UL, 2382166850UL, 2668971315UL, 3944739049UL, 2217612340UL, 4142682607UL, 997824216UL, 123465626UL, 844518179UL, 1161486362UL, 2706162053UL, 2966530827UL, 4103639053UL, 1837121393UL, 909648429UL, 298619078UL, 2057042454UL, 3613272637UL, 3609349032UL, 1664428748UL, 1871510359UL, 58508710UL, 1079418100UL, 3278870121UL, 3821562746UL, +16654909UL, 2530580589UL, 3361874982UL, 629910009UL, 2124761646UL, 2508133604UL, 1954315500UL, 3019833617UL, 141617625UL, 1653192078UL, 1541695589UL, 1223978475UL, 3875963510UL, 3028691587UL, 3450826564UL, 2185849120UL, 1956475624UL, 3053842172UL, 3550887830UL, 2672339803UL, 176823785UL, 913229929UL, 681399502UL, 2256486297UL, 2881672598UL, 597153273UL, 2782767695UL, 1133158067UL, 4126077325UL, 3456027404UL, 754062201UL, 4069172986UL, +}, +{ +2441935114UL, 3465447683UL, 2897229686UL, 3845380309UL, 1199633364UL, 495424232UL, 2490548037UL, 581670528UL, 2467171733UL, 2200094863UL, 2163927790UL, 3895792830UL, 2097210789UL, 1606544633UL, 1305562517UL, 4072525389UL, 3256142090UL, 349440478UL, 3920932491UL, 2462464051UL, 1075951496UL, 2835763703UL, 1593198055UL, 2380945625UL, 543531323UL, 3182766507UL, 2927484354UL, 2877470578UL, 4153923603UL, 2443156156UL, 1168544900UL, 888955615UL, +3605412824UL, 1336677864UL, 3256116974UL, 2884036014UL, 4070749843UL, 2989661773UL, 1095584023UL, 1370834065UL, 3534389580UL, 312378113UL, 3190819203UL, 1247574926UL, 2046019470UL, 3536918510UL, 1479030180UL, 847820646UL, 3992973956UL, 3827223401UL, 4113429617UL, 3504933502UL, 295000614UL, 2238923504UL, 3485717254UL, 290246351UL, 1064210816UL, 2848539559UL, 2617134888UL, 422213010UL, 2796674561UL, 3568250500UL, 2736237915UL, 3950756060UL, +1527249993UL, 3603540278UL, 4115393386UL, 2851621193UL, 4230341156UL, 905168850UL, 3916344126UL, 1496013046UL, 206343742UL, 2894205125UL, 1082918859UL, 2746480417UL, 3077328661UL, 1209440053UL, 3258293856UL, 1032236533UL, 3043332566UL, 446879604UL, 587022214UL, 1614371566UL, 3040899994UL, 3686422145UL, 937325128UL, 1968833679UL, 169086151UL, 4075432555UL, 1196046411UL, 3101745581UL, 4228079966UL, 2942213563UL, 1195005323UL, 1673491641UL, +1762746534UL, 3641827252UL, 694590905UL, 1828365460UL, 513716230UL, 3106485486UL, 2441593994UL, 4044462965UL, 3628121101UL, 3957990629UL, 179764922UL, 579361186UL, 3474393871UL, 2474241006UL, 4031850878UL, 3120409532UL, 4011587898UL, 3682942579UL, 3257272830UL, 3097029759UL, 2652540191UL, 1128762588UL, 1040256382UL, 2743736716UL, 334893087UL, 1892049031UL, 2603159239UL, 3712772023UL, 2126593224UL, 3465793906UL, 3180780589UL, 725740783UL, +3728108967UL, 573931936UL, 137996587UL, 110756053UL, 3984787930UL, 3773232816UL, 3406981985UL, 1783088630UL, 2080089781UL, 195827466UL, 1409073281UL, 867635355UL, 3049533211UL, 486687054UL, 2570137956UL, 527522011UL, 1084454084UL, 1019222771UL, 1415565066UL, 650794786UL, 629618803UL, 1237709131UL, 1241899078UL, 2751644247UL, 2792313337UL, 649402117UL, 275078659UL, 752459111UL, 2173220853UL, 3207031798UL, 821073585UL, 3005400729UL, +1085152012UL, 2441935114UL, 3465447683UL, 2897229686UL, 3845380309UL, 3573898488UL, 495424232UL, 2490548037UL, 581670528UL, 2467171733UL, 1208279791UL, 2163927790UL, 3895792830UL, 2097210789UL, 1606544633UL, 2148733343UL, 4072525389UL, 3256142090UL, 349440478UL, 3920932491UL, 657289255UL, 1075951496UL, 2835763703UL, 1593198055UL, 2380945625UL, 149487931UL, 3182766507UL, 2927484354UL, 2877470578UL, 4153923603UL, 606130344UL, 1168544900UL, +888955615UL, 3605412824UL, 1336677864UL, 53448770UL, 2884036014UL, 4070749843UL, 2989661773UL, 1095584023UL, 2766144383UL, 3534389580UL, 312378113UL, 3190819203UL, 1247574926UL, 1530609481UL, 3536918510UL, 1479030180UL, 847820646UL, 3992973956UL, 154171325UL, 4113429617UL, 3504933502UL, 295000614UL, 2238923504UL, 282708664UL, 290246351UL, 1064210816UL, 2848539559UL, 2617134888UL, 36906646UL, 2796674561UL, 3568250500UL, 2736237915UL, +3950756060UL, 3416260072UL, 3603540278UL, 4115393386UL, 2851621193UL, 4230341156UL, 448215287UL, 3916344126UL, 1496013046UL, 206343742UL, 2894205125UL, 2420861244UL, 2746480417UL, 3077328661UL, 1209440053UL, 3258293856UL, 2545287695UL, 3043332566UL, 446879604UL, 587022214UL, 1614371566UL, 958587333UL, 3686422145UL, 937325128UL, 1968833679UL, 169086151UL, 154576725UL, 1196046411UL, 3101745581UL, 4228079966UL, 2942213563UL, 2487464668UL, +1673491641UL, 1762746534UL, 3641827252UL, 694590905UL, 3754606623UL, 513716230UL, 3106485486UL, 2441593994UL, 4044462965UL, 3064108377UL, 3957990629UL, 179764922UL, 579361186UL, 3474393871UL, 2138270428UL, 4031850878UL, 3120409532UL, 4011587898UL, 3682942579UL, 4015980199UL, 3097029759UL, 2652540191UL, 1128762588UL, 1040256382UL, 3908621649UL, 334893087UL, 1892049031UL, 2603159239UL, 3712772023UL, 3291038350UL, 3465793906UL, 3180780589UL, +725740783UL, 3728108967UL, 436976908UL, 137996587UL, 110756053UL, 3984787930UL, 3773232816UL, 1000054791UL, 1783088630UL, 2080089781UL, 195827466UL, 1409073281UL, 3036813614UL, 3049533211UL, 486687054UL, 2570137956UL, 527522011UL, 3669951690UL, 1019222771UL, 1415565066UL, 650794786UL, 629618803UL, 4140569538UL, 1241899078UL, 2751644247UL, 2792313337UL, 649402117UL, 2946582304UL, 752459111UL, 2173220853UL, 3207031798UL, 821073585UL, +1738142977UL, 1085152012UL, 2441935114UL, 3465447683UL, 2897229686UL, 2707197334UL, 3573898488UL, 495424232UL, 2490548037UL, 581670528UL, 2365865647UL, 1208279791UL, 2163927790UL, 3895792830UL, 2097210789UL, 3219551420UL, 2148733343UL, 4072525389UL, 3256142090UL, 349440478UL, 3706519197UL, 657289255UL, 1075951496UL, 2835763703UL, 1593198055UL, 2200084531UL, 149487931UL, 3182766507UL, 2927484354UL, 2877470578UL, 2394288661UL, 606130344UL, +1168544900UL, 888955615UL, 3605412824UL, 1503975597UL, 53448770UL, 2884036014UL, 4070749843UL, 2989661773UL, 243605110UL, 2766144383UL, 3534389580UL, 312378113UL, 3190819203UL, 2398088088UL, 1530609481UL, 3536918510UL, 1479030180UL, 847820646UL, 2940281320UL, 154171325UL, 4113429617UL, 3504933502UL, 295000614UL, 3078701806UL, 282708664UL, 290246351UL, 1064210816UL, 2848539559UL, 3960345380UL, 36906646UL, 2796674561UL, 3568250500UL, +2736237915UL, 2657034787UL, 3416260072UL, 3603540278UL, 4115393386UL, 2851621193UL, 3847740427UL, 448215287UL, 3916344126UL, 1496013046UL, 206343742UL, 3419083433UL, 2420861244UL, 2746480417UL, 3077328661UL, 1209440053UL, 3824237152UL, 2545287695UL, 3043332566UL, 446879604UL, 587022214UL, 506352928UL, 958587333UL, 3686422145UL, 937325128UL, 1968833679UL, 1808935939UL, 154576725UL, 1196046411UL, 3101745581UL, 4228079966UL, 709576348UL, +2487464668UL, 1673491641UL, 1762746534UL, 3641827252UL, 3968332142UL, 3754606623UL, 513716230UL, 3106485486UL, 2441593994UL, 1453443785UL, 3064108377UL, 3957990629UL, 179764922UL, 579361186UL, 1454621561UL, 2138270428UL, 4031850878UL, 3120409532UL, 4011587898UL, 898119245UL, 4015980199UL, 3097029759UL, 2652540191UL, 1128762588UL, 1131456853UL, 3908621649UL, 334893087UL, 1892049031UL, 2603159239UL, 4280222837UL, 3291038350UL, 3465793906UL, +3180780589UL, 725740783UL, 1515867399UL, 436976908UL, 137996587UL, 110756053UL, 3984787930UL, 1295994548UL, 1000054791UL, 1783088630UL, 2080089781UL, 195827466UL, 252558267UL, 3036813614UL, 3049533211UL, 486687054UL, 2570137956UL, 786434419UL, 3669951690UL, 1019222771UL, 1415565066UL, 650794786UL, 1316734597UL, 4140569538UL, 1241899078UL, 2751644247UL, 2792313337UL, 4014748337UL, 2946582304UL, 752459111UL, 2173220853UL, 3207031798UL, +2903407363UL, 1738142977UL, 1085152012UL, 2441935114UL, 3465447683UL, 1082984764UL, 2707197334UL, 3573898488UL, 495424232UL, 2490548037UL, 240094068UL, 2365865647UL, 1208279791UL, 2163927790UL, 3895792830UL, 1107651215UL, 3219551420UL, 2148733343UL, 4072525389UL, 3256142090UL, 681942656UL, 3706519197UL, 657289255UL, 1075951496UL, 2835763703UL, 2172774506UL, 2200084531UL, 149487931UL, 3182766507UL, 2927484354UL, 3069592433UL, 2394288661UL, +606130344UL, 1168544900UL, 888955615UL, 757163746UL, 1503975597UL, 53448770UL, 2884036014UL, 4070749843UL, 1705538727UL, 243605110UL, 2766144383UL, 3534389580UL, 312378113UL, 2256467250UL, 2398088088UL, 1530609481UL, 3536918510UL, 1479030180UL, 1360826079UL, 2940281320UL, 154171325UL, 4113429617UL, 3504933502UL, 714934244UL, 3078701806UL, 282708664UL, 290246351UL, 1064210816UL, 3694453051UL, 3960345380UL, 36906646UL, 2796674561UL, +3568250500UL, 3400481963UL, 2657034787UL, 3416260072UL, 3603540278UL, 4115393386UL, 1466632735UL, 3847740427UL, 448215287UL, 3916344126UL, 1496013046UL, 2893537514UL, 3419083433UL, 2420861244UL, 2746480417UL, 3077328661UL, 2815979224UL, 3824237152UL, 2545287695UL, 3043332566UL, 446879604UL, 3719452721UL, 506352928UL, 958587333UL, 3686422145UL, 937325128UL, 2653904510UL, 1808935939UL, 154576725UL, 1196046411UL, 3101745581UL, 425411544UL, +709576348UL, 2487464668UL, 1673491641UL, 1762746534UL, 1960605594UL, 3968332142UL, 3754606623UL, 513716230UL, 3106485486UL, 2881551071UL, 1453443785UL, 3064108377UL, 3957990629UL, 179764922UL, 1408218536UL, 1454621561UL, 2138270428UL, 4031850878UL, 3120409532UL, 3700386494UL, 898119245UL, 4015980199UL, 3097029759UL, 2652540191UL, 2181464767UL, 1131456853UL, 3908621649UL, 334893087UL, 1892049031UL, 4220220071UL, 4280222837UL, 3291038350UL, +3465793906UL, 3180780589UL, 1737123182UL, 1515867399UL, 436976908UL, 137996587UL, 110756053UL, 1360813614UL, 1295994548UL, 1000054791UL, 1783088630UL, 2080089781UL, 1019367341UL, 252558267UL, 3036813614UL, 3049533211UL, 486687054UL, 387915679UL, 786434419UL, 3669951690UL, 1019222771UL, 1415565066UL, 4267042909UL, 1316734597UL, 4140569538UL, 1241899078UL, 2751644247UL, 3622120385UL, 4014748337UL, 2946582304UL, 752459111UL, 2173220853UL, +1128460687UL, 2268047031UL, 239933818UL, 4141570430UL, 1318816940UL, 2378987660UL, 731877825UL, 3950952879UL, 2975574698UL, 2938375136UL, 431933385UL, 154404673UL, 2020658234UL, 846815781UL, 822137193UL, 1057315444UL, 3632584082UL, 3263363094UL, 942201956UL, 2704683551UL, 1768107067UL, 4009446092UL, 3090701064UL, 701246680UL, 3548419575UL, 3873366129UL, 1639833080UL, 2401253373UL, 66597794UL, 2515774132UL, 516246524UL, 4232115668UL, +34426096UL, 2206423458UL, 3628832867UL, 2776950121UL, 2782943544UL, 2058958317UL, 1805852726UL, 2151415233UL, 2940074103UL, 2318397273UL, 3067676663UL, 3127709351UL, 71509976UL, 115529187UL, 1841252918UL, 2217805156UL, 733917373UL, 2432474677UL, 1416887641UL, 1895320369UL, 2779694586UL, 510547269UL, 2614743018UL, 759552691UL, 2264773752UL, 305497497UL, 1082013785UL, 1681067734UL, 1085957001UL, 846460632UL, 2824079919UL, 1820633139UL, +3686495295UL, 3978521319UL, 1734452426UL, 4105472656UL, 1771256166UL, 1578071897UL, 1972844727UL, 2048372515UL, 3002132226UL, 1889169118UL, 2932142799UL, 2166712623UL, 592016143UL, 1116895096UL, 889321536UL, 375621825UL, 2935845994UL, 1982459859UL, 3336799370UL, 294519309UL, 2661638345UL, 1089335942UL, 227150969UL, 1454919198UL, 3780503305UL, 1862290968UL, 1491836299UL, 766546986UL, 3638407467UL, 925906735UL, 208891816UL, 236714698UL, +2853181150UL, 3889751556UL, 2161215392UL, 853579433UL, 2131555681UL, 1396396345UL, 1088128136UL, 978252562UL, 2134024308UL, 2429920974UL, 1159468871UL, 2395949266UL, 1441791888UL, 916521377UL, 3950270431UL, 2663319810UL, 3873120593UL, 2080989388UL, 2896532502UL, 3176181708UL, 1736685126UL, 4081767288UL, 3515770288UL, 1371473598UL, 1491850178UL, 4284949727UL, 2774513541UL, 1541596000UL, 3948112869UL, 2114538326UL, 2641532252UL, 1837244955UL, +2292505300UL, 3179787565UL, 639953781UL, 785902378UL, 3852544833UL, 553508260UL, 23014564UL, 106722100UL, 2705412979UL, 3449440367UL, 950636401UL, 870804158UL, 629831074UL, 424163855UL, 373653940UL, 2739378330UL, 377730945UL, 418426029UL, 267367218UL, 554678849UL, 4222664331UL, 3346048120UL, 1870226737UL, 2435616108UL, 3747040233UL, 698046507UL, 1671346285UL, 4127293033UL, 568612264UL, 3467142937UL, 1627988025UL, 1305525598UL, +}, +{ +2246605826UL, 215030128UL, 871645668UL, 3402612852UL, 423273439UL, 316965236UL, 47416561UL, 1470716454UL, 2288582385UL, 2021890755UL, 2148091363UL, 167227868UL, 3085506034UL, 3365950545UL, 1170282137UL, 1345986409UL, 197195155UL, 2644113318UL, 2491271090UL, 2597072003UL, 170335901UL, 2540851884UL, 2584420407UL, 3609142920UL, 3052130502UL, 4018095157UL, 2850805299UL, 2777821400UL, 110647395UL, 3262987676UL, 1447103309UL, 3632575579UL, +3243210595UL, 1892770504UL, 4214485953UL, 38676169UL, 2431628817UL, 2836918800UL, 272023527UL, 2825888902UL, 2794421955UL, 2354379386UL, 452404203UL, 584718212UL, 1915053836UL, 1455821656UL, 4264066935UL, 1150980581UL, 3792433350UL, 3104909316UL, 441521402UL, 3807587668UL, 275969953UL, 3970844623UL, 3323695518UL, 3909107329UL, 290225599UL, 957520066UL, 4048181850UL, 2623778463UL, 1957371891UL, 540091753UL, 3072448879UL, 2386916346UL, +392549194UL, 1261391184UL, 4137605148UL, 314807135UL, 2916930821UL, 3168561018UL, 2332027308UL, 1967082817UL, 1849256214UL, 1141134412UL, 1206824012UL, 2088102210UL, 4170914605UL, 3399892824UL, 59190648UL, 1657183299UL, 1314626253UL, 500606287UL, 413229420UL, 1245395908UL, 664681UL, 2726979120UL, 3408998445UL, 2318397638UL, 1882820077UL, 2073055266UL, 4262833629UL, 1348801932UL, 229857331UL, 3086071450UL, 1327801028UL, 812015573UL, +2214355282UL, 2232635690UL, 3162540418UL, 2049877621UL, 470752564UL, 2527480795UL, 1285499716UL, 220173566UL, 4239277569UL, 788168494UL, 3748855859UL, 1360707769UL, 449512212UL, 1238219398UL, 2880205975UL, 2755133627UL, 372409230UL, 411800575UL, 2455333195UL, 4080817864UL, 3556684908UL, 2857940866UL, 1969081563UL, 2526852668UL, 1026062474UL, 1849785784UL, 3552290093UL, 4214448UL, 460332681UL, 30890894UL, 1108618048UL, 272438799UL, +3339891045UL, 1512685591UL, 1310038443UL, 2431938882UL, 1478442144UL, 2804640700UL, 3426381347UL, 861206186UL, 290322827UL, 2736623609UL, 327318125UL, 1922859957UL, 1939922519UL, 3539608908UL, 3442377433UL, 3868710131UL, 2244493875UL, 47774461UL, 3858864626UL, 3294523981UL, 1798515481UL, 565017248UL, 2633378137UL, 811307482UL, 1743357106UL, 419676111UL, 1688841846UL, 1799884674UL, 1720546272UL, 3900863156UL, 3506303345UL, 1719438472UL, +576775454UL, 2246605826UL, 215030128UL, 871645668UL, 3402612852UL, 619000856UL, 316965236UL, 47416561UL, 1470716454UL, 2288582385UL, 3464704266UL, 2148091363UL, 167227868UL, 3085506034UL, 3365950545UL, 901169164UL, 1345986409UL, 197195155UL, 2644113318UL, 2491271090UL, 3243741640UL, 170335901UL, 2540851884UL, 2584420407UL, 3609142920UL, 2051834116UL, 4018095157UL, 2850805299UL, 2777821400UL, 110647395UL, 2822981113UL, 1447103309UL, +3632575579UL, 3243210595UL, 1892770504UL, 1947501555UL, 38676169UL, 2431628817UL, 2836918800UL, 272023527UL, 4010280501UL, 2794421955UL, 2354379386UL, 452404203UL, 584718212UL, 3991257933UL, 1455821656UL, 4264066935UL, 1150980581UL, 3792433350UL, 2151631692UL, 441521402UL, 3807587668UL, 275969953UL, 3970844623UL, 3965914153UL, 3909107329UL, 290225599UL, 957520066UL, 4048181850UL, 4011285909UL, 1957371891UL, 540091753UL, 3072448879UL, +2386916346UL, 1347453316UL, 1261391184UL, 4137605148UL, 314807135UL, 2916930821UL, 840822698UL, 2332027308UL, 1967082817UL, 1849256214UL, 1141134412UL, 960593185UL, 2088102210UL, 4170914605UL, 3399892824UL, 59190648UL, 2261593014UL, 1314626253UL, 500606287UL, 413229420UL, 1245395908UL, 3401527918UL, 2726979120UL, 3408998445UL, 2318397638UL, 1882820077UL, 1683077666UL, 4262833629UL, 1348801932UL, 229857331UL, 3086071450UL, 3363644507UL, +812015573UL, 2214355282UL, 2232635690UL, 3162540418UL, 3579858747UL, 470752564UL, 2527480795UL, 1285499716UL, 220173566UL, 2294101261UL, 788168494UL, 3748855859UL, 1360707769UL, 449512212UL, 28595866UL, 2880205975UL, 2755133627UL, 372409230UL, 411800575UL, 1905311140UL, 4080817864UL, 3556684908UL, 2857940866UL, 1969081563UL, 148561593UL, 1026062474UL, 1849785784UL, 3552290093UL, 4214448UL, 2237247821UL, 30890894UL, 1108618048UL, +272438799UL, 3339891045UL, 169576507UL, 1310038443UL, 2431938882UL, 1478442144UL, 2804640700UL, 4119485855UL, 861206186UL, 290322827UL, 2736623609UL, 327318125UL, 3408620608UL, 1939922519UL, 3539608908UL, 3442377433UL, 3868710131UL, 1188056275UL, 47774461UL, 3858864626UL, 3294523981UL, 1798515481UL, 1228896851UL, 2633378137UL, 811307482UL, 1743357106UL, 419676111UL, 3111013241UL, 1799884674UL, 1720546272UL, 3900863156UL, 3506303345UL, +1474164586UL, 576775454UL, 2246605826UL, 215030128UL, 871645668UL, 2968519387UL, 619000856UL, 316965236UL, 47416561UL, 1470716454UL, 9648980UL, 3464704266UL, 2148091363UL, 167227868UL, 3085506034UL, 1505294373UL, 901169164UL, 1345986409UL, 197195155UL, 2644113318UL, 1227359150UL, 3243741640UL, 170335901UL, 2540851884UL, 2584420407UL, 1205921163UL, 2051834116UL, 4018095157UL, 2850805299UL, 2777821400UL, 2967529310UL, 2822981113UL, +1447103309UL, 3632575579UL, 3243210595UL, 532996977UL, 1947501555UL, 38676169UL, 2431628817UL, 2836918800UL, 1761031313UL, 4010280501UL, 2794421955UL, 2354379386UL, 452404203UL, 1222630846UL, 3991257933UL, 1455821656UL, 4264066935UL, 1150980581UL, 2344548386UL, 2151631692UL, 441521402UL, 3807587668UL, 275969953UL, 963889269UL, 3965914153UL, 3909107329UL, 290225599UL, 957520066UL, 4176220201UL, 4011285909UL, 1957371891UL, 540091753UL, +3072448879UL, 1810164615UL, 1347453316UL, 1261391184UL, 4137605148UL, 314807135UL, 2672526663UL, 840822698UL, 2332027308UL, 1967082817UL, 1849256214UL, 734862208UL, 960593185UL, 2088102210UL, 4170914605UL, 3399892824UL, 2471507530UL, 2261593014UL, 1314626253UL, 500606287UL, 413229420UL, 970185057UL, 3401527918UL, 2726979120UL, 3408998445UL, 2318397638UL, 708987193UL, 1683077666UL, 4262833629UL, 1348801932UL, 229857331UL, 749849397UL, +3363644507UL, 812015573UL, 2214355282UL, 2232635690UL, 2901095495UL, 3579858747UL, 470752564UL, 2527480795UL, 1285499716UL, 941862108UL, 2294101261UL, 788168494UL, 3748855859UL, 1360707769UL, 3818227212UL, 28595866UL, 2880205975UL, 2755133627UL, 372409230UL, 570110534UL, 1905311140UL, 4080817864UL, 3556684908UL, 2857940866UL, 2253777974UL, 148561593UL, 1026062474UL, 1849785784UL, 3552290093UL, 1525559608UL, 2237247821UL, 30890894UL, +1108618048UL, 272438799UL, 3996203631UL, 169576507UL, 1310038443UL, 2431938882UL, 1478442144UL, 2857841871UL, 4119485855UL, 861206186UL, 290322827UL, 2736623609UL, 1184217272UL, 3408620608UL, 1939922519UL, 3539608908UL, 3442377433UL, 1263700272UL, 1188056275UL, 47774461UL, 3858864626UL, 3294523981UL, 2611619UL, 1228896851UL, 2633378137UL, 811307482UL, 1743357106UL, 1930089302UL, 3111013241UL, 1799884674UL, 1720546272UL, 3900863156UL, +2370003471UL, 1474164586UL, 576775454UL, 2246605826UL, 215030128UL, 540197019UL, 2968519387UL, 619000856UL, 316965236UL, 47416561UL, 3585128733UL, 9648980UL, 3464704266UL, 2148091363UL, 167227868UL, 509283324UL, 1505294373UL, 901169164UL, 1345986409UL, 197195155UL, 3983525470UL, 1227359150UL, 3243741640UL, 170335901UL, 2540851884UL, 2812935262UL, 1205921163UL, 2051834116UL, 4018095157UL, 2850805299UL, 2798430304UL, 2967529310UL, +2822981113UL, 1447103309UL, 3632575579UL, 389184524UL, 532996977UL, 1947501555UL, 38676169UL, 2431628817UL, 1055068556UL, 1761031313UL, 4010280501UL, 2794421955UL, 2354379386UL, 965687576UL, 1222630846UL, 3991257933UL, 1455821656UL, 4264066935UL, 1551000086UL, 2344548386UL, 2151631692UL, 441521402UL, 3807587668UL, 3701529910UL, 963889269UL, 3965914153UL, 3909107329UL, 290225599UL, 1771599976UL, 4176220201UL, 4011285909UL, 1957371891UL, +540091753UL, 1670159873UL, 1810164615UL, 1347453316UL, 1261391184UL, 4137605148UL, 4191698993UL, 2672526663UL, 840822698UL, 2332027308UL, 1967082817UL, 3098515331UL, 734862208UL, 960593185UL, 2088102210UL, 4170914605UL, 2470055060UL, 2471507530UL, 2261593014UL, 1314626253UL, 500606287UL, 1100764382UL, 970185057UL, 3401527918UL, 2726979120UL, 3408998445UL, 4100198161UL, 708987193UL, 1683077666UL, 4262833629UL, 1348801932UL, 3744209503UL, +749849397UL, 3363644507UL, 812015573UL, 2214355282UL, 3217409412UL, 2901095495UL, 3579858747UL, 470752564UL, 2527480795UL, 552979949UL, 941862108UL, 2294101261UL, 788168494UL, 3748855859UL, 2355231228UL, 3818227212UL, 28595866UL, 2880205975UL, 2755133627UL, 833553378UL, 570110534UL, 1905311140UL, 4080817864UL, 3556684908UL, 4124102038UL, 2253777974UL, 148561593UL, 1026062474UL, 1849785784UL, 656329297UL, 1525559608UL, 2237247821UL, +30890894UL, 1108618048UL, 1464443032UL, 3996203631UL, 169576507UL, 1310038443UL, 2431938882UL, 2100788071UL, 2857841871UL, 4119485855UL, 861206186UL, 290322827UL, 3653047356UL, 1184217272UL, 3408620608UL, 1939922519UL, 3539608908UL, 4267170500UL, 1263700272UL, 1188056275UL, 47774461UL, 3858864626UL, 1046565728UL, 2611619UL, 1228896851UL, 2633378137UL, 811307482UL, 1312393456UL, 1930089302UL, 3111013241UL, 1799884674UL, 1720546272UL, +1199041144UL, 2406753856UL, 2108495166UL, 2126345981UL, 1524975128UL, 1269232392UL, 3162531748UL, 3076707658UL, 1736955170UL, 1036221745UL, 1232435193UL, 3945348482UL, 1057631163UL, 520376289UL, 4154435769UL, 1280565077UL, 1865705876UL, 1030078366UL, 1140849319UL, 1769263412UL, 1161866807UL, 2768552980UL, 561022685UL, 2712685799UL, 1501252058UL, 3608433719UL, 3138564149UL, 4093654128UL, 1218455911UL, 892700607UL, 2012017510UL, 3568315757UL, +4002239824UL, 1754440379UL, 2641708101UL, 1027390781UL, 199831087UL, 1261208885UL, 2058433786UL, 2101649235UL, 220966013UL, 3445375335UL, 1100438514UL, 4075559840UL, 4244062658UL, 3417249884UL, 150102478UL, 3337395219UL, 2464869101UL, 3720375949UL, 93353579UL, 2329780067UL, 777826834UL, 2745626035UL, 2984812746UL, 568848158UL, 1593919595UL, 1166619196UL, 96177504UL, 305329591UL, 4271176854UL, 3829149188UL, 1551058535UL, 2828280993UL, +1367551996UL, 4208083082UL, 2260803683UL, 3118708147UL, 434935608UL, 702805370UL, 3544156958UL, 792712531UL, 231019757UL, 136272259UL, 4049968615UL, 2722527811UL, 603697698UL, 2891035509UL, 4270409302UL, 1220615076UL, 1932569338UL, 1084454986UL, 468729683UL, 2377913518UL, 2068946556UL, 530579176UL, 1422294615UL, 4032799503UL, 2065706770UL, 604700228UL, 98049660UL, 3182511353UL, 935830212UL, 1938107848UL, 1266035034UL, 957505506UL, +2758220503UL, 1805223938UL, 3393041584UL, 3958541336UL, 2695487012UL, 3355668819UL, 276889675UL, 3098939423UL, 415941187UL, 180737121UL, 2638873657UL, 1103150707UL, 4255168358UL, 2736183195UL, 1275942292UL, 2687807236UL, 538129710UL, 3337005391UL, 3941968393UL, 1113153386UL, 3813628384UL, 1775835369UL, 296314749UL, 1697642748UL, 3614403315UL, 1953056095UL, 2102878063UL, 3161706344UL, 2207159580UL, 3078233525UL, 3836286614UL, 886914072UL, +1884037075UL, 4135819784UL, 1616380780UL, 1672616998UL, 3879848699UL, 2277472209UL, 3933249848UL, 2428044648UL, 2876076879UL, 165724720UL, 2277165385UL, 1984963196UL, 1456923194UL, 2406217222UL, 3388886718UL, 47522558UL, 1903557801UL, 1959641458UL, 2325355446UL, 3251147398UL, 2266553941UL, 2243962024UL, 1420017618UL, 1791159474UL, 1793406225UL, 601509698UL, 3207357979UL, 1189285184UL, 148538800UL, 2077251302UL, 3267239327UL, 2851475997UL, +}, +{ +2628162153UL, 3861478870UL, 2769884494UL, 3423483820UL, 1118276924UL, 536776894UL, 3742490940UL, 550084334UL, 2441329856UL, 2604618499UL, 2308745810UL, 1178166365UL, 1345165241UL, 4039508109UL, 1246601384UL, 3843182157UL, 2200144237UL, 91750284UL, 4290064840UL, 3363597477UL, 3243492274UL, 4271100308UL, 4186328336UL, 2291901989UL, 1834723222UL, 372220743UL, 2190417067UL, 2624886324UL, 3567647862UL, 1591175369UL, 2278087682UL, 2461678432UL, +232820452UL, 2714694382UL, 3070258434UL, 2412655444UL, 2667664607UL, 249083056UL, 4166379751UL, 1360927521UL, 2247816079UL, 3253689753UL, 1563674427UL, 1914999382UL, 2101454952UL, 1067816947UL, 1098201917UL, 4054175236UL, 1805828534UL, 1815913104UL, 738357340UL, 2597170030UL, 1689737432UL, 2004663483UL, 1160995461UL, 1008175050UL, 2004702919UL, 4258654415UL, 938972594UL, 2121583885UL, 2208729114UL, 276726877UL, 3973538591UL, 2991069145UL, +2345655326UL, 2980162173UL, 1915611444UL, 2332104940UL, 2382102873UL, 2324437093UL, 2640563452UL, 2680619359UL, 3413490949UL, 2140843463UL, 2424016743UL, 3735508133UL, 3421831326UL, 4037977349UL, 3721506282UL, 510431975UL, 1014707294UL, 1378686477UL, 1939678832UL, 2223101760UL, 2067687989UL, 309274614UL, 276596103UL, 3757624719UL, 1212251468UL, 2649271847UL, 4140361758UL, 2634738350UL, 2029358730UL, 3205861896UL, 3090549771UL, 3775019657UL, +2018542036UL, 3675805680UL, 3946144023UL, 331655838UL, 326568491UL, 1867863527UL, 1550945400UL, 3087000670UL, 2342003578UL, 3949479453UL, 586483056UL, 147951307UL, 503062740UL, 3823927166UL, 2789767841UL, 3121654578UL, 634238762UL, 4084629478UL, 3878778788UL, 435990088UL, 1724770389UL, 1403031256UL, 1334135626UL, 1096780503UL, 3288769545UL, 2793293893UL, 80675548UL, 1637232257UL, 1856565474UL, 2675485635UL, 1961165681UL, 1647512786UL, +4190102851UL, 4081320784UL, 2853183400UL, 3812341867UL, 278236392UL, 1700614299UL, 2765246084UL, 3846866009UL, 1220806787UL, 3655684157UL, 1133921183UL, 2779125219UL, 523552281UL, 703813725UL, 3110126767UL, 823843890UL, 290243102UL, 821297176UL, 364959993UL, 3381862130UL, 2305271841UL, 356059263UL, 2558018765UL, 3235968999UL, 1070598970UL, 2444411636UL, 3636221117UL, 4275517214UL, 4035198865UL, 3339014315UL, 2911872812UL, 4049586122UL, +4211583637UL, 2628162153UL, 3861478870UL, 2769884494UL, 3423483820UL, 3254616321UL, 536776894UL, 3742490940UL, 550084334UL, 2441329856UL, 1909596092UL, 2308745810UL, 1178166365UL, 1345165241UL, 4039508109UL, 1349347043UL, 3843182157UL, 2200144237UL, 91750284UL, 4290064840UL, 803098068UL, 3243492274UL, 4271100308UL, 4186328336UL, 2291901989UL, 2575673198UL, 372220743UL, 2190417067UL, 2624886324UL, 3567647862UL, 132569424UL, 2278087682UL, +2461678432UL, 232820452UL, 2714694382UL, 3490648253UL, 2412655444UL, 2667664607UL, 249083056UL, 4166379751UL, 3503294711UL, 2247816079UL, 3253689753UL, 1563674427UL, 1914999382UL, 3121933565UL, 1067816947UL, 1098201917UL, 4054175236UL, 1805828534UL, 816420552UL, 738357340UL, 2597170030UL, 1689737432UL, 2004663483UL, 397934907UL, 1008175050UL, 2004702919UL, 4258654415UL, 938972594UL, 156733019UL, 2208729114UL, 276726877UL, 3973538591UL, +2991069145UL, 2470446383UL, 2980162173UL, 1915611444UL, 2332104940UL, 2382102873UL, 3265195583UL, 2640563452UL, 2680619359UL, 3413490949UL, 2140843463UL, 142464483UL, 3735508133UL, 3421831326UL, 4037977349UL, 3721506282UL, 1898668265UL, 1014707294UL, 1378686477UL, 1939678832UL, 2223101760UL, 4085776926UL, 309274614UL, 276596103UL, 3757624719UL, 1212251468UL, 1116423339UL, 4140361758UL, 2634738350UL, 2029358730UL, 3205861896UL, 880658361UL, +3775019657UL, 2018542036UL, 3675805680UL, 3946144023UL, 839516623UL, 326568491UL, 1867863527UL, 1550945400UL, 3087000670UL, 420309880UL, 3949479453UL, 586483056UL, 147951307UL, 503062740UL, 416618471UL, 2789767841UL, 3121654578UL, 634238762UL, 4084629478UL, 1120413065UL, 435990088UL, 1724770389UL, 1403031256UL, 1334135626UL, 240966420UL, 3288769545UL, 2793293893UL, 80675548UL, 1637232257UL, 1785064235UL, 2675485635UL, 1961165681UL, +1647512786UL, 4190102851UL, 2775407492UL, 2853183400UL, 3812341867UL, 278236392UL, 1700614299UL, 2439624528UL, 3846866009UL, 1220806787UL, 3655684157UL, 1133921183UL, 366933679UL, 523552281UL, 703813725UL, 3110126767UL, 823843890UL, 132468066UL, 821297176UL, 364959993UL, 3381862130UL, 2305271841UL, 1048450041UL, 2558018765UL, 3235968999UL, 1070598970UL, 2444411636UL, 1699430013UL, 4275517214UL, 4035198865UL, 3339014315UL, 2911872812UL, +324524850UL, 4211583637UL, 2628162153UL, 3861478870UL, 2769884494UL, 1995585079UL, 3254616321UL, 536776894UL, 3742490940UL, 550084334UL, 2121458511UL, 1909596092UL, 2308745810UL, 1178166365UL, 1345165241UL, 3067877274UL, 1349347043UL, 3843182157UL, 2200144237UL, 91750284UL, 1246148630UL, 803098068UL, 3243492274UL, 4271100308UL, 4186328336UL, 2932236493UL, 2575673198UL, 372220743UL, 2190417067UL, 2624886324UL, 3945294599UL, 132569424UL, +2278087682UL, 2461678432UL, 232820452UL, 3341915918UL, 3490648253UL, 2412655444UL, 2667664607UL, 249083056UL, 2307336284UL, 3503294711UL, 2247816079UL, 3253689753UL, 1563674427UL, 1717494311UL, 3121933565UL, 1067816947UL, 1098201917UL, 4054175236UL, 971917867UL, 816420552UL, 738357340UL, 2597170030UL, 1689737432UL, 243915062UL, 397934907UL, 1008175050UL, 2004702919UL, 4258654415UL, 1807067458UL, 156733019UL, 2208729114UL, 276726877UL, +3973538591UL, 1909483753UL, 2470446383UL, 2980162173UL, 1915611444UL, 2332104940UL, 3454651559UL, 3265195583UL, 2640563452UL, 2680619359UL, 3413490949UL, 462852932UL, 142464483UL, 3735508133UL, 3421831326UL, 4037977349UL, 1372088341UL, 1898668265UL, 1014707294UL, 1378686477UL, 1939678832UL, 752503486UL, 4085776926UL, 309274614UL, 276596103UL, 3757624719UL, 4193030119UL, 1116423339UL, 4140361758UL, 2634738350UL, 2029358730UL, 1725105892UL, +880658361UL, 3775019657UL, 2018542036UL, 3675805680UL, 3496508290UL, 839516623UL, 326568491UL, 1867863527UL, 1550945400UL, 2685835387UL, 420309880UL, 3949479453UL, 586483056UL, 147951307UL, 1639139280UL, 416618471UL, 2789767841UL, 3121654578UL, 634238762UL, 3622035469UL, 1120413065UL, 435990088UL, 1724770389UL, 1403031256UL, 3548817929UL, 240966420UL, 3288769545UL, 2793293893UL, 80675548UL, 3119506726UL, 1785064235UL, 2675485635UL, +1961165681UL, 1647512786UL, 4019542081UL, 2775407492UL, 2853183400UL, 3812341867UL, 278236392UL, 3487875111UL, 2439624528UL, 3846866009UL, 1220806787UL, 3655684157UL, 3303554633UL, 366933679UL, 523552281UL, 703813725UL, 3110126767UL, 2477354049UL, 132468066UL, 821297176UL, 364959993UL, 3381862130UL, 4065162466UL, 1048450041UL, 2558018765UL, 3235968999UL, 1070598970UL, 191819556UL, 1699430013UL, 4275517214UL, 4035198865UL, 3339014315UL, +3588518026UL, 324524850UL, 4211583637UL, 2628162153UL, 3861478870UL, 3361198093UL, 1995585079UL, 3254616321UL, 536776894UL, 3742490940UL, 3912424229UL, 2121458511UL, 1909596092UL, 2308745810UL, 1178166365UL, 1882174246UL, 3067877274UL, 1349347043UL, 3843182157UL, 2200144237UL, 1210030640UL, 1246148630UL, 803098068UL, 3243492274UL, 4271100308UL, 402141998UL, 2932236493UL, 2575673198UL, 372220743UL, 2190417067UL, 1883679642UL, 3945294599UL, +132569424UL, 2278087682UL, 2461678432UL, 708189294UL, 3341915918UL, 3490648253UL, 2412655444UL, 2667664607UL, 2871800434UL, 2307336284UL, 3503294711UL, 2247816079UL, 3253689753UL, 2113837945UL, 1717494311UL, 3121933565UL, 1067816947UL, 1098201917UL, 1041869160UL, 971917867UL, 816420552UL, 738357340UL, 2597170030UL, 2306273930UL, 243915062UL, 397934907UL, 1008175050UL, 2004702919UL, 2345434637UL, 1807067458UL, 156733019UL, 2208729114UL, +276726877UL, 2452083872UL, 1909483753UL, 2470446383UL, 2980162173UL, 1915611444UL, 2043489400UL, 3454651559UL, 3265195583UL, 2640563452UL, 2680619359UL, 2845757473UL, 462852932UL, 142464483UL, 3735508133UL, 3421831326UL, 25103542UL, 1372088341UL, 1898668265UL, 1014707294UL, 1378686477UL, 2680788341UL, 752503486UL, 4085776926UL, 309274614UL, 276596103UL, 3663266970UL, 4193030119UL, 1116423339UL, 4140361758UL, 2634738350UL, 453005903UL, +1725105892UL, 880658361UL, 3775019657UL, 2018542036UL, 2601909713UL, 3496508290UL, 839516623UL, 326568491UL, 1867863527UL, 3474340574UL, 2685835387UL, 420309880UL, 3949479453UL, 586483056UL, 297934218UL, 1639139280UL, 416618471UL, 2789767841UL, 3121654578UL, 958889718UL, 3622035469UL, 1120413065UL, 435990088UL, 1724770389UL, 2589603756UL, 3548817929UL, 240966420UL, 3288769545UL, 2793293893UL, 972899860UL, 3119506726UL, 1785064235UL, +2675485635UL, 1961165681UL, 2576799764UL, 4019542081UL, 2775407492UL, 2853183400UL, 3812341867UL, 159345352UL, 3487875111UL, 2439624528UL, 3846866009UL, 1220806787UL, 3367080935UL, 3303554633UL, 366933679UL, 523552281UL, 703813725UL, 1717395617UL, 2477354049UL, 132468066UL, 821297176UL, 364959993UL, 1088290332UL, 4065162466UL, 1048450041UL, 2558018765UL, 3235968999UL, 285340039UL, 191819556UL, 1699430013UL, 4275517214UL, 4035198865UL, +3544133220UL, 285121978UL, 1175302919UL, 4101282768UL, 513236580UL, 890655666UL, 3051849972UL, 2315486379UL, 3067287276UL, 3134806925UL, 3926373006UL, 2502825498UL, 461387883UL, 770459119UL, 3121636621UL, 1243065093UL, 1612354797UL, 659033930UL, 621176955UL, 214256518UL, 371573588UL, 1168438671UL, 1233027650UL, 1984255965UL, 659404177UL, 1218841419UL, 1226193512UL, 4247589702UL, 334814687UL, 980422670UL, 2518384561UL, 4041002302UL, +1203659320UL, 509643440UL, 2528499450UL, 1512213710UL, 4052651069UL, 1378025938UL, 3436277168UL, 2797728577UL, 463383787UL, 1184681947UL, 283482187UL, 2421891582UL, 3200080903UL, 373817869UL, 452807139UL, 2002545143UL, 1068199574UL, 3390998240UL, 377559317UL, 1548403713UL, 1580741080UL, 253591624UL, 759280679UL, 2174360733UL, 1687952097UL, 1325235423UL, 3856575909UL, 652218568UL, 4130230594UL, 3757998028UL, 1349431618UL, 2870775414UL, +229741978UL, 1900794007UL, 201310771UL, 4075023260UL, 3390078853UL, 3572716207UL, 1959949436UL, 1000128498UL, 1636575064UL, 241058867UL, 2075461870UL, 1819342070UL, 619233032UL, 3164328001UL, 4280892071UL, 4219074185UL, 2719764611UL, 3827656652UL, 4062556527UL, 621515766UL, 2542375627UL, 3901998596UL, 2295087430UL, 2880672054UL, 2940372823UL, 2318642706UL, 914614262UL, 2549699597UL, 2907475284UL, 3901259809UL, 2663167002UL, 3775306719UL, +2212887565UL, 1271873285UL, 3673659531UL, 3856609875UL, 1195785209UL, 1204338358UL, 2785362544UL, 2398696803UL, 3038377816UL, 4288025143UL, 262511310UL, 4151907455UL, 924716723UL, 3298769960UL, 2065938273UL, 3277412030UL, 122636766UL, 2164055077UL, 1000638739UL, 2044933533UL, 2935604716UL, 2772787255UL, 3727331409UL, 1315627932UL, 2610657438UL, 832931652UL, 452359900UL, 681035792UL, 3312648046UL, 1059435047UL, 1489639114UL, 3647631796UL, +417952902UL, 731020350UL, 2847472725UL, 2779076784UL, 2674295324UL, 487600023UL, 2925909449UL, 3997011591UL, 3697231318UL, 967300591UL, 2310856069UL, 684710043UL, 811911286UL, 4174732177UL, 1010656728UL, 702780279UL, 920081774UL, 1578296057UL, 944734808UL, 2884038169UL, 2885919611UL, 2633474915UL, 2508946673UL, 3579216621UL, 656143887UL, 426108406UL, 2166202683UL, 991797657UL, 706498590UL, 561168186UL, 1144619335UL, 3136206425UL, +}, +{ +3600072515UL, 651444872UL, 2348224675UL, 1684848433UL, 1913333701UL, 3413467790UL, 1567802204UL, 2125206188UL, 2463158656UL, 2251055204UL, 4132590383UL, 3192977084UL, 3718261822UL, 3431519430UL, 3506690867UL, 1313208797UL, 637811069UL, 12802085UL, 3456408080UL, 166617386UL, 1764224523UL, 4016338923UL, 2225367442UL, 2461647273UL, 3137989854UL, 373730087UL, 3013524828UL, 242949418UL, 3443491410UL, 3671816408UL, 2391000148UL, 3964107377UL, +716535366UL, 1884597979UL, 3917515811UL, 3441985401UL, 2472173593UL, 4034695117UL, 2486526143UL, 1658764329UL, 1873516415UL, 884116165UL, 814992460UL, 1069506245UL, 3797556389UL, 838088473UL, 2279863068UL, 1002637017UL, 4174541774UL, 644478743UL, 4138151954UL, 4030442072UL, 297710349UL, 3507828614UL, 1403493362UL, 3132267322UL, 227377796UL, 388148240UL, 2760904473UL, 352998924UL, 1603734504UL, 1528807885UL, 2283620218UL, 737730350UL, +2761342715UL, 809367801UL, 1667936422UL, 1510238771UL, 3762862328UL, 1171532060UL, 647580587UL, 1460988169UL, 3944640945UL, 2331043627UL, 1965076564UL, 2913596196UL, 2960957119UL, 1316491503UL, 3086954934UL, 3471945989UL, 2485431762UL, 692294537UL, 3148362914UL, 3371415765UL, 2990795967UL, 706771848UL, 3734467362UL, 2768750385UL, 2061275631UL, 3935582473UL, 1449841372UL, 1239527551UL, 592595530UL, 1685341001UL, 3352323357UL, 4147988039UL, +4003871917UL, 4035869533UL, 3022833195UL, 1266052547UL, 1429645393UL, 565106475UL, 327014810UL, 348739711UL, 3262918351UL, 915509292UL, 397356303UL, 3248246752UL, 1122821778UL, 2373765260UL, 1795464380UL, 3485315196UL, 1731529670UL, 86888382UL, 2789587372UL, 850847993UL, 1794523220UL, 577288126UL, 1996569530UL, 909222664UL, 2601642298UL, 1469035973UL, 2727135938UL, 3467853736UL, 633292505UL, 756260381UL, 41782389UL, 226724724UL, +3633968708UL, 1695315503UL, 1846857904UL, 3185630605UL, 823108172UL, 3609336496UL, 3422558797UL, 2865413534UL, 564221408UL, 591845835UL, 2498463433UL, 3573926554UL, 1336639597UL, 4180084026UL, 3195588503UL, 2822864841UL, 1916459886UL, 2073158796UL, 56968669UL, 1234765864UL, 2456093821UL, 3500058416UL, 3146725645UL, 3295822468UL, 4135196531UL, 628000231UL, 745509757UL, 4143543278UL, 1941480444UL, 3607603517UL, 2288239329UL, 1991437813UL, +4081693775UL, 3600072515UL, 651444872UL, 2348224675UL, 1684848433UL, 3748890341UL, 3413467790UL, 1567802204UL, 2125206188UL, 2463158656UL, 1516568259UL, 4132590383UL, 3192977084UL, 3718261822UL, 3431519430UL, 461466951UL, 1313208797UL, 637811069UL, 12802085UL, 3456408080UL, 3444149988UL, 1764224523UL, 4016338923UL, 2225367442UL, 2461647273UL, 2594402002UL, 373730087UL, 3013524828UL, 242949418UL, 3443491410UL, 2740782133UL, 2391000148UL, +3964107377UL, 716535366UL, 1884597979UL, 3161911677UL, 3441985401UL, 2472173593UL, 4034695117UL, 2486526143UL, 3623045141UL, 1873516415UL, 884116165UL, 814992460UL, 1069506245UL, 1053106195UL, 838088473UL, 2279863068UL, 1002637017UL, 4174541774UL, 1806935386UL, 4138151954UL, 4030442072UL, 297710349UL, 3507828614UL, 2328331779UL, 3132267322UL, 227377796UL, 388148240UL, 2760904473UL, 3654577129UL, 1603734504UL, 1528807885UL, 2283620218UL, +737730350UL, 2134741424UL, 809367801UL, 1667936422UL, 1510238771UL, 3762862328UL, 4084104273UL, 647580587UL, 1460988169UL, 3944640945UL, 2331043627UL, 3458437694UL, 2913596196UL, 2960957119UL, 1316491503UL, 3086954934UL, 2404530503UL, 2485431762UL, 692294537UL, 3148362914UL, 3371415765UL, 3697728317UL, 706771848UL, 3734467362UL, 2768750385UL, 2061275631UL, 1337146928UL, 1449841372UL, 1239527551UL, 592595530UL, 1685341001UL, 3121493408UL, +4147988039UL, 4003871917UL, 4035869533UL, 3022833195UL, 2709537023UL, 1429645393UL, 565106475UL, 327014810UL, 348739711UL, 1278935671UL, 915509292UL, 397356303UL, 3248246752UL, 1122821778UL, 1086107506UL, 1795464380UL, 3485315196UL, 1731529670UL, 86888382UL, 3645735256UL, 850847993UL, 1794523220UL, 577288126UL, 1996569530UL, 1126950UL, 2601642298UL, 1469035973UL, 2727135938UL, 3467853736UL, 3668777652UL, 756260381UL, 41782389UL, +226724724UL, 3633968708UL, 738274780UL, 1846857904UL, 3185630605UL, 823108172UL, 3609336496UL, 3371270228UL, 2865413534UL, 564221408UL, 591845835UL, 2498463433UL, 4157618574UL, 1336639597UL, 4180084026UL, 3195588503UL, 2822864841UL, 3844986377UL, 2073158796UL, 56968669UL, 1234765864UL, 2456093821UL, 1001761927UL, 3146725645UL, 3295822468UL, 4135196531UL, 628000231UL, 541676954UL, 4143543278UL, 1941480444UL, 3607603517UL, 2288239329UL, +1068806322UL, 4081693775UL, 3600072515UL, 651444872UL, 2348224675UL, 47991343UL, 3748890341UL, 3413467790UL, 1567802204UL, 2125206188UL, 2662653600UL, 1516568259UL, 4132590383UL, 3192977084UL, 3718261822UL, 2554440323UL, 461466951UL, 1313208797UL, 637811069UL, 12802085UL, 982676468UL, 3444149988UL, 1764224523UL, 4016338923UL, 2225367442UL, 451503008UL, 2594402002UL, 373730087UL, 3013524828UL, 242949418UL, 1086137206UL, 2740782133UL, +2391000148UL, 3964107377UL, 716535366UL, 731470002UL, 3161911677UL, 3441985401UL, 2472173593UL, 4034695117UL, 44456710UL, 3623045141UL, 1873516415UL, 884116165UL, 814992460UL, 4004771121UL, 1053106195UL, 838088473UL, 2279863068UL, 1002637017UL, 1587145121UL, 1806935386UL, 4138151954UL, 4030442072UL, 297710349UL, 2570695340UL, 2328331779UL, 3132267322UL, 227377796UL, 388148240UL, 3570998746UL, 3654577129UL, 1603734504UL, 1528807885UL, +2283620218UL, 188017185UL, 2134741424UL, 809367801UL, 1667936422UL, 1510238771UL, 1503613101UL, 4084104273UL, 647580587UL, 1460988169UL, 3944640945UL, 3301866374UL, 3458437694UL, 2913596196UL, 2960957119UL, 1316491503UL, 2674694926UL, 2404530503UL, 2485431762UL, 692294537UL, 3148362914UL, 1645995464UL, 3697728317UL, 706771848UL, 3734467362UL, 2768750385UL, 670964862UL, 1337146928UL, 1449841372UL, 1239527551UL, 592595530UL, 4204421245UL, +3121493408UL, 4147988039UL, 4003871917UL, 4035869533UL, 3652555523UL, 2709537023UL, 1429645393UL, 565106475UL, 327014810UL, 2716443687UL, 1278935671UL, 915509292UL, 397356303UL, 3248246752UL, 204830047UL, 1086107506UL, 1795464380UL, 3485315196UL, 1731529670UL, 662578255UL, 3645735256UL, 850847993UL, 1794523220UL, 577288126UL, 4237140216UL, 1126950UL, 2601642298UL, 1469035973UL, 2727135938UL, 92392213UL, 3668777652UL, 756260381UL, +41782389UL, 226724724UL, 1123105466UL, 738274780UL, 1846857904UL, 3185630605UL, 823108172UL, 2880110296UL, 3371270228UL, 2865413534UL, 564221408UL, 591845835UL, 2356214088UL, 4157618574UL, 1336639597UL, 4180084026UL, 3195588503UL, 4266261353UL, 3844986377UL, 2073158796UL, 56968669UL, 1234765864UL, 3166457679UL, 1001761927UL, 3146725645UL, 3295822468UL, 4135196531UL, 496099322UL, 541676954UL, 4143543278UL, 1941480444UL, 3607603517UL, +2578543796UL, 1068806322UL, 4081693775UL, 3600072515UL, 651444872UL, 1131603264UL, 47991343UL, 3748890341UL, 3413467790UL, 1567802204UL, 2823058381UL, 2662653600UL, 1516568259UL, 4132590383UL, 3192977084UL, 4247798474UL, 2554440323UL, 461466951UL, 1313208797UL, 637811069UL, 2744898822UL, 982676468UL, 3444149988UL, 1764224523UL, 4016338923UL, 2845667517UL, 451503008UL, 2594402002UL, 373730087UL, 3013524828UL, 3442521115UL, 1086137206UL, +2740782133UL, 2391000148UL, 3964107377UL, 4060067791UL, 731470002UL, 3161911677UL, 3441985401UL, 2472173593UL, 4227407417UL, 44456710UL, 3623045141UL, 1873516415UL, 884116165UL, 2550700713UL, 4004771121UL, 1053106195UL, 838088473UL, 2279863068UL, 1296332348UL, 1587145121UL, 1806935386UL, 4138151954UL, 4030442072UL, 2552496880UL, 2570695340UL, 2328331779UL, 3132267322UL, 227377796UL, 3887816270UL, 3570998746UL, 3654577129UL, 1603734504UL, +1528807885UL, 3365552060UL, 188017185UL, 2134741424UL, 809367801UL, 1667936422UL, 1358744245UL, 1503613101UL, 4084104273UL, 647580587UL, 1460988169UL, 2318828416UL, 3301866374UL, 3458437694UL, 2913596196UL, 2960957119UL, 49464436UL, 2674694926UL, 2404530503UL, 2485431762UL, 692294537UL, 1803418945UL, 1645995464UL, 3697728317UL, 706771848UL, 3734467362UL, 2407932841UL, 670964862UL, 1337146928UL, 1449841372UL, 1239527551UL, 1124552917UL, +4204421245UL, 3121493408UL, 4147988039UL, 4003871917UL, 3542256025UL, 3652555523UL, 2709537023UL, 1429645393UL, 565106475UL, 2063548817UL, 2716443687UL, 1278935671UL, 915509292UL, 397356303UL, 1049916999UL, 204830047UL, 1086107506UL, 1795464380UL, 3485315196UL, 2183256184UL, 662578255UL, 3645735256UL, 850847993UL, 1794523220UL, 2943700388UL, 4237140216UL, 1126950UL, 2601642298UL, 1469035973UL, 535075238UL, 92392213UL, 3668777652UL, +756260381UL, 41782389UL, 1043025574UL, 1123105466UL, 738274780UL, 1846857904UL, 3185630605UL, 3324487649UL, 2880110296UL, 3371270228UL, 2865413534UL, 564221408UL, 2528599862UL, 2356214088UL, 4157618574UL, 1336639597UL, 4180084026UL, 592094844UL, 4266261353UL, 3844986377UL, 2073158796UL, 56968669UL, 629503707UL, 3166457679UL, 1001761927UL, 3146725645UL, 3295822468UL, 2725304934UL, 496099322UL, 541676954UL, 4143543278UL, 1941480444UL, +3557859116UL, 31832949UL, 3805791401UL, 4056283801UL, 242812250UL, 4072988068UL, 2316479446UL, 2260433816UL, 2211372380UL, 2039672698UL, 2947948280UL, 4106140026UL, 342600216UL, 98745656UL, 2541799209UL, 926067404UL, 2733213159UL, 3163537903UL, 2800370126UL, 2099121446UL, 1279545581UL, 3699822446UL, 3764095615UL, 690503808UL, 3799637505UL, 1000641330UL, 242588257UL, 3657834529UL, 824791208UL, 2529299371UL, 4081898575UL, 2120338882UL, +1273883107UL, 1680877886UL, 1253060582UL, 1760259553UL, 2250763915UL, 31780198UL, 2511451445UL, 3102141340UL, 861489797UL, 105854693UL, 70927387UL, 2725671050UL, 688282241UL, 2622257646UL, 3466254816UL, 1905008219UL, 2980966436UL, 2154356718UL, 1075686806UL, 1966147415UL, 2357249256UL, 2684600972UL, 400926709UL, 523449509UL, 2891602783UL, 673425710UL, 3766475216UL, 2319843954UL, 3471794777UL, 13838840UL, 1908374660UL, 3839606132UL, +3829795513UL, 3403561639UL, 1369780874UL, 4276407916UL, 3217619UL, 1284482371UL, 2020138237UL, 2804427294UL, 1194369854UL, 1094800747UL, 2119081501UL, 726494474UL, 490750173UL, 1117517565UL, 3498786968UL, 2163060528UL, 696718831UL, 2780121254UL, 1286646297UL, 1594539045UL, 411215116UL, 1407268753UL, 2759136967UL, 2179483407UL, 2088977769UL, 2737453188UL, 2411478102UL, 3112688013UL, 4112484868UL, 429293789UL, 426390687UL, 3158027863UL, +2601897382UL, 1546855515UL, 4258208908UL, 3691263847UL, 2394986813UL, 1986623921UL, 2632462203UL, 3551311099UL, 3309482741UL, 2632571927UL, 1200010240UL, 554555739UL, 4119397989UL, 622818813UL, 3116222066UL, 1801867255UL, 2738500841UL, 1452697246UL, 733457482UL, 1680421668UL, 1035766144UL, 468847991UL, 3606474156UL, 2612692123UL, 730556693UL, 859096521UL, 4005878655UL, 1138273887UL, 2182363629UL, 2710579590UL, 3345140092UL, 2562710857UL, +3859276724UL, 2318176233UL, 3964665794UL, 3295219265UL, 3037789445UL, 371545704UL, 3434130670UL, 3686032092UL, 19964088UL, 340386179UL, 2147090894UL, 1446742483UL, 3083526520UL, 561888846UL, 2903328518UL, 1524465288UL, 360120037UL, 2031515996UL, 1516035872UL, 2752848969UL, 1094251072UL, 984159948UL, 369999653UL, 864602622UL, 2402584241UL, 3028363830UL, 252580667UL, 480470405UL, 3201548259UL, 2739036185UL, 2198549891UL, 1978812013UL, +}, +{ +2546657140UL, 2771792972UL, 3371698159UL, 1137313111UL, 2399264952UL, 1204642544UL, 2090179262UL, 2948712987UL, 2908027331UL, 498636511UL, 2292804841UL, 1480836858UL, 2826016727UL, 196495965UL, 2168559184UL, 3910150715UL, 320076735UL, 3144753899UL, 3199094529UL, 1165806050UL, 728308199UL, 2322528104UL, 2891334400UL, 561853019UL, 4161870615UL, 1348321971UL, 2461357166UL, 1216229488UL, 1392766290UL, 3060494848UL, 3282469664UL, 1866493654UL, +2351421557UL, 4195620347UL, 1512242723UL, 478174598UL, 1087303780UL, 471631659UL, 2599553643UL, 791527994UL, 563537164UL, 1238109907UL, 3218421602UL, 133222502UL, 4182363220UL, 305688802UL, 2666439314UL, 2408520958UL, 787389550UL, 4226450542UL, 4107143646UL, 4103547035UL, 1840887424UL, 2686247491UL, 334267386UL, 3772035402UL, 3436827662UL, 1411515743UL, 2193739735UL, 1892746640UL, 4163192062UL, 2921191805UL, 1011310614UL, 2178118214UL, +33647321UL, 1121452997UL, 507942677UL, 2542792587UL, 351339975UL, 1586639416UL, 1918003826UL, 2513357034UL, 2747854573UL, 606238275UL, 1132105249UL, 574593993UL, 2655425816UL, 1680556547UL, 1831942411UL, 2587194016UL, 90710116UL, 4291431098UL, 1899367028UL, 3251152898UL, 3297078396UL, 2712235924UL, 1546135008UL, 897753268UL, 1619454780UL, 938130143UL, 1828916640UL, 3620488958UL, 1822437033UL, 172584228UL, 1853048226UL, 3659288522UL, +3623450763UL, 1893292786UL, 851522142UL, 3411705687UL, 4106341088UL, 4109830348UL, 1193339049UL, 878885723UL, 2964062476UL, 2320209608UL, 1777678953UL, 2886897705UL, 3856938396UL, 252913914UL, 3648685154UL, 544382669UL, 2631141468UL, 1524405364UL, 1848509666UL, 580646927UL, 2451560151UL, 181916967UL, 1426301928UL, 1652422182UL, 2625099169UL, 176664750UL, 1582626255UL, 1675120608UL, 2571617898UL, 2096572277UL, 2471745846UL, 419906507UL, +886861124UL, 1974832558UL, 3157060904UL, 216000225UL, 746978071UL, 1424984058UL, 1457979883UL, 809822177UL, 3833178010UL, 3926414726UL, 1423462846UL, 3024443248UL, 4067020014UL, 2881559869UL, 1376840097UL, 548130303UL, 1118013762UL, 1309103114UL, 2227304261UL, 4205319357UL, 228947246UL, 2167410411UL, 620496852UL, 2724112116UL, 705259153UL, 3499686911UL, 3085999115UL, 2447267299UL, 4190122199UL, 1091465954UL, 1233728238UL, 39711865UL, +1076751044UL, 2546657140UL, 2771792972UL, 3371698159UL, 1137313111UL, 3857150586UL, 1204642544UL, 2090179262UL, 2948712987UL, 2908027331UL, 368199414UL, 2292804841UL, 1480836858UL, 2826016727UL, 196495965UL, 3235583934UL, 3910150715UL, 320076735UL, 3144753899UL, 3199094529UL, 1374597050UL, 728308199UL, 2322528104UL, 2891334400UL, 561853019UL, 1515915224UL, 1348321971UL, 2461357166UL, 1216229488UL, 1392766290UL, 15252704UL, 3282469664UL, +1866493654UL, 2351421557UL, 4195620347UL, 192355609UL, 478174598UL, 1087303780UL, 471631659UL, 2599553643UL, 1725604263UL, 563537164UL, 1238109907UL, 3218421602UL, 133222502UL, 305098282UL, 305688802UL, 2666439314UL, 2408520958UL, 787389550UL, 3195522899UL, 4107143646UL, 4103547035UL, 1840887424UL, 2686247491UL, 1565529892UL, 3772035402UL, 3436827662UL, 1411515743UL, 2193739735UL, 1848198417UL, 4163192062UL, 2921191805UL, 1011310614UL, +2178118214UL, 3474206203UL, 1121452997UL, 507942677UL, 2542792587UL, 351339975UL, 3599278861UL, 1918003826UL, 2513357034UL, 2747854573UL, 606238275UL, 446979745UL, 574593993UL, 2655425816UL, 1680556547UL, 1831942411UL, 3338512802UL, 90710116UL, 4291431098UL, 1899367028UL, 3251152898UL, 1006512939UL, 2712235924UL, 1546135008UL, 897753268UL, 1619454780UL, 1429190743UL, 1828916640UL, 3620488958UL, 1822437033UL, 172584228UL, 2529855020UL, +3659288522UL, 3623450763UL, 1893292786UL, 851522142UL, 1417935793UL, 4106341088UL, 4109830348UL, 1193339049UL, 878885723UL, 1886400637UL, 2320209608UL, 1777678953UL, 2886897705UL, 3856938396UL, 1813134786UL, 3648685154UL, 544382669UL, 2631141468UL, 1524405364UL, 687661410UL, 580646927UL, 2451560151UL, 181916967UL, 1426301928UL, 1463347373UL, 2625099169UL, 176664750UL, 1582626255UL, 1675120608UL, 3387060344UL, 2096572277UL, 2471745846UL, +419906507UL, 886861124UL, 4209699955UL, 3157060904UL, 216000225UL, 746978071UL, 1424984058UL, 3063941448UL, 809822177UL, 3833178010UL, 3926414726UL, 1423462846UL, 750559587UL, 4067020014UL, 2881559869UL, 1376840097UL, 548130303UL, 4056763004UL, 1309103114UL, 2227304261UL, 4205319357UL, 228947246UL, 774411056UL, 620496852UL, 2724112116UL, 705259153UL, 3499686911UL, 2486247387UL, 2447267299UL, 4190122199UL, 1091465954UL, 1233728238UL, +54639263UL, 1076751044UL, 2546657140UL, 2771792972UL, 3371698159UL, 1152150303UL, 3857150586UL, 1204642544UL, 2090179262UL, 2948712987UL, 452427847UL, 368199414UL, 2292804841UL, 1480836858UL, 2826016727UL, 1929008184UL, 3235583934UL, 3910150715UL, 320076735UL, 3144753899UL, 895636897UL, 1374597050UL, 728308199UL, 2322528104UL, 2891334400UL, 1871824871UL, 1515915224UL, 1348321971UL, 2461357166UL, 1216229488UL, 3170568098UL, 15252704UL, +3282469664UL, 1866493654UL, 2351421557UL, 4253216490UL, 192355609UL, 478174598UL, 1087303780UL, 471631659UL, 4230260400UL, 1725604263UL, 563537164UL, 1238109907UL, 3218421602UL, 960481514UL, 305098282UL, 305688802UL, 2666439314UL, 2408520958UL, 242741163UL, 3195522899UL, 4107143646UL, 4103547035UL, 1840887424UL, 2768321503UL, 1565529892UL, 3772035402UL, 3436827662UL, 1411515743UL, 545362965UL, 1848198417UL, 4163192062UL, 2921191805UL, +1011310614UL, 1196775493UL, 3474206203UL, 1121452997UL, 507942677UL, 2542792587UL, 1948892535UL, 3599278861UL, 1918003826UL, 2513357034UL, 2747854573UL, 4172793632UL, 446979745UL, 574593993UL, 2655425816UL, 1680556547UL, 2986869736UL, 3338512802UL, 90710116UL, 4291431098UL, 1899367028UL, 3376952160UL, 1006512939UL, 2712235924UL, 1546135008UL, 897753268UL, 2061577225UL, 1429190743UL, 1828916640UL, 3620488958UL, 1822437033UL, 4221327184UL, +2529855020UL, 3659288522UL, 3623450763UL, 1893292786UL, 16446898UL, 1417935793UL, 4106341088UL, 4109830348UL, 1193339049UL, 2895194326UL, 1886400637UL, 2320209608UL, 1777678953UL, 2886897705UL, 117861450UL, 1813134786UL, 3648685154UL, 544382669UL, 2631141468UL, 1105253905UL, 687661410UL, 580646927UL, 2451560151UL, 181916967UL, 1605087684UL, 1463347373UL, 2625099169UL, 176664750UL, 1582626255UL, 1993431057UL, 3387060344UL, 2096572277UL, +2471745846UL, 419906507UL, 3219719670UL, 4209699955UL, 3157060904UL, 216000225UL, 746978071UL, 3304126047UL, 3063941448UL, 809822177UL, 3833178010UL, 3926414726UL, 4061584738UL, 750559587UL, 4067020014UL, 2881559869UL, 1376840097UL, 973425409UL, 4056763004UL, 1309103114UL, 2227304261UL, 4205319357UL, 939664759UL, 774411056UL, 620496852UL, 2724112116UL, 705259153UL, 176172666UL, 2486247387UL, 2447267299UL, 4190122199UL, 1091465954UL, +300145620UL, 54639263UL, 1076751044UL, 2546657140UL, 2771792972UL, 188149161UL, 1152150303UL, 3857150586UL, 1204642544UL, 2090179262UL, 626100323UL, 452427847UL, 368199414UL, 2292804841UL, 1480836858UL, 2700509669UL, 1929008184UL, 3235583934UL, 3910150715UL, 320076735UL, 1715326239UL, 895636897UL, 1374597050UL, 728308199UL, 2322528104UL, 2356051490UL, 1871824871UL, 1515915224UL, 1348321971UL, 2461357166UL, 243332180UL, 3170568098UL, +15252704UL, 3282469664UL, 1866493654UL, 4079212881UL, 4253216490UL, 192355609UL, 478174598UL, 1087303780UL, 3787911270UL, 4230260400UL, 1725604263UL, 563537164UL, 1238109907UL, 1147223471UL, 960481514UL, 305098282UL, 305688802UL, 2666439314UL, 1503870433UL, 242741163UL, 3195522899UL, 4107143646UL, 4103547035UL, 4041516761UL, 2768321503UL, 1565529892UL, 3772035402UL, 3436827662UL, 3952861918UL, 545362965UL, 1848198417UL, 4163192062UL, +2921191805UL, 793561655UL, 1196775493UL, 3474206203UL, 1121452997UL, 507942677UL, 3788690254UL, 1948892535UL, 3599278861UL, 1918003826UL, 2513357034UL, 3301940062UL, 4172793632UL, 446979745UL, 574593993UL, 2655425816UL, 667233719UL, 2986869736UL, 3338512802UL, 90710116UL, 4291431098UL, 2027122085UL, 3376952160UL, 1006512939UL, 2712235924UL, 1546135008UL, 2609276017UL, 2061577225UL, 1429190743UL, 1828916640UL, 3620488958UL, 1603195641UL, +4221327184UL, 2529855020UL, 3659288522UL, 3623450763UL, 2313432963UL, 16446898UL, 1417935793UL, 4106341088UL, 4109830348UL, 4106013120UL, 2895194326UL, 1886400637UL, 2320209608UL, 1777678953UL, 1952597964UL, 117861450UL, 1813134786UL, 3648685154UL, 544382669UL, 3108229631UL, 1105253905UL, 687661410UL, 580646927UL, 2451560151UL, 1160575897UL, 1605087684UL, 1463347373UL, 2625099169UL, 176664750UL, 1998534134UL, 1993431057UL, 3387060344UL, +2096572277UL, 2471745846UL, 2246406696UL, 3219719670UL, 4209699955UL, 3157060904UL, 216000225UL, 902956869UL, 3304126047UL, 3063941448UL, 809822177UL, 3833178010UL, 815366736UL, 4061584738UL, 750559587UL, 4067020014UL, 2881559869UL, 350775477UL, 973425409UL, 4056763004UL, 1309103114UL, 2227304261UL, 2047915817UL, 939664759UL, 774411056UL, 620496852UL, 2724112116UL, 3593903529UL, 176172666UL, 2486247387UL, 2447267299UL, 4190122199UL, +1450746791UL, 1521739409UL, 272699299UL, 4113952664UL, 1408743622UL, 4082014187UL, 2454446462UL, 1401621236UL, 2050232096UL, 4204834821UL, 2413497685UL, 1032465253UL, 4276089655UL, 1737267711UL, 3335718398UL, 1924071395UL, 1560525661UL, 3064183869UL, 1775038231UL, 89761304UL, 489201378UL, 1236489133UL, 2774076159UL, 822652970UL, 1583752702UL, 1781766972UL, 2238480533UL, 3428349870UL, 3344555477UL, 2251934941UL, 2533404243UL, 3651295253UL, +2359372862UL, 704049384UL, 3238382362UL, 2405156187UL, 2572833624UL, 531907732UL, 2240111412UL, 4102445586UL, 849739856UL, 3649572083UL, 3317634415UL, 1141345331UL, 1118528358UL, 1664181643UL, 648360156UL, 1364897187UL, 289264571UL, 1625825195UL, 1075970578UL, 3925373833UL, 2780782646UL, 727038162UL, 2824687935UL, 3844230994UL, 2070739238UL, 2437298873UL, 1837327520UL, 4248571219UL, 183041221UL, 3759390508UL, 3881974011UL, 658115161UL, +560642175UL, 32860408UL, 1321227669UL, 1380454450UL, 1676524786UL, 476585241UL, 4034481274UL, 1110506516UL, 815601591UL, 2009522227UL, 2168306897UL, 1856639149UL, 1328281664UL, 2710915389UL, 1886116025UL, 2074502324UL, 23109943UL, 670045122UL, 2926671795UL, 4269143768UL, 2688621201UL, 1618605914UL, 1541217762UL, 4273045819UL, 1029546542UL, 3663663567UL, 1402692384UL, 109336276UL, 2446546057UL, 2225682064UL, 3535545430UL, 3847123891UL, +369718877UL, 3411726117UL, 703735748UL, 3139527634UL, 22388546UL, 998860697UL, 2532911305UL, 1532808237UL, 4170332196UL, 1131906845UL, 1814343609UL, 4161931326UL, 1185668213UL, 1903273604UL, 3466154373UL, 3988139604UL, 1079368270UL, 991305574UL, 898158502UL, 2898908951UL, 651161128UL, 1952607949UL, 1221528540UL, 29979722UL, 3006846808UL, 2911550178UL, 2569412437UL, 1460616937UL, 2127921978UL, 3689931108UL, 950505297UL, 3469337654UL, +3180457017UL, 2316433735UL, 1464678429UL, 2867173456UL, 391248106UL, 3622065314UL, 2143251073UL, 860219584UL, 323835636UL, 340886643UL, 1805485977UL, 109344001UL, 1537119779UL, 1795626099UL, 2568079633UL, 3048040562UL, 1204069532UL, 2488753091UL, 2160014198UL, 3132782711UL, 1266102795UL, 91252225UL, 2018366053UL, 39675212UL, 979320891UL, 343397131UL, 814470367UL, 366655857UL, 3287033048UL, 3379301026UL, 1566381433UL, 3431153818UL, +}, +{ +2234324389UL, 1682296894UL, 3526681456UL, 3988544681UL, 1315506584UL, 1754723911UL, 3607564438UL, 3764062195UL, 3408328234UL, 2385116969UL, 3827569659UL, 4104590721UL, 2612634189UL, 1762747544UL, 1676800931UL, 1814546108UL, 2684685172UL, 1659194343UL, 3381624140UL, 2286640580UL, 688245437UL, 2593335056UL, 1657668516UL, 1161309746UL, 3390664973UL, 2460564382UL, 2811435329UL, 2169200311UL, 2768093584UL, 4288309691UL, 1341061221UL, 1361417084UL, +3060155336UL, 2526021346UL, 1037055386UL, 890124736UL, 2185462193UL, 765141735UL, 1841745804UL, 3562499272UL, 1437907207UL, 2127475991UL, 2845453063UL, 4007976206UL, 4160093314UL, 2717704308UL, 4193767498UL, 1667876711UL, 3477753188UL, 3150367681UL, 3224086539UL, 231347764UL, 2737121599UL, 1230656103UL, 4168131490UL, 1463860373UL, 2760968409UL, 2579133178UL, 2309591728UL, 2958907244UL, 1041094855UL, 685134804UL, 3861095208UL, 1088109135UL, +815655228UL, 2618003265UL, 3454840568UL, 1668276240UL, 1668403077UL, 663034899UL, 4020374281UL, 1896863688UL, 677285319UL, 4047674693UL, 4098535894UL, 2038783953UL, 236635760UL, 3641273565UL, 3568356824UL, 3405704765UL, 186484522UL, 3626346451UL, 3653227559UL, 281949942UL, 1847600066UL, 4168753288UL, 1723123703UL, 3600798445UL, 4267802363UL, 2947454105UL, 468768748UL, 2745777741UL, 26635454UL, 837186232UL, 206931043UL, 2601865569UL, +2021732453UL, 3171165636UL, 786833002UL, 116631308UL, 1604778670UL, 437644814UL, 2437761489UL, 3573139998UL, 2637030522UL, 972076738UL, 4075927397UL, 1427554739UL, 597414077UL, 559325169UL, 1774857312UL, 224593737UL, 3697511293UL, 3905126277UL, 2446278950UL, 1847061846UL, 333176687UL, 2988562696UL, 3623938567UL, 2389910304UL, 4273100167UL, 1673622334UL, 2163644598UL, 3666601063UL, 3971760462UL, 4176957983UL, 565952761UL, 566996714UL, +103136762UL, 3648349163UL, 115456167UL, 3265051494UL, 2826313040UL, 1898888678UL, 3921049266UL, 1276809956UL, 4051866478UL, 959265349UL, 851980436UL, 3105565302UL, 2905096898UL, 342438530UL, 3428101638UL, 912389587UL, 2306839396UL, 3613297213UL, 200159550UL, 3406974927UL, 832121231UL, 2998593393UL, 1242069873UL, 1464281204UL, 1828082526UL, 2620095350UL, 3727900009UL, 986958825UL, 3332332947UL, 1610600284UL, 3193282615UL, 1873987353UL, +537698841UL, 2234324389UL, 1682296894UL, 3526681456UL, 3988544681UL, 1112334635UL, 1754723911UL, 3607564438UL, 3764062195UL, 3408328234UL, 2702680798UL, 3827569659UL, 4104590721UL, 2612634189UL, 1762747544UL, 1596420149UL, 1814546108UL, 2684685172UL, 1659194343UL, 3381624140UL, 2424233156UL, 688245437UL, 2593335056UL, 1657668516UL, 1161309746UL, 260803614UL, 2460564382UL, 2811435329UL, 2169200311UL, 2768093584UL, 1426048416UL, 1341061221UL, +1361417084UL, 3060155336UL, 2526021346UL, 688976997UL, 890124736UL, 2185462193UL, 765141735UL, 1841745804UL, 1113361455UL, 1437907207UL, 2127475991UL, 2845453063UL, 4007976206UL, 1719248425UL, 2717704308UL, 4193767498UL, 1667876711UL, 3477753188UL, 449353539UL, 3224086539UL, 231347764UL, 2737121599UL, 1230656103UL, 2122699205UL, 1463860373UL, 2760968409UL, 2579133178UL, 2309591728UL, 4017154219UL, 1041094855UL, 685134804UL, 3861095208UL, +1088109135UL, 3954527144UL, 2618003265UL, 3454840568UL, 1668276240UL, 1668403077UL, 3235241899UL, 4020374281UL, 1896863688UL, 677285319UL, 4047674693UL, 4043186819UL, 2038783953UL, 236635760UL, 3641273565UL, 3568356824UL, 3946220303UL, 186484522UL, 3626346451UL, 3653227559UL, 281949942UL, 1896524045UL, 4168753288UL, 1723123703UL, 3600798445UL, 4267802363UL, 412498526UL, 468768748UL, 2745777741UL, 26635454UL, 837186232UL, 1473941762UL, +2601865569UL, 2021732453UL, 3171165636UL, 786833002UL, 3461566768UL, 1604778670UL, 437644814UL, 2437761489UL, 3573139998UL, 306196591UL, 972076738UL, 4075927397UL, 1427554739UL, 597414077UL, 2401305323UL, 1774857312UL, 224593737UL, 3697511293UL, 3905126277UL, 1527832817UL, 1847061846UL, 333176687UL, 2988562696UL, 3623938567UL, 2731158470UL, 4273100167UL, 1673622334UL, 2163644598UL, 3666601063UL, 1991088422UL, 4176957983UL, 565952761UL, +566996714UL, 103136762UL, 1639884175UL, 115456167UL, 3265051494UL, 2826313040UL, 1898888678UL, 2976556877UL, 1276809956UL, 4051866478UL, 959265349UL, 851980436UL, 2482970929UL, 2905096898UL, 342438530UL, 3428101638UL, 912389587UL, 2716490551UL, 3613297213UL, 200159550UL, 3406974927UL, 832121231UL, 2865829307UL, 1242069873UL, 1464281204UL, 1828082526UL, 2620095350UL, 3671861666UL, 986958825UL, 3332332947UL, 1610600284UL, 3193282615UL, +164496953UL, 537698841UL, 2234324389UL, 1682296894UL, 3526681456UL, 486931321UL, 1112334635UL, 1754723911UL, 3607564438UL, 3764062195UL, 898439171UL, 2702680798UL, 3827569659UL, 4104590721UL, 2612634189UL, 1703436382UL, 1596420149UL, 1814546108UL, 2684685172UL, 1659194343UL, 3421607784UL, 2424233156UL, 688245437UL, 2593335056UL, 1657668516UL, 362342820UL, 260803614UL, 2460564382UL, 2811435329UL, 2169200311UL, 4248717010UL, 1426048416UL, +1341061221UL, 1361417084UL, 3060155336UL, 2693026827UL, 688976997UL, 890124736UL, 2185462193UL, 765141735UL, 2445632748UL, 1113361455UL, 1437907207UL, 2127475991UL, 2845453063UL, 1830953748UL, 1719248425UL, 2717704308UL, 4193767498UL, 1667876711UL, 2469362144UL, 449353539UL, 3224086539UL, 231347764UL, 2737121599UL, 2917779591UL, 2122699205UL, 1463860373UL, 2760968409UL, 2579133178UL, 2600345316UL, 4017154219UL, 1041094855UL, 685134804UL, +3861095208UL, 3682591427UL, 3954527144UL, 2618003265UL, 3454840568UL, 1668276240UL, 988400088UL, 3235241899UL, 4020374281UL, 1896863688UL, 677285319UL, 2749516227UL, 4043186819UL, 2038783953UL, 236635760UL, 3641273565UL, 4073317913UL, 3946220303UL, 186484522UL, 3626346451UL, 3653227559UL, 872336642UL, 1896524045UL, 4168753288UL, 1723123703UL, 3600798445UL, 524095357UL, 412498526UL, 468768748UL, 2745777741UL, 26635454UL, 840544541UL, +1473941762UL, 2601865569UL, 2021732453UL, 3171165636UL, 1058640324UL, 3461566768UL, 1604778670UL, 437644814UL, 2437761489UL, 3615438045UL, 306196591UL, 972076738UL, 4075927397UL, 1427554739UL, 2369367008UL, 2401305323UL, 1774857312UL, 224593737UL, 3697511293UL, 4186564433UL, 1527832817UL, 1847061846UL, 333176687UL, 2988562696UL, 4039340326UL, 2731158470UL, 4273100167UL, 1673622334UL, 2163644598UL, 307949376UL, 1991088422UL, 4176957983UL, +565952761UL, 566996714UL, 4159448552UL, 1639884175UL, 115456167UL, 3265051494UL, 2826313040UL, 2698725478UL, 2976556877UL, 1276809956UL, 4051866478UL, 959265349UL, 293029699UL, 2482970929UL, 2905096898UL, 342438530UL, 3428101638UL, 4172766741UL, 2716490551UL, 3613297213UL, 200159550UL, 3406974927UL, 3723281866UL, 2865829307UL, 1242069873UL, 1464281204UL, 1828082526UL, 3304191156UL, 3671861666UL, 986958825UL, 3332332947UL, 1610600284UL, +2370407607UL, 164496953UL, 537698841UL, 2234324389UL, 1682296894UL, 826891606UL, 486931321UL, 1112334635UL, 1754723911UL, 3607564438UL, 3598993552UL, 898439171UL, 2702680798UL, 3827569659UL, 4104590721UL, 1421852097UL, 1703436382UL, 1596420149UL, 1814546108UL, 2684685172UL, 4090587429UL, 3421607784UL, 2424233156UL, 688245437UL, 2593335056UL, 4151905751UL, 362342820UL, 260803614UL, 2460564382UL, 2811435329UL, 2402832015UL, 4248717010UL, +1426048416UL, 1341061221UL, 1361417084UL, 1629089021UL, 2693026827UL, 688976997UL, 890124736UL, 2185462193UL, 303105066UL, 2445632748UL, 1113361455UL, 1437907207UL, 2127475991UL, 62024604UL, 1830953748UL, 1719248425UL, 2717704308UL, 4193767498UL, 667433630UL, 2469362144UL, 449353539UL, 3224086539UL, 231347764UL, 3918249451UL, 2917779591UL, 2122699205UL, 1463860373UL, 2760968409UL, 4274016442UL, 2600345316UL, 4017154219UL, 1041094855UL, +685134804UL, 643006688UL, 3682591427UL, 3954527144UL, 2618003265UL, 3454840568UL, 4180665518UL, 988400088UL, 3235241899UL, 4020374281UL, 1896863688UL, 3678687414UL, 2749516227UL, 4043186819UL, 2038783953UL, 236635760UL, 2880089648UL, 4073317913UL, 3946220303UL, 186484522UL, 3626346451UL, 2454620114UL, 872336642UL, 1896524045UL, 4168753288UL, 1723123703UL, 2692406059UL, 524095357UL, 412498526UL, 468768748UL, 2745777741UL, 918726515UL, +840544541UL, 1473941762UL, 2601865569UL, 2021732453UL, 3534238020UL, 1058640324UL, 3461566768UL, 1604778670UL, 437644814UL, 2894699005UL, 3615438045UL, 306196591UL, 972076738UL, 4075927397UL, 3468671461UL, 2369367008UL, 2401305323UL, 1774857312UL, 224593737UL, 2734827022UL, 4186564433UL, 1527832817UL, 1847061846UL, 333176687UL, 2437714719UL, 4039340326UL, 2731158470UL, 4273100167UL, 1673622334UL, 196072958UL, 307949376UL, 1991088422UL, +4176957983UL, 565952761UL, 847200194UL, 4159448552UL, 1639884175UL, 115456167UL, 3265051494UL, 2503079777UL, 2698725478UL, 2976556877UL, 1276809956UL, 4051866478UL, 2731665893UL, 293029699UL, 2482970929UL, 2905096898UL, 342438530UL, 581060953UL, 4172766741UL, 2716490551UL, 3613297213UL, 200159550UL, 4222335623UL, 3723281866UL, 2865829307UL, 1242069873UL, 1464281204UL, 1080647953UL, 3304191156UL, 3671861666UL, 986958825UL, 3332332947UL, +920422540UL, 3656094274UL, 4036161427UL, 2157099981UL, 1855437762UL, 1385781426UL, 199192882UL, 489599802UL, 3472601685UL, 717544078UL, 2241742884UL, 3951326913UL, 3590866192UL, 1087524220UL, 3517385549UL, 360484251UL, 2718513148UL, 1386577185UL, 1833613127UL, 2926418589UL, 1652463225UL, 548895720UL, 1343026759UL, 1797789098UL, 3229783023UL, 1745843414UL, 200554865UL, 2442780740UL, 2359926428UL, 2970332116UL, 3097392757UL, 134294482UL, +936225458UL, 1968264650UL, 64868134UL, 3821668262UL, 2502175363UL, 1623767635UL, 2936073062UL, 1991791011UL, 2971174068UL, 3142195911UL, 2874818345UL, 2192526584UL, 496586185UL, 2491564144UL, 2415210641UL, 314307270UL, 2936737494UL, 557604388UL, 1067914024UL, 3270690738UL, 375601880UL, 962749065UL, 3610467620UL, 402112984UL, 1432929499UL, 3872957776UL, 3971384069UL, 2223968592UL, 407083609UL, 2178236674UL, 1806303230UL, 3397564470UL, +12158764UL, 415570813UL, 4033667395UL, 3687406137UL, 801878150UL, 953500350UL, 3667783172UL, 1203668106UL, 902418194UL, 779786150UL, 774683730UL, 2870261992UL, 509192460UL, 1961621392UL, 1064906432UL, 3665710891UL, 1733725153UL, 1887608856UL, 1314631523UL, 4097239005UL, 29074501UL, 3472521950UL, 4040841657UL, 532128023UL, 2333441401UL, 1671717886UL, 1678544416UL, 1218347584UL, 3680929567UL, 4025753853UL, 2810948711UL, 1846100306UL, +3377469279UL, 3144481747UL, 2625781306UL, 730632118UL, 3162408393UL, 3423660386UL, 1364968369UL, 4270900402UL, 1075484840UL, 2892932277UL, 3700635052UL, 3853022563UL, 281755151UL, 1530909868UL, 2364069707UL, 2361723426UL, 738500028UL, 1401903990UL, 1543704261UL, 2442916222UL, 1076190609UL, 1882477803UL, 740024557UL, 1591015439UL, 2730909167UL, 2723330839UL, 1637373491UL, 3777799860UL, 2921269571UL, 3698591972UL, 3997463570UL, 3877862147UL, +1912888417UL, 3365137165UL, 3465700492UL, 771243134UL, 4037723169UL, 1715894739UL, 1025821874UL, 1924958945UL, 3382242859UL, 121591031UL, 483980724UL, 546523388UL, 2446882279UL, 856267778UL, 578739009UL, 2978085488UL, 480884914UL, 966764808UL, 457039953UL, 3817520708UL, 1113646451UL, 2503896910UL, 3507840816UL, 717151671UL, 4149352573UL, 1568869830UL, 395015863UL, 773165995UL, 1853682362UL, 2861368846UL, 1884368812UL, 1250092101UL, +}, +{ +916910638UL, 961623451UL, 1193013401UL, 1016438484UL, 4091279871UL, 287282633UL, 8590725UL, 3575333670UL, 324340905UL, 3133751747UL, 2840894649UL, 2980503178UL, 1111215768UL, 2783846375UL, 72516413UL, 4158424384UL, 2184094569UL, 2305724254UL, 4057093054UL, 1407652993UL, 3105191537UL, 768505376UL, 298782270UL, 993926164UL, 2694730042UL, 1479658113UL, 2376490281UL, 2767906402UL, 1619969256UL, 3256472015UL, 2563843533UL, 2974784738UL, +2529307107UL, 4289918826UL, 3105587575UL, 3748950898UL, 2182744253UL, 431888679UL, 3780324902UL, 2525978209UL, 54545903UL, 1688749940UL, 2394884334UL, 3477656171UL, 263834270UL, 1562965459UL, 804704330UL, 4185729868UL, 138898835UL, 2113063150UL, 327612841UL, 1252226275UL, 935318076UL, 2956823075UL, 4095101181UL, 1510586062UL, 156282440UL, 3386839706UL, 2294393752UL, 1306167091UL, 4005033667UL, 651716500UL, 4115192738UL, 123027719UL, +3873547487UL, 2910637335UL, 2571924586UL, 3489608656UL, 956791985UL, 2467423726UL, 3214531645UL, 2054232851UL, 49634692UL, 377192215UL, 1865068750UL, 2479252980UL, 3481787748UL, 3243507737UL, 605491073UL, 4062466752UL, 988602517UL, 1539348794UL, 1555068617UL, 2657884010UL, 460334294UL, 4240766479UL, 3639800790UL, 253377117UL, 3969136265UL, 488705329UL, 1722560286UL, 2289159295UL, 1025876008UL, 2927117896UL, 767521707UL, 2047999999UL, +4260853571UL, 2079302241UL, 2409677301UL, 1087552976UL, 2363907365UL, 2574464321UL, 2606273241UL, 3716086457UL, 26053603UL, 3162779415UL, 14843078UL, 2614076143UL, 1157531920UL, 2773275636UL, 2338825066UL, 435472225UL, 1399711137UL, 1224374788UL, 2154533280UL, 560135209UL, 935800607UL, 1940258814UL, 3826959530UL, 3423217355UL, 3704934971UL, 3815248829UL, 3878175339UL, 1395508015UL, 3295101527UL, 177901558UL, 4167531389UL, 1375148189UL, +3125377631UL, 557218961UL, 4088880299UL, 3478859071UL, 3687276754UL, 2845114223UL, 1713171361UL, 1756507633UL, 3160807894UL, 2375334470UL, 843542578UL, 1907952570UL, 1544844563UL, 2294372007UL, 3336681376UL, 734347193UL, 102566945UL, 2311037104UL, 4294750194UL, 3572240326UL, 732958152UL, 263733314UL, 2087890678UL, 331542297UL, 3549110380UL, 2073894939UL, 2104101380UL, 3670791368UL, 3122901693UL, 3799823891UL, 3783548253UL, 1102633864UL, +44327348UL, 916910638UL, 961623451UL, 1193013401UL, 1016438484UL, 1873779640UL, 287282633UL, 8590725UL, 3575333670UL, 324340905UL, 1144671533UL, 2840894649UL, 2980503178UL, 1111215768UL, 2783846375UL, 2000673937UL, 4158424384UL, 2184094569UL, 2305724254UL, 4057093054UL, 533488413UL, 3105191537UL, 768505376UL, 298782270UL, 993926164UL, 2015456740UL, 1479658113UL, 2376490281UL, 2767906402UL, 1619969256UL, 3120736988UL, 2563843533UL, +2974784738UL, 2529307107UL, 4289918826UL, 729503771UL, 3748950898UL, 2182744253UL, 431888679UL, 3780324902UL, 373638396UL, 54545903UL, 1688749940UL, 2394884334UL, 3477656171UL, 1083764681UL, 1562965459UL, 804704330UL, 4185729868UL, 138898835UL, 823405282UL, 327612841UL, 1252226275UL, 935318076UL, 2956823075UL, 899234846UL, 1510586062UL, 156282440UL, 3386839706UL, 2294393752UL, 2769934879UL, 4005033667UL, 651716500UL, 4115192738UL, +123027719UL, 3729538641UL, 2910637335UL, 2571924586UL, 3489608656UL, 956791985UL, 139360134UL, 3214531645UL, 2054232851UL, 49634692UL, 377192215UL, 2754746969UL, 2479252980UL, 3481787748UL, 3243507737UL, 605491073UL, 732155706UL, 988602517UL, 1539348794UL, 1555068617UL, 2657884010UL, 3753733088UL, 4240766479UL, 3639800790UL, 253377117UL, 3969136265UL, 3848735787UL, 1722560286UL, 2289159295UL, 1025876008UL, 2927117896UL, 3661948694UL, +2047999999UL, 4260853571UL, 2079302241UL, 2409677301UL, 3421911122UL, 2363907365UL, 2574464321UL, 2606273241UL, 3716086457UL, 2064343322UL, 3162779415UL, 14843078UL, 2614076143UL, 1157531920UL, 826449637UL, 2338825066UL, 435472225UL, 1399711137UL, 1224374788UL, 3770340198UL, 560135209UL, 935800607UL, 1940258814UL, 3826959530UL, 2963586762UL, 3704934971UL, 3815248829UL, 3878175339UL, 1395508015UL, 3721612680UL, 177901558UL, 4167531389UL, +1375148189UL, 3125377631UL, 1023552290UL, 4088880299UL, 3478859071UL, 3687276754UL, 2845114223UL, 3831557301UL, 1756507633UL, 3160807894UL, 2375334470UL, 843542578UL, 2798365898UL, 1544844563UL, 2294372007UL, 3336681376UL, 734347193UL, 1856808621UL, 2311037104UL, 4294750194UL, 3572240326UL, 732958152UL, 1999195012UL, 2087890678UL, 331542297UL, 3549110380UL, 2073894939UL, 3115936764UL, 3670791368UL, 3122901693UL, 3799823891UL, 3783548253UL, +132796150UL, 44327348UL, 916910638UL, 961623451UL, 1193013401UL, 1753944196UL, 1873779640UL, 287282633UL, 8590725UL, 3575333670UL, 1447720209UL, 1144671533UL, 2840894649UL, 2980503178UL, 1111215768UL, 1211945983UL, 2000673937UL, 4158424384UL, 2184094569UL, 2305724254UL, 402617261UL, 533488413UL, 3105191537UL, 768505376UL, 298782270UL, 2915553159UL, 2015456740UL, 1479658113UL, 2376490281UL, 2767906402UL, 3473761811UL, 3120736988UL, +2563843533UL, 2974784738UL, 2529307107UL, 737859212UL, 729503771UL, 3748950898UL, 2182744253UL, 431888679UL, 2013420163UL, 373638396UL, 54545903UL, 1688749940UL, 2394884334UL, 675998523UL, 1083764681UL, 1562965459UL, 804704330UL, 4185729868UL, 1165431355UL, 823405282UL, 327612841UL, 1252226275UL, 935318076UL, 2420680216UL, 899234846UL, 1510586062UL, 156282440UL, 3386839706UL, 2101339651UL, 2769934879UL, 4005033667UL, 651716500UL, +4115192738UL, 112049740UL, 3729538641UL, 2910637335UL, 2571924586UL, 3489608656UL, 305695595UL, 139360134UL, 3214531645UL, 2054232851UL, 49634692UL, 1073828255UL, 2754746969UL, 2479252980UL, 3481787748UL, 3243507737UL, 3392719169UL, 732155706UL, 988602517UL, 1539348794UL, 1555068617UL, 3246776527UL, 3753733088UL, 4240766479UL, 3639800790UL, 253377117UL, 872273450UL, 3848735787UL, 1722560286UL, 2289159295UL, 1025876008UL, 4168154213UL, +3661948694UL, 2047999999UL, 4260853571UL, 2079302241UL, 2380420842UL, 3421911122UL, 2363907365UL, 2574464321UL, 2606273241UL, 3881916078UL, 2064343322UL, 3162779415UL, 14843078UL, 2614076143UL, 473288515UL, 826449637UL, 2338825066UL, 435472225UL, 1399711137UL, 3068538992UL, 3770340198UL, 560135209UL, 935800607UL, 1940258814UL, 1469655183UL, 2963586762UL, 3704934971UL, 3815248829UL, 3878175339UL, 2410602840UL, 3721612680UL, 177901558UL, +4167531389UL, 1375148189UL, 1367577763UL, 1023552290UL, 4088880299UL, 3478859071UL, 3687276754UL, 678224549UL, 3831557301UL, 1756507633UL, 3160807894UL, 2375334470UL, 2884561721UL, 2798365898UL, 1544844563UL, 2294372007UL, 3336681376UL, 1938834658UL, 1856808621UL, 2311037104UL, 4294750194UL, 3572240326UL, 2786764913UL, 1999195012UL, 2087890678UL, 331542297UL, 3549110380UL, 3597797341UL, 3115936764UL, 3670791368UL, 3122901693UL, 3799823891UL, +1271317799UL, 132796150UL, 44327348UL, 916910638UL, 961623451UL, 2427821332UL, 1753944196UL, 1873779640UL, 287282633UL, 8590725UL, 1244012658UL, 1447720209UL, 1144671533UL, 2840894649UL, 2980503178UL, 3548902577UL, 1211945983UL, 2000673937UL, 4158424384UL, 2184094569UL, 2152623453UL, 402617261UL, 533488413UL, 3105191537UL, 768505376UL, 1095141108UL, 2915553159UL, 2015456740UL, 1479658113UL, 2376490281UL, 337998873UL, 3473761811UL, +3120736988UL, 2563843533UL, 2974784738UL, 3087228498UL, 737859212UL, 729503771UL, 3748950898UL, 2182744253UL, 2140410733UL, 2013420163UL, 373638396UL, 54545903UL, 1688749940UL, 528290088UL, 675998523UL, 1083764681UL, 1562965459UL, 804704330UL, 2536362875UL, 1165431355UL, 823405282UL, 327612841UL, 1252226275UL, 4037635314UL, 2420680216UL, 899234846UL, 1510586062UL, 156282440UL, 2012335895UL, 2101339651UL, 2769934879UL, 4005033667UL, +651716500UL, 2552583570UL, 112049740UL, 3729538641UL, 2910637335UL, 2571924586UL, 2436645403UL, 305695595UL, 139360134UL, 3214531645UL, 2054232851UL, 2384286326UL, 1073828255UL, 2754746969UL, 2479252980UL, 3481787748UL, 1948315585UL, 3392719169UL, 732155706UL, 988602517UL, 1539348794UL, 4110558494UL, 3246776527UL, 3753733088UL, 4240766479UL, 3639800790UL, 3627363812UL, 872273450UL, 3848735787UL, 1722560286UL, 2289159295UL, 4122430477UL, +4168154213UL, 3661948694UL, 2047999999UL, 4260853571UL, 1767882442UL, 2380420842UL, 3421911122UL, 2363907365UL, 2574464321UL, 2778622726UL, 3881916078UL, 2064343322UL, 3162779415UL, 14843078UL, 1513897109UL, 473288515UL, 826449637UL, 2338825066UL, 435472225UL, 322954918UL, 3068538992UL, 3770340198UL, 560135209UL, 935800607UL, 345602050UL, 1469655183UL, 2963586762UL, 3704934971UL, 3815248829UL, 3508249920UL, 2410602840UL, 3721612680UL, +177901558UL, 4167531389UL, 2161244150UL, 1367577763UL, 1023552290UL, 4088880299UL, 3478859071UL, 1108183104UL, 678224549UL, 3831557301UL, 1756507633UL, 3160807894UL, 2551630811UL, 2884561721UL, 2798365898UL, 1544844563UL, 2294372007UL, 2520267760UL, 1938834658UL, 1856808621UL, 2311037104UL, 4294750194UL, 2310096003UL, 2786764913UL, 1999195012UL, 2087890678UL, 331542297UL, 1205238749UL, 3597797341UL, 3115936764UL, 3670791368UL, 3122901693UL, +2008141679UL, 2018425028UL, 3435073328UL, 1452813805UL, 1628661138UL, 1323367156UL, 1062553693UL, 4029321700UL, 2772685842UL, 3798388850UL, 1315172209UL, 3930983291UL, 3816791373UL, 529176017UL, 3419610188UL, 3331589216UL, 4016977274UL, 2047089790UL, 3892571923UL, 2363414008UL, 1144631948UL, 3004954882UL, 2558739305UL, 19774033UL, 2525079911UL, 3774885821UL, 2817837373UL, 986111566UL, 1446678953UL, 3238485630UL, 3993748600UL, 1601954599UL, +3100591537UL, 2098009380UL, 3935971261UL, 4202546603UL, 3713465083UL, 3845664764UL, 2466365355UL, 1452340065UL, 2003576531UL, 1013434822UL, 2254608933UL, 783902023UL, 3129770529UL, 129130612UL, 821418228UL, 350036483UL, 3473671510UL, 4128495167UL, 2773832518UL, 683262085UL, 2143353417UL, 256251732UL, 1719056536UL, 2670223618UL, 328467339UL, 1564657740UL, 451231672UL, 2788353006UL, 882900088UL, 3255241056UL, 3198073758UL, 2541070985UL, +1941509325UL, 674933160UL, 207753676UL, 2605303964UL, 1681335994UL, 1143520001UL, 448872632UL, 302917879UL, 1100138495UL, 2058770021UL, 3116955098UL, 2081754747UL, 3734924767UL, 1916718058UL, 3873335960UL, 2740460398UL, 2171157007UL, 27677949UL, 2364721928UL, 175851655UL, 1468083950UL, 3162369526UL, 2441504540UL, 556978295UL, 2372096172UL, 3181101116UL, 2582850132UL, 1101292643UL, 862643740UL, 2095546242UL, 3261953801UL, 748040658UL, +3970037674UL, 819116843UL, 3594523650UL, 1597423019UL, 4109336883UL, 1198282420UL, 2905230517UL, 1729529596UL, 3230132814UL, 3640242164UL, 1899059108UL, 1944906555UL, 3426510495UL, 3035188107UL, 6448083UL, 1093882965UL, 2867500469UL, 3626379157UL, 1849073068UL, 897616501UL, 604221668UL, 1020676159UL, 4083635798UL, 1716022041UL, 3671877965UL, 1738820843UL, 30077467UL, 729231767UL, 3413193248UL, 207000406UL, 3854363185UL, 3302747326UL, +3293643267UL, 2101250157UL, 460131091UL, 4159442595UL, 1133391045UL, 1031215443UL, 4195487944UL, 45931575UL, 2922629291UL, 789302543UL, 3024994662UL, 442525623UL, 2850119076UL, 838309503UL, 2585361734UL, 1020449164UL, 1623631007UL, 955374631UL, 2932467671UL, 3713639221UL, 3019179416UL, 977970472UL, 1817244230UL, 3856774853UL, 1140530868UL, 886199600UL, 1218509766UL, 4001537244UL, 2840913665UL, 2133254364UL, 3332344608UL, 475291624UL, +}, +{ +1854921599UL, 2655519695UL, 3124573588UL, 319882484UL, 603545603UL, 4175512633UL, 141286453UL, 1183670252UL, 1789500145UL, 37351733UL, 3190829323UL, 2782782009UL, 493805446UL, 1228958246UL, 2672482554UL, 2274981421UL, 2935438833UL, 3625733677UL, 3679506394UL, 687805550UL, 134516308UL, 3576789728UL, 965007022UL, 1056542222UL, 2319405423UL, 3944221200UL, 950102624UL, 3848192810UL, 3205299696UL, 82033760UL, 1241913280UL, 1360146137UL, +1675732327UL, 2164452797UL, 3920498715UL, 2226452641UL, 3172047212UL, 1569171738UL, 2631589480UL, 2889660225UL, 2030783667UL, 2237381973UL, 2706217212UL, 3143638386UL, 1733174225UL, 1166820137UL, 3818389960UL, 193959252UL, 2793509934UL, 316291605UL, 2502743884UL, 1963136977UL, 3739017448UL, 25754513UL, 1590156485UL, 1856291967UL, 4143674472UL, 2538785911UL, 2159135699UL, 1908446793UL, 3303325234UL, 2589568800UL, 1193586059UL, 77481069UL, +789413194UL, 2556570543UL, 162987300UL, 1960844609UL, 2973799047UL, 4253906178UL, 315868734UL, 2542622968UL, 3949539136UL, 1479106582UL, 4225431384UL, 1235059630UL, 1533374854UL, 847792023UL, 4031286530UL, 4194276632UL, 164541100UL, 1010135841UL, 143302319UL, 1335585015UL, 1237311692UL, 20896020UL, 344974153UL, 2576803233UL, 3430251730UL, 984163376UL, 2680612471UL, 1276425436UL, 2400671554UL, 1628640140UL, 2161048926UL, 2109177634UL, +998215324UL, 3127793500UL, 1759998050UL, 3105138908UL, 2583746384UL, 2126302368UL, 3258602104UL, 1262742375UL, 3565617377UL, 3726060195UL, 157069329UL, 390662438UL, 3800994052UL, 2007694482UL, 377281730UL, 3251789121UL, 236703173UL, 122782596UL, 775407411UL, 3394010206UL, 4232159202UL, 468321553UL, 2704615220UL, 1332411375UL, 2978494251UL, 989230484UL, 3122841814UL, 2348872707UL, 731335994UL, 541354422UL, 223117443UL, 2225009071UL, +4230058949UL, 1875162926UL, 3897048544UL, 3550177883UL, 2461273592UL, 1046820583UL, 1333727817UL, 1378024753UL, 3686775275UL, 4230752590UL, 64834458UL, 1281467967UL, 729116355UL, 3886390916UL, 65029451UL, 3478506446UL, 1387684482UL, 1172004841UL, 2525409243UL, 1677678908UL, 1704646757UL, 930937262UL, 1088384271UL, 689357059UL, 1754542213UL, 702963842UL, 2864311668UL, 1960202673UL, 1009675673UL, 3742350158UL, 3751269215UL, 3166659283UL, +9090161UL, 1854921599UL, 2655519695UL, 3124573588UL, 319882484UL, 1422536794UL, 4175512633UL, 141286453UL, 1183670252UL, 1789500145UL, 850391877UL, 3190829323UL, 2782782009UL, 493805446UL, 1228958246UL, 837232655UL, 2274981421UL, 2935438833UL, 3625733677UL, 3679506394UL, 955772620UL, 134516308UL, 3576789728UL, 965007022UL, 1056542222UL, 874117013UL, 3944221200UL, 950102624UL, 3848192810UL, 3205299696UL, 543679720UL, 1241913280UL, +1360146137UL, 1675732327UL, 2164452797UL, 1169030022UL, 2226452641UL, 3172047212UL, 1569171738UL, 2631589480UL, 3783543297UL, 2030783667UL, 2237381973UL, 2706217212UL, 3143638386UL, 1560162209UL, 1166820137UL, 3818389960UL, 193959252UL, 2793509934UL, 4258046618UL, 2502743884UL, 1963136977UL, 3739017448UL, 25754513UL, 1204846712UL, 1856291967UL, 4143674472UL, 2538785911UL, 2159135699UL, 3889946075UL, 3303325234UL, 2589568800UL, 1193586059UL, +77481069UL, 969912041UL, 2556570543UL, 162987300UL, 1960844609UL, 2973799047UL, 427583517UL, 315868734UL, 2542622968UL, 3949539136UL, 1479106582UL, 92839917UL, 1235059630UL, 1533374854UL, 847792023UL, 4031286530UL, 1147875681UL, 164541100UL, 1010135841UL, 143302319UL, 1335585015UL, 368616909UL, 20896020UL, 344974153UL, 2576803233UL, 3430251730UL, 1078575783UL, 2680612471UL, 1276425436UL, 2400671554UL, 1628640140UL, 4149623645UL, +2109177634UL, 998215324UL, 3127793500UL, 1759998050UL, 3525419965UL, 2583746384UL, 2126302368UL, 3258602104UL, 1262742375UL, 1996113346UL, 3726060195UL, 157069329UL, 390662438UL, 3800994052UL, 982000497UL, 377281730UL, 3251789121UL, 236703173UL, 122782596UL, 2303768414UL, 3394010206UL, 4232159202UL, 468321553UL, 2704615220UL, 681592492UL, 2978494251UL, 989230484UL, 3122841814UL, 2348872707UL, 4089094260UL, 541354422UL, 223117443UL, +2225009071UL, 4230058949UL, 2754981128UL, 3897048544UL, 3550177883UL, 2461273592UL, 1046820583UL, 668143612UL, 1378024753UL, 3686775275UL, 4230752590UL, 64834458UL, 3765910650UL, 729116355UL, 3886390916UL, 65029451UL, 3478506446UL, 3419111947UL, 1172004841UL, 2525409243UL, 1677678908UL, 1704646757UL, 155635560UL, 1088384271UL, 689357059UL, 1754542213UL, 702963842UL, 2712009967UL, 1960202673UL, 1009675673UL, 3742350158UL, 3751269215UL, +129749802UL, 9090161UL, 1854921599UL, 2655519695UL, 3124573588UL, 809557750UL, 1422536794UL, 4175512633UL, 141286453UL, 1183670252UL, 1739311360UL, 850391877UL, 3190829323UL, 2782782009UL, 493805446UL, 1738527771UL, 837232655UL, 2274981421UL, 2935438833UL, 3625733677UL, 1858071296UL, 955772620UL, 134516308UL, 3576789728UL, 965007022UL, 3367712327UL, 874117013UL, 3944221200UL, 950102624UL, 3848192810UL, 2420548306UL, 543679720UL, +1241913280UL, 1360146137UL, 1675732327UL, 176019367UL, 1169030022UL, 2226452641UL, 3172047212UL, 1569171738UL, 76544055UL, 3783543297UL, 2030783667UL, 2237381973UL, 2706217212UL, 3283985735UL, 1560162209UL, 1166820137UL, 3818389960UL, 193959252UL, 346134252UL, 4258046618UL, 2502743884UL, 1963136977UL, 3739017448UL, 3887005605UL, 1204846712UL, 1856291967UL, 4143674472UL, 2538785911UL, 366578749UL, 3889946075UL, 3303325234UL, 2589568800UL, +1193586059UL, 2917569085UL, 969912041UL, 2556570543UL, 162987300UL, 1960844609UL, 61311938UL, 427583517UL, 315868734UL, 2542622968UL, 3949539136UL, 2278526422UL, 92839917UL, 1235059630UL, 1533374854UL, 847792023UL, 1361054176UL, 1147875681UL, 164541100UL, 1010135841UL, 143302319UL, 1348709332UL, 368616909UL, 20896020UL, 344974153UL, 2576803233UL, 3290873783UL, 1078575783UL, 2680612471UL, 1276425436UL, 2400671554UL, 628790408UL, +4149623645UL, 2109177634UL, 998215324UL, 3127793500UL, 2019336900UL, 3525419965UL, 2583746384UL, 2126302368UL, 3258602104UL, 2858154034UL, 1996113346UL, 3726060195UL, 157069329UL, 390662438UL, 2250549235UL, 982000497UL, 377281730UL, 3251789121UL, 236703173UL, 3487415996UL, 2303768414UL, 3394010206UL, 4232159202UL, 468321553UL, 2773608982UL, 681592492UL, 2978494251UL, 989230484UL, 3122841814UL, 3647638215UL, 4089094260UL, 541354422UL, +223117443UL, 2225009071UL, 2829509947UL, 2754981128UL, 3897048544UL, 3550177883UL, 2461273592UL, 282627696UL, 668143612UL, 1378024753UL, 3686775275UL, 4230752590UL, 1105868822UL, 3765910650UL, 729116355UL, 3886390916UL, 65029451UL, 328554604UL, 3419111947UL, 1172004841UL, 2525409243UL, 1677678908UL, 1395036942UL, 155635560UL, 1088384271UL, 689357059UL, 1754542213UL, 1076601715UL, 2712009967UL, 1960202673UL, 1009675673UL, 3742350158UL, +2581225953UL, 129749802UL, 9090161UL, 1854921599UL, 2655519695UL, 1393282220UL, 809557750UL, 1422536794UL, 4175512633UL, 141286453UL, 2211497169UL, 1739311360UL, 850391877UL, 3190829323UL, 2782782009UL, 2694871802UL, 1738527771UL, 837232655UL, 2274981421UL, 2935438833UL, 3145832503UL, 1858071296UL, 955772620UL, 134516308UL, 3576789728UL, 4045354759UL, 3367712327UL, 874117013UL, 3944221200UL, 950102624UL, 3562634568UL, 2420548306UL, +543679720UL, 1241913280UL, 1360146137UL, 3644280343UL, 176019367UL, 1169030022UL, 2226452641UL, 3172047212UL, 3927720006UL, 76544055UL, 3783543297UL, 2030783667UL, 2237381973UL, 1497233808UL, 3283985735UL, 1560162209UL, 1166820137UL, 3818389960UL, 2344066681UL, 346134252UL, 4258046618UL, 2502743884UL, 1963136977UL, 79988846UL, 3887005605UL, 1204846712UL, 1856291967UL, 4143674472UL, 3967952414UL, 366578749UL, 3889946075UL, 3303325234UL, +2589568800UL, 2193179011UL, 2917569085UL, 969912041UL, 2556570543UL, 162987300UL, 52882655UL, 61311938UL, 427583517UL, 315868734UL, 2542622968UL, 1575831590UL, 2278526422UL, 92839917UL, 1235059630UL, 1533374854UL, 2397068791UL, 1361054176UL, 1147875681UL, 164541100UL, 1010135841UL, 2586368032UL, 1348709332UL, 368616909UL, 20896020UL, 344974153UL, 3445652232UL, 3290873783UL, 1078575783UL, 2680612471UL, 1276425436UL, 3682156544UL, +628790408UL, 4149623645UL, 2109177634UL, 998215324UL, 4049708298UL, 2019336900UL, 3525419965UL, 2583746384UL, 2126302368UL, 1627944270UL, 2858154034UL, 1996113346UL, 3726060195UL, 157069329UL, 1481222640UL, 2250549235UL, 982000497UL, 377281730UL, 3251789121UL, 3564274539UL, 3487415996UL, 2303768414UL, 3394010206UL, 4232159202UL, 3509025997UL, 2773608982UL, 681592492UL, 2978494251UL, 989230484UL, 980252048UL, 3647638215UL, 4089094260UL, +541354422UL, 223117443UL, 543970497UL, 2829509947UL, 2754981128UL, 3897048544UL, 3550177883UL, 2736782140UL, 282627696UL, 668143612UL, 1378024753UL, 3686775275UL, 2728601425UL, 1105868822UL, 3765910650UL, 729116355UL, 3886390916UL, 1866378660UL, 328554604UL, 3419111947UL, 1172004841UL, 2525409243UL, 1506924008UL, 1395036942UL, 155635560UL, 1088384271UL, 689357059UL, 3587092123UL, 1076601715UL, 2712009967UL, 1960202673UL, 1009675673UL, +4292715891UL, 2465250857UL, 3267969665UL, 2459570573UL, 3644463083UL, 1637197500UL, 684559293UL, 3520611957UL, 2976084366UL, 1512112440UL, 1778285193UL, 1849742417UL, 3144801412UL, 3009052859UL, 820829188UL, 1382783871UL, 3373481539UL, 3777016406UL, 266942530UL, 1792334422UL, 4109859515UL, 1468149634UL, 1356457853UL, 623893785UL, 1301686542UL, 441704877UL, 3377795902UL, 879822753UL, 329462927UL, 543858304UL, 2221828617UL, 2996486613UL, +981774202UL, 1032220084UL, 1066536452UL, 1004068806UL, 1336694798UL, 3744375323UL, 3802436665UL, 3366526577UL, 418696462UL, 1776559103UL, 1291965608UL, 1623030339UL, 1443628607UL, 572114324UL, 899621592UL, 332121275UL, 3637616671UL, 457287722UL, 3803043476UL, 408472701UL, 660940326UL, 1209169008UL, 1202511620UL, 2906900959UL, 2600414642UL, 2015874468UL, 2931389161UL, 1760773669UL, 2601299639UL, 543821664UL, 3426280682UL, 1337602255UL, +3334593650UL, 1320885980UL, 3857269540UL, 2548321029UL, 2250001180UL, 673341051UL, 1900184720UL, 731675831UL, 2461790412UL, 2593291320UL, 1640301250UL, 863529987UL, 91627443UL, 2437824309UL, 2834231475UL, 4093270720UL, 1474594761UL, 4186662839UL, 1683556862UL, 1302286991UL, 806676270UL, 703274107UL, 3756759580UL, 674737904UL, 912015048UL, 1823306025UL, 1509430520UL, 3128952761UL, 290841833UL, 3917789380UL, 1022040580UL, 1810054038UL, +334998864UL, 1009274987UL, 310979037UL, 606749827UL, 546291081UL, 3438438313UL, 1840081424UL, 1950680845UL, 4217236364UL, 1814584903UL, 2814353208UL, 194196981UL, 1540331253UL, 3135937654UL, 773351497UL, 1878220007UL, 3097009802UL, 1252607159UL, 1378821846UL, 2741884614UL, 178612659UL, 3656860395UL, 1259606652UL, 3942111545UL, 488406826UL, 3640897405UL, 3419000480UL, 353909713UL, 2996208477UL, 2862593073UL, 108483327UL, 648472258UL, +1060249632UL, 1049865483UL, 430087518UL, 1364157854UL, 3367631180UL, 251313827UL, 2374149836UL, 2109357086UL, 479172068UL, 464775113UL, 1806677787UL, 3488082411UL, 356035738UL, 3080424395UL, 4134646749UL, 369528743UL, 1031004516UL, 2525336414UL, 4189798138UL, 3928909462UL, 568714397UL, 1681832820UL, 1753328641UL, 827357673UL, 1651960551UL, 1798317455UL, 737101952UL, 3257553606UL, 400882781UL, 1473208110UL, 4134183873UL, 2193420912UL, +}, +{ +2483976489UL, 2790651795UL, 3298324523UL, 3508205426UL, 2236819708UL, 917494217UL, 769620837UL, 3411018785UL, 2391335000UL, 1627061280UL, 3356773416UL, 1288706527UL, 4178910717UL, 3636299534UL, 4221874052UL, 3674654381UL, 537787012UL, 4271656840UL, 185820273UL, 1160533598UL, 1862365049UL, 2550353307UL, 1392072847UL, 1870891365UL, 1517453821UL, 524666025UL, 3645751565UL, 2415020247UL, 3691419894UL, 2580450642UL, 2130267479UL, 3636103610UL, +562446539UL, 750696587UL, 97137475UL, 3894066051UL, 2239638596UL, 3256181120UL, 3981041836UL, 774947039UL, 451287677UL, 3618957054UL, 4236303539UL, 1027744929UL, 1497195372UL, 498574915UL, 2164122779UL, 582902291UL, 3040883311UL, 1626221455UL, 1853378UL, 2125490000UL, 3185055972UL, 1607660025UL, 432884530UL, 779476209UL, 124284956UL, 2488937128UL, 2521389012UL, 107485781UL, 2873055013UL, 1171872946UL, 3130489952UL, 4273333914UL, +646240524UL, 3970896645UL, 942009076UL, 4069926418UL, 3129385884UL, 3470469370UL, 388702536UL, 450999415UL, 2995728716UL, 1687173264UL, 3049352827UL, 2648078738UL, 190663705UL, 486809970UL, 424002670UL, 2421764946UL, 2941043524UL, 3841512738UL, 119077561UL, 1801381572UL, 2208680167UL, 2502730219UL, 9899015UL, 2455199230UL, 3755314209UL, 3958460021UL, 3846398898UL, 1405136244UL, 2870563334UL, 821846618UL, 2790899812UL, 863647562UL, +629585032UL, 958925512UL, 1190540209UL, 57251233UL, 2109551995UL, 2294881622UL, 2603370255UL, 3839518646UL, 123838650UL, 3436270690UL, 1637121394UL, 3761101432UL, 954001192UL, 759760236UL, 3268295908UL, 2313083096UL, 630164216UL, 2367213191UL, 3992059381UL, 3292952769UL, 2040774258UL, 1420209005UL, 527547730UL, 1222399440UL, 1515078401UL, 2005580991UL, 645585788UL, 2256370254UL, 3057235502UL, 2870727428UL, 2785498804UL, 333440916UL, +1873686678UL, 2489794553UL, 3726728164UL, 3405629071UL, 3869328595UL, 3081963448UL, 2122133003UL, 1428788181UL, 4141962679UL, 41030733UL, 183716455UL, 36316501UL, 1430796327UL, 1884066707UL, 1216957106UL, 3455082673UL, 1092665987UL, 535070834UL, 3873372533UL, 175757671UL, 3414803303UL, 791028991UL, 3436610906UL, 2950895946UL, 977680845UL, 4224715886UL, 2809442211UL, 4044727083UL, 3035532020UL, 4253187882UL, 969203959UL, 2539482914UL, +813880136UL, 2483976489UL, 2790651795UL, 3298324523UL, 3508205426UL, 49280479UL, 917494217UL, 769620837UL, 3411018785UL, 2391335000UL, 3036738936UL, 3356773416UL, 1288706527UL, 4178910717UL, 3636299534UL, 2294957038UL, 3674654381UL, 537787012UL, 4271656840UL, 185820273UL, 2622722506UL, 1862365049UL, 2550353307UL, 1392072847UL, 1870891365UL, 2838104933UL, 524666025UL, 3645751565UL, 2415020247UL, 3691419894UL, 1295777418UL, 2130267479UL, +3636103610UL, 562446539UL, 750696587UL, 249830932UL, 3894066051UL, 2239638596UL, 3256181120UL, 3981041836UL, 3217398876UL, 451287677UL, 3618957054UL, 4236303539UL, 1027744929UL, 1724964245UL, 498574915UL, 2164122779UL, 582902291UL, 3040883311UL, 3101287841UL, 1853378UL, 2125490000UL, 3185055972UL, 1607660025UL, 1128474163UL, 779476209UL, 124284956UL, 2488937128UL, 2521389012UL, 338597864UL, 2873055013UL, 1171872946UL, 3130489952UL, +4273333914UL, 1557892392UL, 3970896645UL, 942009076UL, 4069926418UL, 3129385884UL, 2688433076UL, 388702536UL, 450999415UL, 2995728716UL, 1687173264UL, 157685189UL, 2648078738UL, 190663705UL, 486809970UL, 424002670UL, 979986388UL, 2941043524UL, 3841512738UL, 119077561UL, 1801381572UL, 2668625968UL, 2502730219UL, 9899015UL, 2455199230UL, 3755314209UL, 2699515741UL, 3846398898UL, 1405136244UL, 2870563334UL, 821846618UL, 505633792UL, +863647562UL, 629585032UL, 958925512UL, 1190540209UL, 2067402799UL, 2109551995UL, 2294881622UL, 2603370255UL, 3839518646UL, 2688067120UL, 3436270690UL, 1637121394UL, 3761101432UL, 954001192UL, 3206166733UL, 3268295908UL, 2313083096UL, 630164216UL, 2367213191UL, 3007494680UL, 3292952769UL, 2040774258UL, 1420209005UL, 527547730UL, 4047406592UL, 1515078401UL, 2005580991UL, 645585788UL, 2256370254UL, 13805572UL, 2870727428UL, 2785498804UL, +333440916UL, 1873686678UL, 1928222740UL, 3726728164UL, 3405629071UL, 3869328595UL, 3081963448UL, 2971423693UL, 1428788181UL, 4141962679UL, 41030733UL, 183716455UL, 4064095256UL, 1430796327UL, 1884066707UL, 1216957106UL, 3455082673UL, 985592757UL, 535070834UL, 3873372533UL, 175757671UL, 3414803303UL, 2159028553UL, 3436610906UL, 2950895946UL, 977680845UL, 4224715886UL, 345462057UL, 4044727083UL, 3035532020UL, 4253187882UL, 969203959UL, +984166534UL, 813880136UL, 2483976489UL, 2790651795UL, 3298324523UL, 1080001158UL, 49280479UL, 917494217UL, 769620837UL, 3411018785UL, 3216598401UL, 3036738936UL, 3356773416UL, 1288706527UL, 4178910717UL, 3311472057UL, 2294957038UL, 3674654381UL, 537787012UL, 4271656840UL, 220045511UL, 2622722506UL, 1862365049UL, 2550353307UL, 1392072847UL, 3057632678UL, 2838104933UL, 524666025UL, 3645751565UL, 2415020247UL, 252304106UL, 1295777418UL, +2130267479UL, 3636103610UL, 562446539UL, 80437039UL, 249830932UL, 3894066051UL, 2239638596UL, 3256181120UL, 117173223UL, 3217398876UL, 451287677UL, 3618957054UL, 4236303539UL, 1986849360UL, 1724964245UL, 498574915UL, 2164122779UL, 582902291UL, 288631030UL, 3101287841UL, 1853378UL, 2125490000UL, 3185055972UL, 824635664UL, 1128474163UL, 779476209UL, 124284956UL, 2488937128UL, 1231646648UL, 338597864UL, 2873055013UL, 1171872946UL, +3130489952UL, 708957725UL, 1557892392UL, 3970896645UL, 942009076UL, 4069926418UL, 2286522565UL, 2688433076UL, 388702536UL, 450999415UL, 2995728716UL, 2523361978UL, 157685189UL, 2648078738UL, 190663705UL, 486809970UL, 151444406UL, 979986388UL, 2941043524UL, 3841512738UL, 119077561UL, 3762447035UL, 2668625968UL, 2502730219UL, 9899015UL, 2455199230UL, 3532439568UL, 2699515741UL, 3846398898UL, 1405136244UL, 2870563334UL, 2242036665UL, +505633792UL, 863647562UL, 629585032UL, 958925512UL, 2618618630UL, 2067402799UL, 2109551995UL, 2294881622UL, 2603370255UL, 2461404010UL, 2688067120UL, 3436270690UL, 1637121394UL, 3761101432UL, 1076814097UL, 3206166733UL, 3268295908UL, 2313083096UL, 630164216UL, 12196305UL, 3007494680UL, 3292952769UL, 2040774258UL, 1420209005UL, 2609377752UL, 4047406592UL, 1515078401UL, 2005580991UL, 645585788UL, 865985176UL, 13805572UL, 2870727428UL, +2785498804UL, 333440916UL, 3735553268UL, 1928222740UL, 3726728164UL, 3405629071UL, 3869328595UL, 501640466UL, 2971423693UL, 1428788181UL, 4141962679UL, 41030733UL, 97561214UL, 4064095256UL, 1430796327UL, 1884066707UL, 1216957106UL, 3840122090UL, 985592757UL, 535070834UL, 3873372533UL, 175757671UL, 3856277268UL, 2159028553UL, 3436610906UL, 2950895946UL, 977680845UL, 3313441827UL, 345462057UL, 4044727083UL, 3035532020UL, 4253187882UL, +3468811573UL, 984166534UL, 813880136UL, 2483976489UL, 2790651795UL, 3733649754UL, 1080001158UL, 49280479UL, 917494217UL, 769620837UL, 3969566450UL, 3216598401UL, 3036738936UL, 3356773416UL, 1288706527UL, 2444128005UL, 3311472057UL, 2294957038UL, 3674654381UL, 537787012UL, 4166109669UL, 220045511UL, 2622722506UL, 1862365049UL, 2550353307UL, 2552992760UL, 3057632678UL, 2838104933UL, 524666025UL, 3645751565UL, 664164441UL, 252304106UL, +1295777418UL, 2130267479UL, 3636103610UL, 3227561061UL, 80437039UL, 249830932UL, 3894066051UL, 2239638596UL, 1071536668UL, 117173223UL, 3217398876UL, 451287677UL, 3618957054UL, 3066415327UL, 1986849360UL, 1724964245UL, 498574915UL, 2164122779UL, 3541914330UL, 288631030UL, 3101287841UL, 1853378UL, 2125490000UL, 2207189978UL, 824635664UL, 1128474163UL, 779476209UL, 124284956UL, 2117633906UL, 1231646648UL, 338597864UL, 2873055013UL, +1171872946UL, 891038594UL, 708957725UL, 1557892392UL, 3970896645UL, 942009076UL, 42952651UL, 2286522565UL, 2688433076UL, 388702536UL, 450999415UL, 2986730356UL, 2523361978UL, 157685189UL, 2648078738UL, 190663705UL, 3058267870UL, 151444406UL, 979986388UL, 2941043524UL, 3841512738UL, 1844101292UL, 3762447035UL, 2668625968UL, 2502730219UL, 9899015UL, 2599582093UL, 3532439568UL, 2699515741UL, 3846398898UL, 1405136244UL, 811001941UL, +2242036665UL, 505633792UL, 863647562UL, 629585032UL, 2722320710UL, 2618618630UL, 2067402799UL, 2109551995UL, 2294881622UL, 1820862072UL, 2461404010UL, 2688067120UL, 3436270690UL, 1637121394UL, 3642978005UL, 1076814097UL, 3206166733UL, 3268295908UL, 2313083096UL, 1900318020UL, 12196305UL, 3007494680UL, 3292952769UL, 2040774258UL, 520848705UL, 2609377752UL, 4047406592UL, 1515078401UL, 2005580991UL, 2530251392UL, 865985176UL, 13805572UL, +2870727428UL, 2785498804UL, 2878984912UL, 3735553268UL, 1928222740UL, 3726728164UL, 3405629071UL, 2717736455UL, 501640466UL, 2971423693UL, 1428788181UL, 4141962679UL, 3704214873UL, 97561214UL, 4064095256UL, 1430796327UL, 1884066707UL, 1721732760UL, 3840122090UL, 985592757UL, 535070834UL, 3873372533UL, 770732059UL, 3856277268UL, 2159028553UL, 3436610906UL, 2950895946UL, 33753949UL, 3313441827UL, 345462057UL, 4044727083UL, 3035532020UL, +4166506071UL, 2719759982UL, 1025532659UL, 3811323959UL, 713457907UL, 1577198020UL, 1719946821UL, 3963262337UL, 1719605451UL, 703663722UL, 1943886497UL, 2916371044UL, 1655862745UL, 109438187UL, 195575943UL, 2572727533UL, 2421761970UL, 1796539813UL, 2020762515UL, 1191344316UL, 2492085516UL, 2778033179UL, 4002316684UL, 1571080685UL, 1157340389UL, 3859584731UL, 3403766082UL, 2292873365UL, 2032258920UL, 1749575450UL, 848549431UL, 1893685820UL, +3510068298UL, 3308906564UL, 1193936308UL, 2561670234UL, 1043148718UL, 2611815896UL, 3832995202UL, 2436487998UL, 3377369330UL, 1174818128UL, 796514731UL, 1985886833UL, 88296218UL, 3032898657UL, 4101301361UL, 1486994584UL, 237792475UL, 1029399834UL, 1708840018UL, 2934039708UL, 1496674948UL, 4243234983UL, 3896751668UL, 1726119825UL, 2706068825UL, 1900013134UL, 2639641919UL, 1433377392UL, 2962655166UL, 1870954268UL, 3873603462UL, 1778084630UL, +2393311756UL, 4135022799UL, 3669603001UL, 811404758UL, 784379778UL, 4283689136UL, 405168660UL, 3873488622UL, 486946690UL, 347427153UL, 2139072474UL, 1143349522UL, 3780264455UL, 2938731842UL, 3864001470UL, 3497981827UL, 2703917008UL, 3222236962UL, 2604106616UL, 1281570367UL, 175937153UL, 433252852UL, 3232065906UL, 1111895932UL, 1027363895UL, 2435093744UL, 4232690481UL, 1940855209UL, 2844613991UL, 2095175619UL, 3479946852UL, 393314401UL, +3625733631UL, 1073779513UL, 2884072879UL, 4089630675UL, 3614205484UL, 1379809260UL, 3980251795UL, 3914556410UL, 3633356126UL, 3030204458UL, 1654727861UL, 3765074811UL, 959734060UL, 842315676UL, 353688341UL, 145655006UL, 1972100601UL, 1456042517UL, 3767579955UL, 4282066379UL, 498998655UL, 4123310742UL, 1801424182UL, 777808179UL, 655425670UL, 588715641UL, 2136252742UL, 1283378143UL, 639191135UL, 3132375783UL, 276649124UL, 2036776039UL, +3352396498UL, 3893441746UL, 3298373918UL, 1024178230UL, 2623051553UL, 1956117442UL, 2955394456UL, 2478945776UL, 3904945720UL, 769232312UL, 2168822980UL, 3715831945UL, 453874622UL, 3351529191UL, 3256151193UL, 808042625UL, 1700919462UL, 1008305347UL, 1518733915UL, 3194328753UL, 2228970756UL, 2604658038UL, 1376476152UL, 2147167203UL, 2585867511UL, 445717950UL, 3595016420UL, 3673970127UL, 3640614546UL, 494944945UL, 152508312UL, 4160926899UL, +}, +{ +3225674336UL, 827428943UL, 2858523441UL, 2447266124UL, 1539223637UL, 2299756421UL, 776912458UL, 279091824UL, 1152725492UL, 3903457284UL, 3987010398UL, 3996115574UL, 839506039UL, 3052513014UL, 28550291UL, 2597814974UL, 2328446377UL, 1961600298UL, 3695276714UL, 1334932648UL, 1141381380UL, 3025370440UL, 997698792UL, 931473445UL, 3091440507UL, 820119215UL, 3586778616UL, 1993126242UL, 4252838072UL, 3033829531UL, 2120026924UL, 65722921UL, +746724958UL, 461423533UL, 1582298542UL, 1564918930UL, 3710935369UL, 419349792UL, 3914061713UL, 2279209938UL, 770031171UL, 2062767935UL, 3373230309UL, 3582372364UL, 2025682996UL, 3352859025UL, 1262632952UL, 3140021482UL, 501370035UL, 2554730117UL, 352450195UL, 1002557127UL, 2813224858UL, 2808406559UL, 290476252UL, 4216846311UL, 1187381982UL, 3131323304UL, 1094330039UL, 2646234280UL, 655242013UL, 1152156402UL, 3658526705UL, 3565043535UL, +693375321UL, 2120064836UL, 3726555752UL, 97387177UL, 546586686UL, 1013492636UL, 3874404446UL, 440995849UL, 1929251266UL, 95137166UL, 564969023UL, 3559119399UL, 3855477390UL, 2439885481UL, 2492213232UL, 2611214170UL, 2054191666UL, 2778642234UL, 2267416277UL, 2194315209UL, 1360165075UL, 1018128176UL, 2841084399UL, 3028189871UL, 3631770575UL, 541021087UL, 1091467742UL, 2743780329UL, 3566538467UL, 1277066122UL, 279582475UL, 2712119598UL, +3296319359UL, 4187226385UL, 1468994750UL, 2946664285UL, 2284913307UL, 740953233UL, 3351500634UL, 1791054313UL, 3355533193UL, 610062694UL, 3089981426UL, 3469441840UL, 3225672476UL, 2223653903UL, 2593994385UL, 548784340UL, 549871569UL, 865468702UL, 1593939385UL, 645229999UL, 1412095765UL, 2814231763UL, 3619658094UL, 877462820UL, 2198765077UL, 1845119421UL, 4144145546UL, 1356681209UL, 848707034UL, 4144513299UL, 3231318896UL, 3382035479UL, +693621410UL, 2821661683UL, 4236142563UL, 680649431UL, 3290999942UL, 200856634UL, 617766412UL, 3194332974UL, 4102392657UL, 2776797278UL, 2932808060UL, 793967937UL, 2149374605UL, 3736514467UL, 3547689148UL, 3744888920UL, 98278184UL, 1497045279UL, 2945126332UL, 4285864315UL, 2791068812UL, 1939995011UL, 56752862UL, 864909862UL, 625377571UL, 2266362085UL, 1050287398UL, 925722519UL, 1008109592UL, 2819528345UL, 3573068613UL, 1915083884UL, +1536828870UL, 3225674336UL, 827428943UL, 2858523441UL, 2447266124UL, 2186287936UL, 2299756421UL, 776912458UL, 279091824UL, 1152725492UL, 1271286102UL, 3987010398UL, 3996115574UL, 839506039UL, 3052513014UL, 1036957208UL, 2597814974UL, 2328446377UL, 1961600298UL, 3695276714UL, 2395157917UL, 1141381380UL, 3025370440UL, 997698792UL, 931473445UL, 2727078785UL, 820119215UL, 3586778616UL, 1993126242UL, 4252838072UL, 1171102868UL, 2120026924UL, +65722921UL, 746724958UL, 461423533UL, 2335086228UL, 1564918930UL, 3710935369UL, 419349792UL, 3914061713UL, 1136716661UL, 770031171UL, 2062767935UL, 3373230309UL, 3582372364UL, 4100328450UL, 3352859025UL, 1262632952UL, 3140021482UL, 501370035UL, 2579000299UL, 352450195UL, 1002557127UL, 2813224858UL, 2808406559UL, 2642514897UL, 4216846311UL, 1187381982UL, 3131323304UL, 1094330039UL, 3092488663UL, 655242013UL, 1152156402UL, 3658526705UL, +3565043535UL, 3280658482UL, 2120064836UL, 3726555752UL, 97387177UL, 546586686UL, 584864345UL, 3874404446UL, 440995849UL, 1929251266UL, 95137166UL, 823950215UL, 3559119399UL, 3855477390UL, 2439885481UL, 2492213232UL, 2297040376UL, 2054191666UL, 2778642234UL, 2267416277UL, 2194315209UL, 573807317UL, 1018128176UL, 2841084399UL, 3028189871UL, 3631770575UL, 2747338726UL, 1091467742UL, 2743780329UL, 3566538467UL, 1277066122UL, 1715139924UL, +2712119598UL, 3296319359UL, 4187226385UL, 1468994750UL, 3361368810UL, 2284913307UL, 740953233UL, 3351500634UL, 1791054313UL, 4290564545UL, 610062694UL, 3089981426UL, 3469441840UL, 3225672476UL, 1010959310UL, 2593994385UL, 548784340UL, 549871569UL, 865468702UL, 1825306744UL, 645229999UL, 1412095765UL, 2814231763UL, 3619658094UL, 3792219969UL, 2198765077UL, 1845119421UL, 4144145546UL, 1356681209UL, 268197516UL, 4144513299UL, 3231318896UL, +3382035479UL, 693621410UL, 2786831464UL, 4236142563UL, 680649431UL, 3290999942UL, 200856634UL, 3822069622UL, 3194332974UL, 4102392657UL, 2776797278UL, 2932808060UL, 525501162UL, 2149374605UL, 3736514467UL, 3547689148UL, 3744888920UL, 3219948462UL, 1497045279UL, 2945126332UL, 4285864315UL, 2791068812UL, 2678467476UL, 56752862UL, 864909862UL, 625377571UL, 2266362085UL, 2258093843UL, 925722519UL, 1008109592UL, 2819528345UL, 3573068613UL, +2743241289UL, 1536828870UL, 3225674336UL, 827428943UL, 2858523441UL, 992128922UL, 2186287936UL, 2299756421UL, 776912458UL, 279091824UL, 2108721702UL, 1271286102UL, 3987010398UL, 3996115574UL, 839506039UL, 1315622698UL, 1036957208UL, 2597814974UL, 2328446377UL, 1961600298UL, 3098343478UL, 2395157917UL, 1141381380UL, 3025370440UL, 997698792UL, 1317753106UL, 2727078785UL, 820119215UL, 3586778616UL, 1993126242UL, 2295599934UL, 1171102868UL, +2120026924UL, 65722921UL, 746724958UL, 3999203443UL, 2335086228UL, 1564918930UL, 3710935369UL, 419349792UL, 1662083910UL, 1136716661UL, 770031171UL, 2062767935UL, 3373230309UL, 3271761171UL, 4100328450UL, 3352859025UL, 1262632952UL, 3140021482UL, 3981040854UL, 2579000299UL, 352450195UL, 1002557127UL, 2813224858UL, 1064251076UL, 2642514897UL, 4216846311UL, 1187381982UL, 3131323304UL, 2077640887UL, 3092488663UL, 655242013UL, 1152156402UL, +3658526705UL, 548941006UL, 3280658482UL, 2120064836UL, 3726555752UL, 97387177UL, 4112878213UL, 584864345UL, 3874404446UL, 440995849UL, 1929251266UL, 227230803UL, 823950215UL, 3559119399UL, 3855477390UL, 2439885481UL, 610498128UL, 2297040376UL, 2054191666UL, 2778642234UL, 2267416277UL, 518192832UL, 573807317UL, 1018128176UL, 2841084399UL, 3028189871UL, 2512871059UL, 2747338726UL, 1091467742UL, 2743780329UL, 3566538467UL, 386661563UL, +1715139924UL, 2712119598UL, 3296319359UL, 4187226385UL, 2508754324UL, 3361368810UL, 2284913307UL, 740953233UL, 3351500634UL, 1296305541UL, 4290564545UL, 610062694UL, 3089981426UL, 3469441840UL, 148510865UL, 1010959310UL, 2593994385UL, 548784340UL, 549871569UL, 124676809UL, 1825306744UL, 645229999UL, 1412095765UL, 2814231763UL, 2540745278UL, 3792219969UL, 2198765077UL, 1845119421UL, 4144145546UL, 3966655401UL, 268197516UL, 4144513299UL, +3231318896UL, 3382035479UL, 1674022032UL, 2786831464UL, 4236142563UL, 680649431UL, 3290999942UL, 4065303704UL, 3822069622UL, 3194332974UL, 4102392657UL, 2776797278UL, 3735376922UL, 525501162UL, 2149374605UL, 3736514467UL, 3547689148UL, 2064870756UL, 3219948462UL, 1497045279UL, 2945126332UL, 4285864315UL, 2389978045UL, 2678467476UL, 56752862UL, 864909862UL, 625377571UL, 2308006661UL, 2258093843UL, 925722519UL, 1008109592UL, 2819528345UL, +2927186231UL, 2743241289UL, 1536828870UL, 3225674336UL, 827428943UL, 1583633720UL, 992128922UL, 2186287936UL, 2299756421UL, 776912458UL, 298217241UL, 2108721702UL, 1271286102UL, 3987010398UL, 3996115574UL, 1041730366UL, 1315622698UL, 1036957208UL, 2597814974UL, 2328446377UL, 1386688725UL, 3098343478UL, 2395157917UL, 1141381380UL, 3025370440UL, 2292273773UL, 1317753106UL, 2727078785UL, 820119215UL, 3586778616UL, 206996196UL, 2295599934UL, +1171102868UL, 2120026924UL, 65722921UL, 3271158508UL, 3999203443UL, 2335086228UL, 1564918930UL, 3710935369UL, 3305544914UL, 1662083910UL, 1136716661UL, 770031171UL, 2062767935UL, 4244195826UL, 3271761171UL, 4100328450UL, 3352859025UL, 1262632952UL, 3581040310UL, 3981040854UL, 2579000299UL, 352450195UL, 1002557127UL, 1789606594UL, 1064251076UL, 2642514897UL, 4216846311UL, 1187381982UL, 1519386238UL, 2077640887UL, 3092488663UL, 655242013UL, +1152156402UL, 3732146227UL, 548941006UL, 3280658482UL, 2120064836UL, 3726555752UL, 2631398817UL, 4112878213UL, 584864345UL, 3874404446UL, 440995849UL, 3541162446UL, 227230803UL, 823950215UL, 3559119399UL, 3855477390UL, 560704260UL, 610498128UL, 2297040376UL, 2054191666UL, 2778642234UL, 1614756373UL, 518192832UL, 573807317UL, 1018128176UL, 2841084399UL, 927011949UL, 2512871059UL, 2747338726UL, 1091467742UL, 2743780329UL, 566198434UL, +386661563UL, 1715139924UL, 2712119598UL, 3296319359UL, 520529825UL, 2508754324UL, 3361368810UL, 2284913307UL, 740953233UL, 2414584088UL, 1296305541UL, 4290564545UL, 610062694UL, 3089981426UL, 120496553UL, 148510865UL, 1010959310UL, 2593994385UL, 548784340UL, 3206664898UL, 124676809UL, 1825306744UL, 645229999UL, 1412095765UL, 821445348UL, 2540745278UL, 3792219969UL, 2198765077UL, 1845119421UL, 3434574619UL, 3966655401UL, 268197516UL, +4144513299UL, 3231318896UL, 3856935910UL, 1674022032UL, 2786831464UL, 4236142563UL, 680649431UL, 3331403374UL, 4065303704UL, 3822069622UL, 3194332974UL, 4102392657UL, 2194924932UL, 3735376922UL, 525501162UL, 2149374605UL, 3736514467UL, 2041458481UL, 2064870756UL, 3219948462UL, 1497045279UL, 2945126332UL, 3515890044UL, 2389978045UL, 2678467476UL, 56752862UL, 864909862UL, 1009125580UL, 2308006661UL, 2258093843UL, 925722519UL, 1008109592UL, +4166824654UL, 3399481064UL, 3848337172UL, 841675162UL, 2388734555UL, 3373081217UL, 1627287001UL, 1958651480UL, 1771323855UL, 2126620758UL, 3879967947UL, 1885140905UL, 806066092UL, 2168342987UL, 3778265278UL, 943582962UL, 3895768303UL, 337928214UL, 3677576461UL, 1884088203UL, 2629440785UL, 2357038005UL, 2362450760UL, 2080907681UL, 2644383608UL, 4153875040UL, 794977307UL, 2675637463UL, 2655426076UL, 3481699657UL, 2262369403UL, 1038608931UL, +4210267953UL, 2376694315UL, 2661705117UL, 3994997027UL, 2994346963UL, 4074343171UL, 833108024UL, 3562046155UL, 1113632369UL, 3087093963UL, 2115712884UL, 2778607581UL, 2702162487UL, 1347693590UL, 4271098334UL, 2746712394UL, 1629623802UL, 1932973152UL, 3077074108UL, 1338011180UL, 848785806UL, 1834095770UL, 4017238UL, 2661097500UL, 2935787683UL, 1214195119UL, 3099491937UL, 3868451396UL, 1063740008UL, 2768962809UL, 2554721244UL, 695479209UL, +2634119800UL, 1379839034UL, 2653377927UL, 921934002UL, 3586936843UL, 3035369677UL, 769283110UL, 2417935220UL, 3330084607UL, 2020519519UL, 2546176786UL, 1523223165UL, 3654065096UL, 1835059231UL, 2776263618UL, 3837173427UL, 3236141295UL, 1184415634UL, 157448610UL, 2474336972UL, 3313035876UL, 309195150UL, 2288837115UL, 548743307UL, 528342914UL, 1527562212UL, 554918643UL, 2739291918UL, 2630873849UL, 155419923UL, 226845272UL, 1343735931UL, +3106346884UL, 4177975386UL, 2515480406UL, 2049734808UL, 2802879609UL, 1805234272UL, 317920918UL, 745796250UL, 3816657414UL, 4198378080UL, 3057334192UL, 503016924UL, 2027816790UL, 579332504UL, 3037999504UL, 2857298788UL, 911046668UL, 1170775701UL, 2369720UL, 3364839261UL, 1462383461UL, 181600856UL, 1315241696UL, 2861043792UL, 3549404088UL, 3974245218UL, 4141518566UL, 1195336199UL, 2291064152UL, 3287203016UL, 3867432937UL, 2593766219UL, +2114273192UL, 3716228986UL, 410286941UL, 2497285113UL, 1338500439UL, 3748757692UL, 2315519304UL, 545570554UL, 1519868916UL, 679216320UL, 3264840479UL, 4083041163UL, 261878334UL, 2370312122UL, 1408058272UL, 1287635274UL, 3433241543UL, 3923613754UL, 2423502603UL, 3948993135UL, 1418484161UL, 230113502UL, 1766447938UL, 3101286974UL, 917358979UL, 2836128279UL, 2859079881UL, 3162688352UL, 2158281644UL, 154509481UL, 2409785274UL, 3096379437UL, +}, +{ +2456954827UL, 2895978734UL, 1621803157UL, 230462381UL, 4046364119UL, 716597790UL, 2031510641UL, 2208319977UL, 1107910846UL, 3379950723UL, 3628284249UL, 1393263274UL, 3842378742UL, 768116962UL, 1782906996UL, 3022943801UL, 510040722UL, 2180373447UL, 1294989632UL, 1659724107UL, 953774117UL, 500296619UL, 2269873184UL, 3215368465UL, 3933601613UL, 2401810535UL, 3568992417UL, 617528376UL, 2437412983UL, 2921242388UL, 2311040363UL, 3695847323UL, +1609309841UL, 3222455492UL, 1108155620UL, 397599239UL, 3344183623UL, 1159383441UL, 81554651UL, 4223302962UL, 2812031899UL, 2613176831UL, 2967803832UL, 3560382993UL, 670173062UL, 2361031672UL, 1745444335UL, 2067906079UL, 3019908371UL, 2662226130UL, 2962440272UL, 3053411095UL, 92212044UL, 1041941495UL, 4116546365UL, 2094375399UL, 3992554702UL, 216246182UL, 2271736480UL, 1006434362UL, 4104644208UL, 2543874803UL, 1310440964UL, 1956002873UL, +1485192936UL, 3027546418UL, 448786402UL, 749040342UL, 406538664UL, 2522826782UL, 3681979470UL, 3941253886UL, 672615054UL, 3655479714UL, 392178376UL, 1619518340UL, 1639889010UL, 666186812UL, 4094569743UL, 2947917117UL, 3308938954UL, 1572886498UL, 1065510431UL, 2158389109UL, 1583642689UL, 1763046973UL, 3578310229UL, 4106948216UL, 58659757UL, 691952777UL, 3394715763UL, 3333944006UL, 3020203798UL, 3598064251UL, 3151881711UL, 2071056894UL, +1263790655UL, 4188233031UL, 4230429856UL, 3088041549UL, 3031631424UL, 3912597408UL, 1768734847UL, 1975027092UL, 3976493733UL, 2376551740UL, 1137628506UL, 535767974UL, 3105256806UL, 15427398UL, 2472341690UL, 685997424UL, 1374644561UL, 2446214061UL, 2844847931UL, 1058649390UL, 1581230869UL, 1725846082UL, 3062699842UL, 1116400547UL, 1095426642UL, 2940190462UL, 4276038488UL, 2091764667UL, 4074059985UL, 98163536UL, 4157153745UL, 32476821UL, +2354284775UL, 752663757UL, 2987293678UL, 1119786914UL, 3019442904UL, 111185876UL, 3569592548UL, 3991775183UL, 3161418733UL, 3973354577UL, 1650454973UL, 426129509UL, 3659038742UL, 1387393667UL, 543731583UL, 781586523UL, 917315276UL, 832142534UL, 3911092159UL, 325250500UL, 2735441676UL, 163564958UL, 1002098855UL, 337936437UL, 1869530240UL, 2233969733UL, 4108076124UL, 3255026725UL, 4072134049UL, 2083771067UL, 1559589006UL, 1845121907UL, +466036013UL, 2456954827UL, 2895978734UL, 1621803157UL, 230462381UL, 2022150409UL, 716597790UL, 2031510641UL, 2208319977UL, 1107910846UL, 1838834877UL, 3628284249UL, 1393263274UL, 3842378742UL, 768116962UL, 2303040715UL, 3022943801UL, 510040722UL, 2180373447UL, 1294989632UL, 3074858415UL, 953774117UL, 500296619UL, 2269873184UL, 3215368465UL, 3531413908UL, 2401810535UL, 3568992417UL, 617528376UL, 2437412983UL, 1730632320UL, 2311040363UL, +3695847323UL, 1609309841UL, 3222455492UL, 3189359980UL, 397599239UL, 3344183623UL, 1159383441UL, 81554651UL, 1933731121UL, 2812031899UL, 2613176831UL, 2967803832UL, 3560382993UL, 758113139UL, 2361031672UL, 1745444335UL, 2067906079UL, 3019908371UL, 3537991495UL, 2962440272UL, 3053411095UL, 92212044UL, 1041941495UL, 2653519981UL, 2094375399UL, 3992554702UL, 216246182UL, 2271736480UL, 695350220UL, 4104644208UL, 2543874803UL, 1310440964UL, +1956002873UL, 3373048130UL, 3027546418UL, 448786402UL, 749040342UL, 406538664UL, 4081844472UL, 3681979470UL, 3941253886UL, 672615054UL, 3655479714UL, 197563239UL, 1619518340UL, 1639889010UL, 666186812UL, 4094569743UL, 2518320719UL, 3308938954UL, 1572886498UL, 1065510431UL, 2158389109UL, 3320483696UL, 1763046973UL, 3578310229UL, 4106948216UL, 58659757UL, 3412172826UL, 3394715763UL, 3333944006UL, 3020203798UL, 3598064251UL, 1693717788UL, +2071056894UL, 1263790655UL, 4188233031UL, 4230429856UL, 2564478937UL, 3031631424UL, 3912597408UL, 1768734847UL, 1975027092UL, 3546175061UL, 2376551740UL, 1137628506UL, 535767974UL, 3105256806UL, 450760279UL, 2472341690UL, 685997424UL, 1374644561UL, 2446214061UL, 1873063065UL, 1058649390UL, 1581230869UL, 1725846082UL, 3062699842UL, 813496775UL, 1095426642UL, 2940190462UL, 4276038488UL, 2091764667UL, 3857233976UL, 98163536UL, 4157153745UL, +32476821UL, 2354284775UL, 3115605568UL, 2987293678UL, 1119786914UL, 3019442904UL, 111185876UL, 996447434UL, 3991775183UL, 3161418733UL, 3973354577UL, 1650454973UL, 1089784804UL, 3659038742UL, 1387393667UL, 543731583UL, 781586523UL, 2711412312UL, 832142534UL, 3911092159UL, 325250500UL, 2735441676UL, 3563501139UL, 1002098855UL, 337936437UL, 1869530240UL, 2233969733UL, 1156926454UL, 3255026725UL, 4072134049UL, 2083771067UL, 1559589006UL, +3832870112UL, 466036013UL, 2456954827UL, 2895978734UL, 1621803157UL, 2340808859UL, 2022150409UL, 716597790UL, 2031510641UL, 2208319977UL, 1823993818UL, 1838834877UL, 3628284249UL, 1393263274UL, 3842378742UL, 2489609764UL, 2303040715UL, 3022943801UL, 510040722UL, 2180373447UL, 4204167795UL, 3074858415UL, 953774117UL, 500296619UL, 2269873184UL, 2320314628UL, 3531413908UL, 2401810535UL, 3568992417UL, 617528376UL, 712451843UL, 1730632320UL, +2311040363UL, 3695847323UL, 1609309841UL, 3224192365UL, 3189359980UL, 397599239UL, 3344183623UL, 1159383441UL, 758272390UL, 1933731121UL, 2812031899UL, 2613176831UL, 2967803832UL, 3986798661UL, 758113139UL, 2361031672UL, 1745444335UL, 2067906079UL, 3814344052UL, 3537991495UL, 2962440272UL, 3053411095UL, 92212044UL, 817573506UL, 2653519981UL, 2094375399UL, 3992554702UL, 216246182UL, 2456924809UL, 695350220UL, 4104644208UL, 2543874803UL, +1310440964UL, 1151286621UL, 3373048130UL, 3027546418UL, 448786402UL, 749040342UL, 637572176UL, 4081844472UL, 3681979470UL, 3941253886UL, 672615054UL, 3038758846UL, 197563239UL, 1619518340UL, 1639889010UL, 666186812UL, 4254608071UL, 2518320719UL, 3308938954UL, 1572886498UL, 1065510431UL, 3100620860UL, 3320483696UL, 1763046973UL, 3578310229UL, 4106948216UL, 403923766UL, 3412172826UL, 3394715763UL, 3333944006UL, 3020203798UL, 1859724785UL, +1693717788UL, 2071056894UL, 1263790655UL, 4188233031UL, 2908736862UL, 2564478937UL, 3031631424UL, 3912597408UL, 1768734847UL, 966714666UL, 3546175061UL, 2376551740UL, 1137628506UL, 535767974UL, 1561255376UL, 450760279UL, 2472341690UL, 685997424UL, 1374644561UL, 3122124160UL, 1873063065UL, 1058649390UL, 1581230869UL, 1725846082UL, 3791666219UL, 813496775UL, 1095426642UL, 2940190462UL, 4276038488UL, 2802023399UL, 3857233976UL, 98163536UL, +4157153745UL, 32476821UL, 1640659450UL, 3115605568UL, 2987293678UL, 1119786914UL, 3019442904UL, 4278091706UL, 996447434UL, 3991775183UL, 3161418733UL, 3973354577UL, 3398421232UL, 1089784804UL, 3659038742UL, 1387393667UL, 543731583UL, 1694361696UL, 2711412312UL, 832142534UL, 3911092159UL, 325250500UL, 166035542UL, 3563501139UL, 1002098855UL, 337936437UL, 1869530240UL, 1306446339UL, 1156926454UL, 3255026725UL, 4072134049UL, 2083771067UL, +61899937UL, 3832870112UL, 466036013UL, 2456954827UL, 2895978734UL, 767569205UL, 2340808859UL, 2022150409UL, 716597790UL, 2031510641UL, 1690074863UL, 1823993818UL, 1838834877UL, 3628284249UL, 1393263274UL, 546011580UL, 2489609764UL, 2303040715UL, 3022943801UL, 510040722UL, 825252468UL, 4204167795UL, 3074858415UL, 953774117UL, 500296619UL, 1952242515UL, 2320314628UL, 3531413908UL, 2401810535UL, 3568992417UL, 4254767597UL, 712451843UL, +1730632320UL, 2311040363UL, 3695847323UL, 2393864919UL, 3224192365UL, 3189359980UL, 397599239UL, 3344183623UL, 1759399025UL, 758272390UL, 1933731121UL, 2812031899UL, 2613176831UL, 2809078783UL, 3986798661UL, 758113139UL, 2361031672UL, 1745444335UL, 1223235915UL, 3814344052UL, 3537991495UL, 2962440272UL, 3053411095UL, 3711100000UL, 817573506UL, 2653519981UL, 2094375399UL, 3992554702UL, 2987412942UL, 2456924809UL, 695350220UL, 4104644208UL, +2543874803UL, 2746231792UL, 1151286621UL, 3373048130UL, 3027546418UL, 448786402UL, 801157439UL, 637572176UL, 4081844472UL, 3681979470UL, 3941253886UL, 975875511UL, 3038758846UL, 197563239UL, 1619518340UL, 1639889010UL, 3137491209UL, 4254608071UL, 2518320719UL, 3308938954UL, 1572886498UL, 631178204UL, 3100620860UL, 3320483696UL, 1763046973UL, 3578310229UL, 3338308117UL, 403923766UL, 3412172826UL, 3394715763UL, 3333944006UL, 37220448UL, +1859724785UL, 1693717788UL, 2071056894UL, 1263790655UL, 228419012UL, 2908736862UL, 2564478937UL, 3031631424UL, 3912597408UL, 3862306448UL, 966714666UL, 3546175061UL, 2376551740UL, 1137628506UL, 1114919961UL, 1561255376UL, 450760279UL, 2472341690UL, 685997424UL, 2456661198UL, 3122124160UL, 1873063065UL, 1058649390UL, 1581230869UL, 2996925693UL, 3791666219UL, 813496775UL, 1095426642UL, 2940190462UL, 1642720015UL, 2802023399UL, 3857233976UL, +98163536UL, 4157153745UL, 1578965959UL, 1640659450UL, 3115605568UL, 2987293678UL, 1119786914UL, 1748408698UL, 4278091706UL, 996447434UL, 3991775183UL, 3161418733UL, 4123935663UL, 3398421232UL, 1089784804UL, 3659038742UL, 1387393667UL, 770706529UL, 1694361696UL, 2711412312UL, 832142534UL, 3911092159UL, 335435644UL, 166035542UL, 3563501139UL, 1002098855UL, 337936437UL, 2961857543UL, 1306446339UL, 1156926454UL, 3255026725UL, 4072134049UL, +1717290230UL, 1323146393UL, 2156340433UL, 2065716367UL, 2597996276UL, 3402032152UL, 779574284UL, 2369501052UL, 2316224856UL, 2720986136UL, 3016786025UL, 2916554213UL, 3476215746UL, 1132150235UL, 2619889920UL, 1279664685UL, 679206534UL, 4014394509UL, 3624968312UL, 1480455625UL, 725015758UL, 707677352UL, 3764409715UL, 1938306480UL, 2171474419UL, 3379664161UL, 684262379UL, 2142433069UL, 43407198UL, 1398850259UL, 2059135843UL, 240266749UL, +3788738212UL, 118513026UL, 820245055UL, 1152812311UL, 1398373423UL, 3188977726UL, 872620936UL, 2084649448UL, 807979538UL, 819501992UL, 615447916UL, 3393148006UL, 1765623964UL, 2514767257UL, 3711360450UL, 2941886951UL, 3739102698UL, 4022385962UL, 2306039667UL, 3321267290UL, 2179238310UL, 3192652502UL, 2118792870UL, 2571142127UL, 761776508UL, 873010906UL, 1609627751UL, 4260021041UL, 1747852747UL, 960771906UL, 2647903291UL, 77475681UL, +1282566533UL, 4022186916UL, 2681128032UL, 1554542462UL, 3181701944UL, 1168469070UL, 74236514UL, 2806532232UL, 3981048887UL, 1888842784UL, 2888607878UL, 1763028723UL, 701886756UL, 4124077776UL, 3738147505UL, 4066663138UL, 3816449863UL, 921061872UL, 2956972182UL, 3159072916UL, 3337110888UL, 3552795700UL, 2281281091UL, 671098116UL, 1282750020UL, 1008618197UL, 2363767765UL, 1812013295UL, 1854965999UL, 131027176UL, 666394000UL, 2062217824UL, +1763334218UL, 551118598UL, 1277961175UL, 3523893635UL, 1855881150UL, 2067903393UL, 2590963277UL, 3214508854UL, 1604911832UL, 1906690475UL, 389417851UL, 2711591984UL, 427723436UL, 1039703630UL, 639602991UL, 444779318UL, 2722002973UL, 3927985419UL, 1297446054UL, 298277450UL, 656022205UL, 134304205UL, 3847728042UL, 3339100423UL, 407022043UL, 1282443442UL, 3173884578UL, 1417906094UL, 2364502739UL, 2158353472UL, 2402775649UL, 1807696073UL, +2837535198UL, 705887737UL, 2129202688UL, 3853676283UL, 1388329793UL, 875153687UL, 2367465660UL, 2763058233UL, 2500632304UL, 2196920062UL, 491306883UL, 277753357UL, 3868415380UL, 324867643UL, 3654474955UL, 2569410351UL, 1128175417UL, 1853572398UL, 1133201743UL, 662085935UL, 2263514999UL, 3077768113UL, 3309730620UL, 3602394176UL, 3747458070UL, 188422725UL, 813812450UL, 1502276531UL, 3909138356UL, 2766044599UL, 3760928321UL, 573108836UL, +}, +{ +1240264181UL, 1624064648UL, 3039823158UL, 2013985253UL, 1473300299UL, 2762062141UL, 3273470484UL, 1889745445UL, 2516996174UL, 3190376531UL, 996186898UL, 3893981177UL, 1268272590UL, 3226095713UL, 153038465UL, 2184871198UL, 3224094011UL, 2526518401UL, 1738960059UL, 1187560605UL, 4194384320UL, 2837011297UL, 3638232350UL, 367907454UL, 574009898UL, 1948901330UL, 60430044UL, 1569835584UL, 3160561697UL, 321792583UL, 3179087993UL, 1936928378UL, +412346905UL, 4020812489UL, 2603392174UL, 3499496781UL, 1499441233UL, 1062415256UL, 1347130973UL, 1823246794UL, 3411391800UL, 4253618056UL, 1507733072UL, 1605629518UL, 1503312494UL, 8035741UL, 4038904206UL, 2408545792UL, 969543501UL, 954847087UL, 956553276UL, 3096241999UL, 2566194741UL, 84678421UL, 3882676079UL, 2483934330UL, 3673546814UL, 2461422466UL, 620385599UL, 898325340UL, 2145883445UL, 3653728520UL, 3744850294UL, 2441124935UL, +904854507UL, 3216304963UL, 2373268568UL, 2354362010UL, 1245572787UL, 2894748714UL, 2889136188UL, 3716879184UL, 1766013949UL, 1305712667UL, 1227530310UL, 4051221847UL, 925440190UL, 1508686692UL, 1104647879UL, 1496666754UL, 3300504219UL, 127787091UL, 1528394637UL, 1739640835UL, 2475711496UL, 3792639955UL, 1450796299UL, 1634217367UL, 3289785095UL, 2149949989UL, 811612039UL, 1750779366UL, 1157474938UL, 514004414UL, 2264909096UL, 3730411668UL, +3308882513UL, 1834571716UL, 378288317UL, 3800023701UL, 763396788UL, 1597708317UL, 983953861UL, 94566098UL, 1548157668UL, 3755427117UL, 1646496505UL, 3748241449UL, 3439805936UL, 2321644449UL, 3805706235UL, 4220083901UL, 1069923823UL, 2984004391UL, 3824885361UL, 1967477766UL, 218978249UL, 348955028UL, 3188651823UL, 1008338679UL, 2331688720UL, 1562995454UL, 1837179689UL, 3033872688UL, 3007293665UL, 1759522678UL, 319754369UL, 2763991927UL, +1983149629UL, 1353197132UL, 1489552694UL, 2990539062UL, 3244609108UL, 669775440UL, 886127995UL, 1636688014UL, 1251222487UL, 2351883247UL, 3261502906UL, 3139614137UL, 3203790139UL, 2777648095UL, 3693390579UL, 3540514982UL, 3200191735UL, 750726325UL, 1014534145UL, 2091792357UL, 3931704474UL, 1383925867UL, 2038878506UL, 2247134268UL, 2840132188UL, 61137652UL, 1162051299UL, 399657268UL, 1682018695UL, 2640231287UL, 1733438115UL, 3611823506UL, +2077891037UL, 1240264181UL, 1624064648UL, 3039823158UL, 2013985253UL, 4188888201UL, 2762062141UL, 3273470484UL, 1889745445UL, 2516996174UL, 2621448256UL, 996186898UL, 3893981177UL, 1268272590UL, 3226095713UL, 952803645UL, 2184871198UL, 3224094011UL, 2526518401UL, 1738960059UL, 738368399UL, 4194384320UL, 2837011297UL, 3638232350UL, 367907454UL, 3772812520UL, 1948901330UL, 60430044UL, 1569835584UL, 3160561697UL, 1655622513UL, 3179087993UL, +1936928378UL, 412346905UL, 4020812489UL, 3754224996UL, 3499496781UL, 1499441233UL, 1062415256UL, 1347130973UL, 1167581269UL, 3411391800UL, 4253618056UL, 1507733072UL, 1605629518UL, 1867781671UL, 8035741UL, 4038904206UL, 2408545792UL, 969543501UL, 3189323143UL, 956553276UL, 3096241999UL, 2566194741UL, 84678421UL, 996778900UL, 2483934330UL, 3673546814UL, 2461422466UL, 620385599UL, 3129088144UL, 2145883445UL, 3653728520UL, 3744850294UL, +2441124935UL, 4230756652UL, 3216304963UL, 2373268568UL, 2354362010UL, 1245572787UL, 1600525238UL, 2889136188UL, 3716879184UL, 1766013949UL, 1305712667UL, 59908073UL, 4051221847UL, 925440190UL, 1508686692UL, 1104647879UL, 2931214731UL, 3300504219UL, 127787091UL, 1528394637UL, 1739640835UL, 62963469UL, 3792639955UL, 1450796299UL, 1634217367UL, 3289785095UL, 667987389UL, 811612039UL, 1750779366UL, 1157474938UL, 514004414UL, 2737193098UL, +3730411668UL, 3308882513UL, 1834571716UL, 378288317UL, 3452657469UL, 763396788UL, 1597708317UL, 983953861UL, 94566098UL, 2752347916UL, 3755427117UL, 1646496505UL, 3748241449UL, 3439805936UL, 4222757079UL, 3805706235UL, 4220083901UL, 1069923823UL, 2984004391UL, 3887639520UL, 1967477766UL, 218978249UL, 348955028UL, 3188651823UL, 4168456281UL, 2331688720UL, 1562995454UL, 1837179689UL, 3033872688UL, 814903833UL, 1759522678UL, 319754369UL, +2763991927UL, 1983149629UL, 3818528075UL, 1489552694UL, 2990539062UL, 3244609108UL, 669775440UL, 1004789460UL, 1636688014UL, 1251222487UL, 2351883247UL, 3261502906UL, 4143823654UL, 3203790139UL, 2777648095UL, 3693390579UL, 3540514982UL, 153421222UL, 750726325UL, 1014534145UL, 2091792357UL, 3931704474UL, 4018591985UL, 2038878506UL, 2247134268UL, 2840132188UL, 61137652UL, 1455028838UL, 399657268UL, 1682018695UL, 2640231287UL, 1733438115UL, +1853142849UL, 2077891037UL, 1240264181UL, 1624064648UL, 3039823158UL, 2235369076UL, 4188888201UL, 2762062141UL, 3273470484UL, 1889745445UL, 3627876603UL, 2621448256UL, 996186898UL, 3893981177UL, 1268272590UL, 2687846008UL, 952803645UL, 2184871198UL, 3224094011UL, 2526518401UL, 861379413UL, 738368399UL, 4194384320UL, 2837011297UL, 3638232350UL, 3753321702UL, 3772812520UL, 1948901330UL, 60430044UL, 1569835584UL, 581506474UL, 1655622513UL, +3179087993UL, 1936928378UL, 412346905UL, 2710043900UL, 3754224996UL, 3499496781UL, 1499441233UL, 1062415256UL, 2704745463UL, 1167581269UL, 3411391800UL, 4253618056UL, 1507733072UL, 4215403465UL, 1867781671UL, 8035741UL, 4038904206UL, 2408545792UL, 3252742933UL, 3189323143UL, 956553276UL, 3096241999UL, 2566194741UL, 1865159158UL, 996778900UL, 2483934330UL, 3673546814UL, 2461422466UL, 3123557619UL, 3129088144UL, 2145883445UL, 3653728520UL, +3744850294UL, 21840044UL, 4230756652UL, 3216304963UL, 2373268568UL, 2354362010UL, 1934462999UL, 1600525238UL, 2889136188UL, 3716879184UL, 1766013949UL, 2822794708UL, 59908073UL, 4051221847UL, 925440190UL, 1508686692UL, 2938291976UL, 2931214731UL, 3300504219UL, 127787091UL, 1528394637UL, 1914923136UL, 62963469UL, 3792639955UL, 1450796299UL, 1634217367UL, 257322213UL, 667987389UL, 811612039UL, 1750779366UL, 1157474938UL, 3083649350UL, +2737193098UL, 3730411668UL, 3308882513UL, 1834571716UL, 2778729422UL, 3452657469UL, 763396788UL, 1597708317UL, 983953861UL, 1337754195UL, 2752347916UL, 3755427117UL, 1646496505UL, 3748241449UL, 3942745717UL, 4222757079UL, 3805706235UL, 4220083901UL, 1069923823UL, 1314928500UL, 3887639520UL, 1967477766UL, 218978249UL, 348955028UL, 3425797638UL, 4168456281UL, 2331688720UL, 1562995454UL, 1837179689UL, 1814071277UL, 814903833UL, 1759522678UL, +319754369UL, 2763991927UL, 1079270448UL, 3818528075UL, 1489552694UL, 2990539062UL, 3244609108UL, 2944573315UL, 1004789460UL, 1636688014UL, 1251222487UL, 2351883247UL, 1356892540UL, 4143823654UL, 3203790139UL, 2777648095UL, 3693390579UL, 983917956UL, 153421222UL, 750726325UL, 1014534145UL, 2091792357UL, 296882400UL, 4018591985UL, 2038878506UL, 2247134268UL, 2840132188UL, 3508266160UL, 1455028838UL, 399657268UL, 1682018695UL, 2640231287UL, +2480988791UL, 1853142849UL, 2077891037UL, 1240264181UL, 1624064648UL, 1741738969UL, 2235369076UL, 4188888201UL, 2762062141UL, 3273470484UL, 3569498651UL, 3627876603UL, 2621448256UL, 996186898UL, 3893981177UL, 4026533880UL, 2687846008UL, 952803645UL, 2184871198UL, 3224094011UL, 1290870737UL, 861379413UL, 738368399UL, 4194384320UL, 2837011297UL, 3833099205UL, 3753321702UL, 3772812520UL, 1948901330UL, 60430044UL, 4131290878UL, 581506474UL, +1655622513UL, 3179087993UL, 1936928378UL, 2379952582UL, 2710043900UL, 3754224996UL, 3499496781UL, 1499441233UL, 593780490UL, 2704745463UL, 1167581269UL, 3411391800UL, 4253618056UL, 621889762UL, 4215403465UL, 1867781671UL, 8035741UL, 4038904206UL, 2045289976UL, 3252742933UL, 3189323143UL, 956553276UL, 3096241999UL, 2188329018UL, 1865159158UL, 996778900UL, 2483934330UL, 3673546814UL, 2717648418UL, 3123557619UL, 3129088144UL, 2145883445UL, +3653728520UL, 1528077261UL, 21840044UL, 4230756652UL, 3216304963UL, 2373268568UL, 803158556UL, 1934462999UL, 1600525238UL, 2889136188UL, 3716879184UL, 161827512UL, 2822794708UL, 59908073UL, 4051221847UL, 925440190UL, 3599942370UL, 2938291976UL, 2931214731UL, 3300504219UL, 127787091UL, 4082579845UL, 1914923136UL, 62963469UL, 3792639955UL, 1450796299UL, 2035446714UL, 257322213UL, 667987389UL, 811612039UL, 1750779366UL, 2344204796UL, +3083649350UL, 2737193098UL, 3730411668UL, 3308882513UL, 2765191583UL, 2778729422UL, 3452657469UL, 763396788UL, 1597708317UL, 1854746879UL, 1337754195UL, 2752347916UL, 3755427117UL, 1646496505UL, 4020292301UL, 3942745717UL, 4222757079UL, 3805706235UL, 4220083901UL, 1408262601UL, 1314928500UL, 3887639520UL, 1967477766UL, 218978249UL, 2173193841UL, 3425797638UL, 4168456281UL, 2331688720UL, 1562995454UL, 2835294077UL, 1814071277UL, 814903833UL, +1759522678UL, 319754369UL, 4048528178UL, 1079270448UL, 3818528075UL, 1489552694UL, 2990539062UL, 787253600UL, 2944573315UL, 1004789460UL, 1636688014UL, 1251222487UL, 3584515216UL, 1356892540UL, 4143823654UL, 3203790139UL, 2777648095UL, 1681621541UL, 983917956UL, 153421222UL, 750726325UL, 1014534145UL, 3951869055UL, 296882400UL, 4018591985UL, 2038878506UL, 2247134268UL, 1990726826UL, 3508266160UL, 1455028838UL, 399657268UL, 1682018695UL, +3360119279UL, 3151120565UL, 3011208718UL, 3694535943UL, 104562665UL, 2827623271UL, 249712003UL, 3413221355UL, 2347164236UL, 3227498378UL, 1805068659UL, 2118219686UL, 1568133029UL, 902801951UL, 175637375UL, 3812819970UL, 2162769758UL, 3845613089UL, 1795179477UL, 171494391UL, 3765826349UL, 1725798906UL, 345463508UL, 2481043227UL, 226569380UL, 3250095421UL, 1085199388UL, 3107594542UL, 4011388155UL, 1092611190UL, 3239339214UL, 4211849464UL, +4109911546UL, 81212018UL, 3691937144UL, 2477407396UL, 3320520455UL, 3070067913UL, 3808621884UL, 252917069UL, 3394860294UL, 1092442235UL, 2876536384UL, 1684120191UL, 431096075UL, 1701716708UL, 639881684UL, 3066183997UL, 3660504927UL, 2047274UL, 3424756424UL, 760932520UL, 2457976057UL, 1705265011UL, 2691137533UL, 3684307557UL, 3532744498UL, 2319162513UL, 1015534908UL, 1907173398UL, 2820698743UL, 1264455116UL, 2323788906UL, 3062240844UL, +1878550513UL, 1717353426UL, 1805673248UL, 62425157UL, 3662381032UL, 1964107209UL, 2559831960UL, 2117844804UL, 1228721677UL, 4240498866UL, 3212920337UL, 2338600301UL, 931588693UL, 2379606585UL, 3643222352UL, 4154645082UL, 1115847065UL, 2079427925UL, 2256943798UL, 2795103368UL, 2688136486UL, 1458062143UL, 1767222217UL, 635424385UL, 284062050UL, 1547163554UL, 3380046528UL, 1145758046UL, 3935976713UL, 4017430175UL, 3863367362UL, 3041367424UL, +303263160UL, 1465965696UL, 3757919837UL, 3083072836UL, 4024514094UL, 1381331179UL, 2393446325UL, 3256476469UL, 4066482738UL, 3437941107UL, 1051266504UL, 921764078UL, 2933305619UL, 1358097211UL, 4100978724UL, 2709958834UL, 574590507UL, 961767386UL, 21100886UL, 753746372UL, 4072632446UL, 733729367UL, 3060214669UL, 289165105UL, 426065754UL, 2036100240UL, 2172365757UL, 502856627UL, 84490194UL, 2630806596UL, 1206161269UL, 1009438449UL, +569581317UL, 1836947000UL, 3125379675UL, 1756936428UL, 3772694822UL, 3670337911UL, 3020603818UL, 2376224883UL, 2539951453UL, 2053395002UL, 3525193914UL, 1991480838UL, 3786481083UL, 873873707UL, 1693894743UL, 2450223985UL, 754878026UL, 1943356492UL, 401524329UL, 759931885UL, 611231307UL, 147950334UL, 599693701UL, 3358729722UL, 3649058074UL, 906423787UL, 1333804225UL, 875187278UL, 1115838692UL, 2476325972UL, 3307226674UL, 3539078918UL, +}, + +}; +#ifndef __CUDACC_RTC__ +CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS unsigned int precalc_xorwow_offset_matrix_host[32][800] = { +{ +0UL, 0UL, 0UL, 0UL, 3UL, 0UL, 0UL, 0UL, 0UL, 6UL, 0UL, 0UL, 0UL, 0UL, 15UL, 0UL, 0UL, 0UL, 0UL, 30UL, 0UL, 0UL, 0UL, 0UL, 60UL, 0UL, 0UL, 0UL, 0UL, 120UL, 0UL, 0UL, +0UL, 0UL, 240UL, 0UL, 0UL, 0UL, 0UL, 480UL, 0UL, 0UL, 0UL, 0UL, 960UL, 0UL, 0UL, 0UL, 0UL, 1920UL, 0UL, 0UL, 0UL, 0UL, 3840UL, 0UL, 0UL, 0UL, 0UL, 7680UL, 0UL, 0UL, 0UL, 0UL, +15360UL, 0UL, 0UL, 0UL, 0UL, 30720UL, 0UL, 0UL, 0UL, 0UL, 61440UL, 0UL, 0UL, 0UL, 0UL, 122880UL, 0UL, 0UL, 0UL, 0UL, 245760UL, 0UL, 0UL, 0UL, 0UL, 491520UL, 0UL, 0UL, 0UL, 0UL, 983040UL, 0UL, +0UL, 0UL, 0UL, 1966080UL, 0UL, 0UL, 0UL, 0UL, 3932160UL, 0UL, 0UL, 0UL, 0UL, 7864320UL, 0UL, 0UL, 0UL, 0UL, 15728640UL, 0UL, 0UL, 0UL, 0UL, 31457280UL, 0UL, 0UL, 0UL, 0UL, 62914560UL, 0UL, 0UL, 0UL, +0UL, 125829120UL, 0UL, 0UL, 0UL, 0UL, 251658240UL, 0UL, 0UL, 0UL, 0UL, 503316480UL, 0UL, 0UL, 0UL, 0UL, 1006632960UL, 0UL, 0UL, 0UL, 0UL, 2013265920UL, 0UL, 0UL, 0UL, 0UL, 4026531840UL, 0UL, 0UL, 0UL, 0UL, 3758096384UL, +1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, 64UL, 0UL, +0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, 0UL, 0UL, +0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, 0UL, 524288UL, +0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, 0UL, 0UL, +0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, 0UL, 0UL, +0UL, 1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, 64UL, +0UL, 0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, 0UL, +0UL, 0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, 0UL, +524288UL, 0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, 0UL, +0UL, 0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, 0UL, +0UL, 0UL, 1UL, 0UL, 0UL, 0UL, 0UL, 2UL, 0UL, 0UL, 0UL, 0UL, 4UL, 0UL, 0UL, 0UL, 0UL, 8UL, 0UL, 0UL, 0UL, 0UL, 16UL, 0UL, 0UL, 0UL, 0UL, 32UL, 0UL, 0UL, 0UL, 0UL, +64UL, 0UL, 0UL, 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 256UL, 0UL, 0UL, 0UL, 0UL, 512UL, 0UL, 0UL, 0UL, 0UL, 1024UL, 0UL, 0UL, 0UL, 0UL, 2048UL, 0UL, 0UL, 0UL, 0UL, 4096UL, 0UL, +0UL, 0UL, 0UL, 8192UL, 0UL, 0UL, 0UL, 0UL, 16384UL, 0UL, 0UL, 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 131072UL, 0UL, 0UL, 0UL, 0UL, 262144UL, 0UL, 0UL, 0UL, +0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 1048576UL, 0UL, 0UL, 0UL, 0UL, 2097152UL, 0UL, 0UL, 0UL, 0UL, 4194304UL, 0UL, 0UL, 0UL, 0UL, 8388608UL, 0UL, 0UL, 0UL, 0UL, 16777216UL, 0UL, 0UL, 0UL, 0UL, 33554432UL, +0UL, 0UL, 0UL, 0UL, 67108864UL, 0UL, 0UL, 0UL, 0UL, 134217728UL, 0UL, 0UL, 0UL, 0UL, 268435456UL, 0UL, 0UL, 0UL, 0UL, 536870912UL, 0UL, 0UL, 0UL, 0UL, 1073741824UL, 0UL, 0UL, 0UL, 0UL, 2147483648UL, 0UL, 0UL, +0UL, 0UL, 0UL, 1UL, 17UL, 0UL, 0UL, 0UL, 2UL, 34UL, 0UL, 0UL, 0UL, 4UL, 68UL, 0UL, 0UL, 0UL, 8UL, 136UL, 0UL, 0UL, 0UL, 16UL, 272UL, 0UL, 0UL, 0UL, 32UL, 544UL, 0UL, 0UL, +0UL, 64UL, 1088UL, 0UL, 0UL, 0UL, 128UL, 2176UL, 0UL, 0UL, 0UL, 256UL, 4352UL, 0UL, 0UL, 0UL, 512UL, 8704UL, 0UL, 0UL, 0UL, 1024UL, 17408UL, 0UL, 0UL, 0UL, 2048UL, 34816UL, 0UL, 0UL, 0UL, 4096UL, +69632UL, 0UL, 0UL, 0UL, 8192UL, 139264UL, 0UL, 0UL, 0UL, 16384UL, 278528UL, 0UL, 0UL, 0UL, 32768UL, 557056UL, 0UL, 0UL, 0UL, 65536UL, 1114112UL, 0UL, 0UL, 0UL, 131072UL, 2228224UL, 0UL, 0UL, 0UL, 262144UL, 4456448UL, 0UL, +0UL, 0UL, 524288UL, 8912896UL, 0UL, 0UL, 0UL, 1048576UL, 17825792UL, 0UL, 0UL, 0UL, 2097152UL, 35651584UL, 0UL, 0UL, 0UL, 4194304UL, 71303168UL, 0UL, 0UL, 0UL, 8388608UL, 142606336UL, 0UL, 0UL, 0UL, 16777216UL, 285212672UL, 0UL, 0UL, 0UL, +33554432UL, 570425344UL, 0UL, 0UL, 0UL, 67108864UL, 1140850688UL, 0UL, 0UL, 0UL, 134217728UL, 2281701376UL, 0UL, 0UL, 0UL, 268435456UL, 268435456UL, 0UL, 0UL, 0UL, 536870912UL, 536870912UL, 0UL, 0UL, 0UL, 1073741824UL, 1073741824UL, 0UL, 0UL, 0UL, 2147483648UL, 2147483648UL, +}, +{ +0UL, 3UL, 51UL, 771UL, 13107UL, 0UL, 6UL, 102UL, 1542UL, 26214UL, 0UL, 15UL, 255UL, 3855UL, 65535UL, 0UL, 30UL, 510UL, 7710UL, 131070UL, 0UL, 60UL, 1020UL, 15420UL, 262140UL, 0UL, 120UL, 2040UL, 30840UL, 524280UL, 0UL, 240UL, +4080UL, 61680UL, 1048560UL, 0UL, 480UL, 8160UL, 123360UL, 2097120UL, 0UL, 960UL, 16320UL, 246720UL, 4194240UL, 0UL, 1920UL, 32640UL, 493440UL, 8388480UL, 0UL, 3840UL, 65280UL, 986880UL, 16776960UL, 0UL, 7680UL, 130560UL, 1973760UL, 33553920UL, 0UL, 15360UL, 261120UL, 3947520UL, +67107840UL, 0UL, 30720UL, 522240UL, 7895040UL, 134215680UL, 0UL, 61440UL, 1044480UL, 15790080UL, 268431360UL, 0UL, 122880UL, 2088960UL, 31580160UL, 536862720UL, 0UL, 245760UL, 4177920UL, 63160320UL, 1073725440UL, 0UL, 491520UL, 8355840UL, 126320640UL, 2147450880UL, 0UL, 983040UL, 16711680UL, 252641280UL, 4294901760UL, 0UL, +1966080UL, 33423360UL, 505282560UL, 4294836224UL, 0UL, 3932160UL, 66846720UL, 1010565120UL, 4294705152UL, 0UL, 7864320UL, 133693440UL, 2021130240UL, 4294443008UL, 0UL, 15728640UL, 267386880UL, 4042260480UL, 4293918720UL, 0UL, 31457280UL, 534773760UL, 3789553664UL, 4292870144UL, 0UL, 62914560UL, 1069547520UL, 3284140032UL, 4290772992UL, 0UL, 125829120UL, 2139095040UL, +2273312768UL, 4286578688UL, 0UL, 251658240UL, 4278190080UL, 251658240UL, 4278190080UL, 0UL, 503316480UL, 4261412864UL, 503316480UL, 4261412864UL, 0UL, 1006632960UL, 4227858432UL, 1006632960UL, 4227858432UL, 0UL, 2013265920UL, 4160749568UL, 2013265920UL, 4160749568UL, 0UL, 4026531840UL, 4026531840UL, 4026531840UL, 4026531840UL, 0UL, 3758096384UL, 3758096384UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 3UL, 51UL, 771UL, 0UL, 0UL, 6UL, 102UL, 1542UL, 0UL, 0UL, 15UL, 255UL, 3855UL, 0UL, 0UL, 30UL, 510UL, 7710UL, 0UL, 0UL, 60UL, 1020UL, 15420UL, 0UL, 0UL, 120UL, 2040UL, 30840UL, 0UL, 0UL, +240UL, 4080UL, 61680UL, 0UL, 0UL, 480UL, 8160UL, 123360UL, 0UL, 0UL, 960UL, 16320UL, 246720UL, 0UL, 0UL, 1920UL, 32640UL, 493440UL, 0UL, 0UL, 3840UL, 65280UL, 986880UL, 0UL, 0UL, 7680UL, 130560UL, 1973760UL, 0UL, 0UL, 15360UL, 261120UL, +3947520UL, 0UL, 0UL, 30720UL, 522240UL, 7895040UL, 0UL, 0UL, 61440UL, 1044480UL, 15790080UL, 0UL, 0UL, 122880UL, 2088960UL, 31580160UL, 0UL, 0UL, 245760UL, 4177920UL, 63160320UL, 0UL, 0UL, 491520UL, 8355840UL, 126320640UL, 0UL, 0UL, 983040UL, 16711680UL, 252641280UL, 0UL, +0UL, 1966080UL, 33423360UL, 505282560UL, 0UL, 0UL, 3932160UL, 66846720UL, 1010565120UL, 0UL, 0UL, 7864320UL, 133693440UL, 2021130240UL, 0UL, 0UL, 15728640UL, 267386880UL, 4042260480UL, 0UL, 0UL, 31457280UL, 534773760UL, 3789553664UL, 0UL, 0UL, 62914560UL, 1069547520UL, 3284140032UL, 0UL, 0UL, 125829120UL, +2139095040UL, 2273312768UL, 0UL, 0UL, 251658240UL, 4278190080UL, 251658240UL, 0UL, 0UL, 503316480UL, 4261412864UL, 503316480UL, 0UL, 0UL, 1006632960UL, 4227858432UL, 1006632960UL, 0UL, 0UL, 2013265920UL, 4160749568UL, 2013265920UL, 0UL, 0UL, 4026531840UL, 4026531840UL, 4026531840UL, 0UL, 0UL, 3758096384UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 0UL, 3UL, 51UL, 0UL, 0UL, 0UL, 6UL, 102UL, 0UL, 0UL, 0UL, 15UL, 255UL, 0UL, 0UL, 0UL, 30UL, 510UL, 0UL, 0UL, 0UL, 60UL, 1020UL, 0UL, 0UL, 0UL, 120UL, 2040UL, 0UL, 0UL, +0UL, 240UL, 4080UL, 0UL, 0UL, 0UL, 480UL, 8160UL, 0UL, 0UL, 0UL, 960UL, 16320UL, 0UL, 0UL, 0UL, 1920UL, 32640UL, 0UL, 0UL, 0UL, 3840UL, 65280UL, 0UL, 0UL, 0UL, 7680UL, 130560UL, 0UL, 0UL, 0UL, 15360UL, +261120UL, 0UL, 0UL, 0UL, 30720UL, 522240UL, 0UL, 0UL, 0UL, 61440UL, 1044480UL, 0UL, 0UL, 0UL, 122880UL, 2088960UL, 0UL, 0UL, 0UL, 245760UL, 4177920UL, 0UL, 0UL, 0UL, 491520UL, 8355840UL, 0UL, 0UL, 0UL, 983040UL, 16711680UL, 0UL, +0UL, 0UL, 1966080UL, 33423360UL, 0UL, 0UL, 0UL, 3932160UL, 66846720UL, 0UL, 0UL, 0UL, 7864320UL, 133693440UL, 0UL, 0UL, 0UL, 15728640UL, 267386880UL, 0UL, 0UL, 0UL, 31457280UL, 534773760UL, 0UL, 0UL, 0UL, 62914560UL, 1069547520UL, 0UL, 0UL, 0UL, +125829120UL, 2139095040UL, 0UL, 0UL, 0UL, 251658240UL, 4278190080UL, 0UL, 0UL, 0UL, 503316480UL, 4261412864UL, 0UL, 0UL, 0UL, 1006632960UL, 4227858432UL, 0UL, 0UL, 0UL, 2013265920UL, 4160749568UL, 0UL, 0UL, 0UL, 4026531840UL, 4026531840UL, 0UL, 0UL, 0UL, 3758096384UL, 3758096384UL, +0UL, 0UL, 0UL, 0UL, 3UL, 0UL, 0UL, 0UL, 0UL, 6UL, 0UL, 0UL, 0UL, 0UL, 15UL, 0UL, 0UL, 0UL, 0UL, 30UL, 0UL, 0UL, 0UL, 0UL, 60UL, 0UL, 0UL, 0UL, 0UL, 120UL, 0UL, 0UL, +0UL, 0UL, 240UL, 0UL, 0UL, 0UL, 0UL, 480UL, 0UL, 0UL, 0UL, 0UL, 960UL, 0UL, 0UL, 0UL, 0UL, 1920UL, 0UL, 0UL, 0UL, 0UL, 3840UL, 0UL, 0UL, 0UL, 0UL, 7680UL, 0UL, 0UL, 0UL, 0UL, +15360UL, 0UL, 0UL, 0UL, 0UL, 30720UL, 0UL, 0UL, 0UL, 0UL, 61440UL, 0UL, 0UL, 0UL, 0UL, 122880UL, 0UL, 0UL, 0UL, 0UL, 245760UL, 0UL, 0UL, 0UL, 0UL, 491520UL, 0UL, 0UL, 0UL, 0UL, 983040UL, 0UL, +0UL, 0UL, 0UL, 1966080UL, 0UL, 0UL, 0UL, 0UL, 3932160UL, 0UL, 0UL, 0UL, 0UL, 7864320UL, 0UL, 0UL, 0UL, 0UL, 15728640UL, 0UL, 0UL, 0UL, 0UL, 31457280UL, 0UL, 0UL, 0UL, 0UL, 62914560UL, 0UL, 0UL, 0UL, +0UL, 125829120UL, 0UL, 0UL, 0UL, 0UL, 251658240UL, 0UL, 0UL, 0UL, 0UL, 503316480UL, 0UL, 0UL, 0UL, 0UL, 1006632960UL, 0UL, 0UL, 0UL, 0UL, 2013265920UL, 0UL, 0UL, 0UL, 0UL, 4026531840UL, 0UL, 0UL, 0UL, 0UL, 3758096384UL, +1UL, 17UL, 257UL, 4369UL, 65537UL, 2UL, 34UL, 514UL, 8738UL, 131074UL, 4UL, 68UL, 1028UL, 17476UL, 262148UL, 8UL, 136UL, 2056UL, 34952UL, 524296UL, 16UL, 272UL, 4112UL, 69904UL, 1048592UL, 32UL, 544UL, 8224UL, 139808UL, 2097184UL, 64UL, 1088UL, +16448UL, 279616UL, 4194368UL, 128UL, 2176UL, 32896UL, 559232UL, 8388736UL, 256UL, 4352UL, 65792UL, 1118464UL, 16777472UL, 512UL, 8704UL, 131584UL, 2236928UL, 33554944UL, 1024UL, 17408UL, 263168UL, 4473856UL, 67109888UL, 2048UL, 34816UL, 526336UL, 8947712UL, 134219776UL, 4096UL, 69632UL, 1052672UL, 17895424UL, +268439552UL, 8192UL, 139264UL, 2105344UL, 35790848UL, 536879104UL, 16384UL, 278528UL, 4210688UL, 71581696UL, 1073758208UL, 32768UL, 557056UL, 8421376UL, 143163392UL, 2147516416UL, 65536UL, 1114112UL, 16842752UL, 286326784UL, 65536UL, 131072UL, 2228224UL, 33685504UL, 572653568UL, 131072UL, 262144UL, 4456448UL, 67371008UL, 1145307136UL, 262144UL, 524288UL, +8912896UL, 134742016UL, 2290614272UL, 524288UL, 1048576UL, 17825792UL, 269484032UL, 286261248UL, 1048576UL, 2097152UL, 35651584UL, 538968064UL, 572522496UL, 2097152UL, 4194304UL, 71303168UL, 1077936128UL, 1145044992UL, 4194304UL, 8388608UL, 142606336UL, 2155872256UL, 2290089984UL, 8388608UL, 16777216UL, 285212672UL, 16777216UL, 285212672UL, 16777216UL, 33554432UL, 570425344UL, 33554432UL, +570425344UL, 33554432UL, 67108864UL, 1140850688UL, 67108864UL, 1140850688UL, 67108864UL, 134217728UL, 2281701376UL, 134217728UL, 2281701376UL, 134217728UL, 268435456UL, 268435456UL, 268435456UL, 268435456UL, 268435456UL, 536870912UL, 536870912UL, 536870912UL, 536870912UL, 536870912UL, 1073741824UL, 1073741824UL, 1073741824UL, 1073741824UL, 1073741824UL, 2147483648UL, 2147483648UL, 2147483648UL, 2147483648UL, 2147483648UL, +}, +{ +85009117UL, 335741939UL, 1412632518UL, 386859243UL, 1741437244UL, 152139416UL, 403047142UL, 2556825231UL, 505087203UL, 4287193174UL, 335609039UL, 336528191UL, 1425998811UL, 456920088UL, 2832198590UL, 724748988UL, 3625845630UL, 1509824181UL, 3330088197UL, 2710488401UL, 1431742057UL, 1077674236UL, 1140592489UL, 2096905276UL, 3007294393UL, 2863484114UL, 1081606648UL, 1207443154UL, 972585080UL, 2793363314UL, 1432000919UL, 1089470704UL, +1341132452UL, 3019109363UL, 2362285522UL, 1790260014UL, 2178941408UL, 2682264904UL, 1743251430UL, 429603751UL, 359294556UL, 62915520UL, 1069562512UL, 3486502860UL, 859207501UL, 3939814584UL, 125831040UL, 2139125024UL, 2678038424UL, 1718415002UL, 363436400UL, 251662080UL, 4278250048UL, 1061109552UL, 3436830004UL, 3948098272UL, 503324160UL, 4261532800UL, 2122219104UL, 2310257256UL, 380003776UL, 1006648320UL, 4228098304UL, 4244438208UL, +3278337232UL, 3981233024UL, 2013296640UL, 4161229312UL, 4193909120UL, 2530142624UL, 446273280UL, 4026593280UL, 4027491328UL, 871625472UL, 4254978880UL, 4113772032UL, 3758219264UL, 3760015360UL, 2011686400UL, 3946555008UL, 711351296UL, 3221471232UL, 3225063424UL, 4291808256UL, 108481792UL, 2496444416UL, 2147975168UL, 2155159552UL, 4020213760UL, 485399040UL, 3919147008UL, 983040UL, 15351808UL, 255799296UL, 3923588096UL, 322101248UL, +1966080UL, 299139072UL, 511598592UL, 3283773440UL, 3865427968UL, 3932160UL, 4087939072UL, 1023197184UL, 1467273216UL, 214663168UL, 7864320UL, 4149346304UL, 2046394368UL, 3202981888UL, 3650551808UL, 3236954112UL, 1050935296UL, 871563264UL, 2916302848UL, 1932394496UL, 2447376384UL, 1833435136UL, 2011561984UL, 2342944768UL, 643563520UL, 868220928UL, 177209344UL, 4291559424UL, 122486784UL, 2360868864UL, 2004877312UL, 85983232UL, +4019716096UL, 3734634496UL, 3647995904UL, 1056964608UL, 3661627392UL, 254803968UL, 2905866240UL, 1658847232UL, 2113929216UL, 3028287488UL, 3730833408UL, 2322071552UL, 3586129920UL, 4227858432UL, 1761607680UL, 2092957696UL, 80740352UL, 2071986176UL, 4160749568UL, 3523215360UL, 964689920UL, 429916160UL, 3875536896UL, 4026531840UL, 2751463424UL, 1929379840UL, 4081057792UL, 503316480UL, 3758096384UL, 2281701376UL, 4127195136UL, 3397386240UL, +1316635UL, 85009117UL, 335741939UL, 1412632518UL, 386859243UL, 1580547UL, 152139416UL, 403047142UL, 2556825231UL, 505087203UL, 1317672UL, 335609039UL, 336528191UL, 1425998811UL, 456920088UL, 1574501UL, 724748988UL, 3625845630UL, 1509824181UL, 3330088197UL, 15612UL, 1431742057UL, 1077674236UL, 1140592489UL, 2096905276UL, 31224UL, 2863484114UL, 1081606648UL, 1207443154UL, 972585080UL, 62451UL, 1432000919UL, +1089470704UL, 1341132452UL, 3019109363UL, 124902UL, 1790260014UL, 2178941408UL, 2682264904UL, 1743251430UL, 249804UL, 359294556UL, 62915520UL, 1069562512UL, 3486502860UL, 499608UL, 3939814584UL, 125831040UL, 2139125024UL, 2678038424UL, 999216UL, 363436400UL, 251662080UL, 4278250048UL, 1061109552UL, 3223223904UL, 3948098272UL, 503324160UL, 4261532800UL, 2122219104UL, 1077738688UL, 380003776UL, 1006648320UL, 4228098304UL, +4244438208UL, 1081735552UL, 3981233024UL, 2013296640UL, 4161229312UL, 4193909120UL, 1089729280UL, 446273280UL, 4026593280UL, 4027491328UL, 871625472UL, 2179458560UL, 4113772032UL, 3758219264UL, 3760015360UL, 2011686400UL, 63949824UL, 711351296UL, 3221471232UL, 3225063424UL, 4291808256UL, 127899648UL, 2496444416UL, 2147975168UL, 2155159552UL, 4020213760UL, 255799296UL, 3919147008UL, 983040UL, 15351808UL, 255799296UL, 3732824064UL, +322101248UL, 1966080UL, 299139072UL, 511598592UL, 2096939008UL, 3865427968UL, 3932160UL, 4087939072UL, 1023197184UL, 972652544UL, 214663168UL, 7864320UL, 4149346304UL, 2046394368UL, 3019046912UL, 3650551808UL, 3236954112UL, 1050935296UL, 871563264UL, 1743126528UL, 1932394496UL, 2447376384UL, 1833435136UL, 2011561984UL, 3486253056UL, 643563520UL, 868220928UL, 177209344UL, 4291559424UL, 2677538816UL, 2360868864UL, 2004877312UL, +85983232UL, 4019716096UL, 1060110336UL, 3647995904UL, 1056964608UL, 3661627392UL, 254803968UL, 3193962496UL, 1658847232UL, 2113929216UL, 3028287488UL, 3730833408UL, 3166699520UL, 3586129920UL, 4227858432UL, 1761607680UL, 2092957696UL, 3112173568UL, 2071986176UL, 4160749568UL, 3523215360UL, 964689920UL, 1929379840UL, 3875536896UL, 4026531840UL, 2751463424UL, 1929379840UL, 4127195136UL, 503316480UL, 3758096384UL, 2281701376UL, 4127195136UL, +332854UL, 1316635UL, 85009117UL, 335741939UL, 1412632518UL, 596079UL, 1580547UL, 152139416UL, 403047142UL, 2556825231UL, 1316075UL, 1317672UL, 335609039UL, 336528191UL, 1425998811UL, 2824661UL, 1574501UL, 724748988UL, 3625845630UL, 1509824181UL, 5571497UL, 15612UL, 1431742057UL, 1077674236UL, 1140592489UL, 11142994UL, 31224UL, 2863484114UL, 1081606648UL, 1207443154UL, 22285988UL, 62451UL, +1432000919UL, 1089470704UL, 1341132452UL, 44571976UL, 124902UL, 1790260014UL, 2178941408UL, 2682264904UL, 89143952UL, 249804UL, 359294556UL, 62915520UL, 1069562512UL, 178287904UL, 499608UL, 3939814584UL, 125831040UL, 2139125024UL, 356575808UL, 999216UL, 363436400UL, 251662080UL, 4278250048UL, 713151616UL, 3223223904UL, 3948098272UL, 503324160UL, 4261532800UL, 1426303232UL, 1077738688UL, 380003776UL, 1006648320UL, +4228098304UL, 2852606464UL, 1081735552UL, 3981233024UL, 2013296640UL, 4161229312UL, 1410245632UL, 1089729280UL, 446273280UL, 4026593280UL, 4027491328UL, 1746749440UL, 2179458560UL, 4113772032UL, 3758219264UL, 3760015360UL, 272273408UL, 63949824UL, 711351296UL, 3221471232UL, 3225063424UL, 3765772288UL, 127899648UL, 2496444416UL, 2147975168UL, 2155159552UL, 15351808UL, 255799296UL, 3919147008UL, 983040UL, 15351808UL, 3251929088UL, +3732824064UL, 322101248UL, 1966080UL, 299139072UL, 1135149056UL, 2096939008UL, 3865427968UL, 3932160UL, 4087939072UL, 1196556288UL, 972652544UL, 214663168UL, 7864320UL, 4149346304UL, 1319370752UL, 3019046912UL, 3650551808UL, 3236954112UL, 1050935296UL, 2638741504UL, 1743126528UL, 1932394496UL, 2447376384UL, 1833435136UL, 982515712UL, 3486253056UL, 643563520UL, 868220928UL, 177209344UL, 1965031424UL, 2677538816UL, 2360868864UL, +2004877312UL, 85983232UL, 3930062848UL, 1060110336UL, 3647995904UL, 1056964608UL, 3661627392UL, 3565158400UL, 3193962496UL, 1658847232UL, 2113929216UL, 3028287488UL, 2835349504UL, 3166699520UL, 3586129920UL, 4227858432UL, 1761607680UL, 1375731712UL, 3112173568UL, 2071986176UL, 4160749568UL, 3523215360UL, 2751463424UL, 1929379840UL, 3875536896UL, 4026531840UL, 2751463424UL, 2281701376UL, 4127195136UL, 503316480UL, 3758096384UL, 2281701376UL, +5123UL, 332854UL, 1316635UL, 85009117UL, 335741939UL, 6150UL, 596079UL, 1580547UL, 152139416UL, 403047142UL, 5135UL, 1316075UL, 1317672UL, 335609039UL, 336528191UL, 6174UL, 2824661UL, 1574501UL, 724748988UL, 3625845630UL, 60UL, 5571497UL, 15612UL, 1431742057UL, 1077674236UL, 120UL, 11142994UL, 31224UL, 2863484114UL, 1081606648UL, 240UL, 22285988UL, +62451UL, 1432000919UL, 1089470704UL, 480UL, 44571976UL, 124902UL, 1790260014UL, 2178941408UL, 960UL, 89143952UL, 249804UL, 359294556UL, 62915520UL, 1920UL, 178287904UL, 499608UL, 3939814584UL, 125831040UL, 3840UL, 356575808UL, 999216UL, 363436400UL, 251662080UL, 7680UL, 713151616UL, 3223223904UL, 3948098272UL, 503324160UL, 15360UL, 1426303232UL, 1077738688UL, 380003776UL, +1006648320UL, 30720UL, 2852606464UL, 1081735552UL, 3981233024UL, 2013296640UL, 61440UL, 1410245632UL, 1089729280UL, 446273280UL, 4026593280UL, 122880UL, 1746749440UL, 2179458560UL, 4113772032UL, 3758219264UL, 245760UL, 272273408UL, 63949824UL, 711351296UL, 3221471232UL, 491520UL, 3765772288UL, 127899648UL, 2496444416UL, 2147975168UL, 983040UL, 15351808UL, 255799296UL, 3919147008UL, 983040UL, 3223191552UL, +3251929088UL, 3732824064UL, 322101248UL, 1966080UL, 1077673984UL, 1135149056UL, 2096939008UL, 3865427968UL, 3932160UL, 1081606144UL, 1196556288UL, 972652544UL, 214663168UL, 7864320UL, 1089470464UL, 1319370752UL, 3019046912UL, 3650551808UL, 3236954112UL, 2178940928UL, 2638741504UL, 1743126528UL, 1932394496UL, 2447376384UL, 62914560UL, 982515712UL, 3486253056UL, 643563520UL, 868220928UL, 125829120UL, 1965031424UL, 2677538816UL, +2360868864UL, 2004877312UL, 251658240UL, 3930062848UL, 1060110336UL, 3647995904UL, 1056964608UL, 503316480UL, 3565158400UL, 3193962496UL, 1658847232UL, 2113929216UL, 1006632960UL, 2835349504UL, 3166699520UL, 3586129920UL, 4227858432UL, 2013265920UL, 1375731712UL, 3112173568UL, 2071986176UL, 4160749568UL, 4026531840UL, 2751463424UL, 1929379840UL, 3875536896UL, 4026531840UL, 3758096384UL, 2281701376UL, 4127195136UL, 503316480UL, 3758096384UL, +201392209UL, 3423671362UL, 218366296UL, 3713336838UL, 206572594UL, 402785186UL, 2552372100UL, 436928947UL, 3130605370UL, 463476848UL, 262468UL, 4461835UL, 68158800UL, 1158700908UL, 20971524UL, 524680UL, 8919318UL, 136513955UL, 2316537326UL, 25165852UL, 3222274064UL, 3239051564UL, 3494187077UL, 3558090985UL, 3221225500UL, 2149580832UL, 2183135832UL, 2693406858UL, 2821214674UL, 2147483704UL, 4194368UL, 71304368UL, +1091846420UL, 1347462055UL, 64UL, 8388736UL, 142608736UL, 2183692840UL, 2694924110UL, 3221225600UL, 16777472UL, 285217472UL, 72418384UL, 1094880924UL, 1342177536UL, 33554944UL, 570434944UL, 144836768UL, 2189761848UL, 2684355072UL, 67109888UL, 1140869888UL, 289673536UL, 84556400UL, 1073742848UL, 134219776UL, 2281739776UL, 579347072UL, 169112800UL, 2147485696UL, 268439552UL, 268512256UL, 1158694144UL, 69790144UL, +4096UL, 536879104UL, 537024512UL, 2317388288UL, 3360805760UL, 8192UL, 1073758208UL, 1074049024UL, 339809280UL, 1352902400UL, 16384UL, 2147516416UL, 2148098048UL, 3900844032UL, 1632062976UL, 32768UL, 65536UL, 1228800UL, 17059840UL, 311335936UL, 65536UL, 131072UL, 2457600UL, 34119680UL, 622671872UL, 131072UL, 262144UL, 4915200UL, 68239360UL, 1245343744UL, 262144UL, 524288UL, +9830400UL, 136478720UL, 2490687488UL, 524288UL, 1048576UL, 288096256UL, 272957440UL, 954843136UL, 3222274048UL, 2097152UL, 3797417984UL, 545914880UL, 2983428096UL, 2149580800UL, 4194304UL, 78643200UL, 1091829760UL, 2745630720UL, 4194304UL, 3229614080UL, 3378511872UL, 1109917696UL, 2270035968UL, 8388608UL, 1358954496UL, 1119879168UL, 1414529024UL, 513540096UL, 16777216UL, 2717908992UL, 2239758336UL, 2829058048UL, +1027080192UL, 33554432UL, 1140850688UL, 184549376UL, 1363148800UL, 2054160384UL, 3288334336UL, 2281701376UL, 369098752UL, 2726297600UL, 4108320768UL, 2281701376UL, 268435456UL, 738197504UL, 2231369728UL, 968884224UL, 3959422976UL, 536870912UL, 1476395008UL, 167772160UL, 3011510272UL, 3355443200UL, 1073741824UL, 2952790016UL, 335544320UL, 1728053248UL, 2147483648UL, 2147483648UL, 1610612736UL, 3892314112UL, 503316480UL, 0UL, +}, +{ +1939838472UL, 1412147404UL, 166205219UL, 1757484276UL, 2905930693UL, 2345662040UL, 2845657161UL, 253454719UL, 2661974169UL, 303781080UL, 4075331504UL, 31014156UL, 244538930UL, 3752264221UL, 992575155UL, 219309525UL, 246620060UL, 215640989UL, 4125020723UL, 2016731730UL, 3236558869UL, 297169276UL, 3293566751UL, 1867504216UL, 210423272UL, 2531663658UL, 499723753UL, 1730625896UL, 189236880UL, 3388575408UL, 2433358422UL, 1368961148UL, +3134096848UL, 2827836415UL, 3888822753UL, 4172043647UL, 3379360748UL, 2651760955UL, 1345081091UL, 627692776UL, 189423917UL, 1927379456UL, 4004336944UL, 2995932065UL, 1882016234UL, 2551113616UL, 1576396048UL, 1299792730UL, 2151240795UL, 2154814108UL, 4292139924UL, 3555849728UL, 943986992UL, 3169912733UL, 2631635779UL, 3478094562UL, 1285558544UL, 3716074330UL, 2780749859UL, 3911106510UL, 4175656994UL, 1731832828UL, 1275401375UL, 937322456UL, +3802094750UL, 1145506936UL, 1008905193UL, 1718801768UL, 645739137UL, 1356219146UL, 827886816UL, 1722154800UL, 2242776733UL, 754630810UL, 772070504UL, 249481170UL, 2608123425UL, 2087201889UL, 3200968096UL, 3292110026UL, 841433255UL, 477543427UL, 1878882709UL, 705347364UL, 4003860146UL, 3194913138UL, 2616490007UL, 357561212UL, 2446098297UL, 2955680594UL, 2512991743UL, 637464579UL, 1209132455UL, 1341312804UL, 612108672UL, 2455017713UL, +1749147666UL, 4020226825UL, 2873924220UL, 499405095UL, 1837614076UL, 1227604028UL, 714577577UL, 165950208UL, 442290261UL, 489077752UL, 216760440UL, 42151250UL, 426862080UL, 2810242474UL, 4112075489UL, 3514761468UL, 4101921371UL, 982512636UL, 500792667UL, 4286077681UL, 198050301UL, 1858712743UL, 2913642493UL, 3547545255UL, 3981929169UL, 2944140287UL, 2286578015UL, 3422343167UL, 1239123295UL, 2026367394UL, 3269986302UL, 3028402878UL, +2709637886UL, 1096011710UL, 294584132UL, 3086749695UL, 3324400975UL, 1164394495UL, 4290155855UL, 543687304UL, 4008517630UL, 836370334UL, 1876426750UL, 2362048414UL, 3578325264UL, 3221487612UL, 2671154748UL, 3395518460UL, 2018383420UL, 2131029536UL, 2165829624UL, 697661816UL, 1336049656UL, 3309365624UL, 4259639360UL, 3423548400UL, 2416417776UL, 1633698800UL, 1630071792UL, 41950336UL, 3423478496UL, 2885608160UL, 3943744224UL, 677380832UL, +4179285363UL, 1939838472UL, 1412147404UL, 166205219UL, 1757484276UL, 3838244595UL, 2345662040UL, 2845657161UL, 253454719UL, 2661974169UL, 138737288UL, 4075331504UL, 31014156UL, 244538930UL, 3752264221UL, 1503392345UL, 219309525UL, 246620060UL, 215640989UL, 4125020723UL, 1759481152UL, 3236558869UL, 297169276UL, 3293566751UL, 1867504216UL, 3898070400UL, 2531663658UL, 499723753UL, 1730625896UL, 189236880UL, 2610231010UL, 2433358422UL, +1368961148UL, 3134096848UL, 2827836415UL, 3903474593UL, 4172043647UL, 3379360748UL, 2651760955UL, 1345081091UL, 1267864331UL, 189423917UL, 1927379456UL, 4004336944UL, 2995932065UL, 3452816347UL, 2551113616UL, 1576396048UL, 1299792730UL, 2151240795UL, 1222520631UL, 4292139924UL, 3555849728UL, 943986992UL, 3169912733UL, 3260130211UL, 3478094562UL, 1285558544UL, 3716074330UL, 2780749859UL, 3039362306UL, 4175656994UL, 1731832828UL, 1275401375UL, +937322456UL, 3236754932UL, 1145506936UL, 1008905193UL, 1718801768UL, 645739137UL, 1358079399UL, 827886816UL, 1722154800UL, 2242776733UL, 754630810UL, 1748663943UL, 249481170UL, 2608123425UL, 2087201889UL, 3200968096UL, 698076610UL, 841433255UL, 477543427UL, 1878882709UL, 705347364UL, 3692794996UL, 3194913138UL, 2616490007UL, 357561212UL, 2446098297UL, 2771068186UL, 2512991743UL, 637464579UL, 1209132455UL, 1341312804UL, 27937268UL, +2455017713UL, 1749147666UL, 4020226825UL, 2873924220UL, 1673040956UL, 1837614076UL, 1227604028UL, 714577577UL, 165950208UL, 528340088UL, 489077752UL, 216760440UL, 42151250UL, 426862080UL, 1646215396UL, 4112075489UL, 3514761468UL, 4101921371UL, 982512636UL, 2095821304UL, 4286077681UL, 198050301UL, 1858712743UL, 2913642493UL, 277300160UL, 3981929169UL, 2944140287UL, 2286578015UL, 3422343167UL, 1178044288UL, 2026367394UL, 3269986302UL, +3028402878UL, 2709637886UL, 2234191616UL, 294584132UL, 3086749695UL, 3324400975UL, 1164394495UL, 136978944UL, 543687304UL, 4008517630UL, 836370334UL, 1876426750UL, 3275253760UL, 3578325264UL, 3221487612UL, 2671154748UL, 3395518460UL, 3942394880UL, 2131029536UL, 2165829624UL, 697661816UL, 1336049656UL, 3265045504UL, 4259639360UL, 3423548400UL, 2416417776UL, 1633698800UL, 3943712768UL, 41950336UL, 3423478496UL, 2885608160UL, 3943744224UL, +2293593009UL, 4179285363UL, 1939838472UL, 1412147404UL, 166205219UL, 715714152UL, 3838244595UL, 2345662040UL, 2845657161UL, 253454719UL, 3758048260UL, 138737288UL, 4075331504UL, 31014156UL, 244538930UL, 370671650UL, 1503392345UL, 219309525UL, 246620060UL, 215640989UL, 2219162331UL, 1759481152UL, 3236558869UL, 297169276UL, 3293566751UL, 135243402UL, 3898070400UL, 2531663658UL, 499723753UL, 1730625896UL, 3142293713UL, 2610231010UL, +2433358422UL, 1368961148UL, 3134096848UL, 486949791UL, 3903474593UL, 4172043647UL, 3379360748UL, 2651760955UL, 3172880550UL, 1267864331UL, 189423917UL, 1927379456UL, 4004336944UL, 191463910UL, 3452816347UL, 2551113616UL, 1576396048UL, 1299792730UL, 4411574UL, 1222520631UL, 4292139924UL, 3555849728UL, 943986992UL, 3073348038UL, 3260130211UL, 3478094562UL, 1285558544UL, 3716074330UL, 3098363790UL, 3039362306UL, 4175656994UL, 1731832828UL, +1275401375UL, 468159532UL, 3236754932UL, 1145506936UL, 1008905193UL, 1718801768UL, 1092964081UL, 1358079399UL, 827886816UL, 1722154800UL, 2242776733UL, 53128947UL, 1748663943UL, 249481170UL, 2608123425UL, 2087201889UL, 1960144614UL, 698076610UL, 841433255UL, 477543427UL, 1878882709UL, 1505419004UL, 3692794996UL, 3194913138UL, 2616490007UL, 357561212UL, 2823143358UL, 2771068186UL, 2512991743UL, 637464579UL, 1209132455UL, 1991737212UL, +27937268UL, 2455017713UL, 1749147666UL, 4020226825UL, 2907896812UL, 1673040956UL, 1837614076UL, 1227604028UL, 714577577UL, 3633969112UL, 528340088UL, 489077752UL, 216760440UL, 42151250UL, 2886728356UL, 1646215396UL, 4112075489UL, 3514761468UL, 4101921371UL, 3507686008UL, 2095821304UL, 4286077681UL, 198050301UL, 1858712743UL, 1463806912UL, 277300160UL, 3981929169UL, 2944140287UL, 2286578015UL, 4137888640UL, 1178044288UL, 2026367394UL, +3269986302UL, 3028402878UL, 1276820224UL, 2234191616UL, 294584132UL, 3086749695UL, 3324400975UL, 4274031104UL, 136978944UL, 543687304UL, 4008517630UL, 836370334UL, 2978609152UL, 3275253760UL, 3578325264UL, 3221487612UL, 2671154748UL, 2296777728UL, 3942394880UL, 2131029536UL, 2165829624UL, 697661816UL, 1086645248UL, 3265045504UL, 4259639360UL, 3423548400UL, 2416417776UL, 2295121920UL, 3943712768UL, 41950336UL, 3423478496UL, 2885608160UL, +3290486993UL, 2293593009UL, 4179285363UL, 1939838472UL, 1412147404UL, 3718742914UL, 715714152UL, 3838244595UL, 2345662040UL, 2845657161UL, 3251034248UL, 3758048260UL, 138737288UL, 4075331504UL, 31014156UL, 2257801369UL, 370671650UL, 1503392345UL, 219309525UL, 246620060UL, 1375177854UL, 2219162331UL, 1759481152UL, 3236558869UL, 297169276UL, 2981812236UL, 135243402UL, 3898070400UL, 2531663658UL, 499723753UL, 1103465850UL, 3142293713UL, +2610231010UL, 2433358422UL, 1368961148UL, 2570001060UL, 486949791UL, 3903474593UL, 4172043647UL, 3379360748UL, 1922171925UL, 3172880550UL, 1267864331UL, 189423917UL, 1927379456UL, 1359812359UL, 191463910UL, 3452816347UL, 2551113616UL, 1576396048UL, 2518549525UL, 4411574UL, 1222520631UL, 4292139924UL, 3555849728UL, 949028615UL, 3073348038UL, 3260130211UL, 3478094562UL, 1285558544UL, 4113039486UL, 3098363790UL, 3039362306UL, 4175656994UL, +1731832828UL, 1827471372UL, 468159532UL, 3236754932UL, 1145506936UL, 1008905193UL, 1626341859UL, 1092964081UL, 1358079399UL, 827886816UL, 1722154800UL, 1069547583UL, 53128947UL, 1748663943UL, 249481170UL, 2608123425UL, 3162506114UL, 1960144614UL, 698076610UL, 841433255UL, 477543427UL, 3641706484UL, 1505419004UL, 3692794996UL, 3194913138UL, 2616490007UL, 3623882586UL, 2823143358UL, 2771068186UL, 2512991743UL, 637464579UL, 16785012UL, +1991737212UL, 27937268UL, 2455017713UL, 1749147666UL, 2348825660UL, 2907896812UL, 1673040956UL, 1837614076UL, 1227604028UL, 2579527800UL, 3633969112UL, 528340088UL, 489077752UL, 216760440UL, 3628134628UL, 2886728356UL, 1646215396UL, 4112075489UL, 3514761468UL, 1602085368UL, 3507686008UL, 2095821304UL, 4286077681UL, 198050301UL, 2501362624UL, 1463806912UL, 277300160UL, 3981929169UL, 2944140287UL, 4112467840UL, 4137888640UL, 1178044288UL, +2026367394UL, 3269986302UL, 3356184320UL, 1276820224UL, 2234191616UL, 294584132UL, 3086749695UL, 366387712UL, 4274031104UL, 136978944UL, 543687304UL, 4008517630UL, 1006135296UL, 2978609152UL, 3275253760UL, 3578325264UL, 3221487612UL, 3104844800UL, 2296777728UL, 3942394880UL, 2131029536UL, 2165829624UL, 1874371584UL, 1086645248UL, 3265045504UL, 4259639360UL, 3423548400UL, 2975352832UL, 2295121920UL, 3943712768UL, 41950336UL, 3423478496UL, +989898496UL, 3410688577UL, 2331788830UL, 3546482013UL, 813828841UL, 1865093068UL, 3265457506UL, 3795669738UL, 2119696024UL, 4285651426UL, 3333834629UL, 3451487261UL, 2090324595UL, 1816963648UL, 932961512UL, 2470761029UL, 3401764108UL, 3421619354UL, 4199624502UL, 589386372UL, 879396240UL, 3372470254UL, 2693109296UL, 2424215996UL, 38442268UL, 1882087724UL, 171397600UL, 2024561281UL, 183095586UL, 3282207272UL, 3402177296UL, 1859195498UL, +413109947UL, 2839537944UL, 1632143648UL, 3742715856UL, 388696500UL, 1748703733UL, 3563198567UL, 3826785440UL, 2896086528UL, 3989037829UL, 1478787788UL, 1390277813UL, 2123320736UL, 3416516800UL, 2056564203UL, 2584895011UL, 1605192736UL, 2475623616UL, 3856499712UL, 3439657984UL, 708088129UL, 1501395566UL, 1302184960UL, 1360092352UL, 1645630430UL, 1425230387UL, 3369488824UL, 2979863936UL, 869212432UL, 150548847UL, 1097557362UL, 655939640UL, +316553344UL, 3761918508UL, 3958338094UL, 141744600UL, 1412214640UL, 1859689984UL, 3200680981UL, 3883058679UL, 999801880UL, 3946079738UL, 1876072704UL, 194381849UL, 2177533995UL, 1584707624UL, 3053768410UL, 2593051904UL, 3458076673UL, 4047442835UL, 3545972808UL, 3441793178UL, 194975744UL, 1731731470UL, 4168755162UL, 2628944732UL, 2125675784UL, 3119906816UL, 960774145UL, 2646626078UL, 2152793157UL, 3049156634UL, 672464896UL, 3046932493UL, +3700727536UL, 2152335477UL, 575986696UL, 671940608UL, 2208366608UL, 1454456125UL, 937760016UL, 4103979069UL, 2737668096UL, 1179779104UL, 1030912634UL, 1041902112UL, 2032909434UL, 2274230272UL, 2089025605UL, 3050632421UL, 2428784965UL, 140658149UL, 4254138368UL, 1745354889UL, 711584249UL, 2746523017UL, 2551006457UL, 1100808192UL, 1494221073UL, 3422999489UL, 2696954129UL, 976716737UL, 2653421568UL, 3806331426UL, 3690047362UL, 1481392674UL, +3817015170UL, 2353004544UL, 286262340UL, 2300534532UL, 4206449732UL, 15339268UL, 2894069760UL, 488376456UL, 1489927688UL, 1196583048UL, 652746248UL, 2214592512UL, 69904UL, 1006205200UL, 2322628880UL, 1229515024UL, 2617245696UL, 3423527456UL, 1964953120UL, 4260938272UL, 386199072UL, 1744830464UL, 1342444608UL, 1069330496UL, 2138592320UL, 3185897536UL, 1073741824UL, 1342493824UL, 3780942976UL, 1771066496UL, 2189433984UL, 2147483648UL, +}, +{ +1804684571UL, 2106089606UL, 1533056158UL, 2870216110UL, 3618155659UL, 3789871366UL, 4246691682UL, 3667072763UL, 1212241769UL, 3152390668UL, 2973497449UL, 2958641966UL, 2088805328UL, 717518631UL, 2401090860UL, 3606967204UL, 952637656UL, 59827581UL, 1291486682UL, 1499453515UL, 2053994857UL, 563998083UL, 4094000396UL, 1163546899UL, 1003843565UL, 654565639UL, 1070907026UL, 4217851863UL, 426034251UL, 1721352737UL, 278404469UL, 3899800390UL, +1063362170UL, 1162348262UL, 3153545093UL, 3249996223UL, 186674553UL, 2616406148UL, 3137968354UL, 1282784965UL, 1495068058UL, 3033760361UL, 2278144523UL, 3192245769UL, 719586342UL, 2602548287UL, 3386583150UL, 355354345UL, 3252815848UL, 2178056037UL, 2283016801UL, 3005955037UL, 3340254490UL, 802791670UL, 251122316UL, 3705188626UL, 1252262272UL, 3989036796UL, 3527490452UL, 2047131255UL, 1447170583UL, 3373930285UL, 2895037457UL, 209341805UL, +1820357643UL, 3712392731UL, 685796521UL, 1322920440UL, 814388470UL, 1357857147UL, 434430265UL, 2650681935UL, 1371566728UL, 58783716UL, 2273435933UL, 3498513198UL, 792571900UL, 1447808772UL, 3513385860UL, 99175889UL, 1105434360UL, 1484146625UL, 3327194068UL, 242672513UL, 3552105593UL, 1425844616UL, 2871928454UL, 1124633561UL, 607610433UL, 2130018608UL, 1610235673UL, 2844230432UL, 2748082340UL, 994392866UL, 450823250UL, 2912535126UL, +2574390988UL, 3974009252UL, 78696582UL, 649682891UL, 3980917176UL, 3221419689UL, 960695436UL, 729221508UL, 358358845UL, 3392407691UL, 472711005UL, 295914899UL, 3005191796UL, 3078521977UL, 3370011868UL, 509135340UL, 1965939519UL, 2086465877UL, 2457949822UL, 1324152522UL, 762289386UL, 3618693997UL, 233730715UL, 2873984650UL, 31168606UL, 3367142977UL, 2851851305UL, 3251660053UL, 4209768406UL, 3298190175UL, 901235185UL, 1564391510UL, +2352686527UL, 1008150482UL, 578573310UL, 3462447127UL, 2482873876UL, 1790221257UL, 2255375608UL, 2335345651UL, 1381450613UL, 2866805101UL, 1495073163UL, 519905259UL, 3184556473UL, 1076378339UL, 2692926127UL, 970097715UL, 4013407916UL, 4014350363UL, 2476927059UL, 1989070516UL, 2640060069UL, 1987784589UL, 1880989003UL, 3861138803UL, 451743296UL, 1987067871UL, 1975657871UL, 3397816882UL, 2309900530UL, 4108425851UL, 4063867233UL, 3319482186UL, +2621772886UL, 1804684571UL, 2106089606UL, 1533056158UL, 2870216110UL, 611557097UL, 3789871366UL, 4246691682UL, 3667072763UL, 1212241769UL, 3389551988UL, 2973497449UL, 2958641966UL, 2088805328UL, 717518631UL, 2460955430UL, 3606967204UL, 952637656UL, 59827581UL, 1291486682UL, 3531087304UL, 2053994857UL, 563998083UL, 4094000396UL, 1163546899UL, 1242934125UL, 654565639UL, 1070907026UL, 4217851863UL, 426034251UL, 3034416129UL, 278404469UL, +3899800390UL, 1063362170UL, 1162348262UL, 4258714417UL, 3249996223UL, 186674553UL, 2616406148UL, 3137968354UL, 639885806UL, 1495068058UL, 3033760361UL, 2278144523UL, 3192245769UL, 4159910300UL, 2602548287UL, 3386583150UL, 355354345UL, 3252815848UL, 1555885880UL, 2283016801UL, 3005955037UL, 3340254490UL, 802791670UL, 2948774612UL, 3705188626UL, 1252262272UL, 3989036796UL, 3527490452UL, 2107826711UL, 1447170583UL, 3373930285UL, 2895037457UL, +209341805UL, 3763367196UL, 3712392731UL, 685796521UL, 1322920440UL, 814388470UL, 1986168339UL, 434430265UL, 2650681935UL, 1371566728UL, 58783716UL, 1423189187UL, 3498513198UL, 792571900UL, 1447808772UL, 3513385860UL, 315969823UL, 1105434360UL, 1484146625UL, 3327194068UL, 242672513UL, 3336228275UL, 1425844616UL, 2871928454UL, 1124633561UL, 607610433UL, 1762052458UL, 1610235673UL, 2844230432UL, 2748082340UL, 994392866UL, 3771702243UL, +2912535126UL, 2574390988UL, 3974009252UL, 78696582UL, 1626628844UL, 3980917176UL, 3221419689UL, 960695436UL, 729221508UL, 382092233UL, 3392407691UL, 472711005UL, 295914899UL, 3005191796UL, 514297204UL, 3370011868UL, 509135340UL, 1965939519UL, 2086465877UL, 3975975091UL, 1324152522UL, 762289386UL, 3618693997UL, 233730715UL, 455322516UL, 31168606UL, 3367142977UL, 2851851305UL, 3251660053UL, 3952189603UL, 3298190175UL, 901235185UL, +1564391510UL, 2352686527UL, 826181452UL, 578573310UL, 3462447127UL, 2482873876UL, 1790221257UL, 1529242773UL, 2335345651UL, 1381450613UL, 2866805101UL, 1495073163UL, 877718651UL, 3184556473UL, 1076378339UL, 2692926127UL, 970097715UL, 299344245UL, 4014350363UL, 2476927059UL, 1989070516UL, 2640060069UL, 3844531327UL, 1880989003UL, 3861138803UL, 451743296UL, 1987067871UL, 3272848161UL, 3397816882UL, 2309900530UL, 4108425851UL, 4063867233UL, +834288064UL, 2621772886UL, 1804684571UL, 2106089606UL, 1533056158UL, 304865970UL, 611557097UL, 3789871366UL, 4246691682UL, 3667072763UL, 2728206193UL, 3389551988UL, 2973497449UL, 2958641966UL, 2088805328UL, 3895037582UL, 2460955430UL, 3606967204UL, 952637656UL, 59827581UL, 2349212526UL, 3531087304UL, 2053994857UL, 563998083UL, 4094000396UL, 4028900485UL, 1242934125UL, 654565639UL, 1070907026UL, 4217851863UL, 1663452176UL, 3034416129UL, +278404469UL, 3899800390UL, 1063362170UL, 2721441405UL, 4258714417UL, 3249996223UL, 186674553UL, 2616406148UL, 4228837490UL, 639885806UL, 1495068058UL, 3033760361UL, 2278144523UL, 2820661772UL, 4159910300UL, 2602548287UL, 3386583150UL, 355354345UL, 1815256314UL, 1555885880UL, 2283016801UL, 3005955037UL, 3340254490UL, 2166514144UL, 2948774612UL, 3705188626UL, 1252262272UL, 3989036796UL, 751187322UL, 2107826711UL, 1447170583UL, 3373930285UL, +2895037457UL, 2809311944UL, 3763367196UL, 3712392731UL, 685796521UL, 1322920440UL, 936300677UL, 1986168339UL, 434430265UL, 2650681935UL, 1371566728UL, 1308015359UL, 1423189187UL, 3498513198UL, 792571900UL, 1447808772UL, 3065349526UL, 315969823UL, 1105434360UL, 1484146625UL, 3327194068UL, 1038676789UL, 3336228275UL, 1425844616UL, 2871928454UL, 1124633561UL, 2956422231UL, 1762052458UL, 1610235673UL, 2844230432UL, 2748082340UL, 3603862093UL, +3771702243UL, 2912535126UL, 2574390988UL, 3974009252UL, 1691332448UL, 1626628844UL, 3980917176UL, 3221419689UL, 960695436UL, 3120142427UL, 382092233UL, 3392407691UL, 472711005UL, 295914899UL, 4101686983UL, 514297204UL, 3370011868UL, 509135340UL, 1965939519UL, 3015736706UL, 3975975091UL, 1324152522UL, 762289386UL, 3618693997UL, 2395097989UL, 455322516UL, 31168606UL, 3367142977UL, 2851851305UL, 30511955UL, 3952189603UL, 3298190175UL, +901235185UL, 1564391510UL, 2606298633UL, 826181452UL, 578573310UL, 3462447127UL, 2482873876UL, 4159642946UL, 1529242773UL, 2335345651UL, 1381450613UL, 2866805101UL, 1782913669UL, 877718651UL, 3184556473UL, 1076378339UL, 2692926127UL, 1730328819UL, 299344245UL, 4014350363UL, 2476927059UL, 1989070516UL, 1425685614UL, 3844531327UL, 1880989003UL, 3861138803UL, 451743296UL, 889237383UL, 3272848161UL, 3397816882UL, 2309900530UL, 4108425851UL, +1155723231UL, 834288064UL, 2621772886UL, 1804684571UL, 2106089606UL, 2387009004UL, 304865970UL, 611557097UL, 3789871366UL, 4246691682UL, 1405709661UL, 2728206193UL, 3389551988UL, 2973497449UL, 2958641966UL, 3183906006UL, 3895037582UL, 2460955430UL, 3606967204UL, 952637656UL, 1345432763UL, 2349212526UL, 3531087304UL, 2053994857UL, 563998083UL, 3749011414UL, 4028900485UL, 1242934125UL, 654565639UL, 1070907026UL, 1072342672UL, 1663452176UL, +3034416129UL, 278404469UL, 3899800390UL, 3566652188UL, 2721441405UL, 4258714417UL, 3249996223UL, 186674553UL, 4001263143UL, 4228837490UL, 639885806UL, 1495068058UL, 3033760361UL, 4278332644UL, 2820661772UL, 4159910300UL, 2602548287UL, 3386583150UL, 838831089UL, 1815256314UL, 1555885880UL, 2283016801UL, 3005955037UL, 3377397178UL, 2166514144UL, 2948774612UL, 3705188626UL, 1252262272UL, 2414422575UL, 751187322UL, 2107826711UL, 1447170583UL, +3373930285UL, 1253755033UL, 2809311944UL, 3763367196UL, 3712392731UL, 685796521UL, 3238624475UL, 936300677UL, 1986168339UL, 434430265UL, 2650681935UL, 1642290570UL, 1308015359UL, 1423189187UL, 3498513198UL, 792571900UL, 173318140UL, 3065349526UL, 315969823UL, 1105434360UL, 1484146625UL, 4103797777UL, 1038676789UL, 3336228275UL, 1425844616UL, 2871928454UL, 1797745765UL, 2956422231UL, 1762052458UL, 1610235673UL, 2844230432UL, 2180656608UL, +3603862093UL, 3771702243UL, 2912535126UL, 2574390988UL, 1183098390UL, 1691332448UL, 1626628844UL, 3980917176UL, 3221419689UL, 2645203959UL, 3120142427UL, 382092233UL, 3392407691UL, 472711005UL, 1659659070UL, 4101686983UL, 514297204UL, 3370011868UL, 509135340UL, 483888155UL, 3015736706UL, 3975975091UL, 1324152522UL, 762289386UL, 1259948064UL, 2395097989UL, 455322516UL, 31168606UL, 3367142977UL, 339990414UL, 30511955UL, 3952189603UL, +3298190175UL, 901235185UL, 3097920065UL, 2606298633UL, 826181452UL, 578573310UL, 3462447127UL, 1548039839UL, 4159642946UL, 1529242773UL, 2335345651UL, 1381450613UL, 2173079994UL, 1782913669UL, 877718651UL, 3184556473UL, 1076378339UL, 1570275057UL, 1730328819UL, 299344245UL, 4014350363UL, 2476927059UL, 1845882881UL, 1425685614UL, 3844531327UL, 1880989003UL, 3861138803UL, 1322409081UL, 889237383UL, 3272848161UL, 3397816882UL, 2309900530UL, +3505447982UL, 3430136873UL, 1319796589UL, 4202423979UL, 3184732284UL, 2910356648UL, 2534615223UL, 3854465731UL, 768821792UL, 2205052576UL, 1348983754UL, 1300250188UL, 2919181738UL, 2520178732UL, 3967243685UL, 2646012002UL, 1784678658UL, 741302051UL, 3464753547UL, 194213376UL, 1482799064UL, 3009673860UL, 680824208UL, 741966796UL, 2381283369UL, 3022877171UL, 1619439814UL, 3961433610UL, 1331297670UL, 1100110820UL, 1311672539UL, 1122110615UL, +4056004850UL, 3413790176UL, 3148768822UL, 1242592694UL, 2925975727UL, 1879285134UL, 334328879UL, 1318235222UL, 3140739559UL, 401691770UL, 3604288404UL, 3686496908UL, 770670945UL, 199139043UL, 2092710473UL, 3914528993UL, 700991333UL, 2375775811UL, 858137308UL, 3490050165UL, 2389078291UL, 1615607459UL, 3027969809UL, 820012549UL, 2085659484UL, 2654485136UL, 2630408646UL, 196481396UL, 1119673274UL, 1026209692UL, 726501622UL, 2940737143UL, +3559571163UL, 2288027726UL, 1039212708UL, 929664536UL, 1061981465UL, 186058675UL, 3537656152UL, 844176796UL, 2996217992UL, 1545798611UL, 3031020656UL, 2248030435UL, 1665857580UL, 2905758082UL, 1269201312UL, 3031275084UL, 4034872841UL, 983632400UL, 4188503190UL, 757119675UL, 2105920865UL, 4281032819UL, 2917801076UL, 3900010013UL, 3910997169UL, 1729751422UL, 562313247UL, 3070846353UL, 2564238664UL, 4050540186UL, 4258833501UL, 2270666053UL, +2207128401UL, 2990540001UL, 797768898UL, 2288390225UL, 3230323685UL, 1974727440UL, 3327301426UL, 289857826UL, 3565889868UL, 2791014422UL, 2021097820UL, 3350378271UL, 3673707591UL, 2610067927UL, 4255789547UL, 2682856590UL, 12563128UL, 1397542366UL, 237149400UL, 2233707508UL, 3875573245UL, 2097374144UL, 175320773UL, 4103445984UL, 4089284323UL, 3610168130UL, 3084915964UL, 680145366UL, 2571684685UL, 1132894909UL, 104640024UL, 193765521UL, +2338202907UL, 895271448UL, 11499099UL, 1798066417UL, 1297412626UL, 2511347162UL, 3140535007UL, 2129963538UL, 700683199UL, 2609700278UL, 2953463279UL, 2290844145UL, 1871316353UL, 3993801787UL, 2219413182UL, 2954453701UL, 231283580UL, 1375331115UL, 207723994UL, 1799562537UL, 2056553564UL, 2513609799UL, 3542459627UL, 3173012714UL, 3923404932UL, 217877755UL, 2095124912UL, 192024370UL, 1168134987UL, 1889598668UL, 3014873069UL, 2033573343UL, +}, +{ +3465348660UL, 3623545008UL, 3505902593UL, 838034830UL, 1338018789UL, 2595329276UL, 3367746385UL, 3197935201UL, 1439351946UL, 3585085571UL, 4165798087UL, 3634792639UL, 2359485974UL, 2772582925UL, 1110186203UL, 3771562484UL, 1508694157UL, 1564641206UL, 2801985736UL, 2446107936UL, 3849126897UL, 1842973671UL, 944408104UL, 2624631280UL, 2729080685UL, 3737368614UL, 858809173UL, 2289802345UL, 2428186575UL, 3114742765UL, 716011303UL, 3443810690UL, +814132610UL, 517432787UL, 614445393UL, 2930433345UL, 291178098UL, 2117644502UL, 2749446703UL, 311745701UL, 365684723UL, 1705418876UL, 2213749318UL, 4011417220UL, 1842575651UL, 988348831UL, 94258998UL, 2771150272UL, 498058526UL, 1344827813UL, 2961955291UL, 262703473UL, 1404034822UL, 1566595865UL, 2522381203UL, 1706522206UL, 1203054806UL, 1273801539UL, 2070583465UL, 3913449936UL, 3231505231UL, 619636751UL, 3746997351UL, 4103027837UL, +1205468203UL, 3355878253UL, 3433356888UL, 107785753UL, 2779092609UL, 1869691566UL, 2555219983UL, 903319808UL, 3273374169UL, 2538926990UL, 979533870UL, 1356500860UL, 1661983738UL, 1380761625UL, 2919458459UL, 1041142798UL, 1430817627UL, 517007606UL, 1421570516UL, 2371447300UL, 2985632691UL, 3684889351UL, 3873926653UL, 788770697UL, 1854750277UL, 209332297UL, 1137299679UL, 848527832UL, 3850486924UL, 4179307312UL, 2764470693UL, 1353191605UL, +4166891919UL, 2074703841UL, 3373997532UL, 2013528640UL, 701389744UL, 841917592UL, 2065742268UL, 2721848192UL, 2566956680UL, 3122896007UL, 1090761479UL, 921859028UL, 4086736376UL, 1837462309UL, 2579826431UL, 2436217134UL, 839037727UL, 1072086642UL, 614518622UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601407381UL, 2899014005UL, 3268308948UL, 3337564231UL, 1986911578UL, 3379194930UL, 1950365753UL, 2098537451UL, 51515980UL, 1176526086UL, +3213391582UL, 1059745735UL, 2273586703UL, 376085505UL, 1493749800UL, 3970342143UL, 1620925244UL, 2165301314UL, 2332030190UL, 1864098798UL, 276747442UL, 2776569227UL, 2992780663UL, 3027279789UL, 1074555384UL, 3481518659UL, 2499703783UL, 661805703UL, 3782305562UL, 9186074UL, 2357407210UL, 2355922343UL, 2024733363UL, 485434612UL, 862379913UL, 1029706268UL, 1512726310UL, 3834948354UL, 1435892840UL, 3297980694UL, 2831553800UL, 2111416471UL, +711321697UL, 3465348660UL, 3623545008UL, 3505902593UL, 838034830UL, 1553436793UL, 2595329276UL, 3367746385UL, 3197935201UL, 1439351946UL, 3198044157UL, 4165798087UL, 3634792639UL, 2359485974UL, 2772582925UL, 836042976UL, 3771562484UL, 1508694157UL, 1564641206UL, 2801985736UL, 1190371491UL, 3849126897UL, 1842973671UL, 944408104UL, 2624631280UL, 410746791UL, 3737368614UL, 858809173UL, 2289802345UL, 2428186575UL, 1542325976UL, 716011303UL, +3443810690UL, 814132610UL, 517432787UL, 1649301063UL, 2930433345UL, 291178098UL, 2117644502UL, 2749446703UL, 3955511579UL, 365684723UL, 1705418876UL, 2213749318UL, 4011417220UL, 2753632862UL, 988348831UL, 94258998UL, 2771150272UL, 498058526UL, 3314106168UL, 2961955291UL, 262703473UL, 1404034822UL, 1566595865UL, 3590367097UL, 1706522206UL, 1203054806UL, 1273801539UL, 2070583465UL, 2340683261UL, 3231505231UL, 619636751UL, 3746997351UL, +4103027837UL, 2785398766UL, 3355878253UL, 3433356888UL, 107785753UL, 2779092609UL, 1608451840UL, 2555219983UL, 903319808UL, 3273374169UL, 2538926990UL, 645164419UL, 1356500860UL, 1661983738UL, 1380761625UL, 2919458459UL, 2260224548UL, 1430817627UL, 517007606UL, 1421570516UL, 2371447300UL, 1636004496UL, 3684889351UL, 3873926653UL, 788770697UL, 1854750277UL, 1345251011UL, 1137299679UL, 848527832UL, 3850486924UL, 4179307312UL, 3576574608UL, +1353191605UL, 4166891919UL, 2074703841UL, 3373997532UL, 183447754UL, 701389744UL, 841917592UL, 2065742268UL, 2721848192UL, 2109289891UL, 3122896007UL, 1090761479UL, 921859028UL, 4086736376UL, 2212730874UL, 2579826431UL, 2436217134UL, 839037727UL, 1072086642UL, 55934784UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601407381UL, 516550987UL, 3268308948UL, 3337564231UL, 1986911578UL, 3379194930UL, 3973484473UL, 2098537451UL, 51515980UL, +1176526086UL, 3213391582UL, 4251661633UL, 2273586703UL, 376085505UL, 1493749800UL, 3970342143UL, 3190791788UL, 2165301314UL, 2332030190UL, 1864098798UL, 276747442UL, 2991976613UL, 2992780663UL, 3027279789UL, 1074555384UL, 3481518659UL, 1399789494UL, 661805703UL, 3782305562UL, 9186074UL, 2357407210UL, 1942736967UL, 2024733363UL, 485434612UL, 862379913UL, 1029706268UL, 4122704494UL, 3834948354UL, 1435892840UL, 3297980694UL, 2831553800UL, +1210092654UL, 711321697UL, 3465348660UL, 3623545008UL, 3505902593UL, 3443231198UL, 1553436793UL, 2595329276UL, 3367746385UL, 3197935201UL, 1304974987UL, 3198044157UL, 4165798087UL, 3634792639UL, 2359485974UL, 3518323362UL, 836042976UL, 3771562484UL, 1508694157UL, 1564641206UL, 3577633375UL, 1190371491UL, 3849126897UL, 1842973671UL, 944408104UL, 1854555112UL, 410746791UL, 3737368614UL, 858809173UL, 2289802345UL, 3622671731UL, 1542325976UL, +716011303UL, 3443810690UL, 814132610UL, 296197011UL, 1649301063UL, 2930433345UL, 291178098UL, 2117644502UL, 1056271538UL, 3955511579UL, 365684723UL, 1705418876UL, 2213749318UL, 1258535671UL, 2753632862UL, 988348831UL, 94258998UL, 2771150272UL, 3669902097UL, 3314106168UL, 2961955291UL, 262703473UL, 1404034822UL, 1654433938UL, 3590367097UL, 1706522206UL, 1203054806UL, 1273801539UL, 2448138887UL, 2340683261UL, 3231505231UL, 619636751UL, +3746997351UL, 1454088394UL, 2785398766UL, 3355878253UL, 3433356888UL, 107785753UL, 689323470UL, 1608451840UL, 2555219983UL, 903319808UL, 3273374169UL, 1603842392UL, 645164419UL, 1356500860UL, 1661983738UL, 1380761625UL, 2814639423UL, 2260224548UL, 1430817627UL, 517007606UL, 1421570516UL, 1938805701UL, 1636004496UL, 3684889351UL, 3873926653UL, 788770697UL, 4238900666UL, 1345251011UL, 1137299679UL, 848527832UL, 3850486924UL, 108793827UL, +3576574608UL, 1353191605UL, 4166891919UL, 2074703841UL, 3780897861UL, 183447754UL, 701389744UL, 841917592UL, 2065742268UL, 3036602746UL, 2109289891UL, 3122896007UL, 1090761479UL, 921859028UL, 3499985398UL, 2212730874UL, 2579826431UL, 2436217134UL, 839037727UL, 3520354700UL, 55934784UL, 3764758228UL, 1501128342UL, 3669108708UL, 1601010847UL, 516550987UL, 3268308948UL, 3337564231UL, 1986911578UL, 2704241781UL, 3973484473UL, 2098537451UL, +51515980UL, 1176526086UL, 3602010532UL, 4251661633UL, 2273586703UL, 376085505UL, 1493749800UL, 2922957328UL, 3190791788UL, 2165301314UL, 2332030190UL, 1864098798UL, 1649666443UL, 2991976613UL, 2992780663UL, 3027279789UL, 1074555384UL, 2848531519UL, 1399789494UL, 661805703UL, 3782305562UL, 9186074UL, 320781315UL, 1942736967UL, 2024733363UL, 485434612UL, 862379913UL, 3598892066UL, 4122704494UL, 3834948354UL, 1435892840UL, 3297980694UL, +545184652UL, 1210092654UL, 711321697UL, 3465348660UL, 3623545008UL, 1173753045UL, 3443231198UL, 1553436793UL, 2595329276UL, 3367746385UL, 2444634476UL, 1304974987UL, 3198044157UL, 4165798087UL, 3634792639UL, 1837035806UL, 3518323362UL, 836042976UL, 3771562484UL, 1508694157UL, 2899021294UL, 3577633375UL, 1190371491UL, 3849126897UL, 1842973671UL, 1614215215UL, 1854555112UL, 410746791UL, 3737368614UL, 858809173UL, 525745365UL, 3622671731UL, +1542325976UL, 716011303UL, 3443810690UL, 566299749UL, 296197011UL, 1649301063UL, 2930433345UL, 291178098UL, 1987532525UL, 1056271538UL, 3955511579UL, 365684723UL, 1705418876UL, 2321222760UL, 1258535671UL, 2753632862UL, 988348831UL, 94258998UL, 2986060366UL, 3669902097UL, 3314106168UL, 2961955291UL, 262703473UL, 604452796UL, 1654433938UL, 3590367097UL, 1706522206UL, 1203054806UL, 1894894069UL, 2448138887UL, 2340683261UL, 3231505231UL, +619636751UL, 6680729UL, 1454088394UL, 2785398766UL, 3355878253UL, 3433356888UL, 2025591660UL, 689323470UL, 1608451840UL, 2555219983UL, 903319808UL, 3430384385UL, 1603842392UL, 645164419UL, 1356500860UL, 1661983738UL, 2108736152UL, 2814639423UL, 2260224548UL, 1430817627UL, 517007606UL, 2973658959UL, 1938805701UL, 1636004496UL, 3684889351UL, 3873926653UL, 2283691941UL, 4238900666UL, 1345251011UL, 1137299679UL, 848527832UL, 45551112UL, +108793827UL, 3576574608UL, 1353191605UL, 4166891919UL, 3776615962UL, 3780897861UL, 183447754UL, 701389744UL, 841917592UL, 3830639316UL, 3036602746UL, 2109289891UL, 3122896007UL, 1090761479UL, 1931255897UL, 3499985398UL, 2212730874UL, 2579826431UL, 2436217134UL, 3272166055UL, 3520354700UL, 55934784UL, 3764758228UL, 1501128342UL, 1567864246UL, 1601010847UL, 516550987UL, 3268308948UL, 3337564231UL, 3918802424UL, 2704241781UL, 3973484473UL, +2098537451UL, 51515980UL, 3551394489UL, 3602010532UL, 4251661633UL, 2273586703UL, 376085505UL, 885459498UL, 2922957328UL, 3190791788UL, 2165301314UL, 2332030190UL, 3197056515UL, 1649666443UL, 2991976613UL, 2992780663UL, 3027279789UL, 2385348906UL, 2848531519UL, 1399789494UL, 661805703UL, 3782305562UL, 2163075465UL, 320781315UL, 1942736967UL, 2024733363UL, 485434612UL, 2680597981UL, 3598892066UL, 4122704494UL, 3834948354UL, 1435892840UL, +2499644163UL, 2704575422UL, 2579557838UL, 673530532UL, 493730767UL, 1124557747UL, 1908629439UL, 2821949504UL, 1743112513UL, 2849457841UL, 2344409314UL, 3479159262UL, 4260973770UL, 2991970754UL, 3812641863UL, 2229319917UL, 2466968521UL, 1766353737UL, 3216591612UL, 2113272648UL, 364370737UL, 1893001758UL, 2608875275UL, 4224057183UL, 3546705413UL, 1999778009UL, 348872225UL, 2470564216UL, 1417878284UL, 2709790112UL, 3579129936UL, 2137971615UL, +4046639861UL, 2841156930UL, 391544737UL, 2056567354UL, 737657378UL, 3877904725UL, 578930752UL, 1759172471UL, 3383278785UL, 1047197514UL, 649468151UL, 3452867243UL, 1792089520UL, 63936215UL, 3909143729UL, 3753489875UL, 734314122UL, 2490530916UL, 3043874586UL, 1504812057UL, 59001199UL, 2493748676UL, 2552438622UL, 1889694845UL, 3715397860UL, 2817245010UL, 3841049206UL, 816106718UL, 2176130406UL, 640254735UL, 12376903UL, 3000264936UL, +3304116079UL, 1620334094UL, 2109391765UL, 1348210951UL, 2237645681UL, 1207768272UL, 1562894669UL, 2156631655UL, 1387193235UL, 3154858817UL, 633510901UL, 2312190757UL, 402878244UL, 2501565021UL, 2984409334UL, 4167491216UL, 3614267292UL, 3078552271UL, 971722322UL, 3065543880UL, 2307584190UL, 491480322UL, 2068673112UL, 1929780632UL, 178549964UL, 983979983UL, 2769314886UL, 4214442042UL, 2977609682UL, 25450683UL, 3075212658UL, 1571149568UL, +3531670561UL, 42782504UL, 425601306UL, 428715214UL, 497250251UL, 693520802UL, 166426814UL, 1786382125UL, 2712003995UL, 3610802197UL, 2076490757UL, 404822980UL, 3953184772UL, 1655231947UL, 3594351577UL, 3068232274UL, 3771730346UL, 4110519574UL, 3534704897UL, 2375277865UL, 3597780202UL, 3472676002UL, 1350276449UL, 3218248239UL, 3589255283UL, 3253132633UL, 1769885529UL, 3792812294UL, 120332643UL, 1219374788UL, 3608889019UL, 2386099811UL, +858495304UL, 1284785543UL, 331370962UL, 2259419662UL, 2519864134UL, 3194739432UL, 2669074511UL, 2565559140UL, 3378072004UL, 2647801475UL, 265068954UL, 1464416963UL, 1232787612UL, 4160089759UL, 2510685972UL, 670300081UL, 2509357766UL, 1981891975UL, 4161588397UL, 1371924626UL, 44760868UL, 634955171UL, 1187096933UL, 3324788972UL, 3576888559UL, 2801347752UL, 3730298395UL, 1702170762UL, 4206083415UL, 741409141UL, 3649731355UL, 1025429529UL, +}, +{ +91444490UL, 628576944UL, 4069219862UL, 2253058925UL, 492354082UL, 1191182242UL, 1565180119UL, 2257613723UL, 456055162UL, 605712223UL, 953365104UL, 3104638527UL, 1133984729UL, 2662828416UL, 2134948274UL, 1921384447UL, 843719355UL, 588432962UL, 1734575434UL, 2924140067UL, 483396548UL, 3848838894UL, 3155476556UL, 1760928304UL, 4168059840UL, 3279827269UL, 2644461735UL, 4168565656UL, 3951563569UL, 1276805504UL, 1708974143UL, 1878547888UL, +3465220024UL, 3062086782UL, 2801401651UL, 1510428126UL, 716404149UL, 1646021208UL, 3534932385UL, 1186585561UL, 651997355UL, 282914223UL, 352224857UL, 3764407517UL, 1059868753UL, 1971798134UL, 978904005UL, 976413661UL, 4039544152UL, 498989693UL, 2565125471UL, 2782642813UL, 3537961025UL, 1194967362UL, 169217024UL, 3491609UL, 1319592872UL, 1630206561UL, 2497130840UL, 1685008996UL, 2828944016UL, 3301346775UL, 2893072371UL, 2606559798UL, +4026138031UL, 2664450619UL, 691091062UL, 1079640113UL, 1417637732UL, 4081852209UL, 2197910648UL, 2310382370UL, 1000957047UL, 959936499UL, 2844551811UL, 2272766890UL, 31122394UL, 2742925483UL, 1121884686UL, 57929089UL, 2468361281UL, 2982007782UL, 2371576893UL, 177782593UL, 3603584577UL, 672057044UL, 2108452841UL, 1671338057UL, 3386908223UL, 1243029765UL, 805157552UL, 1271858417UL, 1621249501UL, 1804851492UL, 1321010403UL, 751773221UL, +1517221627UL, 822709871UL, 104533154UL, 3578182264UL, 640541709UL, 421086624UL, 4233576392UL, 3729339369UL, 197460644UL, 773140636UL, 2158026018UL, 1756785611UL, 4011575991UL, 3569445500UL, 736117181UL, 2456162322UL, 1168189787UL, 3651312675UL, 1070291988UL, 268231205UL, 541474497UL, 3316168972UL, 3546990856UL, 830417208UL, 725960194UL, 2044207227UL, 3188997938UL, 2383298579UL, 3350316374UL, 3575011225UL, 1553111865UL, 1285013027UL, +749371711UL, 766611716UL, 598195098UL, 2139882719UL, 2062405428UL, 3634702446UL, 3015263295UL, 223311969UL, 2622859522UL, 3888492701UL, 2955257225UL, 582625650UL, 3563756446UL, 2886083960UL, 1907546514UL, 454650902UL, 3287277541UL, 625828138UL, 2991888140UL, 1935326370UL, 4031152256UL, 702881509UL, 1427632724UL, 1345475301UL, 2577560804UL, 2858595147UL, 2533191188UL, 185662179UL, 536505093UL, 3747894147UL, 111551030UL, 370373207UL, +2293908590UL, 91444490UL, 628576944UL, 4069219862UL, 2253058925UL, 1671484924UL, 1191182242UL, 1565180119UL, 2257613723UL, 456055162UL, 3411094744UL, 953365104UL, 3104638527UL, 1133984729UL, 2662828416UL, 2000630022UL, 1921384447UL, 843719355UL, 588432962UL, 1734575434UL, 3293926122UL, 483396548UL, 3848838894UL, 3155476556UL, 1760928304UL, 146876953UL, 3279827269UL, 2644461735UL, 4168565656UL, 3951563569UL, 3976156700UL, 1708974143UL, +1878547888UL, 3465220024UL, 3062086782UL, 1999154400UL, 1510428126UL, 716404149UL, 1646021208UL, 3534932385UL, 2479551429UL, 651997355UL, 282914223UL, 352224857UL, 3764407517UL, 1275979651UL, 1971798134UL, 978904005UL, 976413661UL, 4039544152UL, 300654823UL, 2565125471UL, 2782642813UL, 3537961025UL, 1194967362UL, 3123973648UL, 3491609UL, 1319592872UL, 1630206561UL, 2497130840UL, 1437913158UL, 2828944016UL, 3301346775UL, 2893072371UL, +2606559798UL, 2153172585UL, 2664450619UL, 691091062UL, 1079640113UL, 1417637732UL, 17137237UL, 2197910648UL, 2310382370UL, 1000957047UL, 959936499UL, 802137134UL, 2272766890UL, 31122394UL, 2742925483UL, 1121884686UL, 3909775167UL, 2468361281UL, 2982007782UL, 2371576893UL, 177782593UL, 3319492525UL, 672057044UL, 2108452841UL, 1671338057UL, 3386908223UL, 1878151473UL, 805157552UL, 1271858417UL, 1621249501UL, 1804851492UL, 3215921223UL, +751773221UL, 1517221627UL, 822709871UL, 104533154UL, 361845001UL, 640541709UL, 421086624UL, 4233576392UL, 3729339369UL, 2655936801UL, 773140636UL, 2158026018UL, 1756785611UL, 4011575991UL, 587202971UL, 736117181UL, 2456162322UL, 1168189787UL, 3651312675UL, 2517883370UL, 268231205UL, 541474497UL, 3316168972UL, 3546990856UL, 2037251305UL, 725960194UL, 2044207227UL, 3188997938UL, 2383298579UL, 2665008587UL, 3575011225UL, 1553111865UL, +1285013027UL, 749371711UL, 2163964019UL, 598195098UL, 2139882719UL, 2062405428UL, 3634702446UL, 2788202059UL, 223311969UL, 2622859522UL, 3888492701UL, 2955257225UL, 740986174UL, 3563756446UL, 2886083960UL, 1907546514UL, 454650902UL, 2426323587UL, 625828138UL, 2991888140UL, 1935326370UL, 4031152256UL, 1831149435UL, 1427632724UL, 1345475301UL, 2577560804UL, 2858595147UL, 3977153945UL, 185662179UL, 536505093UL, 3747894147UL, 111551030UL, +4131587422UL, 2293908590UL, 91444490UL, 628576944UL, 4069219862UL, 2408189350UL, 1671484924UL, 1191182242UL, 1565180119UL, 2257613723UL, 1338069254UL, 3411094744UL, 953365104UL, 3104638527UL, 1133984729UL, 631497759UL, 2000630022UL, 1921384447UL, 843719355UL, 588432962UL, 3280318959UL, 3293926122UL, 483396548UL, 3848838894UL, 3155476556UL, 1777918163UL, 146876953UL, 3279827269UL, 2644461735UL, 4168565656UL, 2786264663UL, 3976156700UL, +1708974143UL, 1878547888UL, 3465220024UL, 2793923820UL, 1999154400UL, 1510428126UL, 716404149UL, 1646021208UL, 3102243824UL, 2479551429UL, 651997355UL, 282914223UL, 352224857UL, 3767702588UL, 1275979651UL, 1971798134UL, 978904005UL, 976413661UL, 1951622548UL, 300654823UL, 2565125471UL, 2782642813UL, 3537961025UL, 2186817324UL, 3123973648UL, 3491609UL, 1319592872UL, 1630206561UL, 1075424534UL, 1437913158UL, 2828944016UL, 3301346775UL, +2893072371UL, 207992406UL, 2153172585UL, 2664450619UL, 691091062UL, 1079640113UL, 3114255216UL, 17137237UL, 2197910648UL, 2310382370UL, 1000957047UL, 2548008553UL, 802137134UL, 2272766890UL, 31122394UL, 2742925483UL, 4069482373UL, 3909775167UL, 2468361281UL, 2982007782UL, 2371576893UL, 2807823912UL, 3319492525UL, 672057044UL, 2108452841UL, 1671338057UL, 12831353UL, 1878151473UL, 805157552UL, 1271858417UL, 1621249501UL, 461887094UL, +3215921223UL, 751773221UL, 1517221627UL, 822709871UL, 1317394918UL, 361845001UL, 640541709UL, 421086624UL, 4233576392UL, 3385587450UL, 2655936801UL, 773140636UL, 2158026018UL, 1756785611UL, 1475601973UL, 587202971UL, 736117181UL, 2456162322UL, 1168189787UL, 911455077UL, 2517883370UL, 268231205UL, 541474497UL, 3316168972UL, 1500275507UL, 2037251305UL, 725960194UL, 2044207227UL, 3188997938UL, 2036633808UL, 2665008587UL, 3575011225UL, +1553111865UL, 1285013027UL, 87868216UL, 2163964019UL, 598195098UL, 2139882719UL, 2062405428UL, 517907301UL, 2788202059UL, 223311969UL, 2622859522UL, 3888492701UL, 3926046234UL, 740986174UL, 3563756446UL, 2886083960UL, 1907546514UL, 1911066215UL, 2426323587UL, 625828138UL, 2991888140UL, 1935326370UL, 2031853435UL, 1831149435UL, 1427632724UL, 1345475301UL, 2577560804UL, 3509674153UL, 3977153945UL, 185662179UL, 536505093UL, 3747894147UL, +1711714600UL, 4131587422UL, 2293908590UL, 91444490UL, 628576944UL, 3370678255UL, 2408189350UL, 1671484924UL, 1191182242UL, 1565180119UL, 3786239592UL, 1338069254UL, 3411094744UL, 953365104UL, 3104638527UL, 3659647225UL, 631497759UL, 2000630022UL, 1921384447UL, 843719355UL, 3364831282UL, 3280318959UL, 3293926122UL, 483396548UL, 3848838894UL, 3131266478UL, 1777918163UL, 146876953UL, 3279827269UL, 2644461735UL, 4156372383UL, 2786264663UL, +3976156700UL, 1708974143UL, 1878547888UL, 2168041590UL, 2793923820UL, 1999154400UL, 1510428126UL, 716404149UL, 3392113666UL, 3102243824UL, 2479551429UL, 651997355UL, 282914223UL, 2085613514UL, 3767702588UL, 1275979651UL, 1971798134UL, 978904005UL, 503506384UL, 1951622548UL, 300654823UL, 2565125471UL, 2782642813UL, 1458431750UL, 2186817324UL, 3123973648UL, 3491609UL, 1319592872UL, 452433679UL, 1075424534UL, 1437913158UL, 2828944016UL, +3301346775UL, 2333281307UL, 207992406UL, 2153172585UL, 2664450619UL, 691091062UL, 3553502652UL, 3114255216UL, 17137237UL, 2197910648UL, 2310382370UL, 3153689868UL, 2548008553UL, 802137134UL, 2272766890UL, 31122394UL, 468580641UL, 4069482373UL, 3909775167UL, 2468361281UL, 2982007782UL, 1445286890UL, 2807823912UL, 3319492525UL, 672057044UL, 2108452841UL, 1755577669UL, 12831353UL, 1878151473UL, 805157552UL, 1271858417UL, 2623540912UL, +461887094UL, 3215921223UL, 751773221UL, 1517221627UL, 3922191946UL, 1317394918UL, 361845001UL, 640541709UL, 421086624UL, 2173849516UL, 3385587450UL, 2655936801UL, 773140636UL, 2158026018UL, 1085377158UL, 1475601973UL, 587202971UL, 736117181UL, 2456162322UL, 2158960374UL, 911455077UL, 2517883370UL, 268231205UL, 541474497UL, 943191315UL, 1500275507UL, 2037251305UL, 725960194UL, 2044207227UL, 2481150802UL, 2036633808UL, 2665008587UL, +3575011225UL, 1553111865UL, 2301231777UL, 87868216UL, 2163964019UL, 598195098UL, 2139882719UL, 2007840238UL, 517907301UL, 2788202059UL, 223311969UL, 2622859522UL, 151920263UL, 3926046234UL, 740986174UL, 3563756446UL, 2886083960UL, 1338937928UL, 1911066215UL, 2426323587UL, 625828138UL, 2991888140UL, 2652286195UL, 2031853435UL, 1831149435UL, 1427632724UL, 1345475301UL, 289801789UL, 3509674153UL, 3977153945UL, 185662179UL, 536505093UL, +2727322952UL, 3980498348UL, 2529622213UL, 1903052964UL, 3564714651UL, 2281240568UL, 533384122UL, 277613480UL, 1815540358UL, 282763841UL, 3669112623UL, 2572859425UL, 195220178UL, 1210883545UL, 2359703600UL, 1187537824UL, 675732974UL, 325036095UL, 708091465UL, 2556854604UL, 701006284UL, 2378459191UL, 1863513103UL, 2690918197UL, 4237307694UL, 1356483501UL, 2160905652UL, 521809106UL, 974368613UL, 3136010957UL, 2722488678UL, 3711515637UL, +2296341459UL, 4233729945UL, 1196247571UL, 3031398071UL, 515543502UL, 1314129776UL, 3235373306UL, 1303165859UL, 1820568009UL, 559099351UL, 186876368UL, 1076102111UL, 1218809551UL, 1790301111UL, 4130210229UL, 768125358UL, 1132864749UL, 4262563773UL, 2294411020UL, 4092943985UL, 2558108246UL, 3737664949UL, 2219923393UL, 724326159UL, 4134105682UL, 4188752746UL, 3615233671UL, 1526018731UL, 2281637916UL, 2459490295UL, 3637342666UL, 777862587UL, +39962002UL, 3772005832UL, 997473319UL, 574843584UL, 3356551974UL, 1265234427UL, 1698059437UL, 534747571UL, 1465532164UL, 3263029035UL, 534512444UL, 2343092827UL, 2375685652UL, 2497926141UL, 2377933621UL, 2212335180UL, 261114084UL, 172755755UL, 2737085495UL, 2225257145UL, 148605658UL, 1353911796UL, 357753009UL, 1778732943UL, 497635558UL, 4136467976UL, 2837964962UL, 4045039047UL, 2485296762UL, 1587587183UL, 4042904168UL, 3184240963UL, +2393293696UL, 915444966UL, 2299938515UL, 3351580749UL, 506575598UL, 1541916825UL, 3465300401UL, 525927458UL, 681152801UL, 331660975UL, 3624685846UL, 2994172100UL, 3274369082UL, 3638287602UL, 815689760UL, 1710961092UL, 2775607076UL, 2175058103UL, 3252688367UL, 2936890483UL, 2746319120UL, 2736754UL, 1646031035UL, 2448701214UL, 2886833213UL, 3689830606UL, 3292798106UL, 300773646UL, 3125160783UL, 1247453205UL, 2746275624UL, 4011063775UL, +904135764UL, 876847374UL, 366267234UL, 2541269205UL, 131376648UL, 1805948133UL, 3383589530UL, 2350119829UL, 2513170439UL, 4096158499UL, 4229211520UL, 2992048272UL, 1338522080UL, 1187391335UL, 2898563453UL, 2163088451UL, 1417971677UL, 2047421551UL, 902282791UL, 1143943232UL, 3568431811UL, 4059861993UL, 193362198UL, 2509297125UL, 3968551582UL, 2175686117UL, 3568936881UL, 1853177468UL, 2134063169UL, 2919389416UL, 1124914545UL, 1209806738UL, +}, +{ +1199972651UL, 1035834631UL, 3177798370UL, 860834162UL, 3741677748UL, 3780327829UL, 1693730265UL, 1643429511UL, 559568669UL, 2758650294UL, 647308222UL, 3901603996UL, 1778653821UL, 3618523672UL, 2154201067UL, 4261179460UL, 3285764480UL, 3334002738UL, 3215795953UL, 91368462UL, 1883994950UL, 1506873376UL, 1527780962UL, 4046354597UL, 4081676034UL, 2389066602UL, 1574939945UL, 427845396UL, 2714836263UL, 1259019491UL, 2493238133UL, 2584034689UL, +3151382431UL, 2171033919UL, 176883719UL, 2031844862UL, 1272380790UL, 1298975901UL, 4087222847UL, 1524000054UL, 311436877UL, 3627785554UL, 1889491722UL, 2938069193UL, 2771940687UL, 2756955968UL, 4289348777UL, 263514583UL, 887207028UL, 3522902525UL, 2273246349UL, 835377715UL, 2897243319UL, 204645450UL, 1775911983UL, 639470242UL, 2856296318UL, 3032942383UL, 2845501282UL, 1979082575UL, 202834023UL, 1876303820UL, 1434703409UL, 4240524132UL, +848853780UL, 4188621628UL, 928095314UL, 876412914UL, 3446576392UL, 3235688990UL, 4021419931UL, 2483628986UL, 3155781890UL, 399997246UL, 1642535200UL, 3872575068UL, 1577956550UL, 3606228634UL, 609914462UL, 653194726UL, 4048067248UL, 2500767965UL, 1125167825UL, 3707628088UL, 1819135158UL, 1875618971UL, 3865851141UL, 328215079UL, 1695889194UL, 2040280471UL, 3384684457UL, 2540504961UL, 293050253UL, 525570078UL, 2655676443UL, 1392199429UL, +3370444585UL, 1937915855UL, 2229636250UL, 247937142UL, 2534538765UL, 365841057UL, 2449431033UL, 2456532429UL, 101910696UL, 1247069485UL, 1523958293UL, 2473285670UL, 473709728UL, 3026667113UL, 2071968844UL, 324025193UL, 423064436UL, 3870800061UL, 3977393138UL, 3632553233UL, 352757977UL, 1584833348UL, 3173248650UL, 1159857686UL, 1501841977UL, 1751860798UL, 617281070UL, 1958012761UL, 4031667102UL, 3232142321UL, 3087428595UL, 2380824676UL, +1194087757UL, 1542961747UL, 4163350364UL, 1721646249UL, 1672791861UL, 2900511710UL, 24973500UL, 1705444176UL, 713642505UL, 3017719513UL, 2090715200UL, 3521434070UL, 37117223UL, 1948295454UL, 3055840561UL, 3476120789UL, 3994249388UL, 527899063UL, 4285770666UL, 1075524023UL, 2594223535UL, 392943522UL, 171012646UL, 3515750082UL, 3414659054UL, 3501852926UL, 1493283737UL, 2662104279UL, 2033464928UL, 90134967UL, 363058647UL, 3289266998UL, +2470752727UL, 1199972651UL, 1035834631UL, 3177798370UL, 860834162UL, 1791097822UL, 3780327829UL, 1693730265UL, 1643429511UL, 559568669UL, 3503319486UL, 647308222UL, 3901603996UL, 1778653821UL, 3618523672UL, 4294594427UL, 4261179460UL, 3285764480UL, 3334002738UL, 3215795953UL, 212518363UL, 1883994950UL, 1506873376UL, 1527780962UL, 4046354597UL, 2398655600UL, 2389066602UL, 1574939945UL, 427845396UL, 2714836263UL, 2744363872UL, 2493238133UL, +2584034689UL, 3151382431UL, 2171033919UL, 2787053497UL, 2031844862UL, 1272380790UL, 1298975901UL, 4087222847UL, 2342953154UL, 311436877UL, 3627785554UL, 1889491722UL, 2938069193UL, 2026656505UL, 2756955968UL, 4289348777UL, 263514583UL, 887207028UL, 2097276163UL, 2273246349UL, 835377715UL, 2897243319UL, 204645450UL, 4233399907UL, 639470242UL, 2856296318UL, 3032942383UL, 2845501282UL, 28260330UL, 202834023UL, 1876303820UL, 1434703409UL, +4240524132UL, 2455670466UL, 4188621628UL, 928095314UL, 876412914UL, 3446576392UL, 117581687UL, 4021419931UL, 2483628986UL, 3155781890UL, 399997246UL, 4254101087UL, 3872575068UL, 1577956550UL, 3606228634UL, 609914462UL, 4003279048UL, 4048067248UL, 2500767965UL, 1125167825UL, 3707628088UL, 922020515UL, 1875618971UL, 3865851141UL, 328215079UL, 1695889194UL, 625773097UL, 3384684457UL, 2540504961UL, 293050253UL, 525570078UL, 2592805114UL, +1392199429UL, 3370444585UL, 1937915855UL, 2229636250UL, 3190958614UL, 2534538765UL, 365841057UL, 2449431033UL, 2456532429UL, 3778669305UL, 1247069485UL, 1523958293UL, 2473285670UL, 473709728UL, 720895889UL, 2071968844UL, 324025193UL, 423064436UL, 3870800061UL, 3535536111UL, 3632553233UL, 352757977UL, 1584833348UL, 3173248650UL, 2649344603UL, 1501841977UL, 1751860798UL, 617281070UL, 1958012761UL, 778965559UL, 3232142321UL, 3087428595UL, +2380824676UL, 1194087757UL, 3880222002UL, 4163350364UL, 1721646249UL, 1672791861UL, 2900511710UL, 702936770UL, 1705444176UL, 713642505UL, 3017719513UL, 2090715200UL, 1477858694UL, 37117223UL, 1948295454UL, 3055840561UL, 3476120789UL, 464173532UL, 527899063UL, 4285770666UL, 1075524023UL, 2594223535UL, 2872629966UL, 171012646UL, 3515750082UL, 3414659054UL, 3501852926UL, 1631555059UL, 2662104279UL, 2033464928UL, 90134967UL, 363058647UL, +4112991722UL, 2470752727UL, 1199972651UL, 1035834631UL, 3177798370UL, 4152098951UL, 1791097822UL, 3780327829UL, 1693730265UL, 1643429511UL, 153020604UL, 3503319486UL, 647308222UL, 3901603996UL, 1778653821UL, 221887019UL, 4294594427UL, 4261179460UL, 3285764480UL, 3334002738UL, 3340918862UL, 212518363UL, 1883994950UL, 1506873376UL, 1527780962UL, 430180116UL, 2398655600UL, 2389066602UL, 1574939945UL, 427845396UL, 1683639957UL, 2744363872UL, +2493238133UL, 2584034689UL, 3151382431UL, 752704472UL, 2787053497UL, 2031844862UL, 1272380790UL, 1298975901UL, 1528220628UL, 2342953154UL, 311436877UL, 3627785554UL, 1889491722UL, 2576495467UL, 2026656505UL, 2756955968UL, 4289348777UL, 263514583UL, 3778019638UL, 2097276163UL, 2273246349UL, 835377715UL, 2897243319UL, 1060067446UL, 4233399907UL, 639470242UL, 2856296318UL, 3032942383UL, 2351047932UL, 28260330UL, 202834023UL, 1876303820UL, +1434703409UL, 3094305336UL, 2455670466UL, 4188621628UL, 928095314UL, 876412914UL, 3785385583UL, 117581687UL, 4021419931UL, 2483628986UL, 3155781890UL, 1867816730UL, 4254101087UL, 3872575068UL, 1577956550UL, 3606228634UL, 3081878598UL, 4003279048UL, 4048067248UL, 2500767965UL, 1125167825UL, 928465955UL, 922020515UL, 1875618971UL, 3865851141UL, 328215079UL, 173810260UL, 625773097UL, 3384684457UL, 2540504961UL, 293050253UL, 2645143254UL, +2592805114UL, 1392199429UL, 3370444585UL, 1937915855UL, 162781360UL, 3190958614UL, 2534538765UL, 365841057UL, 2449431033UL, 3105377832UL, 3778669305UL, 1247069485UL, 1523958293UL, 2473285670UL, 800971948UL, 720895889UL, 2071968844UL, 324025193UL, 423064436UL, 52577992UL, 3535536111UL, 3632553233UL, 352757977UL, 1584833348UL, 3305908059UL, 2649344603UL, 1501841977UL, 1751860798UL, 617281070UL, 264880505UL, 778965559UL, 3232142321UL, +3087428595UL, 2380824676UL, 1127761012UL, 3880222002UL, 4163350364UL, 1721646249UL, 1672791861UL, 2368512339UL, 702936770UL, 1705444176UL, 713642505UL, 3017719513UL, 197200752UL, 1477858694UL, 37117223UL, 1948295454UL, 3055840561UL, 1588372042UL, 464173532UL, 527899063UL, 4285770666UL, 1075524023UL, 2124039914UL, 2872629966UL, 171012646UL, 3515750082UL, 3414659054UL, 818571456UL, 1631555059UL, 2662104279UL, 2033464928UL, 90134967UL, +952712086UL, 4112991722UL, 2470752727UL, 1199972651UL, 1035834631UL, 888975816UL, 4152098951UL, 1791097822UL, 3780327829UL, 1693730265UL, 3406785510UL, 153020604UL, 3503319486UL, 647308222UL, 3901603996UL, 3753248472UL, 221887019UL, 4294594427UL, 4261179460UL, 3285764480UL, 1861431346UL, 3340918862UL, 212518363UL, 1883994950UL, 1506873376UL, 2695939612UL, 430180116UL, 2398655600UL, 2389066602UL, 1574939945UL, 2852159074UL, 1683639957UL, +2744363872UL, 2493238133UL, 2584034689UL, 1952065633UL, 752704472UL, 2787053497UL, 2031844862UL, 1272380790UL, 3530505866UL, 1528220628UL, 2342953154UL, 311436877UL, 3627785554UL, 3410473245UL, 2576495467UL, 2026656505UL, 2756955968UL, 4289348777UL, 2856163034UL, 3778019638UL, 2097276163UL, 2273246349UL, 835377715UL, 3127280755UL, 1060067446UL, 4233399907UL, 639470242UL, 2856296318UL, 2615775011UL, 2351047932UL, 28260330UL, 202834023UL, +1876303820UL, 619308202UL, 3094305336UL, 2455670466UL, 4188621628UL, 928095314UL, 3764894047UL, 3785385583UL, 117581687UL, 4021419931UL, 2483628986UL, 3759839215UL, 1867816730UL, 4254101087UL, 3872575068UL, 1577956550UL, 1687107439UL, 3081878598UL, 4003279048UL, 4048067248UL, 2500767965UL, 2804044146UL, 928465955UL, 922020515UL, 1875618971UL, 3865851141UL, 2359176389UL, 173810260UL, 625773097UL, 3384684457UL, 2540504961UL, 3665420733UL, +2645143254UL, 2592805114UL, 1392199429UL, 3370444585UL, 1604709429UL, 162781360UL, 3190958614UL, 2534538765UL, 365841057UL, 3843585067UL, 3105377832UL, 3778669305UL, 1247069485UL, 1523958293UL, 293374051UL, 800971948UL, 720895889UL, 2071968844UL, 324025193UL, 3342361801UL, 52577992UL, 3535536111UL, 3632553233UL, 352757977UL, 1386594581UL, 3305908059UL, 2649344603UL, 1501841977UL, 1751860798UL, 3160423601UL, 264880505UL, 778965559UL, +3232142321UL, 3087428595UL, 3814775120UL, 1127761012UL, 3880222002UL, 4163350364UL, 1721646249UL, 3640773034UL, 2368512339UL, 702936770UL, 1705444176UL, 713642505UL, 1717761787UL, 197200752UL, 1477858694UL, 37117223UL, 1948295454UL, 896215772UL, 1588372042UL, 464173532UL, 527899063UL, 4285770666UL, 3441409029UL, 2124039914UL, 2872629966UL, 171012646UL, 3515750082UL, 2216687886UL, 818571456UL, 1631555059UL, 2662104279UL, 2033464928UL, +369438400UL, 329003658UL, 1503365029UL, 4215790910UL, 3264377550UL, 733526983UL, 2935318632UL, 1792331479UL, 608347530UL, 392723097UL, 1330445854UL, 3473004271UL, 1267636682UL, 2150566972UL, 2664910943UL, 2591861637UL, 409769584UL, 2943326880UL, 3746302819UL, 3162268832UL, 1028663260UL, 3206607045UL, 832105292UL, 2119405275UL, 538318455UL, 2981192295UL, 861775416UL, 609718403UL, 3531204230UL, 1904759571UL, 1262633751UL, 2375133081UL, +460454984UL, 946700253UL, 3763898311UL, 1571175213UL, 3124410107UL, 2413420216UL, 2664177543UL, 3241803820UL, 3968067371UL, 1234860999UL, 1130471500UL, 772727786UL, 247203117UL, 576455235UL, 246297007UL, 2027348597UL, 764933887UL, 3812479771UL, 1825807084UL, 4072281412UL, 2156865781UL, 1286484847UL, 1966749063UL, 2479269303UL, 423506843UL, 3070938758UL, 653091413UL, 2267423132UL, 2004263526UL, 1374490719UL, 3871990628UL, 841138314UL, +1260317857UL, 3887432433UL, 4025147569UL, 764233331UL, 1794763428UL, 3005903468UL, 877926770UL, 2466593927UL, 2971729561UL, 3203070565UL, 4198500026UL, 815665759UL, 2434508139UL, 1840456368UL, 2279000427UL, 17077200UL, 3178380570UL, 990304199UL, 3578008580UL, 1965763660UL, 1640352477UL, 750159594UL, 2047409402UL, 3576308245UL, 544920564UL, 1730124869UL, 1194761386UL, 3280315505UL, 147334027UL, 2870674244UL, 2076860776UL, 1100947675UL, +2482772161UL, 401966468UL, 1610650855UL, 193868446UL, 3808157106UL, 1509130117UL, 1324484736UL, 3852893217UL, 1059179497UL, 4053543778UL, 2557844172UL, 3282312002UL, 682550058UL, 4281899173UL, 137171998UL, 3239159214UL, 2258610918UL, 426724741UL, 3502660993UL, 135977383UL, 429929363UL, 3984458137UL, 964026748UL, 2182019070UL, 3836562946UL, 515026869UL, 359030455UL, 1301694917UL, 2300414803UL, 2364654981UL, 3804876710UL, 171119249UL, +2646785698UL, 4283509387UL, 3628087763UL, 1748227044UL, 3037141234UL, 3000413256UL, 23007314UL, 3598880509UL, 4160517314UL, 112205578UL, 1677675411UL, 734881643UL, 2830770338UL, 3470317145UL, 3306806569UL, 2635040943UL, 2671367560UL, 3528996498UL, 3878886478UL, 3114253828UL, 2721384408UL, 3175226991UL, 1393767271UL, 2651623266UL, 3767978376UL, 1269699398UL, 1100964192UL, 4169085845UL, 2086718107UL, 1286251099UL, 764751784UL, 3006878591UL, +}, +{ +2565473087UL, 1149521056UL, 3529037691UL, 630435548UL, 73598765UL, 1467331930UL, 3988027050UL, 2771962200UL, 91261543UL, 980989218UL, 2227515435UL, 236831608UL, 2872772569UL, 2330469327UL, 1654035853UL, 2883791516UL, 4170143763UL, 126418114UL, 127789935UL, 2114249438UL, 2933346767UL, 639483386UL, 1532399845UL, 2182422151UL, 741069317UL, 2376371063UL, 3398508789UL, 3828295651UL, 3963199356UL, 4156483769UL, 4206759111UL, 1266176088UL, +3210273687UL, 432131993UL, 667709537UL, 874477513UL, 2304714957UL, 629309008UL, 116453438UL, 3051811727UL, 3490241985UL, 3355968243UL, 2304043871UL, 2724990029UL, 1095724699UL, 2408437363UL, 1433161037UL, 3245468546UL, 2494529842UL, 4204170637UL, 1966342448UL, 3092333073UL, 1861880941UL, 3990012367UL, 3710334908UL, 2526395471UL, 1884691351UL, 2145882162UL, 2561288457UL, 2253122309UL, 1154858044UL, 1643256991UL, 3172857504UL, 1096492713UL, +2848827103UL, 799826424UL, 3094672168UL, 3535834360UL, 4213256737UL, 1131757994UL, 520495112UL, 575315345UL, 3823364867UL, 2424349582UL, 3604795017UL, 310789314UL, 4207205257UL, 553462404UL, 2918228443UL, 2568360580UL, 3863565851UL, 874197736UL, 3329267685UL, 1186352580UL, 3928193054UL, 1780200631UL, 4088289456UL, 3323217870UL, 2758854947UL, 3111637417UL, 990374143UL, 2080149357UL, 4047813631UL, 2019887940UL, 578660736UL, 2145680301UL, +2328411541UL, 1572704242UL, 405739686UL, 1869350271UL, 2046317220UL, 4021497634UL, 1385163990UL, 1935250885UL, 1132987169UL, 581690993UL, 3172043012UL, 628071512UL, 2851125739UL, 2735324847UL, 2847267504UL, 3408334906UL, 3352976111UL, 706277272UL, 2971786942UL, 2811957324UL, 3578703606UL, 1126685543UL, 2671169997UL, 31952251UL, 2802110464UL, 2391618856UL, 3031260674UL, 1165714541UL, 2411388800UL, 2825634835UL, 101928462UL, 477629709UL, +4257022506UL, 3281706767UL, 2576087732UL, 736533968UL, 2543083137UL, 3430523686UL, 3272172013UL, 3056925798UL, 341993500UL, 406782950UL, 1770032304UL, 125786076UL, 1321359723UL, 2901696227UL, 1890958265UL, 3610842776UL, 1772227311UL, 1564088598UL, 914173231UL, 3734092059UL, 1652333721UL, 2386645282UL, 329706426UL, 1022239203UL, 1832393502UL, 4064995802UL, 3497852986UL, 1046436763UL, 366391010UL, 2237068647UL, 2887356463UL, 304718827UL, +3969799795UL, 2565473087UL, 1149521056UL, 3529037691UL, 630435548UL, 3758124054UL, 1467331930UL, 3988027050UL, 2771962200UL, 91261543UL, 836545831UL, 2227515435UL, 236831608UL, 2872772569UL, 2330469327UL, 3439193753UL, 2883791516UL, 4170143763UL, 126418114UL, 127789935UL, 1648940583UL, 2933346767UL, 639483386UL, 1532399845UL, 2182422151UL, 2470139222UL, 2376371063UL, 3398508789UL, 3828295651UL, 3963199356UL, 2997263135UL, 4206759111UL, +1266176088UL, 3210273687UL, 432131993UL, 2416600665UL, 874477513UL, 2304714957UL, 629309008UL, 116453438UL, 2586542760UL, 3490241985UL, 3355968243UL, 2304043871UL, 2724990029UL, 452934545UL, 2408437363UL, 1433161037UL, 3245468546UL, 2494529842UL, 2244403710UL, 1966342448UL, 3092333073UL, 1861880941UL, 3990012367UL, 2774994234UL, 2526395471UL, 1884691351UL, 2145882162UL, 2561288457UL, 2303702146UL, 1154858044UL, 1643256991UL, 3172857504UL, +1096492713UL, 130979316UL, 799826424UL, 3094672168UL, 3535834360UL, 4213256737UL, 935499492UL, 520495112UL, 575315345UL, 3823364867UL, 2424349582UL, 2272973265UL, 310789314UL, 4207205257UL, 553462404UL, 2918228443UL, 2613016888UL, 3863565851UL, 874197736UL, 3329267685UL, 1186352580UL, 4106984978UL, 1780200631UL, 4088289456UL, 3323217870UL, 2758854947UL, 1559861146UL, 990374143UL, 2080149357UL, 4047813631UL, 2019887940UL, 1133329900UL, +2145680301UL, 2328411541UL, 1572704242UL, 405739686UL, 63633520UL, 2046317220UL, 4021497634UL, 1385163990UL, 1935250885UL, 1762959503UL, 581690993UL, 3172043012UL, 628071512UL, 2851125739UL, 3726073981UL, 2847267504UL, 3408334906UL, 3352976111UL, 706277272UL, 3817450114UL, 2811957324UL, 3578703606UL, 1126685543UL, 2671169997UL, 2749086326UL, 2802110464UL, 2391618856UL, 3031260674UL, 1165714541UL, 2210258428UL, 2825634835UL, 101928462UL, +477629709UL, 4257022506UL, 2679409844UL, 2576087732UL, 736533968UL, 2543083137UL, 3430523686UL, 1122549807UL, 3056925798UL, 341993500UL, 406782950UL, 1770032304UL, 2617760292UL, 1321359723UL, 2901696227UL, 1890958265UL, 3610842776UL, 2666109620UL, 1564088598UL, 914173231UL, 3734092059UL, 1652333721UL, 3456779008UL, 329706426UL, 1022239203UL, 1832393502UL, 4064995802UL, 4006865520UL, 1046436763UL, 366391010UL, 2237068647UL, 2887356463UL, +1479646555UL, 3969799795UL, 2565473087UL, 1149521056UL, 3529037691UL, 2379195579UL, 3758124054UL, 1467331930UL, 3988027050UL, 2771962200UL, 1796797949UL, 836545831UL, 2227515435UL, 236831608UL, 2872772569UL, 544017308UL, 3439193753UL, 2883791516UL, 4170143763UL, 126418114UL, 3811390247UL, 1648940583UL, 2933346767UL, 639483386UL, 1532399845UL, 4165970043UL, 2470139222UL, 2376371063UL, 3398508789UL, 3828295651UL, 4066952157UL, 2997263135UL, +4206759111UL, 1266176088UL, 3210273687UL, 560560354UL, 2416600665UL, 874477513UL, 2304714957UL, 629309008UL, 2010844440UL, 2586542760UL, 3490241985UL, 3355968243UL, 2304043871UL, 855615381UL, 452934545UL, 2408437363UL, 1433161037UL, 3245468546UL, 3813880871UL, 2244403710UL, 1966342448UL, 3092333073UL, 1861880941UL, 3334256651UL, 2774994234UL, 2526395471UL, 1884691351UL, 2145882162UL, 3500193798UL, 2303702146UL, 1154858044UL, 1643256991UL, +3172857504UL, 3480843206UL, 130979316UL, 799826424UL, 3094672168UL, 3535834360UL, 915442396UL, 935499492UL, 520495112UL, 575315345UL, 3823364867UL, 2876158574UL, 2272973265UL, 310789314UL, 4207205257UL, 553462404UL, 2184663001UL, 2613016888UL, 3863565851UL, 874197736UL, 3329267685UL, 3447734684UL, 4106984978UL, 1780200631UL, 4088289456UL, 3323217870UL, 2748493470UL, 1559861146UL, 990374143UL, 2080149357UL, 4047813631UL, 2728282767UL, +1133329900UL, 2145680301UL, 2328411541UL, 1572704242UL, 3396987326UL, 63633520UL, 2046317220UL, 4021497634UL, 1385163990UL, 1582181054UL, 1762959503UL, 581690993UL, 3172043012UL, 628071512UL, 2790170929UL, 3726073981UL, 2847267504UL, 3408334906UL, 3352976111UL, 1211075015UL, 3817450114UL, 2811957324UL, 3578703606UL, 1126685543UL, 1946225412UL, 2749086326UL, 2802110464UL, 2391618856UL, 3031260674UL, 453222948UL, 2210258428UL, 2825634835UL, +101928462UL, 477629709UL, 410621659UL, 2679409844UL, 2576087732UL, 736533968UL, 2543083137UL, 1101977922UL, 1122549807UL, 3056925798UL, 341993500UL, 406782950UL, 3057489804UL, 2617760292UL, 1321359723UL, 2901696227UL, 1890958265UL, 4035843698UL, 2666109620UL, 1564088598UL, 914173231UL, 3734092059UL, 908525903UL, 3456779008UL, 329706426UL, 1022239203UL, 1832393502UL, 4024857205UL, 4006865520UL, 1046436763UL, 366391010UL, 2237068647UL, +1564059380UL, 1479646555UL, 3969799795UL, 2565473087UL, 1149521056UL, 2808155917UL, 2379195579UL, 3758124054UL, 1467331930UL, 3988027050UL, 810008243UL, 1796797949UL, 836545831UL, 2227515435UL, 236831608UL, 608273331UL, 544017308UL, 3439193753UL, 2883791516UL, 4170143763UL, 3309288977UL, 3811390247UL, 1648940583UL, 2933346767UL, 639483386UL, 1685761277UL, 4165970043UL, 2470139222UL, 2376371063UL, 3398508789UL, 4275493636UL, 4066952157UL, +2997263135UL, 4206759111UL, 1266176088UL, 333592630UL, 560560354UL, 2416600665UL, 874477513UL, 2304714957UL, 1438974661UL, 2010844440UL, 2586542760UL, 3490241985UL, 3355968243UL, 2556368068UL, 855615381UL, 452934545UL, 2408437363UL, 1433161037UL, 4061232080UL, 3813880871UL, 2244403710UL, 1966342448UL, 3092333073UL, 3412770364UL, 3334256651UL, 2774994234UL, 2526395471UL, 1884691351UL, 1414627588UL, 3500193798UL, 2303702146UL, 1154858044UL, +1643256991UL, 2245958719UL, 3480843206UL, 130979316UL, 799826424UL, 3094672168UL, 2214560871UL, 915442396UL, 935499492UL, 520495112UL, 575315345UL, 3894763683UL, 2876158574UL, 2272973265UL, 310789314UL, 4207205257UL, 3203740771UL, 2184663001UL, 2613016888UL, 3863565851UL, 874197736UL, 3371653768UL, 3447734684UL, 4106984978UL, 1780200631UL, 4088289456UL, 378312754UL, 2748493470UL, 1559861146UL, 990374143UL, 2080149357UL, 554816113UL, +2728282767UL, 1133329900UL, 2145680301UL, 2328411541UL, 4249979994UL, 3396987326UL, 63633520UL, 2046317220UL, 4021497634UL, 4185731269UL, 1582181054UL, 1762959503UL, 581690993UL, 3172043012UL, 3142596028UL, 2790170929UL, 3726073981UL, 2847267504UL, 3408334906UL, 2556911142UL, 1211075015UL, 3817450114UL, 2811957324UL, 3578703606UL, 1480672978UL, 1946225412UL, 2749086326UL, 2802110464UL, 2391618856UL, 3986823297UL, 453222948UL, 2210258428UL, +2825634835UL, 101928462UL, 26373721UL, 410621659UL, 2679409844UL, 2576087732UL, 736533968UL, 888001208UL, 1101977922UL, 1122549807UL, 3056925798UL, 341993500UL, 3243663736UL, 3057489804UL, 2617760292UL, 1321359723UL, 2901696227UL, 1652018736UL, 4035843698UL, 2666109620UL, 1564088598UL, 914173231UL, 1857869366UL, 908525903UL, 3456779008UL, 329706426UL, 1022239203UL, 2622178179UL, 4024857205UL, 4006865520UL, 1046436763UL, 366391010UL, +3722250905UL, 2880126367UL, 4102186560UL, 1642831571UL, 2222486636UL, 2572764729UL, 2046028516UL, 3507603612UL, 1703451134UL, 89818497UL, 1961701523UL, 3704300476UL, 3563143931UL, 1609575644UL, 1599081111UL, 1047838539UL, 2779312926UL, 2065354728UL, 956677756UL, 2073145924UL, 726634994UL, 119064196UL, 2046275296UL, 2105141632UL, 1023267361UL, 1204528080UL, 623740611UL, 1419328884UL, 933734693UL, 2030900835UL, 2556538268UL, 1672647866UL, +3125658368UL, 2221217376UL, 1097330641UL, 3214790630UL, 4276041578UL, 2397216525UL, 3916900004UL, 330223096UL, 3915966823UL, 2646760259UL, 1724289351UL, 4015221358UL, 2338587000UL, 110922222UL, 2314933196UL, 4026908935UL, 3272487985UL, 2685115305UL, 84271650UL, 731354215UL, 2358136447UL, 1069348214UL, 2676811333UL, 1386266810UL, 1364512901UL, 4154449904UL, 3469122709UL, 54276972UL, 560967905UL, 2363475740UL, 331250049UL, 3024074455UL, +186605617UL, 389582566UL, 1258386782UL, 703909543UL, 3968367083UL, 1553533794UL, 3699576213UL, 1145761343UL, 921983735UL, 3573813763UL, 1280477631UL, 3365842435UL, 1618458494UL, 2621328991UL, 1534006198UL, 2307669227UL, 4192335609UL, 1338050203UL, 785284052UL, 4227164890UL, 2874735332UL, 3655821191UL, 2911684671UL, 3266454200UL, 2679968625UL, 1191162601UL, 456550349UL, 1143881236UL, 3560103440UL, 2253437876UL, 3683014001UL, 1087142366UL, +1462192975UL, 1076595768UL, 3227872159UL, 1842092988UL, 148227073UL, 3812110998UL, 1317300278UL, 3068446245UL, 3376284001UL, 3164402992UL, 2730404635UL, 2848239579UL, 3008959791UL, 2901849226UL, 1234485739UL, 869158554UL, 245101118UL, 1724974650UL, 3851803199UL, 922411232UL, 3046280696UL, 3284392523UL, 3528264590UL, 2802364078UL, 381450957UL, 1741009694UL, 4222244451UL, 102929888UL, 1668474417UL, 3881791214UL, 1429483134UL, 1938365051UL, +1023690708UL, 3333855520UL, 3238705869UL, 2602245525UL, 3059586169UL, 720438965UL, 2120786297UL, 453980990UL, 1048501876UL, 4060576583UL, 3537810796UL, 3892882814UL, 691572481UL, 3899584121UL, 1582529013UL, 3260326865UL, 2358704826UL, 1607030801UL, 1035900449UL, 3442507859UL, 1406737127UL, 249758705UL, 1535363329UL, 893329207UL, 51912312UL, 3440532856UL, 3736385218UL, 295452658UL, 2379709553UL, 1647382020UL, 2363679860UL, 2998779887UL, +}, +{ +4209102573UL, 2387104994UL, 1221484586UL, 1726143957UL, 3263877318UL, 3362559187UL, 282442925UL, 2418524976UL, 3196072648UL, 3174695999UL, 2072047145UL, 2985823503UL, 2132951745UL, 2298545297UL, 2495977670UL, 1397656146UL, 2086257884UL, 3834366725UL, 3862532368UL, 3583329522UL, 1543996818UL, 2192688115UL, 3081427696UL, 2656520743UL, 8772004UL, 2476324234UL, 3600148050UL, 1168683794UL, 3219143568UL, 108768238UL, 1339513738UL, 447593731UL, +2742877256UL, 2488536667UL, 4189834432UL, 808657962UL, 2422880287UL, 390864786UL, 3381554683UL, 760628048UL, 353395922UL, 3577556262UL, 2482413928UL, 507756643UL, 839344953UL, 3505184848UL, 3945044582UL, 2414915836UL, 2313624497UL, 1832728088UL, 2036999647UL, 1369090013UL, 3264575895UL, 1096327239UL, 3483440128UL, 3999302048UL, 2761563885UL, 2882627112UL, 3126073009UL, 1749658776UL, 3152482044UL, 3040022505UL, 3249451214UL, 2933713956UL, +2861715096UL, 1314806730UL, 932941454UL, 4276317539UL, 343449784UL, 1913556027UL, 1493892363UL, 2539517630UL, 2046391233UL, 3046108187UL, 28742917UL, 4009448584UL, 530945117UL, 3165875131UL, 1018448712UL, 110256395UL, 3550192264UL, 1279873435UL, 2276349621UL, 517650895UL, 1957973772UL, 619869608UL, 4260458157UL, 2281748739UL, 2489253174UL, 2220997989UL, 3787481606UL, 508630251UL, 3761850170UL, 3992979014UL, 2298047038UL, 3506428315UL, +1279341556UL, 3293496518UL, 1313470495UL, 1021100687UL, 3113171268UL, 798494760UL, 2981622008UL, 4152623583UL, 576409629UL, 2312811213UL, 992326282UL, 261645450UL, 1818084365UL, 3357150904UL, 144093UL, 1937589359UL, 2016990596UL, 4273422066UL, 588267732UL, 3592151118UL, 3846596932UL, 1198111464UL, 944363907UL, 1288613766UL, 1707163456UL, 4020906747UL, 1161127694UL, 2303844076UL, 2632591611UL, 3877442490UL, 2453788473UL, 1725876694UL, +1193989740UL, 2650581453UL, 1937459187UL, 361099994UL, 3566745727UL, 3658112707UL, 3612317412UL, 2684702277UL, 2880928862UL, 2044313931UL, 1866044828UL, 3528429465UL, 130421713UL, 2658878825UL, 1566180833UL, 1572228417UL, 531947625UL, 3774861000UL, 1894712110UL, 1319199233UL, 865634052UL, 2602102379UL, 3389730171UL, 3878969250UL, 107983959UL, 1601930856UL, 2511728925UL, 2146946013UL, 497511195UL, 720616881UL, 699892123UL, 2404505137UL, +2656498433UL, 4209102573UL, 2387104994UL, 1221484586UL, 1726143957UL, 1267363185UL, 3362559187UL, 282442925UL, 2418524976UL, 3196072648UL, 2942944206UL, 2072047145UL, 2985823503UL, 2132951745UL, 2298545297UL, 4079341490UL, 1397656146UL, 2086257884UL, 3834366725UL, 3862532368UL, 3991197972UL, 1543996818UL, 2192688115UL, 3081427696UL, 2656520743UL, 825853576UL, 2476324234UL, 3600148050UL, 1168683794UL, 3219143568UL, 528751585UL, 1339513738UL, +447593731UL, 2742877256UL, 2488536667UL, 4025362081UL, 808657962UL, 2422880287UL, 390864786UL, 3381554683UL, 2682225618UL, 353395922UL, 3577556262UL, 2482413928UL, 507756643UL, 3979211244UL, 3505184848UL, 3945044582UL, 2414915836UL, 2313624497UL, 1841224078UL, 2036999647UL, 1369090013UL, 3264575895UL, 1096327239UL, 607843308UL, 3999302048UL, 2761563885UL, 2882627112UL, 3126073009UL, 1241524975UL, 3152482044UL, 3040022505UL, 3249451214UL, +2933713956UL, 420486142UL, 1314806730UL, 932941454UL, 4276317539UL, 343449784UL, 2231505736UL, 1493892363UL, 2539517630UL, 2046391233UL, 3046108187UL, 2351652097UL, 4009448584UL, 530945117UL, 3165875131UL, 1018448712UL, 1683392491UL, 3550192264UL, 1279873435UL, 2276349621UL, 517650895UL, 4036312766UL, 619869608UL, 4260458157UL, 2281748739UL, 2489253174UL, 1686790154UL, 3787481606UL, 508630251UL, 3761850170UL, 3992979014UL, 1745325013UL, +3506428315UL, 1279341556UL, 3293496518UL, 1313470495UL, 3066312306UL, 3113171268UL, 798494760UL, 2981622008UL, 4152623583UL, 3871822467UL, 2312811213UL, 992326282UL, 261645450UL, 1818084365UL, 3681154045UL, 144093UL, 1937589359UL, 2016990596UL, 4273422066UL, 2361898985UL, 3592151118UL, 3846596932UL, 1198111464UL, 944363907UL, 2866279694UL, 1707163456UL, 4020906747UL, 1161127694UL, 2303844076UL, 3044280908UL, 3877442490UL, 2453788473UL, +1725876694UL, 1193989740UL, 2049617934UL, 1937459187UL, 361099994UL, 3566745727UL, 3658112707UL, 934740227UL, 2684702277UL, 2880928862UL, 2044313931UL, 1866044828UL, 1814569183UL, 130421713UL, 2658878825UL, 1566180833UL, 1572228417UL, 1784679035UL, 3774861000UL, 1894712110UL, 1319199233UL, 865634052UL, 283642947UL, 3389730171UL, 3878969250UL, 107983959UL, 1601930856UL, 3698217362UL, 2146946013UL, 497511195UL, 720616881UL, 699892123UL, +2117385156UL, 2656498433UL, 4209102573UL, 2387104994UL, 1221484586UL, 3495886368UL, 1267363185UL, 3362559187UL, 282442925UL, 2418524976UL, 3489510655UL, 2942944206UL, 2072047145UL, 2985823503UL, 2132951745UL, 885541635UL, 4079341490UL, 1397656146UL, 2086257884UL, 3834366725UL, 1049969755UL, 3991197972UL, 1543996818UL, 2192688115UL, 3081427696UL, 2141948440UL, 825853576UL, 2476324234UL, 3600148050UL, 1168683794UL, 5160254UL, 528751585UL, +1339513738UL, 447593731UL, 2742877256UL, 3033397497UL, 4025362081UL, 808657962UL, 2422880287UL, 390864786UL, 3191593886UL, 2682225618UL, 353395922UL, 3577556262UL, 2482413928UL, 1185107868UL, 3979211244UL, 3505184848UL, 3945044582UL, 2414915836UL, 3030493909UL, 1841224078UL, 2036999647UL, 1369090013UL, 3264575895UL, 3054343366UL, 607843308UL, 3999302048UL, 2761563885UL, 2882627112UL, 3912854189UL, 1241524975UL, 3152482044UL, 3040022505UL, +3249451214UL, 55140065UL, 420486142UL, 1314806730UL, 932941454UL, 4276317539UL, 1055315026UL, 2231505736UL, 1493892363UL, 2539517630UL, 2046391233UL, 4174985470UL, 2351652097UL, 4009448584UL, 530945117UL, 3165875131UL, 2168411768UL, 1683392491UL, 3550192264UL, 1279873435UL, 2276349621UL, 1875092822UL, 4036312766UL, 619869608UL, 4260458157UL, 2281748739UL, 98823023UL, 1686790154UL, 3787481606UL, 508630251UL, 3761850170UL, 2636025017UL, +1745325013UL, 3506428315UL, 1279341556UL, 3293496518UL, 978338993UL, 3066312306UL, 3113171268UL, 798494760UL, 2981622008UL, 2712384846UL, 3871822467UL, 2312811213UL, 992326282UL, 261645450UL, 66982935UL, 3681154045UL, 144093UL, 1937589359UL, 2016990596UL, 3390191329UL, 2361898985UL, 3592151118UL, 3846596932UL, 1198111464UL, 1857959320UL, 2866279694UL, 1707163456UL, 4020906747UL, 1161127694UL, 913091437UL, 3044280908UL, 3877442490UL, +2453788473UL, 1725876694UL, 4254455215UL, 2049617934UL, 1937459187UL, 361099994UL, 3566745727UL, 2914687409UL, 934740227UL, 2684702277UL, 2880928862UL, 2044313931UL, 1515195925UL, 1814569183UL, 130421713UL, 2658878825UL, 1566180833UL, 2753417020UL, 1784679035UL, 3774861000UL, 1894712110UL, 1319199233UL, 287161774UL, 283642947UL, 3389730171UL, 3878969250UL, 107983959UL, 3057929912UL, 3698217362UL, 2146946013UL, 497511195UL, 720616881UL, +3570251850UL, 2117385156UL, 2656498433UL, 4209102573UL, 2387104994UL, 2940868252UL, 3495886368UL, 1267363185UL, 3362559187UL, 282442925UL, 2510419746UL, 3489510655UL, 2942944206UL, 2072047145UL, 2985823503UL, 978430777UL, 885541635UL, 4079341490UL, 1397656146UL, 2086257884UL, 134380865UL, 1049969755UL, 3991197972UL, 1543996818UL, 2192688115UL, 1205081471UL, 2141948440UL, 825853576UL, 2476324234UL, 3600148050UL, 228461601UL, 5160254UL, +528751585UL, 1339513738UL, 447593731UL, 2852356745UL, 3033397497UL, 4025362081UL, 808657962UL, 2422880287UL, 3287655095UL, 3191593886UL, 2682225618UL, 353395922UL, 3577556262UL, 2542841784UL, 1185107868UL, 3979211244UL, 3505184848UL, 3945044582UL, 2905156498UL, 3030493909UL, 1841224078UL, 2036999647UL, 1369090013UL, 4246605417UL, 3054343366UL, 607843308UL, 3999302048UL, 2761563885UL, 3611911899UL, 3912854189UL, 1241524975UL, 3152482044UL, +3040022505UL, 3215633820UL, 55140065UL, 420486142UL, 1314806730UL, 932941454UL, 2708752494UL, 1055315026UL, 2231505736UL, 1493892363UL, 2539517630UL, 962728637UL, 4174985470UL, 2351652097UL, 4009448584UL, 530945117UL, 3370859357UL, 2168411768UL, 1683392491UL, 3550192264UL, 1279873435UL, 3028448904UL, 1875092822UL, 4036312766UL, 619869608UL, 4260458157UL, 199178828UL, 98823023UL, 1686790154UL, 3787481606UL, 508630251UL, 4205010983UL, +2636025017UL, 1745325013UL, 3506428315UL, 1279341556UL, 683127445UL, 978338993UL, 3066312306UL, 3113171268UL, 798494760UL, 2823693013UL, 2712384846UL, 3871822467UL, 2312811213UL, 992326282UL, 3701928286UL, 66982935UL, 3681154045UL, 144093UL, 1937589359UL, 1117717039UL, 3390191329UL, 2361898985UL, 3592151118UL, 3846596932UL, 1072660054UL, 1857959320UL, 2866279694UL, 1707163456UL, 4020906747UL, 2503116219UL, 913091437UL, 3044280908UL, +3877442490UL, 2453788473UL, 1815274499UL, 4254455215UL, 2049617934UL, 1937459187UL, 361099994UL, 3771108073UL, 2914687409UL, 934740227UL, 2684702277UL, 2880928862UL, 3591322975UL, 1515195925UL, 1814569183UL, 130421713UL, 2658878825UL, 354587729UL, 2753417020UL, 1784679035UL, 3774861000UL, 1894712110UL, 1799044969UL, 287161774UL, 283642947UL, 3389730171UL, 3878969250UL, 1229815186UL, 3057929912UL, 3698217362UL, 2146946013UL, 497511195UL, +3121882901UL, 426537369UL, 3852284416UL, 4050544256UL, 3148944089UL, 878474231UL, 1369575859UL, 2206199765UL, 870626886UL, 494668165UL, 613011290UL, 3246772867UL, 1040178461UL, 2396959353UL, 2105449571UL, 456758967UL, 4134137960UL, 3525051481UL, 3633445497UL, 2895048060UL, 2008411846UL, 2194012253UL, 2326112129UL, 2956901044UL, 2297039362UL, 3400824024UL, 42139718UL, 4212208866UL, 3874761488UL, 2361955811UL, 1890446075UL, 864533345UL, +474524842UL, 2283847731UL, 283971243UL, 3607219686UL, 280870706UL, 4188549522UL, 659660119UL, 2460943922UL, 4252134362UL, 922033031UL, 3615474721UL, 1691563300UL, 3002653770UL, 2414043617UL, 2251931324UL, 752654714UL, 4188343161UL, 305594960UL, 1320443323UL, 797027061UL, 2347530104UL, 3608843538UL, 2717312892UL, 1841295453UL, 1574467161UL, 823626340UL, 2244853583UL, 2648217758UL, 141742826UL, 1605436472UL, 745763543UL, 3275460028UL, +3166960370UL, 2655678693UL, 3964037210UL, 945054703UL, 998173049UL, 1014527437UL, 3424443612UL, 281835352UL, 826817508UL, 260462513UL, 2849967970UL, 3447294061UL, 3670173947UL, 2430650055UL, 4134905457UL, 3798172627UL, 2156572681UL, 2600148034UL, 2773013892UL, 3290397106UL, 1740507705UL, 3450254627UL, 3613087060UL, 440045928UL, 1230555006UL, 980805434UL, 2107958250UL, 526555374UL, 3150741277UL, 4283672024UL, 193019043UL, 786035243UL, +3002832578UL, 3938336183UL, 4209865002UL, 1005950967UL, 3533346582UL, 3196886974UL, 83962845UL, 1882902787UL, 3595687446UL, 2927597311UL, 2728550762UL, 2750900392UL, 1474254316UL, 1509832112UL, 1763262792UL, 2706181276UL, 538294991UL, 353565565UL, 18133995UL, 1719731406UL, 3311085516UL, 2018821960UL, 300367686UL, 2628312935UL, 1151449661UL, 2178805970UL, 3288321196UL, 535051857UL, 1623270973UL, 2761151808UL, 2701048972UL, 317681607UL, +2281427601UL, 719748170UL, 351452298UL, 2191958596UL, 4000232015UL, 335837771UL, 4158081521UL, 3779404077UL, 1998444133UL, 3849605095UL, 1532231791UL, 2930266419UL, 4203951289UL, 748423654UL, 1993082867UL, 451159852UL, 488781053UL, 2438982775UL, 2222815270UL, 543209242UL, 1241562465UL, 2868868009UL, 4201052877UL, 2438841764UL, 2151708682UL, 2426958921UL, 1520654642UL, 1990098337UL, 1070792755UL, 2308394635UL, 1442389785UL, 705615044UL, +}, +{ +973368008UL, 1221885324UL, 2086331970UL, 2323744198UL, 280145759UL, 1795442656UL, 2984366093UL, 3532172763UL, 323888669UL, 851950179UL, 4198638255UL, 899943985UL, 4087912561UL, 2935341503UL, 1443752852UL, 3991058999UL, 3547259355UL, 35779889UL, 1076308344UL, 4075444807UL, 186174448UL, 3542284780UL, 660388677UL, 2777400132UL, 1092226205UL, 2418702276UL, 1307933032UL, 1940510003UL, 1932005362UL, 4016036211UL, 387339882UL, 2969593895UL, +3453134349UL, 1382709098UL, 1795814140UL, 1588159469UL, 1216733801UL, 2227378121UL, 2063027627UL, 582454582UL, 3364657275UL, 3466973302UL, 484564303UL, 1489261596UL, 2270291560UL, 2008178784UL, 2284268924UL, 2229317366UL, 644797709UL, 1213921542UL, 99331403UL, 3027640949UL, 1137722852UL, 2991506109UL, 1432805987UL, 931795812UL, 1075567424UL, 28963219UL, 1462245461UL, 3781444706UL, 521233400UL, 1891915904UL, 3774338085UL, 1635359313UL, +2356111795UL, 4121073768UL, 1045110727UL, 2822507066UL, 1087914587UL, 3744509525UL, 911370656UL, 181884066UL, 1944539735UL, 290356444UL, 3598887471UL, 4236934380UL, 3224468239UL, 457546246UL, 4119337570UL, 37700432UL, 655783844UL, 1423101410UL, 1693002969UL, 3287768267UL, 928748421UL, 4074128009UL, 3081088543UL, 2882833790UL, 3180154875UL, 1094657682UL, 2388253717UL, 4173455215UL, 794709427UL, 3363292346UL, 67786868UL, 3786597763UL, +380587236UL, 2345941620UL, 560232318UL, 2137123833UL, 619747082UL, 1050293267UL, 2537845069UL, 1407302835UL, 433399526UL, 1083185007UL, 1893842085UL, 3711748584UL, 4225838280UL, 3863317129UL, 2043467942UL, 2799650657UL, 3590486611UL, 1231938950UL, 215905995UL, 155811669UL, 806806587UL, 2732631168UL, 1621659281UL, 632403616UL, 401165422UL, 2661074778UL, 4156963191UL, 3691812937UL, 3767271627UL, 2834948318UL, 2877210497UL, 2420260153UL, +733172233UL, 1771708940UL, 3102718549UL, 2468707423UL, 1857088312UL, 3176535032UL, 1908570295UL, 3966666208UL, 605079895UL, 2982506620UL, 3721694730UL, 1640691570UL, 3764975545UL, 3257514114UL, 1826578604UL, 1358557411UL, 4049610348UL, 615820785UL, 3355718142UL, 1734641780UL, 2958744617UL, 274522187UL, 3198436002UL, 4077346785UL, 2890101344UL, 4012464346UL, 1288365365UL, 96583076UL, 2656389382UL, 1858181040UL, 2717010340UL, 2032153178UL, +349324012UL, 973368008UL, 1221885324UL, 2086331970UL, 2323744198UL, 253685576UL, 1795442656UL, 2984366093UL, 3532172763UL, 323888669UL, 248935329UL, 4198638255UL, 899943985UL, 4087912561UL, 2935341503UL, 3213394756UL, 3991058999UL, 3547259355UL, 35779889UL, 1076308344UL, 1987715385UL, 186174448UL, 3542284780UL, 660388677UL, 2777400132UL, 2071022105UL, 2418702276UL, 1307933032UL, 1940510003UL, 1932005362UL, 144370664UL, 387339882UL, +2969593895UL, 3453134349UL, 1382709098UL, 2394736611UL, 1588159469UL, 1216733801UL, 2227378121UL, 2063027627UL, 4064263898UL, 3364657275UL, 3466973302UL, 484564303UL, 1489261596UL, 3405101812UL, 2008178784UL, 2284268924UL, 2229317366UL, 644797709UL, 2560273821UL, 99331403UL, 3027640949UL, 1137722852UL, 2991506109UL, 1446442417UL, 931795812UL, 1075567424UL, 28963219UL, 1462245461UL, 1201513613UL, 521233400UL, 1891915904UL, 3774338085UL, +1635359313UL, 2815447944UL, 4121073768UL, 1045110727UL, 2822507066UL, 1087914587UL, 2485035329UL, 911370656UL, 181884066UL, 1944539735UL, 290356444UL, 2078819341UL, 4236934380UL, 3224468239UL, 457546246UL, 4119337570UL, 2666895496UL, 655783844UL, 1423101410UL, 1693002969UL, 3287768267UL, 3595439673UL, 4074128009UL, 3081088543UL, 2882833790UL, 3180154875UL, 872453917UL, 2388253717UL, 4173455215UL, 794709427UL, 3363292346UL, 4188764388UL, +3786597763UL, 380587236UL, 2345941620UL, 560232318UL, 625538006UL, 619747082UL, 1050293267UL, 2537845069UL, 1407302835UL, 2128289331UL, 1083185007UL, 1893842085UL, 3711748584UL, 4225838280UL, 2486133065UL, 2043467942UL, 2799650657UL, 3590486611UL, 1231938950UL, 928582681UL, 155811669UL, 806806587UL, 2732631168UL, 1621659281UL, 1163969880UL, 401165422UL, 2661074778UL, 4156963191UL, 3691812937UL, 2322579561UL, 2834948318UL, 2877210497UL, +2420260153UL, 733172233UL, 170239236UL, 3102718549UL, 2468707423UL, 1857088312UL, 3176535032UL, 3868693408UL, 3966666208UL, 605079895UL, 2982506620UL, 3721694730UL, 2066859537UL, 3764975545UL, 3257514114UL, 1826578604UL, 1358557411UL, 2964604045UL, 615820785UL, 3355718142UL, 1734641780UL, 2958744617UL, 4091225681UL, 3198436002UL, 4077346785UL, 2890101344UL, 4012464346UL, 2612861218UL, 96583076UL, 2656389382UL, 1858181040UL, 2717010340UL, +3639170895UL, 349324012UL, 973368008UL, 1221885324UL, 2086331970UL, 2258432445UL, 253685576UL, 1795442656UL, 2984366093UL, 3532172763UL, 3831166882UL, 248935329UL, 4198638255UL, 899943985UL, 4087912561UL, 715173523UL, 3213394756UL, 3991058999UL, 3547259355UL, 35779889UL, 2393072396UL, 1987715385UL, 186174448UL, 3542284780UL, 660388677UL, 3731857267UL, 2071022105UL, 2418702276UL, 1307933032UL, 1940510003UL, 4262274779UL, 144370664UL, +387339882UL, 2969593895UL, 3453134349UL, 1923698215UL, 2394736611UL, 1588159469UL, 1216733801UL, 2227378121UL, 2907069566UL, 4064263898UL, 3364657275UL, 3466973302UL, 484564303UL, 2234542580UL, 3405101812UL, 2008178784UL, 2284268924UL, 2229317366UL, 1349323372UL, 2560273821UL, 99331403UL, 3027640949UL, 1137722852UL, 4200786664UL, 1446442417UL, 931795812UL, 1075567424UL, 28963219UL, 1659632304UL, 1201513613UL, 521233400UL, 1891915904UL, +3774338085UL, 763590809UL, 2815447944UL, 4121073768UL, 1045110727UL, 2822507066UL, 4131040734UL, 2485035329UL, 911370656UL, 181884066UL, 1944539735UL, 4104473807UL, 2078819341UL, 4236934380UL, 3224468239UL, 457546246UL, 1241850776UL, 2666895496UL, 655783844UL, 1423101410UL, 1693002969UL, 2025898966UL, 3595439673UL, 4074128009UL, 3081088543UL, 2882833790UL, 218474476UL, 872453917UL, 2388253717UL, 4173455215UL, 794709427UL, 250328312UL, +4188764388UL, 3786597763UL, 380587236UL, 2345941620UL, 1937652040UL, 625538006UL, 619747082UL, 1050293267UL, 2537845069UL, 1140055765UL, 2128289331UL, 1083185007UL, 1893842085UL, 3711748584UL, 2298055548UL, 2486133065UL, 2043467942UL, 2799650657UL, 3590486611UL, 1235949580UL, 928582681UL, 155811669UL, 806806587UL, 2732631168UL, 4046198728UL, 1163969880UL, 401165422UL, 2661074778UL, 4156963191UL, 2003518762UL, 2322579561UL, 2834948318UL, +2877210497UL, 2420260153UL, 326741418UL, 170239236UL, 3102718549UL, 2468707423UL, 1857088312UL, 3936056808UL, 3868693408UL, 3966666208UL, 605079895UL, 2982506620UL, 2354705582UL, 2066859537UL, 3764975545UL, 3257514114UL, 1826578604UL, 3017501686UL, 2964604045UL, 615820785UL, 3355718142UL, 1734641780UL, 1681548103UL, 4091225681UL, 3198436002UL, 4077346785UL, 2890101344UL, 416470693UL, 2612861218UL, 96583076UL, 2656389382UL, 1858181040UL, +3104217288UL, 3639170895UL, 349324012UL, 973368008UL, 1221885324UL, 601524567UL, 2258432445UL, 253685576UL, 1795442656UL, 2984366093UL, 1875491903UL, 3831166882UL, 248935329UL, 4198638255UL, 899943985UL, 2182697927UL, 715173523UL, 3213394756UL, 3991058999UL, 3547259355UL, 1472237612UL, 2393072396UL, 1987715385UL, 186174448UL, 3542284780UL, 2160848139UL, 3731857267UL, 2071022105UL, 2418702276UL, 1307933032UL, 3815354311UL, 4262274779UL, +144370664UL, 387339882UL, 2969593895UL, 4240850623UL, 1923698215UL, 2394736611UL, 1588159469UL, 1216733801UL, 322523795UL, 2907069566UL, 4064263898UL, 3364657275UL, 3466973302UL, 2920715858UL, 2234542580UL, 3405101812UL, 2008178784UL, 2284268924UL, 1936025139UL, 1349323372UL, 2560273821UL, 99331403UL, 3027640949UL, 859541953UL, 4200786664UL, 1446442417UL, 931795812UL, 1075567424UL, 1876635772UL, 1659632304UL, 1201513613UL, 521233400UL, +1891915904UL, 3949233865UL, 763590809UL, 2815447944UL, 4121073768UL, 1045110727UL, 2522258582UL, 4131040734UL, 2485035329UL, 911370656UL, 181884066UL, 2467886009UL, 4104473807UL, 2078819341UL, 4236934380UL, 3224468239UL, 603014155UL, 1241850776UL, 2666895496UL, 655783844UL, 1423101410UL, 673119756UL, 2025898966UL, 3595439673UL, 4074128009UL, 3081088543UL, 4100445818UL, 218474476UL, 872453917UL, 2388253717UL, 4173455215UL, 2395519424UL, +250328312UL, 4188764388UL, 3786597763UL, 380587236UL, 4292608797UL, 1937652040UL, 625538006UL, 619747082UL, 1050293267UL, 2989616803UL, 1140055765UL, 2128289331UL, 1083185007UL, 1893842085UL, 3313934002UL, 2298055548UL, 2486133065UL, 2043467942UL, 2799650657UL, 1804808801UL, 1235949580UL, 928582681UL, 155811669UL, 806806587UL, 2864892828UL, 4046198728UL, 1163969880UL, 401165422UL, 2661074778UL, 2946769376UL, 2003518762UL, 2322579561UL, +2834948318UL, 2877210497UL, 2647485275UL, 326741418UL, 170239236UL, 3102718549UL, 2468707423UL, 2520336801UL, 3936056808UL, 3868693408UL, 3966666208UL, 605079895UL, 2949706551UL, 2354705582UL, 2066859537UL, 3764975545UL, 3257514114UL, 495003693UL, 3017501686UL, 2964604045UL, 615820785UL, 3355718142UL, 3799230297UL, 1681548103UL, 4091225681UL, 3198436002UL, 4077346785UL, 258363842UL, 416470693UL, 2612861218UL, 96583076UL, 2656389382UL, +2198085634UL, 1607235362UL, 694172175UL, 4194347563UL, 2665732891UL, 3419430286UL, 597070176UL, 2749480905UL, 3937535348UL, 3639873850UL, 2050067843UL, 4045290683UL, 2964298196UL, 3631595287UL, 1409808193UL, 121765438UL, 2129412744UL, 2497437101UL, 2664102876UL, 1773441464UL, 1708052456UL, 2923764322UL, 3350385352UL, 1592204280UL, 1118221370UL, 3416016313UL, 116121364UL, 1179473397UL, 1497519022UL, 902569114UL, 3840281863UL, 2783662797UL, +1712084322UL, 1982884601UL, 3625797892UL, 4222938993UL, 3231134134UL, 3046745397UL, 446484563UL, 1133869192UL, 2622178726UL, 3881085862UL, 4012894217UL, 391734322UL, 2089696890UL, 1304197030UL, 2663978386UL, 1685998658UL, 4238620912UL, 448351665UL, 2724524045UL, 1038754164UL, 413586547UL, 3107681687UL, 1454664365UL, 3353731192UL, 128440996UL, 565817989UL, 127978294UL, 1043863326UL, 1747369107UL, 2772246481UL, 172569313UL, 2740699699UL, +3417082503UL, 2103702630UL, 2139566116UL, 1378864710UL, 2444170529UL, 3234220221UL, 3974870858UL, 1965162347UL, 956763257UL, 3932467825UL, 1077337271UL, 4084837149UL, 3699147465UL, 1882164226UL, 236113740UL, 3116302858UL, 2730529598UL, 3449804672UL, 4002370655UL, 2011573068UL, 1551746089UL, 3917496971UL, 2852603UL, 1682999535UL, 2764817908UL, 2489487254UL, 261936311UL, 3122421452UL, 1199382345UL, 2617247590UL, 1909026938UL, 3156073069UL, +1492533764UL, 97847107UL, 1260892586UL, 187242945UL, 1286471861UL, 1763024967UL, 127723419UL, 210606273UL, 228546401UL, 3249879676UL, 482069954UL, 383075106UL, 3263105259UL, 2242748676UL, 1105681409UL, 4033144425UL, 4017983282UL, 1670425353UL, 4040882785UL, 1780687273UL, 1405678015UL, 3076115981UL, 2713472488UL, 286336494UL, 3664225263UL, 502759060UL, 777620620UL, 635590826UL, 132236203UL, 1866406173UL, 1235046453UL, 2859554298UL, +121814656UL, 944976320UL, 1946494170UL, 2548097575UL, 415384946UL, 3934685646UL, 1507032178UL, 1383654007UL, 2906269630UL, 566005756UL, 3118733139UL, 2969075870UL, 1834096359UL, 3263358416UL, 1322979710UL, 904583023UL, 3582075094UL, 2298898632UL, 2491891941UL, 660351763UL, 2548592542UL, 3009200751UL, 2116595110UL, 2623212287UL, 4167133624UL, 196759529UL, 3038645579UL, 1769704552UL, 1713233322UL, 2127497999UL, 3849458221UL, 3769872265UL, +}, +{ +51082211UL, 3347503176UL, 3221768777UL, 2986163981UL, 3937460013UL, 1716372908UL, 4132024211UL, 3035957293UL, 1791036224UL, 4214815056UL, 1645540011UL, 2629793790UL, 3185505897UL, 1855718954UL, 495459467UL, 1728339314UL, 2318396341UL, 3396602050UL, 3273624616UL, 2625973148UL, 1762905939UL, 1706358553UL, 1088424264UL, 2764318930UL, 1026127380UL, 1128004134UL, 2724553694UL, 41981087UL, 2304966004UL, 1342745986UL, 3425554050UL, 3537673465UL, +752263676UL, 280905885UL, 929399589UL, 4090689526UL, 2141254732UL, 1469491656UL, 2593100469UL, 1096008340UL, 3316809312UL, 1698245188UL, 1656427920UL, 3081873338UL, 1750515301UL, 3850483440UL, 4081834419UL, 1225164947UL, 1244139942UL, 1972663124UL, 116832506UL, 3097397897UL, 961156503UL, 1899056660UL, 1659173175UL, 1890464921UL, 1891872926UL, 191259956UL, 1735304734UL, 4246751855UL, 4285601625UL, 1495519933UL, 3398829761UL, 997567482UL, +2277782972UL, 1286922996UL, 3120709698UL, 15569196UL, 191501283UL, 3916619528UL, 1552075789UL, 4259725643UL, 2837166910UL, 2231584792UL, 1912204495UL, 2597304083UL, 4147585653UL, 1021482843UL, 2003417305UL, 186794491UL, 3608172979UL, 1991038123UL, 97515853UL, 34341352UL, 4163491231UL, 1046079304UL, 4105813389UL, 3589099183UL, 3970004064UL, 3899560802UL, 4148331147UL, 2267137817UL, 85024486UL, 3019925981UL, 3069231953UL, 1563669137UL, +314080592UL, 2943111861UL, 2838243982UL, 726216848UL, 2621853102UL, 2355885175UL, 3359668856UL, 1111296541UL, 2330283124UL, 3626558972UL, 4290084148UL, 1632078UL, 1047440803UL, 1350377197UL, 2490578842UL, 2366345698UL, 1628128899UL, 860259543UL, 1937956234UL, 2833820527UL, 329818923UL, 648489148UL, 1791961202UL, 1652322723UL, 1513419073UL, 149629345UL, 2468961221UL, 3711837973UL, 2377333831UL, 1434755773UL, 3808719305UL, 2513270108UL, +2701064683UL, 3097011724UL, 303393137UL, 1346302239UL, 1852307302UL, 850106025UL, 2473124483UL, 2853497268UL, 3786573704UL, 2604101162UL, 1446573486UL, 506925220UL, 3138967488UL, 2973528682UL, 2752811123UL, 2890321579UL, 1037196362UL, 1335670403UL, 1560253777UL, 1437495434UL, 2700525242UL, 4259933972UL, 3870707795UL, 4141538580UL, 3375331039UL, 3081538601UL, 3129978494UL, 3689191993UL, 1933431212UL, 2196145886UL, 87814045UL, 878611347UL, +812542698UL, 51082211UL, 3347503176UL, 3221768777UL, 2986163981UL, 277257023UL, 1716372908UL, 4132024211UL, 3035957293UL, 1791036224UL, 2713916211UL, 1645540011UL, 2629793790UL, 3185505897UL, 1855718954UL, 3800150234UL, 1728339314UL, 2318396341UL, 3396602050UL, 3273624616UL, 2530282967UL, 1762905939UL, 1706358553UL, 1088424264UL, 2764318930UL, 4224669506UL, 1128004134UL, 2724553694UL, 41981087UL, 2304966004UL, 484289311UL, 3425554050UL, +3537673465UL, 752263676UL, 280905885UL, 657028134UL, 4090689526UL, 2141254732UL, 1469491656UL, 2593100469UL, 2089385540UL, 3316809312UL, 1698245188UL, 1656427920UL, 3081873338UL, 2750354264UL, 3850483440UL, 4081834419UL, 1225164947UL, 1244139942UL, 3432605739UL, 116832506UL, 3097397897UL, 961156503UL, 1899056660UL, 2234120716UL, 1890464921UL, 1891872926UL, 191259956UL, 1735304734UL, 125359575UL, 4285601625UL, 1495519933UL, 3398829761UL, +997567482UL, 4034254942UL, 1286922996UL, 3120709698UL, 15569196UL, 191501283UL, 2090684174UL, 1552075789UL, 4259725643UL, 2837166910UL, 2231584792UL, 3412758413UL, 2597304083UL, 4147585653UL, 1021482843UL, 2003417305UL, 2464533361UL, 3608172979UL, 1991038123UL, 97515853UL, 34341352UL, 2634732952UL, 1046079304UL, 4105813389UL, 3589099183UL, 3970004064UL, 4263828421UL, 4148331147UL, 2267137817UL, 85024486UL, 3019925981UL, 3229477751UL, +1563669137UL, 314080592UL, 2943111861UL, 2838243982UL, 1274664774UL, 2621853102UL, 2355885175UL, 3359668856UL, 1111296541UL, 1615234696UL, 3626558972UL, 4290084148UL, 1632078UL, 1047440803UL, 623898652UL, 2490578842UL, 2366345698UL, 1628128899UL, 860259543UL, 2097114662UL, 2833820527UL, 329818923UL, 648489148UL, 1791961202UL, 1730000077UL, 1513419073UL, 149629345UL, 2468961221UL, 3711837973UL, 3255238414UL, 1434755773UL, 3808719305UL, +2513270108UL, 2701064683UL, 1635042488UL, 303393137UL, 1346302239UL, 1852307302UL, 850106025UL, 3523245944UL, 2853497268UL, 3786573704UL, 2604101162UL, 1446573486UL, 1011238489UL, 3138967488UL, 2973528682UL, 2752811123UL, 2890321579UL, 1044586909UL, 1335670403UL, 1560253777UL, 1437495434UL, 2700525242UL, 608940900UL, 3870707795UL, 4141538580UL, 3375331039UL, 3081538601UL, 728626935UL, 3689191993UL, 1933431212UL, 2196145886UL, 87814045UL, +646732047UL, 812542698UL, 51082211UL, 3347503176UL, 3221768777UL, 1783601443UL, 277257023UL, 1716372908UL, 4132024211UL, 3035957293UL, 3363442238UL, 2713916211UL, 1645540011UL, 2629793790UL, 3185505897UL, 2066587565UL, 3800150234UL, 1728339314UL, 2318396341UL, 3396602050UL, 2279941522UL, 2530282967UL, 1762905939UL, 1706358553UL, 1088424264UL, 2989326347UL, 4224669506UL, 1128004134UL, 2724553694UL, 41981087UL, 2348931916UL, 484289311UL, +3425554050UL, 3537673465UL, 752263676UL, 3169550883UL, 657028134UL, 4090689526UL, 2141254732UL, 1469491656UL, 1152943917UL, 2089385540UL, 3316809312UL, 1698245188UL, 1656427920UL, 1808689833UL, 2750354264UL, 3850483440UL, 4081834419UL, 1225164947UL, 2422106046UL, 3432605739UL, 116832506UL, 3097397897UL, 961156503UL, 1581804167UL, 2234120716UL, 1890464921UL, 1891872926UL, 191259956UL, 4113708001UL, 125359575UL, 4285601625UL, 1495519933UL, +3398829761UL, 3473435310UL, 4034254942UL, 1286922996UL, 3120709698UL, 15569196UL, 3122200488UL, 2090684174UL, 1552075789UL, 4259725643UL, 2837166910UL, 2838170407UL, 3412758413UL, 2597304083UL, 4147585653UL, 1021482843UL, 954000150UL, 2464533361UL, 3608172979UL, 1991038123UL, 97515853UL, 3832321348UL, 2634732952UL, 1046079304UL, 4105813389UL, 3589099183UL, 1288675572UL, 4263828421UL, 4148331147UL, 2267137817UL, 85024486UL, 1080403742UL, +3229477751UL, 1563669137UL, 314080592UL, 2943111861UL, 3357655593UL, 1274664774UL, 2621853102UL, 2355885175UL, 3359668856UL, 3722440291UL, 1615234696UL, 3626558972UL, 4290084148UL, 1632078UL, 4263556325UL, 623898652UL, 2490578842UL, 2366345698UL, 1628128899UL, 3623136669UL, 2097114662UL, 2833820527UL, 329818923UL, 648489148UL, 592747007UL, 1730000077UL, 1513419073UL, 149629345UL, 2468961221UL, 3766709284UL, 3255238414UL, 1434755773UL, +3808719305UL, 2513270108UL, 1958651003UL, 1635042488UL, 303393137UL, 1346302239UL, 1852307302UL, 579487408UL, 3523245944UL, 2853497268UL, 3786573704UL, 2604101162UL, 4183724981UL, 1011238489UL, 3138967488UL, 2973528682UL, 2752811123UL, 3074709397UL, 1044586909UL, 1335670403UL, 1560253777UL, 1437495434UL, 1237099522UL, 608940900UL, 3870707795UL, 4141538580UL, 3375331039UL, 2032507604UL, 728626935UL, 3689191993UL, 1933431212UL, 2196145886UL, +4008131891UL, 646732047UL, 812542698UL, 51082211UL, 3347503176UL, 3622107037UL, 1783601443UL, 277257023UL, 1716372908UL, 4132024211UL, 1264285659UL, 3363442238UL, 2713916211UL, 1645540011UL, 2629793790UL, 2179309595UL, 2066587565UL, 3800150234UL, 1728339314UL, 2318396341UL, 580990822UL, 2279941522UL, 2530282967UL, 1762905939UL, 1706358553UL, 2826056883UL, 2989326347UL, 4224669506UL, 1128004134UL, 2724553694UL, 1486392636UL, 2348931916UL, +484289311UL, 3425554050UL, 3537673465UL, 2497657189UL, 3169550883UL, 657028134UL, 4090689526UL, 2141254732UL, 1019244016UL, 1152943917UL, 2089385540UL, 3316809312UL, 1698245188UL, 2921739456UL, 1808689833UL, 2750354264UL, 3850483440UL, 4081834419UL, 108425527UL, 2422106046UL, 3432605739UL, 116832506UL, 3097397897UL, 3902994002UL, 1581804167UL, 2234120716UL, 1890464921UL, 1891872926UL, 3428861050UL, 4113708001UL, 125359575UL, 4285601625UL, +1495519933UL, 3350053832UL, 3473435310UL, 4034254942UL, 1286922996UL, 3120709698UL, 2906201347UL, 3122200488UL, 2090684174UL, 1552075789UL, 4259725643UL, 1965598685UL, 2838170407UL, 3412758413UL, 2597304083UL, 4147585653UL, 3335631208UL, 954000150UL, 2464533361UL, 3608172979UL, 1991038123UL, 3788034599UL, 3832321348UL, 2634732952UL, 1046079304UL, 4105813389UL, 2362460804UL, 1288675572UL, 4263828421UL, 4148331147UL, 2267137817UL, 2767331798UL, +1080403742UL, 3229477751UL, 1563669137UL, 314080592UL, 1737897403UL, 3357655593UL, 1274664774UL, 2621853102UL, 2355885175UL, 57997639UL, 3722440291UL, 1615234696UL, 3626558972UL, 4290084148UL, 3703113369UL, 4263556325UL, 623898652UL, 2490578842UL, 2366345698UL, 73788443UL, 3623136669UL, 2097114662UL, 2833820527UL, 329818923UL, 253042650UL, 592747007UL, 1730000077UL, 1513419073UL, 149629345UL, 4248302934UL, 3766709284UL, 3255238414UL, +1434755773UL, 3808719305UL, 3698431827UL, 1958651003UL, 1635042488UL, 303393137UL, 1346302239UL, 3872433842UL, 579487408UL, 3523245944UL, 2853497268UL, 3786573704UL, 3459185849UL, 4183724981UL, 1011238489UL, 3138967488UL, 2973528682UL, 2605373899UL, 3074709397UL, 1044586909UL, 1335670403UL, 1560253777UL, 4069724875UL, 1237099522UL, 608940900UL, 3870707795UL, 4141538580UL, 2550307954UL, 2032507604UL, 728626935UL, 3689191993UL, 1933431212UL, +1177640824UL, 4168589688UL, 1361487780UL, 2649612520UL, 2181448948UL, 2176288560UL, 947907377UL, 3772487849UL, 2002599877UL, 3353450532UL, 2013145251UL, 2357912348UL, 2316997609UL, 2355480213UL, 255142205UL, 751273749UL, 4049362748UL, 1434168014UL, 2069693747UL, 6910933UL, 1352778547UL, 2413649875UL, 4238683558UL, 484497407UL, 522555106UL, 1848417180UL, 3001805499UL, 2264939603UL, 3606143565UL, 1782482647UL, 2955918436UL, 3471474379UL, +2814133839UL, 3779337475UL, 3522102195UL, 1551792178UL, 3742001759UL, 3433504551UL, 472918932UL, 3835854229UL, 4259163014UL, 4103952359UL, 1989474190UL, 1792448078UL, 1517735224UL, 1958036884UL, 2277922531UL, 2856192348UL, 4294188732UL, 2674247971UL, 643649427UL, 3847742408UL, 1512435795UL, 4236693554UL, 1749045838UL, 397093640UL, 2940663643UL, 4156440725UL, 188785143UL, 3894740830UL, 897618321UL, 3333498692UL, 1623924612UL, 4111607062UL, +2242558573UL, 1565861815UL, 1177957654UL, 4129621176UL, 2232443247UL, 3216995984UL, 3313294700UL, 791442469UL, 1782204490UL, 2452634246UL, 1288014576UL, 1347365377UL, 112254281UL, 2044140398UL, 2479591984UL, 3293701920UL, 1062335151UL, 1397230369UL, 2460086085UL, 2412349474UL, 1252633202UL, 3704541545UL, 2132499200UL, 2202058121UL, 1981543691UL, 2683673516UL, 1198109770UL, 4279157703UL, 2224504258UL, 2188868731UL, 769314834UL, 601313429UL, +3595357440UL, 561383123UL, 3444949507UL, 2127327734UL, 2865252582UL, 4181002098UL, 2408426518UL, 309361635UL, 2377703815UL, 1109219406UL, 406287309UL, 1750179098UL, 3619129839UL, 937928728UL, 884423945UL, 928407281UL, 4173634172UL, 1492070114UL, 2706943441UL, 1365883971UL, 3076484301UL, 744370087UL, 4004118884UL, 2199449568UL, 879458863UL, 3197725005UL, 3590586547UL, 59693002UL, 3614114662UL, 1499386564UL, 2914582708UL, 3751842429UL, +947438603UL, 1986129491UL, 3747112289UL, 833777768UL, 2231649410UL, 1841607849UL, 3526253103UL, 3797105813UL, 1291185911UL, 3188408549UL, 3311027691UL, 3983681758UL, 2246511800UL, 1271525377UL, 2996265908UL, 2396071405UL, 902427181UL, 164636454UL, 2459631341UL, 635349368UL, 463309029UL, 1409367654UL, 849052250UL, 3221786769UL, 2310288531UL, 2919204855UL, 1263130532UL, 1215722704UL, 3497322658UL, 2840687222UL, 2185004161UL, 1507335864UL, +}, +{ +2052557448UL, 2879065999UL, 22933757UL, 2160014758UL, 3736092460UL, 3556641619UL, 1350613766UL, 2107757927UL, 309323868UL, 3452852627UL, 3424626316UL, 545651740UL, 1935764720UL, 2349926457UL, 3546577033UL, 862046434UL, 167198649UL, 338290297UL, 1145807303UL, 1571276102UL, 883549156UL, 907871968UL, 638566313UL, 678764227UL, 3795356864UL, 3306095271UL, 1452688488UL, 621126888UL, 1838613968UL, 2054107827UL, 1785040579UL, 454879400UL, +1952849106UL, 1907701866UL, 1639495252UL, 1623968604UL, 2997422000UL, 2633878652UL, 1036670775UL, 2191465943UL, 3053533585UL, 1654709920UL, 1950620393UL, 4177745509UL, 1742007818UL, 2888573892UL, 2825965566UL, 1399790365UL, 1307674482UL, 310692416UL, 384880529UL, 3497622676UL, 1024664651UL, 1541456182UL, 1904670217UL, 1008618602UL, 2816673160UL, 684112698UL, 3332034744UL, 3646613828UL, 962627614UL, 3072103948UL, 3713153075UL, 476323310UL, +3243124597UL, 126319837UL, 2155412848UL, 228580793UL, 2142696490UL, 3442722759UL, 2689599232UL, 426191419UL, 3157759186UL, 100239709UL, 494534049UL, 1259677734UL, 2889209278UL, 1754641396UL, 1057778427UL, 2133253617UL, 1298500018UL, 3340348062UL, 3967049659UL, 2927469144UL, 1503854147UL, 2271956463UL, 3004309866UL, 260248338UL, 2570702480UL, 2067671015UL, 3168497089UL, 361311552UL, 2123195373UL, 2825457193UL, 2599488181UL, 507483626UL, +1201669979UL, 910763802UL, 4158584821UL, 3116016424UL, 3375736126UL, 2857697336UL, 3112473104UL, 2683465481UL, 1495348009UL, 681020485UL, 4044713962UL, 2443109893UL, 129994063UL, 1710251126UL, 820410567UL, 601527649UL, 1007603132UL, 2096580480UL, 1942768885UL, 1984297765UL, 1888157243UL, 960265104UL, 527990410UL, 1572910026UL, 1106822080UL, 1472807331UL, 2465011897UL, 3139401215UL, 3705452371UL, 393081842UL, 3826516196UL, 2576499701UL, +4130037087UL, 4155028170UL, 2188282304UL, 2949056849UL, 1138928618UL, 858751984UL, 3735375571UL, 496972334UL, 830265621UL, 1355757111UL, 909444416UL, 1337622259UL, 2616327935UL, 2337227347UL, 2139876075UL, 4269663356UL, 796316592UL, 1893005585UL, 3958551664UL, 1746456069UL, 2430709714UL, 4025417573UL, 3333292799UL, 1833607331UL, 3864559081UL, 3415700826UL, 3291421244UL, 1987321873UL, 1792851165UL, 505718946UL, 3755903648UL, 3351468604UL, +4035552813UL, 2052557448UL, 2879065999UL, 22933757UL, 2160014758UL, 2321387515UL, 3556641619UL, 1350613766UL, 2107757927UL, 309323868UL, 1850700415UL, 3424626316UL, 545651740UL, 1935764720UL, 2349926457UL, 979047283UL, 862046434UL, 167198649UL, 338290297UL, 1145807303UL, 4201635137UL, 883549156UL, 907871968UL, 638566313UL, 678764227UL, 2637527083UL, 3306095271UL, 1452688488UL, 621126888UL, 1838613968UL, 117966344UL, 1785040579UL, +454879400UL, 1952849106UL, 1907701866UL, 733998186UL, 1623968604UL, 2997422000UL, 2633878652UL, 1036670775UL, 3360491537UL, 3053533585UL, 1654709920UL, 1950620393UL, 4177745509UL, 1716078578UL, 2888573892UL, 2825965566UL, 1399790365UL, 1307674482UL, 2776111761UL, 384880529UL, 3497622676UL, 1024664651UL, 1541456182UL, 618916624UL, 1008618602UL, 2816673160UL, 684112698UL, 3332034744UL, 3340690804UL, 962627614UL, 3072103948UL, 3713153075UL, +476323310UL, 902990902UL, 126319837UL, 2155412848UL, 228580793UL, 2142696490UL, 4254301999UL, 2689599232UL, 426191419UL, 3157759186UL, 100239709UL, 3216403640UL, 1259677734UL, 2889209278UL, 1754641396UL, 1057778427UL, 3221479262UL, 1298500018UL, 3340348062UL, 3967049659UL, 2927469144UL, 3926654939UL, 2271956463UL, 3004309866UL, 260248338UL, 2570702480UL, 1879451653UL, 3168497089UL, 361311552UL, 2123195373UL, 2825457193UL, 341920668UL, +507483626UL, 1201669979UL, 910763802UL, 4158584821UL, 3748705813UL, 3375736126UL, 2857697336UL, 3112473104UL, 2683465481UL, 3336305747UL, 681020485UL, 4044713962UL, 2443109893UL, 129994063UL, 2578353596UL, 820410567UL, 601527649UL, 1007603132UL, 2096580480UL, 3155251071UL, 1984297765UL, 1888157243UL, 960265104UL, 527990410UL, 2548692624UL, 1106822080UL, 1472807331UL, 2465011897UL, 3139401215UL, 736629379UL, 393081842UL, 3826516196UL, +2576499701UL, 4130037087UL, 2440227627UL, 2188282304UL, 2949056849UL, 1138928618UL, 858751984UL, 191805249UL, 496972334UL, 830265621UL, 1355757111UL, 909444416UL, 396738554UL, 2616327935UL, 2337227347UL, 2139876075UL, 4269663356UL, 3932761947UL, 1893005585UL, 3958551664UL, 1746456069UL, 2430709714UL, 3171160829UL, 3333292799UL, 1833607331UL, 3864559081UL, 3415700826UL, 1332800826UL, 1987321873UL, 1792851165UL, 505718946UL, 3755903648UL, +1770588062UL, 4035552813UL, 2052557448UL, 2879065999UL, 22933757UL, 3159941473UL, 2321387515UL, 3556641619UL, 1350613766UL, 2107757927UL, 2669366188UL, 1850700415UL, 3424626316UL, 545651740UL, 1935764720UL, 3252475208UL, 979047283UL, 862046434UL, 167198649UL, 338290297UL, 771814471UL, 4201635137UL, 883549156UL, 907871968UL, 638566313UL, 184144160UL, 2637527083UL, 3306095271UL, 1452688488UL, 621126888UL, 4275587594UL, 117966344UL, +1785040579UL, 454879400UL, 1952849106UL, 3806424990UL, 733998186UL, 1623968604UL, 2997422000UL, 2633878652UL, 2670843077UL, 3360491537UL, 3053533585UL, 1654709920UL, 1950620393UL, 3541927406UL, 1716078578UL, 2888573892UL, 2825965566UL, 1399790365UL, 3184295779UL, 2776111761UL, 384880529UL, 3497622676UL, 1024664651UL, 723804135UL, 618916624UL, 1008618602UL, 2816673160UL, 684112698UL, 3275521308UL, 3340690804UL, 962627614UL, 3072103948UL, +3713153075UL, 2023106558UL, 902990902UL, 126319837UL, 2155412848UL, 228580793UL, 3978575748UL, 4254301999UL, 2689599232UL, 426191419UL, 3157759186UL, 2446138116UL, 3216403640UL, 1259677734UL, 2889209278UL, 1754641396UL, 1706032491UL, 3221479262UL, 1298500018UL, 3340348062UL, 3967049659UL, 3805001240UL, 3926654939UL, 2271956463UL, 3004309866UL, 260248338UL, 294480880UL, 1879451653UL, 3168497089UL, 361311552UL, 2123195373UL, 2080604411UL, +341920668UL, 507483626UL, 1201669979UL, 910763802UL, 2012149356UL, 3748705813UL, 3375736126UL, 2857697336UL, 3112473104UL, 2935748807UL, 3336305747UL, 681020485UL, 4044713962UL, 2443109893UL, 2862982895UL, 2578353596UL, 820410567UL, 601527649UL, 1007603132UL, 1890290066UL, 3155251071UL, 1984297765UL, 1888157243UL, 960265104UL, 41870487UL, 2548692624UL, 1106822080UL, 1472807331UL, 2465011897UL, 2382974023UL, 736629379UL, 393081842UL, +3826516196UL, 2576499701UL, 4219335149UL, 2440227627UL, 2188282304UL, 2949056849UL, 1138928618UL, 3785297102UL, 191805249UL, 496972334UL, 830265621UL, 1355757111UL, 3962907313UL, 396738554UL, 2616327935UL, 2337227347UL, 2139876075UL, 552154011UL, 3932761947UL, 1893005585UL, 3958551664UL, 1746456069UL, 895507243UL, 3171160829UL, 3333292799UL, 1833607331UL, 3864559081UL, 3564325554UL, 1332800826UL, 1987321873UL, 1792851165UL, 505718946UL, +3245448088UL, 1770588062UL, 4035552813UL, 2052557448UL, 2879065999UL, 3602157977UL, 3159941473UL, 2321387515UL, 3556641619UL, 1350613766UL, 4101259055UL, 2669366188UL, 1850700415UL, 3424626316UL, 545651740UL, 2873707882UL, 3252475208UL, 979047283UL, 862046434UL, 167198649UL, 654196140UL, 771814471UL, 4201635137UL, 883549156UL, 907871968UL, 191965184UL, 184144160UL, 2637527083UL, 3306095271UL, 1452688488UL, 1562736568UL, 4275587594UL, +117966344UL, 1785040579UL, 454879400UL, 3484019450UL, 3806424990UL, 733998186UL, 1623968604UL, 2997422000UL, 273316614UL, 2670843077UL, 3360491537UL, 3053533585UL, 1654709920UL, 591311873UL, 3541927406UL, 1716078578UL, 2888573892UL, 2825965566UL, 2277117038UL, 3184295779UL, 2776111761UL, 384880529UL, 3497622676UL, 1086566797UL, 723804135UL, 618916624UL, 1008618602UL, 2816673160UL, 3344392942UL, 3275521308UL, 3340690804UL, 962627614UL, +3072103948UL, 2910444460UL, 2023106558UL, 902990902UL, 126319837UL, 2155412848UL, 337119596UL, 3978575748UL, 4254301999UL, 2689599232UL, 426191419UL, 3471778695UL, 2446138116UL, 3216403640UL, 1259677734UL, 2889209278UL, 4102983766UL, 1706032491UL, 3221479262UL, 1298500018UL, 3340348062UL, 2940293024UL, 3805001240UL, 3926654939UL, 2271956463UL, 3004309866UL, 3634668003UL, 294480880UL, 1879451653UL, 3168497089UL, 361311552UL, 3417679321UL, +2080604411UL, 341920668UL, 507483626UL, 1201669979UL, 3174274528UL, 2012149356UL, 3748705813UL, 3375736126UL, 2857697336UL, 3929686609UL, 2935748807UL, 3336305747UL, 681020485UL, 4044713962UL, 405011299UL, 2862982895UL, 2578353596UL, 820410567UL, 601527649UL, 4281957726UL, 1890290066UL, 3155251071UL, 1984297765UL, 1888157243UL, 1978308818UL, 41870487UL, 2548692624UL, 1106822080UL, 1472807331UL, 3701147046UL, 2382974023UL, 736629379UL, +393081842UL, 3826516196UL, 3225163595UL, 4219335149UL, 2440227627UL, 2188282304UL, 2949056849UL, 3894577191UL, 3785297102UL, 191805249UL, 496972334UL, 830265621UL, 4293577013UL, 3962907313UL, 396738554UL, 2616327935UL, 2337227347UL, 3701032380UL, 552154011UL, 3932761947UL, 1893005585UL, 3958551664UL, 4148575672UL, 895507243UL, 3171160829UL, 3333292799UL, 1833607331UL, 1596419195UL, 3564325554UL, 1332800826UL, 1987321873UL, 1792851165UL, +3663406943UL, 3892533309UL, 247565591UL, 953356243UL, 4103354183UL, 1908418768UL, 3915294912UL, 2390669489UL, 3865260287UL, 1818313429UL, 557880278UL, 2499771815UL, 2618380525UL, 732785004UL, 1414011135UL, 2858311749UL, 3871596970UL, 2428464498UL, 645476041UL, 683035653UL, 4079609082UL, 2404111028UL, 3332056297UL, 3054547484UL, 3616426087UL, 1311379849UL, 3682136336UL, 3795847093UL, 1509718393UL, 541389178UL, 1103876446UL, 2549442278UL, +3656600574UL, 3019560735UL, 523610761UL, 3889482885UL, 3080739216UL, 2359120072UL, 1034857006UL, 63567637UL, 1520176098UL, 1741685274UL, 2330217396UL, 1429674399UL, 517809884UL, 2653145241UL, 868296581UL, 646514407UL, 3166145188UL, 3023629813UL, 2333851648UL, 2967365394UL, 1828821737UL, 3333092181UL, 445460259UL, 2682093551UL, 3655100102UL, 2592872076UL, 1588368999UL, 3964958220UL, 755397374UL, 1912970603UL, 396253754UL, 4260038354UL, +1530898510UL, 2396805917UL, 3327501452UL, 4235709361UL, 2762163349UL, 553869167UL, 3162483580UL, 1611891352UL, 248738605UL, 3403092967UL, 2194464420UL, 113420452UL, 1752444845UL, 3770903547UL, 2397481985UL, 2866414964UL, 2555678075UL, 2796010061UL, 762034588UL, 2679383682UL, 1848516655UL, 3857720381UL, 1119111363UL, 1829110546UL, 2183620391UL, 1743838702UL, 3363053704UL, 2212810289UL, 966205413UL, 3897281091UL, 2148139678UL, 2690229390UL, +427450194UL, 3516115778UL, 1864991059UL, 134448489UL, 3397232480UL, 3999530682UL, 1927036992UL, 3170864927UL, 3879295489UL, 134554462UL, 3447324105UL, 86678510UL, 1656551206UL, 2844494044UL, 2469678938UL, 2885597732UL, 2715483555UL, 3566904604UL, 462585182UL, 1922457093UL, 3035264235UL, 2866504077UL, 2031456720UL, 1598555964UL, 2569915450UL, 3947972758UL, 290683210UL, 2465427488UL, 3504862176UL, 793156806UL, 1722326752UL, 2706215067UL, +3818976191UL, 2007064241UL, 552144413UL, 2692866408UL, 3975075075UL, 4293828741UL, 1123460373UL, 960845744UL, 1855626484UL, 1876934434UL, 1343778249UL, 912185207UL, 127278206UL, 4168930635UL, 340393978UL, 65814528UL, 2552086271UL, 2507474816UL, 1240220220UL, 1761964455UL, 2204917500UL, 4088965101UL, 1079310398UL, 3071460742UL, 2188549805UL, 1064733776UL, 4191719087UL, 3221046115UL, 3772395288UL, 883516842UL, 2077853840UL, 229484673UL, +}, +{ +448889887UL, 3508620909UL, 4164289950UL, 155254859UL, 298319697UL, 980080883UL, 3500794888UL, 3974907245UL, 682778656UL, 382798811UL, 1500342771UL, 3942535492UL, 1039809505UL, 2126581011UL, 561192171UL, 4046277638UL, 840733718UL, 1694555864UL, 241216466UL, 4182349979UL, 2525929010UL, 386794637UL, 349755829UL, 2959959729UL, 686974318UL, 3243688353UL, 3911051908UL, 3917458620UL, 441833800UL, 3164548257UL, 584185450UL, 450132281UL, +3528356519UL, 4275666503UL, 1317069624UL, 817077137UL, 2945430988UL, 1532878265UL, 2542155552UL, 3348614029UL, 1419611574UL, 1245233100UL, 1981161828UL, 1161647342UL, 2781439556UL, 3896025436UL, 2349200248UL, 1213899699UL, 860301545UL, 1590934964UL, 3371591516UL, 2850926464UL, 2774569126UL, 907316453UL, 3541736952UL, 3572719697UL, 278602945UL, 4257620354UL, 3396349537UL, 3144949411UL, 191271983UL, 2974056951UL, 2743594803UL, 1119054633UL, +815666748UL, 920991498UL, 187861899UL, 2008325469UL, 1548504646UL, 3749744762UL, 993523345UL, 1171349070UL, 4105576982UL, 1559471848UL, 2656434170UL, 2795453957UL, 3357293755UL, 4260164297UL, 2211998873UL, 1783238785UL, 2831224398UL, 1704939914UL, 2626903427UL, 1148581053UL, 849777796UL, 4219173763UL, 694869701UL, 1297370017UL, 3573985711UL, 1739242781UL, 3680794431UL, 400850360UL, 909653264UL, 1496585542UL, 460982606UL, 828640603UL, +3993062500UL, 2145047281UL, 1587836828UL, 912583500UL, 1234319994UL, 4276951314UL, 485282908UL, 1903750880UL, 1667769214UL, 3950976882UL, 3711912938UL, 3626058764UL, 627857875UL, 436470402UL, 1753727232UL, 50241405UL, 206782941UL, 612110492UL, 954016857UL, 2567547031UL, 3360482779UL, 820704062UL, 412722485UL, 2044763466UL, 1915626743UL, 2703000434UL, 2755090057UL, 53587450UL, 2457122208UL, 1397065983UL, 2822294224UL, 3024827428UL, +2201149820UL, 699377793UL, 157099022UL, 2792298089UL, 3927835437UL, 1095494739UL, 1230723791UL, 2740420278UL, 2518077381UL, 3674832547UL, 2375246835UL, 923451748UL, 3665432731UL, 1577970518UL, 2643388181UL, 4050379756UL, 1145072065UL, 1632232822UL, 2365350332UL, 1126185680UL, 930842061UL, 3816331201UL, 1624573114UL, 3809118349UL, 1187817320UL, 945407897UL, 63630679UL, 1852369563UL, 971772965UL, 2229069035UL, 2320405193UL, 3474864049UL, +1666937976UL, 448889887UL, 3508620909UL, 4164289950UL, 155254859UL, 3157319819UL, 980080883UL, 3500794888UL, 3974907245UL, 682778656UL, 3201604042UL, 1500342771UL, 3942535492UL, 1039809505UL, 2126581011UL, 3235144326UL, 4046277638UL, 840733718UL, 1694555864UL, 241216466UL, 2728337326UL, 2525929010UL, 386794637UL, 349755829UL, 2959959729UL, 20820947UL, 3243688353UL, 3911051908UL, 3917458620UL, 441833800UL, 4143649787UL, 584185450UL, +450132281UL, 3528356519UL, 4275666503UL, 3541347868UL, 817077137UL, 2945430988UL, 1532878265UL, 2542155552UL, 3199458552UL, 1419611574UL, 1245233100UL, 1981161828UL, 1161647342UL, 958085276UL, 3896025436UL, 2349200248UL, 1213899699UL, 860301545UL, 1701089635UL, 3371591516UL, 2850926464UL, 2774569126UL, 907316453UL, 1529987826UL, 3572719697UL, 278602945UL, 4257620354UL, 3396349537UL, 4120000342UL, 191271983UL, 2974056951UL, 2743594803UL, +1119054633UL, 4255116655UL, 920991498UL, 187861899UL, 2008325469UL, 1548504646UL, 100038488UL, 993523345UL, 1171349070UL, 4105576982UL, 1559471848UL, 2523523381UL, 2795453957UL, 3357293755UL, 4260164297UL, 2211998873UL, 3644225670UL, 2831224398UL, 1704939914UL, 2626903427UL, 1148581053UL, 1292003378UL, 4219173763UL, 694869701UL, 1297370017UL, 3573985711UL, 2510138592UL, 3680794431UL, 400850360UL, 909653264UL, 1496585542UL, 1738256576UL, +828640603UL, 3993062500UL, 2145047281UL, 1587836828UL, 3478998519UL, 1234319994UL, 4276951314UL, 485282908UL, 1903750880UL, 746205619UL, 3950976882UL, 3711912938UL, 3626058764UL, 627857875UL, 954627753UL, 1753727232UL, 50241405UL, 206782941UL, 612110492UL, 2251018875UL, 2567547031UL, 3360482779UL, 820704062UL, 412722485UL, 2120077037UL, 1915626743UL, 2703000434UL, 2755090057UL, 53587450UL, 2696843657UL, 1397065983UL, 2822294224UL, +3024827428UL, 2201149820UL, 3308142895UL, 157099022UL, 2792298089UL, 3927835437UL, 1095494739UL, 730099534UL, 2740420278UL, 2518077381UL, 3674832547UL, 2375246835UL, 2126745526UL, 3665432731UL, 1577970518UL, 2643388181UL, 4050379756UL, 2987545029UL, 1632232822UL, 2365350332UL, 1126185680UL, 930842061UL, 3140947362UL, 1624573114UL, 3809118349UL, 1187817320UL, 945407897UL, 1282799903UL, 1852369563UL, 971772965UL, 2229069035UL, 2320405193UL, +670134249UL, 1666937976UL, 448889887UL, 3508620909UL, 4164289950UL, 127045110UL, 3157319819UL, 980080883UL, 3500794888UL, 3974907245UL, 2740953010UL, 3201604042UL, 1500342771UL, 3942535492UL, 1039809505UL, 306788856UL, 3235144326UL, 4046277638UL, 840733718UL, 1694555864UL, 2260304655UL, 2728337326UL, 2525929010UL, 386794637UL, 349755829UL, 3842816805UL, 20820947UL, 3243688353UL, 3911051908UL, 3917458620UL, 3398227861UL, 4143649787UL, +584185450UL, 450132281UL, 3528356519UL, 550401017UL, 3541347868UL, 817077137UL, 2945430988UL, 1532878265UL, 1045681234UL, 3199458552UL, 1419611574UL, 1245233100UL, 1981161828UL, 1153297031UL, 958085276UL, 3896025436UL, 2349200248UL, 1213899699UL, 1451842347UL, 1701089635UL, 3371591516UL, 2850926464UL, 2774569126UL, 1269128107UL, 1529987826UL, 3572719697UL, 278602945UL, 4257620354UL, 2479560493UL, 4120000342UL, 191271983UL, 2974056951UL, +2743594803UL, 4081110580UL, 4255116655UL, 920991498UL, 187861899UL, 2008325469UL, 1300371976UL, 100038488UL, 993523345UL, 1171349070UL, 4105576982UL, 3010753279UL, 2523523381UL, 2795453957UL, 3357293755UL, 4260164297UL, 207153762UL, 3644225670UL, 2831224398UL, 1704939914UL, 2626903427UL, 916783095UL, 1292003378UL, 4219173763UL, 694869701UL, 1297370017UL, 3388725608UL, 2510138592UL, 3680794431UL, 400850360UL, 909653264UL, 2421730678UL, +1738256576UL, 828640603UL, 3993062500UL, 2145047281UL, 2123619770UL, 3478998519UL, 1234319994UL, 4276951314UL, 485282908UL, 4002661777UL, 746205619UL, 3950976882UL, 3711912938UL, 3626058764UL, 1230937254UL, 954627753UL, 1753727232UL, 50241405UL, 206782941UL, 460314337UL, 2251018875UL, 2567547031UL, 3360482779UL, 820704062UL, 1339598718UL, 2120077037UL, 1915626743UL, 2703000434UL, 2755090057UL, 660730207UL, 2696843657UL, 1397065983UL, +2822294224UL, 3024827428UL, 126840648UL, 3308142895UL, 157099022UL, 2792298089UL, 3927835437UL, 2192535935UL, 730099534UL, 2740420278UL, 2518077381UL, 3674832547UL, 1879512787UL, 2126745526UL, 3665432731UL, 1577970518UL, 2643388181UL, 832572764UL, 2987545029UL, 1632232822UL, 2365350332UL, 1126185680UL, 3248646182UL, 3140947362UL, 1624573114UL, 3809118349UL, 1187817320UL, 4270855000UL, 1282799903UL, 1852369563UL, 971772965UL, 2229069035UL, +3735782785UL, 670134249UL, 1666937976UL, 448889887UL, 3508620909UL, 3681408470UL, 127045110UL, 3157319819UL, 980080883UL, 3500794888UL, 3967872553UL, 2740953010UL, 3201604042UL, 1500342771UL, 3942535492UL, 613854690UL, 306788856UL, 3235144326UL, 4046277638UL, 840733718UL, 3957877023UL, 2260304655UL, 2728337326UL, 2525929010UL, 386794637UL, 1779451936UL, 3842816805UL, 20820947UL, 3243688353UL, 3911051908UL, 688470429UL, 3398227861UL, +4143649787UL, 584185450UL, 450132281UL, 3381050556UL, 550401017UL, 3541347868UL, 817077137UL, 2945430988UL, 1859551669UL, 1045681234UL, 3199458552UL, 1419611574UL, 1245233100UL, 53681099UL, 1153297031UL, 958085276UL, 3896025436UL, 2349200248UL, 1796144514UL, 1451842347UL, 1701089635UL, 3371591516UL, 2850926464UL, 1337394836UL, 1269128107UL, 1529987826UL, 3572719697UL, 278602945UL, 46913829UL, 2479560493UL, 4120000342UL, 191271983UL, +2974056951UL, 1361976701UL, 4081110580UL, 4255116655UL, 920991498UL, 187861899UL, 1237191391UL, 1300371976UL, 100038488UL, 993523345UL, 1171349070UL, 3168325479UL, 3010753279UL, 2523523381UL, 2795453957UL, 3357293755UL, 2142853843UL, 207153762UL, 3644225670UL, 2831224398UL, 1704939914UL, 2369686128UL, 916783095UL, 1292003378UL, 4219173763UL, 694869701UL, 4150182218UL, 3388725608UL, 2510138592UL, 3680794431UL, 400850360UL, 654034492UL, +2421730678UL, 1738256576UL, 828640603UL, 3993062500UL, 84735560UL, 2123619770UL, 3478998519UL, 1234319994UL, 4276951314UL, 2545204994UL, 4002661777UL, 746205619UL, 3950976882UL, 3711912938UL, 426068544UL, 1230937254UL, 954627753UL, 1753727232UL, 50241405UL, 589286339UL, 460314337UL, 2251018875UL, 2567547031UL, 3360482779UL, 3279873953UL, 1339598718UL, 2120077037UL, 1915626743UL, 2703000434UL, 2720159887UL, 660730207UL, 2696843657UL, +1397065983UL, 2822294224UL, 3536645029UL, 126840648UL, 3308142895UL, 157099022UL, 2792298089UL, 485214530UL, 2192535935UL, 730099534UL, 2740420278UL, 2518077381UL, 418832171UL, 1879512787UL, 2126745526UL, 3665432731UL, 1577970518UL, 721018UL, 832572764UL, 2987545029UL, 1632232822UL, 2365350332UL, 1769688764UL, 3248646182UL, 3140947362UL, 1624573114UL, 3809118349UL, 3561012744UL, 4270855000UL, 1282799903UL, 1852369563UL, 971772965UL, +2160782957UL, 105464019UL, 2131462864UL, 335205049UL, 3271229551UL, 1374396416UL, 4269753677UL, 1984596635UL, 37563880UL, 3956352262UL, 2168603656UL, 311623712UL, 1593371323UL, 351020595UL, 3439337532UL, 3130874657UL, 3613343327UL, 695789539UL, 609797513UL, 53642143UL, 1479027519UL, 1588831722UL, 262810641UL, 3418379977UL, 530167431UL, 1962487963UL, 2410103328UL, 3360114680UL, 3548827677UL, 2735238248UL, 2136058369UL, 4013192489UL, +4106245442UL, 2155966460UL, 3653971354UL, 1230293148UL, 3966689348UL, 3455336684UL, 3594979856UL, 3178937309UL, 3983796170UL, 3617590004UL, 1727358326UL, 1121418876UL, 1022562029UL, 2437823131UL, 2733424381UL, 452731958UL, 2983755220UL, 1674750403UL, 3110921909UL, 3514365950UL, 2193238341UL, 2073801740UL, 669573402UL, 1824298084UL, 22336337UL, 3366446304UL, 1536043612UL, 2502297553UL, 1409641611UL, 2399583184UL, 2593245170UL, 716832039UL, +4286149460UL, 814849965UL, 4239224908UL, 2453627262UL, 976385355UL, 1846129423UL, 52096201UL, 88835472UL, 2621770794UL, 2491757130UL, 1849417480UL, 576668065UL, 2186701850UL, 3357019214UL, 442191324UL, 3662645846UL, 3653766782UL, 2254203663UL, 1169821059UL, 3735427676UL, 2246044748UL, 2635264668UL, 2647842566UL, 1435695450UL, 1658777934UL, 2927080369UL, 1341088646UL, 3565982642UL, 221661496UL, 3246988243UL, 2718455491UL, 483517148UL, +4181332651UL, 1143646375UL, 1720449423UL, 331164544UL, 539836322UL, 3485371630UL, 1110077273UL, 4088985694UL, 145720169UL, 2382276586UL, 4276410795UL, 2051956774UL, 936524156UL, 15415192UL, 1815949694UL, 272696290UL, 1495465483UL, 3102030383UL, 3546078241UL, 3272619595UL, 759699322UL, 1161486824UL, 1146281812UL, 4194130649UL, 3936306436UL, 4077338125UL, 2127551216UL, 2995077453UL, 209698652UL, 3836657987UL, 1782152220UL, 1642490089UL, +3695579542UL, 537862234UL, 1696168156UL, 4022607UL, 3642864269UL, 54404878UL, 2925910542UL, 3444042482UL, 1931288691UL, 2269375687UL, 614870298UL, 1139082272UL, 3672546472UL, 3255845763UL, 2987873616UL, 3436501734UL, 380553853UL, 750118352UL, 750708138UL, 488564982UL, 2936846643UL, 3460652101UL, 3085496886UL, 3734224010UL, 523359404UL, 2751912206UL, 3302219188UL, 2729509827UL, 1995554251UL, 2288103059UL, 3289667468UL, 2860301591UL, +}, +{ +3481653941UL, 2111903071UL, 3569014882UL, 1149634763UL, 4206972571UL, 2948781360UL, 2576820949UL, 2587099571UL, 3987042644UL, 4255777336UL, 2829594348UL, 3832744490UL, 3554499754UL, 787920018UL, 695635693UL, 2746034685UL, 2078139227UL, 1144320548UL, 4020978225UL, 449503505UL, 3004993826UL, 2045843139UL, 1604631401UL, 148449881UL, 457819243UL, 4089112489UL, 1713441237UL, 1790909556UL, 3334464951UL, 3070008305UL, 811825474UL, 4089105370UL, +708239097UL, 1494832299UL, 2074902973UL, 468898217UL, 1722559700UL, 2499754488UL, 2267939270UL, 650114709UL, 549502184UL, 4040463514UL, 4228169080UL, 4094284819UL, 1599334548UL, 2992525399UL, 2107053637UL, 197348940UL, 1669884894UL, 3982326753UL, 4259099320UL, 1862793542UL, 1751219817UL, 2701271514UL, 2507353222UL, 1488339939UL, 4246544316UL, 3978321870UL, 132720476UL, 3020305599UL, 154822619UL, 2595474066UL, 1654579304UL, 1997335204UL, +891320674UL, 3153502700UL, 601607977UL, 2695457160UL, 4137981809UL, 37584248UL, 1674050253UL, 1805619463UL, 676369068UL, 2294902904UL, 658143166UL, 141452045UL, 2383327493UL, 1222336195UL, 2628962123UL, 2378299402UL, 2724274090UL, 1783957650UL, 453206569UL, 3190116972UL, 1480368955UL, 1145768764UL, 3628222572UL, 3108689607UL, 182547022UL, 360165920UL, 3378423016UL, 1443723222UL, 2843274258UL, 1597581683UL, 664283285UL, 258077235UL, +3071875976UL, 240688930UL, 988895736UL, 2965351284UL, 91332032UL, 941306162UL, 2464278288UL, 3493666272UL, 2437043750UL, 2356658919UL, 24726067UL, 3025656863UL, 1343636659UL, 2408295270UL, 3097408183UL, 461428710UL, 2449005423UL, 3220070834UL, 1418517867UL, 907095008UL, 428073188UL, 1938061314UL, 2094361729UL, 2570445990UL, 346999411UL, 990247709UL, 1630488660UL, 2574142591UL, 1466590284UL, 1906935236UL, 1592544037UL, 4168163186UL, +2773942807UL, 939392801UL, 1610069434UL, 1935303983UL, 2962954128UL, 2490925509UL, 4103025390UL, 3614258069UL, 174125899UL, 4113855120UL, 2449365101UL, 3384244363UL, 4115219971UL, 3187664453UL, 4021992190UL, 2959372973UL, 2946571025UL, 2144945539UL, 388172915UL, 1125615727UL, 881693338UL, 3313110562UL, 859388069UL, 177786360UL, 4134747901UL, 616417204UL, 2104495620UL, 783302897UL, 512784708UL, 1295821322UL, 3810209448UL, 2966899912UL, +2390608767UL, 3481653941UL, 2111903071UL, 3569014882UL, 1149634763UL, 1385372463UL, 2948781360UL, 2576820949UL, 2587099571UL, 3987042644UL, 2251144849UL, 2829594348UL, 3832744490UL, 3554499754UL, 787920018UL, 73007125UL, 2746034685UL, 2078139227UL, 1144320548UL, 4020978225UL, 2729117517UL, 3004993826UL, 2045843139UL, 1604631401UL, 148449881UL, 3343221736UL, 4089112489UL, 1713441237UL, 1790909556UL, 3334464951UL, 1920962856UL, 811825474UL, +4089105370UL, 708239097UL, 1494832299UL, 2485576001UL, 468898217UL, 1722559700UL, 2499754488UL, 2267939270UL, 2271486862UL, 549502184UL, 4040463514UL, 4228169080UL, 4094284819UL, 3177940420UL, 2992525399UL, 2107053637UL, 197348940UL, 1669884894UL, 3596140613UL, 4259099320UL, 1862793542UL, 1751219817UL, 2701271514UL, 1357847339UL, 1488339939UL, 4246544316UL, 3978321870UL, 132720476UL, 344033794UL, 154822619UL, 2595474066UL, 1654579304UL, +1997335204UL, 1849659590UL, 3153502700UL, 601607977UL, 2695457160UL, 4137981809UL, 3559496104UL, 1674050253UL, 1805619463UL, 676369068UL, 2294902904UL, 1583197657UL, 141452045UL, 2383327493UL, 1222336195UL, 2628962123UL, 3486106126UL, 2724274090UL, 1783957650UL, 453206569UL, 3190116972UL, 1939413704UL, 1145768764UL, 3628222572UL, 3108689607UL, 182547022UL, 2911760834UL, 3378423016UL, 1443723222UL, 2843274258UL, 1597581683UL, 3599911248UL, +258077235UL, 3071875976UL, 240688930UL, 988895736UL, 4263328855UL, 91332032UL, 941306162UL, 2464278288UL, 3493666272UL, 1561559932UL, 2356658919UL, 24726067UL, 3025656863UL, 1343636659UL, 257301433UL, 3097408183UL, 461428710UL, 2449005423UL, 3220070834UL, 3544357262UL, 907095008UL, 428073188UL, 1938061314UL, 2094361729UL, 4112109825UL, 346999411UL, 990247709UL, 1630488660UL, 2574142591UL, 1466763688UL, 1906935236UL, 1592544037UL, +4168163186UL, 2773942807UL, 3608227467UL, 1610069434UL, 1935303983UL, 2962954128UL, 2490925509UL, 825197245UL, 3614258069UL, 174125899UL, 4113855120UL, 2449365101UL, 167881680UL, 4115219971UL, 3187664453UL, 4021992190UL, 2959372973UL, 1971633162UL, 2144945539UL, 388172915UL, 1125615727UL, 881693338UL, 223946687UL, 859388069UL, 177786360UL, 4134747901UL, 616417204UL, 722598357UL, 783302897UL, 512784708UL, 1295821322UL, 3810209448UL, +1589703161UL, 2390608767UL, 3481653941UL, 2111903071UL, 3569014882UL, 2520719089UL, 1385372463UL, 2948781360UL, 2576820949UL, 2587099571UL, 1427210741UL, 2251144849UL, 2829594348UL, 3832744490UL, 3554499754UL, 1257461820UL, 73007125UL, 2746034685UL, 2078139227UL, 1144320548UL, 3065859797UL, 2729117517UL, 3004993826UL, 2045843139UL, 1604631401UL, 36092756UL, 3343221736UL, 4089112489UL, 1713441237UL, 1790909556UL, 1504385586UL, 1920962856UL, +811825474UL, 4089105370UL, 708239097UL, 4135459720UL, 2485576001UL, 468898217UL, 1722559700UL, 2499754488UL, 1392696606UL, 2271486862UL, 549502184UL, 4040463514UL, 4228169080UL, 2521060775UL, 3177940420UL, 2992525399UL, 2107053637UL, 197348940UL, 4225425195UL, 3596140613UL, 4259099320UL, 1862793542UL, 1751219817UL, 3752827533UL, 1357847339UL, 1488339939UL, 4246544316UL, 3978321870UL, 270743120UL, 344033794UL, 154822619UL, 2595474066UL, +1654579304UL, 986127123UL, 1849659590UL, 3153502700UL, 601607977UL, 2695457160UL, 437034992UL, 3559496104UL, 1674050253UL, 1805619463UL, 676369068UL, 956939381UL, 1583197657UL, 141452045UL, 2383327493UL, 1222336195UL, 3287498300UL, 3486106126UL, 2724274090UL, 1783957650UL, 453206569UL, 3610364652UL, 1939413704UL, 1145768764UL, 3628222572UL, 3108689607UL, 708259891UL, 2911760834UL, 3378423016UL, 1443723222UL, 2843274258UL, 1498209005UL, +3599911248UL, 258077235UL, 3071875976UL, 240688930UL, 3815218922UL, 4263328855UL, 91332032UL, 941306162UL, 2464278288UL, 3018835600UL, 1561559932UL, 2356658919UL, 24726067UL, 3025656863UL, 368313673UL, 257301433UL, 3097408183UL, 461428710UL, 2449005423UL, 3690066046UL, 3544357262UL, 907095008UL, 428073188UL, 1938061314UL, 2274317748UL, 4112109825UL, 346999411UL, 990247709UL, 1630488660UL, 1584471638UL, 1466763688UL, 1906935236UL, +1592544037UL, 4168163186UL, 473837206UL, 3608227467UL, 1610069434UL, 1935303983UL, 2962954128UL, 391171548UL, 825197245UL, 3614258069UL, 174125899UL, 4113855120UL, 2095676907UL, 167881680UL, 4115219971UL, 3187664453UL, 4021992190UL, 4246237180UL, 1971633162UL, 2144945539UL, 388172915UL, 1125615727UL, 3158677395UL, 223946687UL, 859388069UL, 177786360UL, 4134747901UL, 4017781965UL, 722598357UL, 783302897UL, 512784708UL, 1295821322UL, +3908594844UL, 1589703161UL, 2390608767UL, 3481653941UL, 2111903071UL, 2713757719UL, 2520719089UL, 1385372463UL, 2948781360UL, 2576820949UL, 638075690UL, 1427210741UL, 2251144849UL, 2829594348UL, 3832744490UL, 2871270139UL, 1257461820UL, 73007125UL, 2746034685UL, 2078139227UL, 1974062189UL, 3065859797UL, 2729117517UL, 3004993826UL, 2045843139UL, 772058252UL, 36092756UL, 3343221736UL, 4089112489UL, 1713441237UL, 2172680702UL, 1504385586UL, +1920962856UL, 811825474UL, 4089105370UL, 1822881146UL, 4135459720UL, 2485576001UL, 468898217UL, 1722559700UL, 3429640856UL, 1392696606UL, 2271486862UL, 549502184UL, 4040463514UL, 3072935276UL, 2521060775UL, 3177940420UL, 2992525399UL, 2107053637UL, 1114377646UL, 4225425195UL, 3596140613UL, 4259099320UL, 1862793542UL, 1439724658UL, 3752827533UL, 1357847339UL, 1488339939UL, 4246544316UL, 1051119047UL, 270743120UL, 344033794UL, 154822619UL, +2595474066UL, 3143800435UL, 986127123UL, 1849659590UL, 3153502700UL, 601607977UL, 2334441739UL, 437034992UL, 3559496104UL, 1674050253UL, 1805619463UL, 455274178UL, 956939381UL, 1583197657UL, 141452045UL, 2383327493UL, 1520979444UL, 3287498300UL, 3486106126UL, 2724274090UL, 1783957650UL, 2212706740UL, 3610364652UL, 1939413704UL, 1145768764UL, 3628222572UL, 2719501850UL, 708259891UL, 2911760834UL, 3378423016UL, 1443723222UL, 2678486648UL, +1498209005UL, 3599911248UL, 258077235UL, 3071875976UL, 513762712UL, 3815218922UL, 4263328855UL, 91332032UL, 941306162UL, 3000922309UL, 3018835600UL, 1561559932UL, 2356658919UL, 24726067UL, 3626352172UL, 368313673UL, 257301433UL, 3097408183UL, 461428710UL, 2370224855UL, 3690066046UL, 3544357262UL, 907095008UL, 428073188UL, 2279237523UL, 2274317748UL, 4112109825UL, 346999411UL, 990247709UL, 896290404UL, 1584471638UL, 1466763688UL, +1906935236UL, 1592544037UL, 2387522308UL, 473837206UL, 3608227467UL, 1610069434UL, 1935303983UL, 4120978868UL, 391171548UL, 825197245UL, 3614258069UL, 174125899UL, 2940674123UL, 2095676907UL, 167881680UL, 4115219971UL, 3187664453UL, 456143482UL, 4246237180UL, 1971633162UL, 2144945539UL, 388172915UL, 4041481385UL, 3158677395UL, 223946687UL, 859388069UL, 177786360UL, 3094936989UL, 4017781965UL, 722598357UL, 783302897UL, 512784708UL, +4078350595UL, 2002159085UL, 3374931831UL, 1327513052UL, 4231642441UL, 2398594140UL, 2750176655UL, 2377078716UL, 3051451207UL, 2923556938UL, 392203913UL, 970480700UL, 1611278056UL, 1212903807UL, 85815670UL, 2398261756UL, 1052760308UL, 175807153UL, 2617028873UL, 1862087601UL, 1824020594UL, 3770624867UL, 141863380UL, 2090619424UL, 3994019338UL, 2363183556UL, 3095139522UL, 1792884692UL, 3026343485UL, 2320955816UL, 145789343UL, 214170401UL, +2926373126UL, 3858640613UL, 2188241463UL, 459887603UL, 2117474937UL, 2514234285UL, 1454156613UL, 1675396814UL, 4188979068UL, 1584843874UL, 3594779833UL, 563029256UL, 28681425UL, 446949770UL, 3498545218UL, 435874305UL, 3448653884UL, 863509898UL, 2247299904UL, 4211345429UL, 971855563UL, 1475394960UL, 3401692834UL, 167361776UL, 496249436UL, 1465278889UL, 780336162UL, 2108770597UL, 1806981510UL, 3677875653UL, 1890122303UL, 16399665UL, +2747394159UL, 2098019492UL, 1597583332UL, 1763649529UL, 1286079969UL, 1846278877UL, 1016796923UL, 959676917UL, 3091540766UL, 1626192266UL, 780987350UL, 1102963422UL, 2507002232UL, 691766944UL, 193328868UL, 981596600UL, 2384820612UL, 3149668778UL, 1691569420UL, 2852237957UL, 893819979UL, 2572584243UL, 216077070UL, 1267249886UL, 2572508880UL, 1706489454UL, 2391561733UL, 2608477467UL, 209783612UL, 765896849UL, 3617020328UL, 3488800100UL, +2237655981UL, 2095308189UL, 963275857UL, 3563488318UL, 1865487834UL, 480006810UL, 18562439UL, 1025913188UL, 3368592397UL, 374648713UL, 2421713724UL, 2705651398UL, 3098059650UL, 1109934605UL, 3085839620UL, 3184266772UL, 2359972463UL, 862934481UL, 3624479194UL, 3574284465UL, 2700143837UL, 2468083868UL, 3798800988UL, 4116964911UL, 1832002264UL, 4276154871UL, 3256889524UL, 4036954281UL, 697729046UL, 886223984UL, 2196986730UL, 1157617208UL, +1995907944UL, 398452318UL, 3523714364UL, 613570866UL, 2962430983UL, 1408814780UL, 892117129UL, 4173164219UL, 3894076479UL, 2721348430UL, 555734931UL, 1869034419UL, 336114876UL, 3142554871UL, 3349604636UL, 3450290892UL, 955122895UL, 2202902910UL, 2558366468UL, 1701182712UL, 283197682UL, 1865942385UL, 2027648778UL, 2285857699UL, 880475184UL, 958651279UL, 169534250UL, 3842420528UL, 1568559789UL, 2986618464UL, 2568345525UL, 3081082692UL, +}, +{ +575494427UL, 2773243709UL, 4009191487UL, 3877909663UL, 2252044261UL, 1328043370UL, 1407136778UL, 3204434425UL, 3881653592UL, 1481049819UL, 2939203697UL, 889352935UL, 628666312UL, 165199023UL, 2949092155UL, 1116804589UL, 998930334UL, 4144153491UL, 4191022348UL, 9022505UL, 4033326555UL, 2329569601UL, 824756145UL, 3501916851UL, 1481410328UL, 1970954319UL, 4022176157UL, 2356841052UL, 3783173734UL, 3649102345UL, 3205430658UL, 1460938436UL, +280282398UL, 3262135457UL, 4055383786UL, 28522973UL, 1100901182UL, 4048609665UL, 994490185UL, 2888527367UL, 3591919750UL, 65093467UL, 399797207UL, 3377740861UL, 3103183487UL, 3696509979UL, 866353724UL, 3847992271UL, 2821933890UL, 1491144079UL, 1702442928UL, 1271285504UL, 636444475UL, 2465430290UL, 2440306765UL, 2651443172UL, 2895101023UL, 43843628UL, 518479547UL, 3708355608UL, 2313400729UL, 3786408564UL, 2823763904UL, 3267560272UL, +524168411UL, 2580824843UL, 2687886610UL, 785942949UL, 2624395631UL, 3713348903UL, 4104123478UL, 2234056629UL, 2683158959UL, 1805382347UL, 1645702909UL, 382688861UL, 2843792951UL, 39122499UL, 2765954033UL, 3033237617UL, 784228054UL, 1680611136UL, 2306036746UL, 892707919UL, 3825738103UL, 1289362844UL, 3462989616UL, 484526950UL, 178560970UL, 1863413515UL, 71290794UL, 1716785670UL, 3881310302UL, 2826977504UL, 2312744076UL, 1000001815UL, +1580868938UL, 3808984884UL, 2521899773UL, 738699928UL, 2244576791UL, 1833964269UL, 1361345793UL, 2934763305UL, 2944705940UL, 2334116476UL, 674208214UL, 587191877UL, 271361277UL, 1639419136UL, 2742744205UL, 2556530506UL, 3764115510UL, 861410771UL, 3473658359UL, 2879790483UL, 1497452846UL, 1101855458UL, 2268199923UL, 1766359872UL, 480532790UL, 2926891626UL, 1366888524UL, 2262816900UL, 620045088UL, 2279182738UL, 2479688463UL, 427385986UL, +271096497UL, 1999040724UL, 1980388138UL, 3104550456UL, 2496325717UL, 2941450111UL, 1784373495UL, 4020221165UL, 2567325850UL, 2636190539UL, 2764516078UL, 2285887821UL, 2395930109UL, 1867061176UL, 665795763UL, 3869868300UL, 4033135159UL, 2589983679UL, 682593183UL, 1254600537UL, 1701095863UL, 3738080583UL, 369734429UL, 2231641462UL, 1866531599UL, 1317004965UL, 466053171UL, 2320346625UL, 485850108UL, 1279183025UL, 423884362UL, 1878291714UL, +228799661UL, 575494427UL, 2773243709UL, 4009191487UL, 3877909663UL, 1392246100UL, 1328043370UL, 1407136778UL, 3204434425UL, 3881653592UL, 303018213UL, 2939203697UL, 889352935UL, 628666312UL, 165199023UL, 691563049UL, 1116804589UL, 998930334UL, 4144153491UL, 4191022348UL, 2882458100UL, 4033326555UL, 2329569601UL, 824756145UL, 3501916851UL, 3512382126UL, 1970954319UL, 4022176157UL, 2356841052UL, 3783173734UL, 3277915742UL, 3205430658UL, +1460938436UL, 280282398UL, 3262135457UL, 416160861UL, 28522973UL, 1100901182UL, 4048609665UL, 994490185UL, 2206150488UL, 3591919750UL, 65093467UL, 399797207UL, 3377740861UL, 3954301001UL, 3696509979UL, 866353724UL, 3847992271UL, 2821933890UL, 482325742UL, 1702442928UL, 1271285504UL, 636444475UL, 2465430290UL, 476965483UL, 2651443172UL, 2895101023UL, 43843628UL, 518479547UL, 2354104222UL, 2313400729UL, 3786408564UL, 2823763904UL, +3267560272UL, 1682576095UL, 2580824843UL, 2687886610UL, 785942949UL, 2624395631UL, 3219885224UL, 4104123478UL, 2234056629UL, 2683158959UL, 1805382347UL, 4143809855UL, 382688861UL, 2843792951UL, 39122499UL, 2765954033UL, 2870716981UL, 784228054UL, 1680611136UL, 2306036746UL, 892707919UL, 2648492467UL, 1289362844UL, 3462989616UL, 484526950UL, 178560970UL, 3047404165UL, 71290794UL, 1716785670UL, 3881310302UL, 2826977504UL, 2439325884UL, +1000001815UL, 1580868938UL, 3808984884UL, 2521899773UL, 2222792732UL, 2244576791UL, 1833964269UL, 1361345793UL, 2934763305UL, 655108124UL, 2334116476UL, 674208214UL, 587191877UL, 271361277UL, 1403491312UL, 2742744205UL, 2556530506UL, 3764115510UL, 861410771UL, 2748819627UL, 2879790483UL, 1497452846UL, 1101855458UL, 2268199923UL, 2646753562UL, 480532790UL, 2926891626UL, 1366888524UL, 2262816900UL, 691077353UL, 2279182738UL, 2479688463UL, +427385986UL, 271096497UL, 357444234UL, 1980388138UL, 3104550456UL, 2496325717UL, 2941450111UL, 717953620UL, 4020221165UL, 2567325850UL, 2636190539UL, 2764516078UL, 588189150UL, 2395930109UL, 1867061176UL, 665795763UL, 3869868300UL, 2245339306UL, 2589983679UL, 682593183UL, 1254600537UL, 1701095863UL, 3193417815UL, 369734429UL, 2231641462UL, 1866531599UL, 1317004965UL, 1295326133UL, 2320346625UL, 485850108UL, 1279183025UL, 423884362UL, +1310342080UL, 228799661UL, 575494427UL, 2773243709UL, 4009191487UL, 3178129190UL, 1392246100UL, 1328043370UL, 1407136778UL, 3204434425UL, 558594993UL, 303018213UL, 2939203697UL, 889352935UL, 628666312UL, 3995857198UL, 691563049UL, 1116804589UL, 998930334UL, 4144153491UL, 2375099047UL, 2882458100UL, 4033326555UL, 2329569601UL, 824756145UL, 3031828205UL, 3512382126UL, 1970954319UL, 4022176157UL, 2356841052UL, 1599294097UL, 3277915742UL, +3205430658UL, 1460938436UL, 280282398UL, 2438973535UL, 416160861UL, 28522973UL, 1100901182UL, 4048609665UL, 2989609671UL, 2206150488UL, 3591919750UL, 65093467UL, 399797207UL, 183644195UL, 3954301001UL, 3696509979UL, 866353724UL, 3847992271UL, 1244421011UL, 482325742UL, 1702442928UL, 1271285504UL, 636444475UL, 3659422961UL, 476965483UL, 2651443172UL, 2895101023UL, 43843628UL, 2230230933UL, 2354104222UL, 2313400729UL, 3786408564UL, +2823763904UL, 4146329709UL, 1682576095UL, 2580824843UL, 2687886610UL, 785942949UL, 126345381UL, 3219885224UL, 4104123478UL, 2234056629UL, 2683158959UL, 1734650983UL, 4143809855UL, 382688861UL, 2843792951UL, 39122499UL, 3527484969UL, 2870716981UL, 784228054UL, 1680611136UL, 2306036746UL, 1606477743UL, 2648492467UL, 1289362844UL, 3462989616UL, 484526950UL, 3730796296UL, 3047404165UL, 71290794UL, 1716785670UL, 3881310302UL, 4233965062UL, +2439325884UL, 1000001815UL, 1580868938UL, 3808984884UL, 1228341642UL, 2222792732UL, 2244576791UL, 1833964269UL, 1361345793UL, 3313812192UL, 655108124UL, 2334116476UL, 674208214UL, 587191877UL, 1531247446UL, 1403491312UL, 2742744205UL, 2556530506UL, 3764115510UL, 2419989900UL, 2748819627UL, 2879790483UL, 1497452846UL, 1101855458UL, 1430402656UL, 2646753562UL, 480532790UL, 2926891626UL, 1366888524UL, 1848714433UL, 691077353UL, 2279182738UL, +2479688463UL, 427385986UL, 3906690631UL, 357444234UL, 1980388138UL, 3104550456UL, 2496325717UL, 2272350403UL, 717953620UL, 4020221165UL, 2567325850UL, 2636190539UL, 1950604113UL, 588189150UL, 2395930109UL, 1867061176UL, 665795763UL, 1735147895UL, 2245339306UL, 2589983679UL, 682593183UL, 1254600537UL, 1518037357UL, 3193417815UL, 369734429UL, 2231641462UL, 1866531599UL, 1751783137UL, 1295326133UL, 2320346625UL, 485850108UL, 1279183025UL, +149835864UL, 1310342080UL, 228799661UL, 575494427UL, 2773243709UL, 1505829825UL, 3178129190UL, 1392246100UL, 1328043370UL, 1407136778UL, 856233019UL, 558594993UL, 303018213UL, 2939203697UL, 889352935UL, 625515593UL, 3995857198UL, 691563049UL, 1116804589UL, 998930334UL, 3264640128UL, 2375099047UL, 2882458100UL, 4033326555UL, 2329569601UL, 1824812377UL, 3031828205UL, 3512382126UL, 1970954319UL, 4022176157UL, 3682468973UL, 1599294097UL, +3277915742UL, 3205430658UL, 1460938436UL, 2034940270UL, 2438973535UL, 416160861UL, 28522973UL, 1100901182UL, 3534874298UL, 2989609671UL, 2206150488UL, 3591919750UL, 65093467UL, 2231373121UL, 183644195UL, 3954301001UL, 3696509979UL, 866353724UL, 1479968372UL, 1244421011UL, 482325742UL, 1702442928UL, 1271285504UL, 3834022401UL, 3659422961UL, 476965483UL, 2651443172UL, 2895101023UL, 1042443120UL, 2230230933UL, 2354104222UL, 2313400729UL, +3786408564UL, 2940290545UL, 4146329709UL, 1682576095UL, 2580824843UL, 2687886610UL, 895602439UL, 126345381UL, 3219885224UL, 4104123478UL, 2234056629UL, 3633565082UL, 1734650983UL, 4143809855UL, 382688861UL, 2843792951UL, 3076342354UL, 3527484969UL, 2870716981UL, 784228054UL, 1680611136UL, 3667923304UL, 1606477743UL, 2648492467UL, 1289362844UL, 3462989616UL, 1338592032UL, 3730796296UL, 3047404165UL, 71290794UL, 1716785670UL, 995728648UL, +4233965062UL, 2439325884UL, 1000001815UL, 1580868938UL, 1245957136UL, 1228341642UL, 2222792732UL, 2244576791UL, 1833964269UL, 2899552190UL, 3313812192UL, 655108124UL, 2334116476UL, 674208214UL, 1154789946UL, 1531247446UL, 1403491312UL, 2742744205UL, 2556530506UL, 1668620496UL, 2419989900UL, 2748819627UL, 2879790483UL, 1497452846UL, 177853954UL, 1430402656UL, 2646753562UL, 480532790UL, 2926891626UL, 3179057526UL, 1848714433UL, 691077353UL, +2279182738UL, 2479688463UL, 1988854710UL, 3906690631UL, 357444234UL, 1980388138UL, 3104550456UL, 1772857305UL, 2272350403UL, 717953620UL, 4020221165UL, 2567325850UL, 3129906484UL, 1950604113UL, 588189150UL, 2395930109UL, 1867061176UL, 2248975336UL, 1735147895UL, 2245339306UL, 2589983679UL, 682593183UL, 3087155398UL, 1518037357UL, 3193417815UL, 369734429UL, 2231641462UL, 1858424931UL, 1751783137UL, 1295326133UL, 2320346625UL, 485850108UL, +2471611230UL, 107369761UL, 2623559579UL, 4256589070UL, 2365810185UL, 907910243UL, 3901832478UL, 2068079364UL, 2072842987UL, 401440347UL, 1707255913UL, 1450112231UL, 2618898012UL, 600446000UL, 788321632UL, 4119629235UL, 2648781584UL, 1927659116UL, 171372782UL, 1789511950UL, 2648296999UL, 3558619514UL, 1819608632UL, 1392007708UL, 2918513974UL, 2270003900UL, 784021820UL, 1379044539UL, 591935962UL, 1638390839UL, 10832053UL, 3946625290UL, +2916913801UL, 2718331169UL, 1595482738UL, 1294279402UL, 19889234UL, 1374364843UL, 571354125UL, 3357938719UL, 2337506269UL, 905453029UL, 2504232400UL, 258673393UL, 2590342355UL, 3308443353UL, 3359617898UL, 2686453711UL, 932545954UL, 509832408UL, 820508114UL, 431186194UL, 3434866166UL, 1108455121UL, 2802986572UL, 893446102UL, 3248197798UL, 1797985531UL, 3952804303UL, 558601278UL, 1813674114UL, 311050994UL, 425175161UL, 1125527204UL, +1597986581UL, 2282580210UL, 1659733126UL, 2080660004UL, 4121079137UL, 3373787661UL, 1902252724UL, 2669993847UL, 2450915273UL, 2155525933UL, 2139535914UL, 274595185UL, 1890506924UL, 2631794527UL, 1423530517UL, 4027031002UL, 1085427968UL, 2402514206UL, 3591455043UL, 2513094696UL, 2338347202UL, 1168222597UL, 3922339535UL, 3991725466UL, 2774598759UL, 3478721168UL, 3676766916UL, 179748891UL, 2911159372UL, 191101265UL, 3389843262UL, 3093358663UL, +2333576084UL, 1056514165UL, 2987497874UL, 2502331872UL, 2027710028UL, 2338525812UL, 3904906078UL, 806669884UL, 596300960UL, 1993055778UL, 1541809402UL, 3578865742UL, 652348267UL, 3332532764UL, 2656602623UL, 2037214047UL, 323260312UL, 3310408133UL, 4037617529UL, 137297627UL, 1236501991UL, 495817051UL, 481150309UL, 3067841968UL, 3120347176UL, 714354848UL, 1554632062UL, 2522324107UL, 4274051212UL, 2180914534UL, 1261686356UL, 3569290041UL, +1801431819UL, 4286755560UL, 2749452442UL, 829235089UL, 2243153325UL, 2525168177UL, 1486881882UL, 585653228UL, 3288336688UL, 2734161045UL, 30430534UL, 714492313UL, 2582732426UL, 595577790UL, 1463554287UL, 1949506865UL, 4210942156UL, 2008105540UL, 4055753132UL, 2530320603UL, 319064177UL, 2305067982UL, 3825716413UL, 1543867515UL, 108979478UL, 3089716545UL, 2921391708UL, 2403595525UL, 3783697766UL, 2313991047UL, 3302598706UL, 1318323763UL, +}, +{ +1470380360UL, 3057428612UL, 2756676297UL, 1633786556UL, 4246459918UL, 2557524017UL, 1857180133UL, 618903690UL, 2475611092UL, 2621430634UL, 2084292404UL, 1698607774UL, 1788956972UL, 3375072220UL, 1499167056UL, 1218814632UL, 3699503479UL, 588281768UL, 3603925285UL, 1187721841UL, 1307962320UL, 2562217840UL, 3882506958UL, 2387033730UL, 2097027049UL, 1593669125UL, 1899433035UL, 4039983902UL, 1546854551UL, 1073191673UL, 3368453769UL, 3074694838UL, +534637095UL, 1860006723UL, 3416402670UL, 802354899UL, 3998709605UL, 3944315555UL, 3454226397UL, 1648185195UL, 488532673UL, 3063734121UL, 1318974867UL, 187087202UL, 200160693UL, 4170479404UL, 782764886UL, 4007973657UL, 1651636372UL, 3084151528UL, 2085263921UL, 2424937940UL, 230704223UL, 3342587983UL, 1093085714UL, 683877298UL, 3635026316UL, 3839461209UL, 2977567556UL, 3947448199UL, 3767172681UL, 1350679624UL, 3541409523UL, 3975162472UL, +2459379316UL, 3287828387UL, 1565768431UL, 3149625429UL, 1328627497UL, 2156355750UL, 112739894UL, 4052025045UL, 1396839113UL, 212349044UL, 110706825UL, 2185320852UL, 2540909191UL, 2129623107UL, 3515174750UL, 2669147508UL, 1243549180UL, 3996575850UL, 149304348UL, 2755670869UL, 930137412UL, 350687475UL, 1512442864UL, 3764389325UL, 3489308665UL, 276147411UL, 2268414314UL, 30674096UL, 3202650841UL, 3446821592UL, 3341145621UL, 3749209259UL, +674361204UL, 1384681012UL, 2716655878UL, 454169262UL, 289282175UL, 966029495UL, 3052791893UL, 3111969089UL, 1151599976UL, 3620936019UL, 1877909034UL, 1953262994UL, 4240669039UL, 1857402256UL, 3337397349UL, 2392730459UL, 1158928694UL, 1757447952UL, 2682284750UL, 2796982914UL, 1203210173UL, 797579212UL, 1645601877UL, 3579805998UL, 797556690UL, 4106236617UL, 1379943929UL, 129105346UL, 3950170317UL, 723231430UL, 88997404UL, 2591283275UL, +359831168UL, 306903531UL, 1987846974UL, 2654779951UL, 3724360049UL, 1693615498UL, 1095306415UL, 3586751806UL, 2045807380UL, 2779363615UL, 2912940562UL, 1557518560UL, 3620536996UL, 1723152132UL, 4087191232UL, 1042907094UL, 3210303305UL, 1536493323UL, 4094765090UL, 575328723UL, 359319532UL, 2458971265UL, 3159207510UL, 387883436UL, 2521400838UL, 2359639886UL, 261289463UL, 2094643916UL, 2269112547UL, 2387198764UL, 3619233779UL, 3019052785UL, +2910774311UL, 1470380360UL, 3057428612UL, 2756676297UL, 1633786556UL, 386502519UL, 2557524017UL, 1857180133UL, 618903690UL, 2475611092UL, 30080431UL, 2084292404UL, 1698607774UL, 1788956972UL, 3375072220UL, 1158684464UL, 1218814632UL, 3699503479UL, 588281768UL, 3603925285UL, 238328161UL, 1307962320UL, 2562217840UL, 3882506958UL, 2387033730UL, 3010587639UL, 1593669125UL, 1899433035UL, 4039983902UL, 1546854551UL, 4192218972UL, 3368453769UL, +3074694838UL, 534637095UL, 1860006723UL, 652336168UL, 802354899UL, 3998709605UL, 3944315555UL, 3454226397UL, 1926499185UL, 488532673UL, 3063734121UL, 1318974867UL, 187087202UL, 1106075322UL, 4170479404UL, 782764886UL, 4007973657UL, 1651636372UL, 2404132022UL, 2085263921UL, 2424937940UL, 230704223UL, 3342587983UL, 918664020UL, 683877298UL, 3635026316UL, 3839461209UL, 2977567556UL, 1943458501UL, 3767172681UL, 1350679624UL, 3541409523UL, +3975162472UL, 276593262UL, 3287828387UL, 1565768431UL, 3149625429UL, 1328627497UL, 1428675465UL, 112739894UL, 4052025045UL, 1396839113UL, 212349044UL, 4056830215UL, 2185320852UL, 2540909191UL, 2129623107UL, 3515174750UL, 1542171596UL, 1243549180UL, 3996575850UL, 149304348UL, 2755670869UL, 3578672658UL, 350687475UL, 1512442864UL, 3764389325UL, 3489308665UL, 1546094236UL, 2268414314UL, 30674096UL, 3202650841UL, 3446821592UL, 2954172575UL, +3749209259UL, 674361204UL, 1384681012UL, 2716655878UL, 3784818668UL, 289282175UL, 966029495UL, 3052791893UL, 3111969089UL, 4157356036UL, 3620936019UL, 1877909034UL, 1953262994UL, 4240669039UL, 558548232UL, 3337397349UL, 2392730459UL, 1158928694UL, 1757447952UL, 2764253876UL, 2796982914UL, 1203210173UL, 797579212UL, 1645601877UL, 1754284241UL, 797556690UL, 4106236617UL, 1379943929UL, 129105346UL, 1072954804UL, 723231430UL, 88997404UL, +2591283275UL, 359831168UL, 3790749526UL, 1987846974UL, 2654779951UL, 3724360049UL, 1693615498UL, 529478744UL, 3586751806UL, 2045807380UL, 2779363615UL, 2912940562UL, 3883779003UL, 3620536996UL, 1723152132UL, 4087191232UL, 1042907094UL, 2510614710UL, 1536493323UL, 4094765090UL, 575328723UL, 359319532UL, 4185709932UL, 3159207510UL, 387883436UL, 2521400838UL, 2359639886UL, 143795416UL, 2094643916UL, 2269112547UL, 2387198764UL, 3619233779UL, +2856133500UL, 2910774311UL, 1470380360UL, 3057428612UL, 2756676297UL, 1184346658UL, 386502519UL, 2557524017UL, 1857180133UL, 618903690UL, 113530176UL, 30080431UL, 2084292404UL, 1698607774UL, 1788956972UL, 1446640841UL, 1158684464UL, 1218814632UL, 3699503479UL, 588281768UL, 145530757UL, 238328161UL, 1307962320UL, 2562217840UL, 3882506958UL, 2145494995UL, 3010587639UL, 1593669125UL, 1899433035UL, 4039983902UL, 1668183055UL, 4192218972UL, +3368453769UL, 3074694838UL, 534637095UL, 1759744354UL, 652336168UL, 802354899UL, 3998709605UL, 3944315555UL, 3058692249UL, 1926499185UL, 488532673UL, 3063734121UL, 1318974867UL, 728549366UL, 1106075322UL, 4170479404UL, 782764886UL, 4007973657UL, 3270440405UL, 2404132022UL, 2085263921UL, 2424937940UL, 230704223UL, 3329510499UL, 918664020UL, 683877298UL, 3635026316UL, 3839461209UL, 79335966UL, 1943458501UL, 3767172681UL, 1350679624UL, +3541409523UL, 925084463UL, 276593262UL, 3287828387UL, 1565768431UL, 3149625429UL, 3775346659UL, 1428675465UL, 112739894UL, 4052025045UL, 1396839113UL, 865124022UL, 4056830215UL, 2185320852UL, 2540909191UL, 2129623107UL, 408329043UL, 1542171596UL, 1243549180UL, 3996575850UL, 149304348UL, 3549625626UL, 3578672658UL, 350687475UL, 1512442864UL, 3764389325UL, 2745315161UL, 1546094236UL, 2268414314UL, 30674096UL, 3202650841UL, 1591955495UL, +2954172575UL, 3749209259UL, 674361204UL, 1384681012UL, 4064148122UL, 3784818668UL, 289282175UL, 966029495UL, 3052791893UL, 1370867977UL, 4157356036UL, 3620936019UL, 1877909034UL, 1953262994UL, 4021792514UL, 558548232UL, 3337397349UL, 2392730459UL, 1158928694UL, 3155295174UL, 2764253876UL, 2796982914UL, 1203210173UL, 797579212UL, 3928348491UL, 1754284241UL, 797556690UL, 4106236617UL, 1379943929UL, 535801204UL, 1072954804UL, 723231430UL, +88997404UL, 2591283275UL, 3834650337UL, 3790749526UL, 1987846974UL, 2654779951UL, 3724360049UL, 1042046499UL, 529478744UL, 3586751806UL, 2045807380UL, 2779363615UL, 1125934487UL, 3883779003UL, 3620536996UL, 1723152132UL, 4087191232UL, 234512721UL, 2510614710UL, 1536493323UL, 4094765090UL, 575328723UL, 3997395999UL, 4185709932UL, 3159207510UL, 387883436UL, 2521400838UL, 3125399953UL, 143795416UL, 2094643916UL, 2269112547UL, 2387198764UL, +652167990UL, 2856133500UL, 2910774311UL, 1470380360UL, 3057428612UL, 2132157457UL, 1184346658UL, 386502519UL, 2557524017UL, 1857180133UL, 4131611047UL, 113530176UL, 30080431UL, 2084292404UL, 1698607774UL, 391246724UL, 1446640841UL, 1158684464UL, 1218814632UL, 3699503479UL, 2411874184UL, 145530757UL, 238328161UL, 1307962320UL, 2562217840UL, 2812151676UL, 2145494995UL, 3010587639UL, 1593669125UL, 1899433035UL, 2422208371UL, 1668183055UL, +4192218972UL, 3368453769UL, 3074694838UL, 2148785858UL, 1759744354UL, 652336168UL, 802354899UL, 3998709605UL, 1781938823UL, 3058692249UL, 1926499185UL, 488532673UL, 3063734121UL, 3539633540UL, 728549366UL, 1106075322UL, 4170479404UL, 782764886UL, 2780824417UL, 3270440405UL, 2404132022UL, 2085263921UL, 2424937940UL, 1908513596UL, 3329510499UL, 918664020UL, 683877298UL, 3635026316UL, 2918953355UL, 79335966UL, 1943458501UL, 3767172681UL, +1350679624UL, 341369607UL, 925084463UL, 276593262UL, 3287828387UL, 1565768431UL, 1957429498UL, 3775346659UL, 1428675465UL, 112739894UL, 4052025045UL, 1847440090UL, 865124022UL, 4056830215UL, 2185320852UL, 2540909191UL, 3477402775UL, 408329043UL, 1542171596UL, 1243549180UL, 3996575850UL, 179432054UL, 3549625626UL, 3578672658UL, 350687475UL, 1512442864UL, 2118138924UL, 2745315161UL, 1546094236UL, 2268414314UL, 30674096UL, 2317064191UL, +1591955495UL, 2954172575UL, 3749209259UL, 674361204UL, 3286542168UL, 4064148122UL, 3784818668UL, 289282175UL, 966029495UL, 1327408800UL, 1370867977UL, 4157356036UL, 3620936019UL, 1877909034UL, 405707683UL, 4021792514UL, 558548232UL, 3337397349UL, 2392730459UL, 3244675609UL, 3155295174UL, 2764253876UL, 2796982914UL, 1203210173UL, 2274948223UL, 3928348491UL, 1754284241UL, 797556690UL, 4106236617UL, 2665938417UL, 535801204UL, 1072954804UL, +723231430UL, 88997404UL, 3006584290UL, 3834650337UL, 3790749526UL, 1987846974UL, 2654779951UL, 4271242910UL, 1042046499UL, 529478744UL, 3586751806UL, 2045807380UL, 2283867237UL, 1125934487UL, 3883779003UL, 3620536996UL, 1723152132UL, 1761178713UL, 234512721UL, 2510614710UL, 1536493323UL, 4094765090UL, 2361030279UL, 3997395999UL, 4185709932UL, 3159207510UL, 387883436UL, 3979684113UL, 3125399953UL, 143795416UL, 2094643916UL, 2269112547UL, +1499026790UL, 2673871071UL, 3817604600UL, 2996498142UL, 1211396713UL, 4016438754UL, 992969238UL, 2196610884UL, 1333868752UL, 2722471337UL, 2178395143UL, 533478044UL, 291720336UL, 3552502714UL, 1060260388UL, 1389737501UL, 3508724089UL, 3106493936UL, 2013154532UL, 3169850047UL, 3773175439UL, 3604033115UL, 4234678017UL, 2903156223UL, 3832188501UL, 2874956773UL, 4283805552UL, 3664062691UL, 1974738248UL, 925764827UL, 1750660924UL, 141239116UL, +3273085573UL, 2427940522UL, 1962727892UL, 2493949152UL, 1043482688UL, 2345076260UL, 2209086707UL, 3642865193UL, 3119873884UL, 571850463UL, 1599484831UL, 76923002UL, 3077572436UL, 4086821865UL, 1523654720UL, 480304732UL, 476538774UL, 2169116383UL, 4033618691UL, 2819753414UL, 2856326003UL, 747450871UL, 1851448547UL, 713503330UL, 3709263622UL, 781002495UL, 1968749577UL, 2933719965UL, 4057398020UL, 3406593497UL, 689436820UL, 2935729647UL, +2030357428UL, 2075940397UL, 1830631914UL, 1093330800UL, 1706624613UL, 1805612947UL, 4257097124UL, 3233604448UL, 159450674UL, 1050507045UL, 566046625UL, 2253420120UL, 904902042UL, 1830037922UL, 4081490982UL, 1427186514UL, 2535536470UL, 3869316947UL, 4097476542UL, 930420754UL, 2519255367UL, 49908928UL, 454325685UL, 888118139UL, 3453892181UL, 1263601461UL, 1236190782UL, 674943665UL, 1648077470UL, 429399730UL, 2904879506UL, 3718410520UL, +1802183310UL, 1872553091UL, 605480672UL, 774749173UL, 3200570514UL, 181210046UL, 2560898144UL, 3947027625UL, 1535243167UL, 324801283UL, 4234744788UL, 746560316UL, 2456297875UL, 3925756080UL, 533997731UL, 3919796086UL, 662975152UL, 864661066UL, 1070894403UL, 1020445801UL, 1511298602UL, 4221508348UL, 3577952702UL, 4122306502UL, 2012051572UL, 1616168260UL, 2456901413UL, 2717726537UL, 840264605UL, 2687215223UL, 2174960097UL, 1239122603UL, +2890231920UL, 3365350767UL, 3998868598UL, 563137220UL, 893868530UL, 3400632172UL, 1538627830UL, 2812510298UL, 496662288UL, 2317289974UL, 2252393722UL, 1221289032UL, 2418100559UL, 402670890UL, 1528570045UL, 3160531718UL, 1806492066UL, 3211663975UL, 3617025598UL, 3664580463UL, 1338638297UL, 341637330UL, 2097019728UL, 4031221207UL, 503636424UL, 3883416740UL, 1530237682UL, 1152125396UL, 2845384901UL, 332460372UL, 457364876UL, 1738239808UL, +}, +{ +1118787884UL, 1884590246UL, 1007052798UL, 3717680750UL, 1609263052UL, 2486654530UL, 2761168910UL, 163554565UL, 3928803020UL, 2632714628UL, 1386788970UL, 2621928183UL, 2855206157UL, 2989018213UL, 1836814260UL, 4197635108UL, 1030118238UL, 2789863793UL, 2063944689UL, 1647608366UL, 255485979UL, 3657534664UL, 1317185871UL, 2410074449UL, 3971156607UL, 907575923UL, 4132859581UL, 416269582UL, 877554291UL, 633895348UL, 2236014545UL, 992386759UL, +3971362318UL, 2173597771UL, 1673339632UL, 1371742490UL, 2033574313UL, 3809530180UL, 319182848UL, 1562235776UL, 463522324UL, 1482338913UL, 1816432405UL, 3278626272UL, 1335179249UL, 171265751UL, 2249118654UL, 1153849045UL, 3013179633UL, 1450352108UL, 1267908572UL, 1138658121UL, 623675874UL, 3608469129UL, 978093004UL, 1283228910UL, 1810859539UL, 1179125634UL, 2939039286UL, 3862213960UL, 1168357273UL, 376788629UL, 314507445UL, 219039712UL, +463080619UL, 2994990779UL, 1035692306UL, 2228303916UL, 1280244913UL, 1965417315UL, 1815095408UL, 939691799UL, 3080056566UL, 3741305118UL, 1495905100UL, 65327713UL, 3884301346UL, 2536445014UL, 1503280354UL, 3398924419UL, 3678532805UL, 2616964783UL, 3168581019UL, 3553322118UL, 3023259169UL, 480342712UL, 451634742UL, 3562778450UL, 1943708078UL, 660077747UL, 434714388UL, 2369278293UL, 2894425895UL, 1919542250UL, 2469130567UL, 551196237UL, +4193980239UL, 2952382875UL, 3311173667UL, 2856797012UL, 2845888917UL, 1669184098UL, 3928626091UL, 2491577076UL, 3719464032UL, 2151963814UL, 3474431449UL, 3971510537UL, 3695841119UL, 2215238146UL, 3668152847UL, 1974578319UL, 2328185090UL, 2096356935UL, 3973692455UL, 3954842437UL, 422675402UL, 477894725UL, 3398641827UL, 1366451030UL, 1354642198UL, 3029840461UL, 35700837UL, 2937170986UL, 1336296570UL, 3508313874UL, 587724229UL, 2051237478UL, +3539754304UL, 1946154432UL, 2463932452UL, 144772179UL, 353408424UL, 3493806256UL, 3782958493UL, 1957797444UL, 228084488UL, 192277278UL, 3612092522UL, 2235069734UL, 467407503UL, 3391861572UL, 847810786UL, 1838763654UL, 2272109211UL, 3018265496UL, 4249218445UL, 1722760791UL, 3484353162UL, 3906437663UL, 4208966227UL, 2352549740UL, 714311566UL, 1346246305UL, 2865157059UL, 2989587005UL, 3946819548UL, 3109244860UL, 3885124598UL, 3314346978UL, +952826829UL, 1118787884UL, 1884590246UL, 1007052798UL, 3717680750UL, 1521451317UL, 2486654530UL, 2761168910UL, 163554565UL, 3928803020UL, 2299046195UL, 1386788970UL, 2621928183UL, 2855206157UL, 2989018213UL, 3048269905UL, 4197635108UL, 1030118238UL, 2789863793UL, 2063944689UL, 1814057352UL, 255485979UL, 3657534664UL, 1317185871UL, 2410074449UL, 4041610788UL, 907575923UL, 4132859581UL, 416269582UL, 877554291UL, 2338964683UL, 2236014545UL, +992386759UL, 3971362318UL, 2173597771UL, 579340117UL, 1371742490UL, 2033574313UL, 3809530180UL, 319182848UL, 3090313228UL, 463522324UL, 1482338913UL, 1816432405UL, 3278626272UL, 2418220643UL, 171265751UL, 2249118654UL, 1153849045UL, 3013179633UL, 2738647190UL, 1267908572UL, 1138658121UL, 623675874UL, 3608469129UL, 3096087202UL, 1283228910UL, 1810859539UL, 1179125634UL, 2939039286UL, 2601862091UL, 1168357273UL, 376788629UL, 314507445UL, +219039712UL, 1174181426UL, 2994990779UL, 1035692306UL, 2228303916UL, 1280244913UL, 752017703UL, 1815095408UL, 939691799UL, 3080056566UL, 3741305118UL, 126135654UL, 65327713UL, 3884301346UL, 2536445014UL, 1503280354UL, 955981361UL, 3678532805UL, 2616964783UL, 3168581019UL, 3553322118UL, 3772187171UL, 480342712UL, 451634742UL, 3562778450UL, 1943708078UL, 1466950454UL, 434714388UL, 2369278293UL, 2894425895UL, 1919542250UL, 317862862UL, +551196237UL, 4193980239UL, 2952382875UL, 3311173667UL, 12728591UL, 2845888917UL, 1669184098UL, 3928626091UL, 2491577076UL, 2742989641UL, 2151963814UL, 3474431449UL, 3971510537UL, 3695841119UL, 1005662613UL, 3668152847UL, 1974578319UL, 2328185090UL, 2096356935UL, 3629684995UL, 3954842437UL, 422675402UL, 477894725UL, 3398641827UL, 209352768UL, 1354642198UL, 3029840461UL, 35700837UL, 2937170986UL, 1660777984UL, 3508313874UL, 587724229UL, +2051237478UL, 3539754304UL, 3631430985UL, 2463932452UL, 144772179UL, 353408424UL, 3493806256UL, 3616422021UL, 1957797444UL, 228084488UL, 192277278UL, 3612092522UL, 3638977910UL, 467407503UL, 3391861572UL, 847810786UL, 1838763654UL, 2427237699UL, 3018265496UL, 4249218445UL, 1722760791UL, 3484353162UL, 2322365400UL, 4208966227UL, 2352549740UL, 714311566UL, 1346246305UL, 954101391UL, 2989587005UL, 3946819548UL, 3109244860UL, 3885124598UL, +420941376UL, 952826829UL, 1118787884UL, 1884590246UL, 1007052798UL, 539759724UL, 1521451317UL, 2486654530UL, 2761168910UL, 163554565UL, 1954997983UL, 2299046195UL, 1386788970UL, 2621928183UL, 2855206157UL, 3104695189UL, 3048269905UL, 4197635108UL, 1030118238UL, 2789863793UL, 3556473570UL, 1814057352UL, 255485979UL, 3657534664UL, 1317185871UL, 3004205219UL, 4041610788UL, 907575923UL, 4132859581UL, 416269582UL, 2980178044UL, 2338964683UL, +2236014545UL, 992386759UL, 3971362318UL, 2573125018UL, 579340117UL, 1371742490UL, 2033574313UL, 3809530180UL, 766585731UL, 3090313228UL, 463522324UL, 1482338913UL, 1816432405UL, 3101578277UL, 2418220643UL, 171265751UL, 2249118654UL, 1153849045UL, 2143267892UL, 2738647190UL, 1267908572UL, 1138658121UL, 623675874UL, 2944231951UL, 3096087202UL, 1283228910UL, 1810859539UL, 1179125634UL, 374714364UL, 2601862091UL, 1168357273UL, 376788629UL, +314507445UL, 1710922505UL, 1174181426UL, 2994990779UL, 1035692306UL, 2228303916UL, 3222680885UL, 752017703UL, 1815095408UL, 939691799UL, 3080056566UL, 1985366287UL, 126135654UL, 65327713UL, 3884301346UL, 2536445014UL, 3002467868UL, 955981361UL, 3678532805UL, 2616964783UL, 3168581019UL, 2173417616UL, 3772187171UL, 480342712UL, 451634742UL, 3562778450UL, 236095606UL, 1466950454UL, 434714388UL, 2369278293UL, 2894425895UL, 1766257461UL, +317862862UL, 551196237UL, 4193980239UL, 2952382875UL, 2416349742UL, 12728591UL, 2845888917UL, 1669184098UL, 3928626091UL, 2346338391UL, 2742989641UL, 2151963814UL, 3474431449UL, 3971510537UL, 942354812UL, 1005662613UL, 3668152847UL, 1974578319UL, 2328185090UL, 3234982376UL, 3629684995UL, 3954842437UL, 422675402UL, 477894725UL, 2931444539UL, 209352768UL, 1354642198UL, 3029840461UL, 35700837UL, 3388567298UL, 1660777984UL, 3508313874UL, +587724229UL, 2051237478UL, 1770178720UL, 3631430985UL, 2463932452UL, 144772179UL, 353408424UL, 3783114255UL, 3616422021UL, 1957797444UL, 228084488UL, 192277278UL, 611095909UL, 3638977910UL, 467407503UL, 3391861572UL, 847810786UL, 1413548572UL, 2427237699UL, 3018265496UL, 4249218445UL, 1722760791UL, 1487262638UL, 2322365400UL, 4208966227UL, 2352549740UL, 714311566UL, 1378213368UL, 954101391UL, 2989587005UL, 3946819548UL, 3109244860UL, +4183748384UL, 420941376UL, 952826829UL, 1118787884UL, 1884590246UL, 2199811809UL, 539759724UL, 1521451317UL, 2486654530UL, 2761168910UL, 1100080647UL, 1954997983UL, 2299046195UL, 1386788970UL, 2621928183UL, 916352763UL, 3104695189UL, 3048269905UL, 4197635108UL, 1030118238UL, 369866139UL, 3556473570UL, 1814057352UL, 255485979UL, 3657534664UL, 2916985473UL, 3004205219UL, 4041610788UL, 907575923UL, 4132859581UL, 3856599532UL, 2980178044UL, +2338964683UL, 2236014545UL, 992386759UL, 3393662326UL, 2573125018UL, 579340117UL, 1371742490UL, 2033574313UL, 1938766053UL, 766585731UL, 3090313228UL, 463522324UL, 1482338913UL, 2122086302UL, 3101578277UL, 2418220643UL, 171265751UL, 2249118654UL, 952602228UL, 2143267892UL, 2738647190UL, 1267908572UL, 1138658121UL, 1808026803UL, 2944231951UL, 3096087202UL, 1283228910UL, 1810859539UL, 3881666794UL, 374714364UL, 2601862091UL, 1168357273UL, +376788629UL, 728738466UL, 1710922505UL, 1174181426UL, 2994990779UL, 1035692306UL, 74930675UL, 3222680885UL, 752017703UL, 1815095408UL, 939691799UL, 3404352271UL, 1985366287UL, 126135654UL, 65327713UL, 3884301346UL, 1822629733UL, 3002467868UL, 955981361UL, 3678532805UL, 2616964783UL, 3865359567UL, 2173417616UL, 3772187171UL, 480342712UL, 451634742UL, 1099609112UL, 236095606UL, 1466950454UL, 434714388UL, 2369278293UL, 2671873359UL, +1766257461UL, 317862862UL, 551196237UL, 4193980239UL, 2006763654UL, 2416349742UL, 12728591UL, 2845888917UL, 1669184098UL, 2492983893UL, 2346338391UL, 2742989641UL, 2151963814UL, 3474431449UL, 2095232649UL, 942354812UL, 1005662613UL, 3668152847UL, 1974578319UL, 1748794756UL, 3234982376UL, 3629684995UL, 3954842437UL, 422675402UL, 2291986911UL, 2931444539UL, 209352768UL, 1354642198UL, 3029840461UL, 3772709822UL, 3388567298UL, 1660777984UL, +3508313874UL, 587724229UL, 2759789003UL, 1770178720UL, 3631430985UL, 2463932452UL, 144772179UL, 1572181309UL, 3783114255UL, 3616422021UL, 1957797444UL, 228084488UL, 4106643586UL, 611095909UL, 3638977910UL, 467407503UL, 3391861572UL, 927151111UL, 1413548572UL, 2427237699UL, 3018265496UL, 4249218445UL, 692575565UL, 1487262638UL, 2322365400UL, 4208966227UL, 2352549740UL, 1281886506UL, 1378213368UL, 954101391UL, 2989587005UL, 3946819548UL, +1861811740UL, 1484768905UL, 359662140UL, 4058479705UL, 1306547382UL, 514617018UL, 1685692791UL, 3370601554UL, 2920029077UL, 447798803UL, 3124262580UL, 1841693810UL, 583764638UL, 853545489UL, 2614348705UL, 1445696741UL, 4226719361UL, 1299450005UL, 7404137UL, 3158806368UL, 3487160245UL, 1410910965UL, 3697116584UL, 4272452035UL, 832215403UL, 4190877996UL, 2360539465UL, 1011144434UL, 546018244UL, 613443074UL, 2523894977UL, 998991923UL, +2569220540UL, 4221264346UL, 2627827148UL, 2606458015UL, 261584257UL, 4172552877UL, 1174774061UL, 1040006970UL, 2378868955UL, 1539192255UL, 1322624483UL, 3221782707UL, 3352886416UL, 3634686692UL, 65447704UL, 3962131218UL, 839088053UL, 4154193716UL, 1211888926UL, 319402483UL, 3922826413UL, 3799829447UL, 623726612UL, 1586183272UL, 1853729462UL, 2621029589UL, 708558605UL, 1618007233UL, 2784732545UL, 953859039UL, 921654620UL, 477148727UL, +3592256598UL, 2772318818UL, 1460772911UL, 1309227716UL, 3484274262UL, 3425161241UL, 1677052569UL, 2238155114UL, 2828087292UL, 2361598991UL, 4283732706UL, 1530059373UL, 1564048492UL, 243829114UL, 104328994UL, 3080249237UL, 2054985396UL, 408961407UL, 2978652320UL, 2412674552UL, 3794618070UL, 3644862703UL, 2095186402UL, 3294126752UL, 2970218740UL, 1800713612UL, 3806665216UL, 3990918051UL, 142666452UL, 531078813UL, 1079142774UL, 3437358350UL, +635943961UL, 255576894UL, 2991317718UL, 1208676456UL, 247449774UL, 454879171UL, 113230697UL, 3064123371UL, 336269028UL, 1137083842UL, 959568850UL, 2508623991UL, 3338418112UL, 2660268938UL, 1318010299UL, 3950178561UL, 1078499199UL, 1176289535UL, 3875152821UL, 1984420952UL, 1134199826UL, 2944539174UL, 3667625203UL, 2034152216UL, 1648355307UL, 2376447620UL, 2967418253UL, 185143450UL, 889002925UL, 3999315013UL, 661455858UL, 4026799358UL, +3626504428UL, 3544795311UL, 3642718771UL, 2467387138UL, 1034249749UL, 2051371333UL, 4251353248UL, 1575036366UL, 751400924UL, 2906720214UL, 1210002606UL, 916508568UL, 1728487600UL, 2478884914UL, 3081526615UL, 1867135009UL, 1955998382UL, 701713417UL, 512784398UL, 1255240210UL, 3665676113UL, 1771754697UL, 4000392442UL, 3342268855UL, 2677221913UL, 369054145UL, 4011912082UL, 748537647UL, 1626721797UL, 852497405UL, 168721778UL, 3091138383UL, +}, +{ +3781228998UL, 1787582256UL, 838267218UL, 2710632450UL, 690892139UL, 2484870604UL, 4151302318UL, 1844787776UL, 727768263UL, 1075391038UL, 1842903369UL, 2927332301UL, 3246688068UL, 1234715005UL, 2906526190UL, 3369636401UL, 3091858538UL, 3320767682UL, 920496809UL, 1406803705UL, 3163880457UL, 1540551653UL, 2733620168UL, 2588558057UL, 147277542UL, 803170440UL, 821275940UL, 3897549272UL, 151390608UL, 951639139UL, 904639695UL, 1106545578UL, +1514893712UL, 998760135UL, 2557458623UL, 4109877399UL, 578824730UL, 2174064027UL, 3352513900UL, 3206168298UL, 911932439UL, 2030004973UL, 3283902592UL, 3755877921UL, 250434692UL, 352122318UL, 977153640UL, 642640734UL, 2555395772UL, 2307695537UL, 2593565626UL, 3738143618UL, 734614254UL, 3276420511UL, 2636087597UL, 4157371578UL, 1082026387UL, 429736987UL, 3755125580UL, 1935957937UL, 3300547146UL, 3089498232UL, 4167244256UL, 1619189426UL, +1094447351UL, 1061842570UL, 3666470174UL, 810916769UL, 2263633079UL, 3863543843UL, 1804937521UL, 2774236887UL, 2858593613UL, 961498236UL, 1515309045UL, 1564424234UL, 2276602447UL, 2540994858UL, 78621171UL, 3575132456UL, 2958793283UL, 387554009UL, 688827573UL, 3833764146UL, 2611524056UL, 2296780370UL, 2411775612UL, 3790615886UL, 3399757437UL, 1385198595UL, 1005364336UL, 2093159919UL, 2091827252UL, 1461775197UL, 4225171212UL, 1185831033UL, +12264437UL, 1313835999UL, 556653278UL, 917105970UL, 1471530347UL, 2010243509UL, 3097827138UL, 1399987735UL, 273352191UL, 2505795417UL, 1336824946UL, 3358720963UL, 2874295267UL, 2282349617UL, 3478581038UL, 4027859424UL, 713597958UL, 4059691816UL, 2812811116UL, 2291324146UL, 932688463UL, 3001334051UL, 2028368589UL, 830582457UL, 3964293916UL, 4276849132UL, 1828058403UL, 1351688755UL, 2113265048UL, 42517349UL, 3100438883UL, 1137792178UL, +1479076106UL, 463377892UL, 3964913740UL, 2422362185UL, 436113863UL, 2044139049UL, 4197323265UL, 3275185975UL, 2655265571UL, 1674107588UL, 1496360114UL, 3642050139UL, 1739051417UL, 2393774399UL, 250035802UL, 10186306UL, 263338568UL, 3899157617UL, 3679157076UL, 2258085991UL, 1407319575UL, 899008067UL, 3679828833UL, 711086272UL, 2952963707UL, 3373894808UL, 445540851UL, 3405637490UL, 1343291195UL, 730888681UL, 507768703UL, 3473963321UL, +1779803564UL, 3781228998UL, 1787582256UL, 838267218UL, 2710632450UL, 2431224659UL, 2484870604UL, 4151302318UL, 1844787776UL, 727768263UL, 4012573268UL, 1842903369UL, 2927332301UL, 3246688068UL, 1234715005UL, 3405161215UL, 3369636401UL, 3091858538UL, 3320767682UL, 920496809UL, 400609988UL, 3163880457UL, 1540551653UL, 2733620168UL, 2588558057UL, 2137935937UL, 803170440UL, 821275940UL, 3897549272UL, 151390608UL, 194431797UL, 904639695UL, +1106545578UL, 1514893712UL, 998760135UL, 62528087UL, 4109877399UL, 578824730UL, 2174064027UL, 3352513900UL, 3495516649UL, 911932439UL, 2030004973UL, 3283902592UL, 3755877921UL, 1774462108UL, 352122318UL, 977153640UL, 642640734UL, 2555395772UL, 756528792UL, 2593565626UL, 3738143618UL, 734614254UL, 3276420511UL, 4086313763UL, 4157371578UL, 1082026387UL, 429736987UL, 3755125580UL, 526056489UL, 3300547146UL, 3089498232UL, 4167244256UL, +1619189426UL, 82235109UL, 1061842570UL, 3666470174UL, 810916769UL, 2263633079UL, 1110270726UL, 1804937521UL, 2774236887UL, 2858593613UL, 961498236UL, 1840197918UL, 1564424234UL, 2276602447UL, 2540994858UL, 78621171UL, 3690913528UL, 2958793283UL, 387554009UL, 688827573UL, 3833764146UL, 3626285597UL, 2296780370UL, 2411775612UL, 3790615886UL, 3399757437UL, 1561545830UL, 1005364336UL, 2093159919UL, 2091827252UL, 1461775197UL, 63358970UL, +1185831033UL, 12264437UL, 1313835999UL, 556653278UL, 3918754976UL, 1471530347UL, 2010243509UL, 3097827138UL, 1399987735UL, 2767111911UL, 2505795417UL, 1336824946UL, 3358720963UL, 2874295267UL, 902314853UL, 3478581038UL, 4027859424UL, 713597958UL, 4059691816UL, 1462989647UL, 2291324146UL, 932688463UL, 3001334051UL, 2028368589UL, 3594712587UL, 3964293916UL, 4276849132UL, 1828058403UL, 1351688755UL, 2571513800UL, 42517349UL, 3100438883UL, +1137792178UL, 1479076106UL, 140519541UL, 3964913740UL, 2422362185UL, 436113863UL, 2044139049UL, 226785542UL, 3275185975UL, 2655265571UL, 1674107588UL, 1496360114UL, 46428973UL, 1739051417UL, 2393774399UL, 250035802UL, 10186306UL, 4118320101UL, 3899157617UL, 3679157076UL, 2258085991UL, 1407319575UL, 4267866849UL, 3679828833UL, 711086272UL, 2952963707UL, 3373894808UL, 3662249794UL, 3405637490UL, 1343291195UL, 730888681UL, 507768703UL, +2930510271UL, 1779803564UL, 3781228998UL, 1787582256UL, 838267218UL, 1817693489UL, 2431224659UL, 2484870604UL, 4151302318UL, 1844787776UL, 1788220652UL, 4012573268UL, 1842903369UL, 2927332301UL, 3246688068UL, 2050648011UL, 3405161215UL, 3369636401UL, 3091858538UL, 3320767682UL, 241001958UL, 400609988UL, 3163880457UL, 1540551653UL, 2733620168UL, 3857223520UL, 2137935937UL, 803170440UL, 821275940UL, 3897549272UL, 1451986523UL, 194431797UL, +904639695UL, 1106545578UL, 1514893712UL, 4147878244UL, 62528087UL, 4109877399UL, 578824730UL, 2174064027UL, 461571251UL, 3495516649UL, 911932439UL, 2030004973UL, 3283902592UL, 1580354765UL, 1774462108UL, 352122318UL, 977153640UL, 642640734UL, 1019387737UL, 756528792UL, 2593565626UL, 3738143618UL, 734614254UL, 999431451UL, 4086313763UL, 4157371578UL, 1082026387UL, 429736987UL, 140091634UL, 526056489UL, 3300547146UL, 3089498232UL, +4167244256UL, 3202763095UL, 82235109UL, 1061842570UL, 3666470174UL, 810916769UL, 3663992550UL, 1110270726UL, 1804937521UL, 2774236887UL, 2858593613UL, 2203639366UL, 1840197918UL, 1564424234UL, 2276602447UL, 2540994858UL, 978199281UL, 3690913528UL, 2958793283UL, 387554009UL, 688827573UL, 375113876UL, 3626285597UL, 2296780370UL, 2411775612UL, 3790615886UL, 1277897939UL, 1561545830UL, 1005364336UL, 2093159919UL, 2091827252UL, 1631078873UL, +63358970UL, 1185831033UL, 12264437UL, 1313835999UL, 3872277948UL, 3918754976UL, 1471530347UL, 2010243509UL, 3097827138UL, 1291836608UL, 2767111911UL, 2505795417UL, 1336824946UL, 3358720963UL, 3954754615UL, 902314853UL, 3478581038UL, 4027859424UL, 713597958UL, 2198246306UL, 1462989647UL, 2291324146UL, 932688463UL, 3001334051UL, 2374736511UL, 3594712587UL, 3964293916UL, 4276849132UL, 1828058403UL, 3619038368UL, 2571513800UL, 42517349UL, +3100438883UL, 1137792178UL, 1146435746UL, 140519541UL, 3964913740UL, 2422362185UL, 436113863UL, 3460540392UL, 226785542UL, 3275185975UL, 2655265571UL, 1674107588UL, 1288223861UL, 46428973UL, 1739051417UL, 2393774399UL, 250035802UL, 1986226858UL, 4118320101UL, 3899157617UL, 3679157076UL, 2258085991UL, 551117761UL, 4267866849UL, 3679828833UL, 711086272UL, 2952963707UL, 1667866621UL, 3662249794UL, 3405637490UL, 1343291195UL, 730888681UL, +2381246695UL, 2930510271UL, 1779803564UL, 3781228998UL, 1787582256UL, 1236367773UL, 1817693489UL, 2431224659UL, 2484870604UL, 4151302318UL, 2902321811UL, 1788220652UL, 4012573268UL, 1842903369UL, 2927332301UL, 1185539274UL, 2050648011UL, 3405161215UL, 3369636401UL, 3091858538UL, 4240555382UL, 241001958UL, 400609988UL, 3163880457UL, 1540551653UL, 2539098607UL, 3857223520UL, 2137935937UL, 803170440UL, 821275940UL, 3485313735UL, 1451986523UL, +194431797UL, 904639695UL, 1106545578UL, 1633417190UL, 4147878244UL, 62528087UL, 4109877399UL, 578824730UL, 3671726812UL, 461571251UL, 3495516649UL, 911932439UL, 2030004973UL, 2002341352UL, 1580354765UL, 1774462108UL, 352122318UL, 977153640UL, 170033402UL, 1019387737UL, 756528792UL, 2593565626UL, 3738143618UL, 4160516213UL, 999431451UL, 4086313763UL, 4157371578UL, 1082026387UL, 1423352480UL, 140091634UL, 526056489UL, 3300547146UL, +3089498232UL, 4266971502UL, 3202763095UL, 82235109UL, 1061842570UL, 3666470174UL, 945994616UL, 3663992550UL, 1110270726UL, 1804937521UL, 2774236887UL, 3776581315UL, 2203639366UL, 1840197918UL, 1564424234UL, 2276602447UL, 928117829UL, 978199281UL, 3690913528UL, 2958793283UL, 387554009UL, 2817496615UL, 375113876UL, 3626285597UL, 2296780370UL, 2411775612UL, 1346030561UL, 1277897939UL, 1561545830UL, 1005364336UL, 2093159919UL, 821902776UL, +1631078873UL, 63358970UL, 1185831033UL, 12264437UL, 3192617499UL, 3872277948UL, 3918754976UL, 1471530347UL, 2010243509UL, 4011062105UL, 1291836608UL, 2767111911UL, 2505795417UL, 1336824946UL, 1593119272UL, 3954754615UL, 902314853UL, 3478581038UL, 4027859424UL, 1163079365UL, 2198246306UL, 1462989647UL, 2291324146UL, 932688463UL, 4018333691UL, 2374736511UL, 3594712587UL, 3964293916UL, 4276849132UL, 3902062310UL, 3619038368UL, 2571513800UL, +42517349UL, 3100438883UL, 1645455709UL, 1146435746UL, 140519541UL, 3964913740UL, 2422362185UL, 3338363150UL, 3460540392UL, 226785542UL, 3275185975UL, 2655265571UL, 3789582441UL, 1288223861UL, 46428973UL, 1739051417UL, 2393774399UL, 2257001236UL, 1986226858UL, 4118320101UL, 3899157617UL, 3679157076UL, 3707520907UL, 551117761UL, 4267866849UL, 3679828833UL, 711086272UL, 570153549UL, 1667866621UL, 3662249794UL, 3405637490UL, 1343291195UL, +112368058UL, 2615115584UL, 2865130041UL, 357584504UL, 528807633UL, 1816055434UL, 2854850066UL, 190222907UL, 1014915859UL, 3472967123UL, 2605782564UL, 3353130066UL, 540430076UL, 2087143725UL, 1571283916UL, 1604766425UL, 934199876UL, 3359569795UL, 4168578472UL, 1745876717UL, 277026333UL, 2679446726UL, 3582165485UL, 3954458991UL, 2615245404UL, 2410035461UL, 3442004248UL, 2814474875UL, 1734556428UL, 2653422310UL, 4033890533UL, 2373774914UL, +3011118469UL, 1276695464UL, 2995405818UL, 782363735UL, 2242531852UL, 4206829780UL, 1486885236UL, 3764707851UL, 1945614253UL, 1147926733UL, 701960774UL, 3435251514UL, 3626050187UL, 3587799538UL, 2399216643UL, 3217822006UL, 3600044386UL, 648239752UL, 2997947488UL, 1754097052UL, 4109638936UL, 3413714077UL, 1038375790UL, 3394259389UL, 2284776380UL, 2711956471UL, 1278424040UL, 1272230764UL, 3980809660UL, 1983901240UL, 894405781UL, 582621606UL, +1274260631UL, 763432985UL, 1862236664UL, 10249416UL, 3838574116UL, 1912270458UL, 3491686662UL, 2696669149UL, 312119069UL, 1812714569UL, 2729307370UL, 3045249652UL, 303684944UL, 503720764UL, 4029412414UL, 4101616421UL, 3484358948UL, 1261027935UL, 145713434UL, 2918444923UL, 2099546237UL, 3173693583UL, 3498398823UL, 3769717769UL, 2860220116UL, 2919562911UL, 1221047715UL, 1749384742UL, 1018968146UL, 2771587474UL, 2746107326UL, 1182859751UL, +2403805226UL, 2206395932UL, 1500348209UL, 1762634532UL, 3017223998UL, 2043185588UL, 2124568729UL, 1619852613UL, 3248258238UL, 3393223375UL, 644860154UL, 2465108160UL, 2358875673UL, 3643741304UL, 1891106916UL, 416443047UL, 3298583974UL, 1030877276UL, 2839390034UL, 4181398645UL, 1845333999UL, 3643365079UL, 1993116780UL, 1763857175UL, 1951718545UL, 3785659537UL, 4156412284UL, 4138026128UL, 3480291142UL, 54280556UL, 4169041146UL, 3130638398UL, +3236816184UL, 3559898998UL, 916420843UL, 938920758UL, 3425021599UL, 1528477728UL, 3597939783UL, 3516249439UL, 936528538UL, 4174817780UL, 2541489033UL, 3962368135UL, 2054336507UL, 2610093970UL, 3613025255UL, 3583905994UL, 2990129491UL, 332823408UL, 2505138276UL, 3811707598UL, 373987627UL, 4263703898UL, 1668946560UL, 3213253899UL, 2673819338UL, 1631405099UL, 3127443274UL, 549232331UL, 21447814UL, 1647238011UL, 3093799993UL, 1922712395UL, +}, +{ +4224788259UL, 3569487556UL, 1080137041UL, 2788623569UL, 856160888UL, 2195536417UL, 3030463035UL, 2906439247UL, 896055051UL, 1967105456UL, 2093562169UL, 2919742950UL, 546374698UL, 1372591815UL, 3773616637UL, 349073007UL, 1331102855UL, 3035367896UL, 1222622311UL, 2266618592UL, 74466398UL, 1140488004UL, 855606859UL, 3803728487UL, 3589743162UL, 2748402856UL, 1044387368UL, 1494850922UL, 2242660891UL, 3111566003UL, 2013737074UL, 163276737UL, +1526772858UL, 3047139947UL, 3150695453UL, 2583795468UL, 3628272447UL, 305282258UL, 2151108134UL, 2905708853UL, 1052800761UL, 3354632338UL, 1017036861UL, 2453680791UL, 2673902555UL, 1622154585UL, 2893733051UL, 3888482522UL, 306284440UL, 3245137245UL, 3480776670UL, 2865396581UL, 3571456526UL, 3284891766UL, 1393584874UL, 1057867320UL, 2888126310UL, 3302325443UL, 4135187530UL, 1770789166UL, 1615533805UL, 1438727397UL, 2921922012UL, 3156703516UL, +435047591UL, 2999350446UL, 575044884UL, 1001339111UL, 625824120UL, 2489346227UL, 2104489492UL, 2494528446UL, 1141458836UL, 4048430074UL, 2599022749UL, 2438694106UL, 1443850072UL, 3321658999UL, 87870515UL, 958195816UL, 380666771UL, 3062272732UL, 4178548642UL, 4274603044UL, 888566831UL, 3386636024UL, 1636806704UL, 2400069397UL, 3003029365UL, 1953620944UL, 3278772216UL, 1562778171UL, 2767090642UL, 14436957UL, 913966574UL, 1724553886UL, +2015261135UL, 4191296122UL, 1688939147UL, 110865735UL, 2913800286UL, 4131469475UL, 315962755UL, 1531174227UL, 1226678476UL, 3446400266UL, 3896297836UL, 539834883UL, 2871306264UL, 3333932675UL, 2229436010UL, 1928458456UL, 464682640UL, 1786180352UL, 162599143UL, 817038005UL, 3146256537UL, 1676400403UL, 2484731087UL, 702610427UL, 4005124049UL, 1691076958UL, 1268494739UL, 4093608833UL, 3757213737UL, 2627839929UL, 2884764386UL, 1548110665UL, +3361745333UL, 3955318088UL, 3264527857UL, 3969225726UL, 968269281UL, 2630991382UL, 2716444139UL, 1071781623UL, 3704437685UL, 1511193802UL, 843840414UL, 1277966236UL, 4141095880UL, 715016637UL, 1255888181UL, 1321941951UL, 1180174408UL, 1021629824UL, 3395369301UL, 3912221525UL, 2611782663UL, 4038117717UL, 2253029302UL, 974431991UL, 347200257UL, 886823557UL, 2275848777UL, 3732452739UL, 3708953729UL, 2688020866UL, 4185175489UL, 99605353UL, +2387945286UL, 4224788259UL, 3569487556UL, 1080137041UL, 2788623569UL, 238715294UL, 2195536417UL, 3030463035UL, 2906439247UL, 896055051UL, 3061240402UL, 2093562169UL, 2919742950UL, 546374698UL, 1372591815UL, 851057115UL, 349073007UL, 1331102855UL, 3035367896UL, 1222622311UL, 3305595574UL, 74466398UL, 1140488004UL, 855606859UL, 3803728487UL, 3838112757UL, 2748402856UL, 1044387368UL, 1494850922UL, 2242660891UL, 1038286760UL, 2013737074UL, +163276737UL, 1526772858UL, 3047139947UL, 3518918891UL, 2583795468UL, 3628272447UL, 305282258UL, 2151108134UL, 3555155951UL, 1052800761UL, 3354632338UL, 1017036861UL, 2453680791UL, 2394691836UL, 1622154585UL, 2893733051UL, 3888482522UL, 306284440UL, 2055552069UL, 3480776670UL, 2865396581UL, 3571456526UL, 3284891766UL, 1179339312UL, 1057867320UL, 2888126310UL, 3302325443UL, 4135187530UL, 683364318UL, 1615533805UL, 1438727397UL, 2921922012UL, +3156703516UL, 1333086260UL, 2999350446UL, 575044884UL, 1001339111UL, 625824120UL, 576119652UL, 2104489492UL, 2494528446UL, 1141458836UL, 4048430074UL, 786660788UL, 2438694106UL, 1443850072UL, 3321658999UL, 87870515UL, 457955380UL, 380666771UL, 3062272732UL, 4178548642UL, 4274603044UL, 2256710588UL, 3386636024UL, 1636806704UL, 2400069397UL, 3003029365UL, 3733049985UL, 3278772216UL, 1562778171UL, 2767090642UL, 14436957UL, 530062778UL, +1724553886UL, 2015261135UL, 4191296122UL, 1688939147UL, 2981240708UL, 2913800286UL, 4131469475UL, 315962755UL, 1531174227UL, 2433363617UL, 3446400266UL, 3896297836UL, 539834883UL, 2871306264UL, 2597546929UL, 2229436010UL, 1928458456UL, 464682640UL, 1786180352UL, 1165821797UL, 817038005UL, 3146256537UL, 1676400403UL, 2484731087UL, 3239493343UL, 4005124049UL, 1691076958UL, 1268494739UL, 4093608833UL, 2088690204UL, 2627839929UL, 2884764386UL, +1548110665UL, 3361745333UL, 1075350364UL, 3264527857UL, 3969225726UL, 968269281UL, 2630991382UL, 4103280359UL, 1071781623UL, 3704437685UL, 1511193802UL, 843840414UL, 1340474980UL, 4141095880UL, 715016637UL, 1255888181UL, 1321941951UL, 2512565938UL, 1021629824UL, 3395369301UL, 3912221525UL, 2611782663UL, 2287272047UL, 2253029302UL, 974431991UL, 347200257UL, 886823557UL, 3775715445UL, 3732452739UL, 3708953729UL, 2688020866UL, 4185175489UL, +2151114047UL, 2387945286UL, 4224788259UL, 3569487556UL, 1080137041UL, 879682447UL, 238715294UL, 2195536417UL, 3030463035UL, 2906439247UL, 3975397430UL, 3061240402UL, 2093562169UL, 2919742950UL, 546374698UL, 1928060945UL, 851057115UL, 349073007UL, 1331102855UL, 3035367896UL, 1148668613UL, 3305595574UL, 74466398UL, 1140488004UL, 855606859UL, 917923571UL, 3838112757UL, 2748402856UL, 1044387368UL, 1494850922UL, 995791756UL, 1038286760UL, +2013737074UL, 163276737UL, 1526772858UL, 1944370085UL, 3518918891UL, 2583795468UL, 3628272447UL, 305282258UL, 685261037UL, 3555155951UL, 1052800761UL, 3354632338UL, 1017036861UL, 1620076466UL, 2394691836UL, 1622154585UL, 2893733051UL, 3888482522UL, 4119309151UL, 2055552069UL, 3480776670UL, 2865396581UL, 3571456526UL, 4008552940UL, 1179339312UL, 1057867320UL, 2888126310UL, 3302325443UL, 2359989247UL, 683364318UL, 1615533805UL, 1438727397UL, +2921922012UL, 2092991022UL, 1333086260UL, 2999350446UL, 575044884UL, 1001339111UL, 2406217399UL, 576119652UL, 2104489492UL, 2494528446UL, 1141458836UL, 1856565466UL, 786660788UL, 2438694106UL, 1443850072UL, 3321658999UL, 2752588925UL, 457955380UL, 380666771UL, 3062272732UL, 4178548642UL, 1354877973UL, 2256710588UL, 3386636024UL, 1636806704UL, 2400069397UL, 2275777233UL, 3733049985UL, 3278772216UL, 1562778171UL, 2767090642UL, 3438624166UL, +530062778UL, 1724553886UL, 2015261135UL, 4191296122UL, 3842215040UL, 2981240708UL, 2913800286UL, 4131469475UL, 315962755UL, 2891870900UL, 2433363617UL, 3446400266UL, 3896297836UL, 539834883UL, 1390877376UL, 2597546929UL, 2229436010UL, 1928458456UL, 464682640UL, 1405678725UL, 1165821797UL, 817038005UL, 3146256537UL, 1676400403UL, 9522151UL, 3239493343UL, 4005124049UL, 1691076958UL, 1268494739UL, 4076978821UL, 2088690204UL, 2627839929UL, +2884764386UL, 1548110665UL, 3713129550UL, 1075350364UL, 3264527857UL, 3969225726UL, 968269281UL, 2669129178UL, 4103280359UL, 1071781623UL, 3704437685UL, 1511193802UL, 2032747975UL, 1340474980UL, 4141095880UL, 715016637UL, 1255888181UL, 1290704077UL, 2512565938UL, 1021629824UL, 3395369301UL, 3912221525UL, 767420943UL, 2287272047UL, 2253029302UL, 974431991UL, 347200257UL, 940587649UL, 3775715445UL, 3732452739UL, 3708953729UL, 2688020866UL, +1603856534UL, 2151114047UL, 2387945286UL, 4224788259UL, 3569487556UL, 4060395365UL, 879682447UL, 238715294UL, 2195536417UL, 3030463035UL, 774839173UL, 3975397430UL, 3061240402UL, 2093562169UL, 2919742950UL, 77503099UL, 1928060945UL, 851057115UL, 349073007UL, 1331102855UL, 4216140027UL, 1148668613UL, 3305595574UL, 74466398UL, 1140488004UL, 1728766104UL, 917923571UL, 3838112757UL, 2748402856UL, 1044387368UL, 1408900577UL, 995791756UL, +1038286760UL, 2013737074UL, 163276737UL, 936142172UL, 1944370085UL, 3518918891UL, 2583795468UL, 3628272447UL, 1701372078UL, 685261037UL, 3555155951UL, 1052800761UL, 3354632338UL, 2951922777UL, 1620076466UL, 2394691836UL, 1622154585UL, 2893733051UL, 2494523614UL, 4119309151UL, 2055552069UL, 3480776670UL, 2865396581UL, 3031455484UL, 4008552940UL, 1179339312UL, 1057867320UL, 2888126310UL, 2970791558UL, 2359989247UL, 683364318UL, 1615533805UL, +1438727397UL, 3697460033UL, 2092991022UL, 1333086260UL, 2999350446UL, 575044884UL, 2712063736UL, 2406217399UL, 576119652UL, 2104489492UL, 2494528446UL, 1096189230UL, 1856565466UL, 786660788UL, 2438694106UL, 1443850072UL, 3615481975UL, 2752588925UL, 457955380UL, 380666771UL, 3062272732UL, 2387056252UL, 1354877973UL, 2256710588UL, 3386636024UL, 1636806704UL, 517188972UL, 2275777233UL, 3733049985UL, 3278772216UL, 1562778171UL, 3436331606UL, +3438624166UL, 530062778UL, 1724553886UL, 2015261135UL, 1711407722UL, 3842215040UL, 2981240708UL, 2913800286UL, 4131469475UL, 878455086UL, 2891870900UL, 2433363617UL, 3446400266UL, 3896297836UL, 4251949215UL, 1390877376UL, 2597546929UL, 2229436010UL, 1928458456UL, 719826541UL, 1405678725UL, 1165821797UL, 817038005UL, 3146256537UL, 3883590627UL, 9522151UL, 3239493343UL, 4005124049UL, 1691076958UL, 893183073UL, 4076978821UL, 2088690204UL, +2627839929UL, 2884764386UL, 3312769297UL, 3713129550UL, 1075350364UL, 3264527857UL, 3969225726UL, 4161107579UL, 2669129178UL, 4103280359UL, 1071781623UL, 3704437685UL, 1400940789UL, 2032747975UL, 1340474980UL, 4141095880UL, 715016637UL, 1705234794UL, 1290704077UL, 2512565938UL, 1021629824UL, 3395369301UL, 2934074199UL, 767420943UL, 2287272047UL, 2253029302UL, 974431991UL, 3060035390UL, 940587649UL, 3775715445UL, 3732452739UL, 3708953729UL, +3489160434UL, 3200799223UL, 340420813UL, 2539294182UL, 2619616318UL, 456806966UL, 4272538790UL, 2994564124UL, 2757588894UL, 3493053179UL, 2946195469UL, 1402305257UL, 2266356503UL, 3512914478UL, 273195440UL, 3579761455UL, 862317458UL, 1894959361UL, 42596779UL, 376641729UL, 782820755UL, 716528645UL, 222675565UL, 4038035195UL, 311038326UL, 395780597UL, 2025474869UL, 404396572UL, 4138962756UL, 2441107014UL, 3525378401UL, 947085768UL, +3758218091UL, 3185789607UL, 638283508UL, 3802505926UL, 830259842UL, 1086400881UL, 3444485UL, 142418107UL, 4283468141UL, 1669846189UL, 955065888UL, 3864384467UL, 73139517UL, 136809048UL, 1444329434UL, 174974637UL, 3303183786UL, 282216656UL, 3114827080UL, 3811060015UL, 1610640996UL, 3824096289UL, 1123437514UL, 3826582808UL, 39407702UL, 2437666463UL, 2454206642UL, 830758422UL, 4190092654UL, 1941090912UL, 224373276UL, 3704201239UL, +3284012568UL, 4056152539UL, 1022047941UL, 1077111803UL, 3028336675UL, 3207391465UL, 3459202233UL, 1991240724UL, 4184491520UL, 1851863093UL, 1038639595UL, 1392247730UL, 2113875749UL, 1162388509UL, 2629935260UL, 3545260772UL, 991928712UL, 4064775043UL, 4180493781UL, 2134685922UL, 642853690UL, 290065503UL, 1629968UL, 3150373868UL, 3110755428UL, 2254306163UL, 421928533UL, 11426979UL, 3042809169UL, 786868170UL, 1287942583UL, 1851107769UL, +1444903906UL, 4150950197UL, 3737798306UL, 2848738554UL, 505924220UL, 2944131627UL, 2639930627UL, 1339887691UL, 2382166850UL, 2668971315UL, 3944739049UL, 2217612340UL, 4142682607UL, 997824216UL, 123465626UL, 844518179UL, 1161486362UL, 2706162053UL, 2966530827UL, 4103639053UL, 1837121393UL, 909648429UL, 298619078UL, 2057042454UL, 3613272637UL, 3609349032UL, 1664428748UL, 1871510359UL, 58508710UL, 1079418100UL, 3278870121UL, 3821562746UL, +16654909UL, 2530580589UL, 3361874982UL, 629910009UL, 2124761646UL, 2508133604UL, 1954315500UL, 3019833617UL, 141617625UL, 1653192078UL, 1541695589UL, 1223978475UL, 3875963510UL, 3028691587UL, 3450826564UL, 2185849120UL, 1956475624UL, 3053842172UL, 3550887830UL, 2672339803UL, 176823785UL, 913229929UL, 681399502UL, 2256486297UL, 2881672598UL, 597153273UL, 2782767695UL, 1133158067UL, 4126077325UL, 3456027404UL, 754062201UL, 4069172986UL, +}, +{ +2441935114UL, 3465447683UL, 2897229686UL, 3845380309UL, 1199633364UL, 495424232UL, 2490548037UL, 581670528UL, 2467171733UL, 2200094863UL, 2163927790UL, 3895792830UL, 2097210789UL, 1606544633UL, 1305562517UL, 4072525389UL, 3256142090UL, 349440478UL, 3920932491UL, 2462464051UL, 1075951496UL, 2835763703UL, 1593198055UL, 2380945625UL, 543531323UL, 3182766507UL, 2927484354UL, 2877470578UL, 4153923603UL, 2443156156UL, 1168544900UL, 888955615UL, +3605412824UL, 1336677864UL, 3256116974UL, 2884036014UL, 4070749843UL, 2989661773UL, 1095584023UL, 1370834065UL, 3534389580UL, 312378113UL, 3190819203UL, 1247574926UL, 2046019470UL, 3536918510UL, 1479030180UL, 847820646UL, 3992973956UL, 3827223401UL, 4113429617UL, 3504933502UL, 295000614UL, 2238923504UL, 3485717254UL, 290246351UL, 1064210816UL, 2848539559UL, 2617134888UL, 422213010UL, 2796674561UL, 3568250500UL, 2736237915UL, 3950756060UL, +1527249993UL, 3603540278UL, 4115393386UL, 2851621193UL, 4230341156UL, 905168850UL, 3916344126UL, 1496013046UL, 206343742UL, 2894205125UL, 1082918859UL, 2746480417UL, 3077328661UL, 1209440053UL, 3258293856UL, 1032236533UL, 3043332566UL, 446879604UL, 587022214UL, 1614371566UL, 3040899994UL, 3686422145UL, 937325128UL, 1968833679UL, 169086151UL, 4075432555UL, 1196046411UL, 3101745581UL, 4228079966UL, 2942213563UL, 1195005323UL, 1673491641UL, +1762746534UL, 3641827252UL, 694590905UL, 1828365460UL, 513716230UL, 3106485486UL, 2441593994UL, 4044462965UL, 3628121101UL, 3957990629UL, 179764922UL, 579361186UL, 3474393871UL, 2474241006UL, 4031850878UL, 3120409532UL, 4011587898UL, 3682942579UL, 3257272830UL, 3097029759UL, 2652540191UL, 1128762588UL, 1040256382UL, 2743736716UL, 334893087UL, 1892049031UL, 2603159239UL, 3712772023UL, 2126593224UL, 3465793906UL, 3180780589UL, 725740783UL, +3728108967UL, 573931936UL, 137996587UL, 110756053UL, 3984787930UL, 3773232816UL, 3406981985UL, 1783088630UL, 2080089781UL, 195827466UL, 1409073281UL, 867635355UL, 3049533211UL, 486687054UL, 2570137956UL, 527522011UL, 1084454084UL, 1019222771UL, 1415565066UL, 650794786UL, 629618803UL, 1237709131UL, 1241899078UL, 2751644247UL, 2792313337UL, 649402117UL, 275078659UL, 752459111UL, 2173220853UL, 3207031798UL, 821073585UL, 3005400729UL, +1085152012UL, 2441935114UL, 3465447683UL, 2897229686UL, 3845380309UL, 3573898488UL, 495424232UL, 2490548037UL, 581670528UL, 2467171733UL, 1208279791UL, 2163927790UL, 3895792830UL, 2097210789UL, 1606544633UL, 2148733343UL, 4072525389UL, 3256142090UL, 349440478UL, 3920932491UL, 657289255UL, 1075951496UL, 2835763703UL, 1593198055UL, 2380945625UL, 149487931UL, 3182766507UL, 2927484354UL, 2877470578UL, 4153923603UL, 606130344UL, 1168544900UL, +888955615UL, 3605412824UL, 1336677864UL, 53448770UL, 2884036014UL, 4070749843UL, 2989661773UL, 1095584023UL, 2766144383UL, 3534389580UL, 312378113UL, 3190819203UL, 1247574926UL, 1530609481UL, 3536918510UL, 1479030180UL, 847820646UL, 3992973956UL, 154171325UL, 4113429617UL, 3504933502UL, 295000614UL, 2238923504UL, 282708664UL, 290246351UL, 1064210816UL, 2848539559UL, 2617134888UL, 36906646UL, 2796674561UL, 3568250500UL, 2736237915UL, +3950756060UL, 3416260072UL, 3603540278UL, 4115393386UL, 2851621193UL, 4230341156UL, 448215287UL, 3916344126UL, 1496013046UL, 206343742UL, 2894205125UL, 2420861244UL, 2746480417UL, 3077328661UL, 1209440053UL, 3258293856UL, 2545287695UL, 3043332566UL, 446879604UL, 587022214UL, 1614371566UL, 958587333UL, 3686422145UL, 937325128UL, 1968833679UL, 169086151UL, 154576725UL, 1196046411UL, 3101745581UL, 4228079966UL, 2942213563UL, 2487464668UL, +1673491641UL, 1762746534UL, 3641827252UL, 694590905UL, 3754606623UL, 513716230UL, 3106485486UL, 2441593994UL, 4044462965UL, 3064108377UL, 3957990629UL, 179764922UL, 579361186UL, 3474393871UL, 2138270428UL, 4031850878UL, 3120409532UL, 4011587898UL, 3682942579UL, 4015980199UL, 3097029759UL, 2652540191UL, 1128762588UL, 1040256382UL, 3908621649UL, 334893087UL, 1892049031UL, 2603159239UL, 3712772023UL, 3291038350UL, 3465793906UL, 3180780589UL, +725740783UL, 3728108967UL, 436976908UL, 137996587UL, 110756053UL, 3984787930UL, 3773232816UL, 1000054791UL, 1783088630UL, 2080089781UL, 195827466UL, 1409073281UL, 3036813614UL, 3049533211UL, 486687054UL, 2570137956UL, 527522011UL, 3669951690UL, 1019222771UL, 1415565066UL, 650794786UL, 629618803UL, 4140569538UL, 1241899078UL, 2751644247UL, 2792313337UL, 649402117UL, 2946582304UL, 752459111UL, 2173220853UL, 3207031798UL, 821073585UL, +1738142977UL, 1085152012UL, 2441935114UL, 3465447683UL, 2897229686UL, 2707197334UL, 3573898488UL, 495424232UL, 2490548037UL, 581670528UL, 2365865647UL, 1208279791UL, 2163927790UL, 3895792830UL, 2097210789UL, 3219551420UL, 2148733343UL, 4072525389UL, 3256142090UL, 349440478UL, 3706519197UL, 657289255UL, 1075951496UL, 2835763703UL, 1593198055UL, 2200084531UL, 149487931UL, 3182766507UL, 2927484354UL, 2877470578UL, 2394288661UL, 606130344UL, +1168544900UL, 888955615UL, 3605412824UL, 1503975597UL, 53448770UL, 2884036014UL, 4070749843UL, 2989661773UL, 243605110UL, 2766144383UL, 3534389580UL, 312378113UL, 3190819203UL, 2398088088UL, 1530609481UL, 3536918510UL, 1479030180UL, 847820646UL, 2940281320UL, 154171325UL, 4113429617UL, 3504933502UL, 295000614UL, 3078701806UL, 282708664UL, 290246351UL, 1064210816UL, 2848539559UL, 3960345380UL, 36906646UL, 2796674561UL, 3568250500UL, +2736237915UL, 2657034787UL, 3416260072UL, 3603540278UL, 4115393386UL, 2851621193UL, 3847740427UL, 448215287UL, 3916344126UL, 1496013046UL, 206343742UL, 3419083433UL, 2420861244UL, 2746480417UL, 3077328661UL, 1209440053UL, 3824237152UL, 2545287695UL, 3043332566UL, 446879604UL, 587022214UL, 506352928UL, 958587333UL, 3686422145UL, 937325128UL, 1968833679UL, 1808935939UL, 154576725UL, 1196046411UL, 3101745581UL, 4228079966UL, 709576348UL, +2487464668UL, 1673491641UL, 1762746534UL, 3641827252UL, 3968332142UL, 3754606623UL, 513716230UL, 3106485486UL, 2441593994UL, 1453443785UL, 3064108377UL, 3957990629UL, 179764922UL, 579361186UL, 1454621561UL, 2138270428UL, 4031850878UL, 3120409532UL, 4011587898UL, 898119245UL, 4015980199UL, 3097029759UL, 2652540191UL, 1128762588UL, 1131456853UL, 3908621649UL, 334893087UL, 1892049031UL, 2603159239UL, 4280222837UL, 3291038350UL, 3465793906UL, +3180780589UL, 725740783UL, 1515867399UL, 436976908UL, 137996587UL, 110756053UL, 3984787930UL, 1295994548UL, 1000054791UL, 1783088630UL, 2080089781UL, 195827466UL, 252558267UL, 3036813614UL, 3049533211UL, 486687054UL, 2570137956UL, 786434419UL, 3669951690UL, 1019222771UL, 1415565066UL, 650794786UL, 1316734597UL, 4140569538UL, 1241899078UL, 2751644247UL, 2792313337UL, 4014748337UL, 2946582304UL, 752459111UL, 2173220853UL, 3207031798UL, +2903407363UL, 1738142977UL, 1085152012UL, 2441935114UL, 3465447683UL, 1082984764UL, 2707197334UL, 3573898488UL, 495424232UL, 2490548037UL, 240094068UL, 2365865647UL, 1208279791UL, 2163927790UL, 3895792830UL, 1107651215UL, 3219551420UL, 2148733343UL, 4072525389UL, 3256142090UL, 681942656UL, 3706519197UL, 657289255UL, 1075951496UL, 2835763703UL, 2172774506UL, 2200084531UL, 149487931UL, 3182766507UL, 2927484354UL, 3069592433UL, 2394288661UL, +606130344UL, 1168544900UL, 888955615UL, 757163746UL, 1503975597UL, 53448770UL, 2884036014UL, 4070749843UL, 1705538727UL, 243605110UL, 2766144383UL, 3534389580UL, 312378113UL, 2256467250UL, 2398088088UL, 1530609481UL, 3536918510UL, 1479030180UL, 1360826079UL, 2940281320UL, 154171325UL, 4113429617UL, 3504933502UL, 714934244UL, 3078701806UL, 282708664UL, 290246351UL, 1064210816UL, 3694453051UL, 3960345380UL, 36906646UL, 2796674561UL, +3568250500UL, 3400481963UL, 2657034787UL, 3416260072UL, 3603540278UL, 4115393386UL, 1466632735UL, 3847740427UL, 448215287UL, 3916344126UL, 1496013046UL, 2893537514UL, 3419083433UL, 2420861244UL, 2746480417UL, 3077328661UL, 2815979224UL, 3824237152UL, 2545287695UL, 3043332566UL, 446879604UL, 3719452721UL, 506352928UL, 958587333UL, 3686422145UL, 937325128UL, 2653904510UL, 1808935939UL, 154576725UL, 1196046411UL, 3101745581UL, 425411544UL, +709576348UL, 2487464668UL, 1673491641UL, 1762746534UL, 1960605594UL, 3968332142UL, 3754606623UL, 513716230UL, 3106485486UL, 2881551071UL, 1453443785UL, 3064108377UL, 3957990629UL, 179764922UL, 1408218536UL, 1454621561UL, 2138270428UL, 4031850878UL, 3120409532UL, 3700386494UL, 898119245UL, 4015980199UL, 3097029759UL, 2652540191UL, 2181464767UL, 1131456853UL, 3908621649UL, 334893087UL, 1892049031UL, 4220220071UL, 4280222837UL, 3291038350UL, +3465793906UL, 3180780589UL, 1737123182UL, 1515867399UL, 436976908UL, 137996587UL, 110756053UL, 1360813614UL, 1295994548UL, 1000054791UL, 1783088630UL, 2080089781UL, 1019367341UL, 252558267UL, 3036813614UL, 3049533211UL, 486687054UL, 387915679UL, 786434419UL, 3669951690UL, 1019222771UL, 1415565066UL, 4267042909UL, 1316734597UL, 4140569538UL, 1241899078UL, 2751644247UL, 3622120385UL, 4014748337UL, 2946582304UL, 752459111UL, 2173220853UL, +1128460687UL, 2268047031UL, 239933818UL, 4141570430UL, 1318816940UL, 2378987660UL, 731877825UL, 3950952879UL, 2975574698UL, 2938375136UL, 431933385UL, 154404673UL, 2020658234UL, 846815781UL, 822137193UL, 1057315444UL, 3632584082UL, 3263363094UL, 942201956UL, 2704683551UL, 1768107067UL, 4009446092UL, 3090701064UL, 701246680UL, 3548419575UL, 3873366129UL, 1639833080UL, 2401253373UL, 66597794UL, 2515774132UL, 516246524UL, 4232115668UL, +34426096UL, 2206423458UL, 3628832867UL, 2776950121UL, 2782943544UL, 2058958317UL, 1805852726UL, 2151415233UL, 2940074103UL, 2318397273UL, 3067676663UL, 3127709351UL, 71509976UL, 115529187UL, 1841252918UL, 2217805156UL, 733917373UL, 2432474677UL, 1416887641UL, 1895320369UL, 2779694586UL, 510547269UL, 2614743018UL, 759552691UL, 2264773752UL, 305497497UL, 1082013785UL, 1681067734UL, 1085957001UL, 846460632UL, 2824079919UL, 1820633139UL, +3686495295UL, 3978521319UL, 1734452426UL, 4105472656UL, 1771256166UL, 1578071897UL, 1972844727UL, 2048372515UL, 3002132226UL, 1889169118UL, 2932142799UL, 2166712623UL, 592016143UL, 1116895096UL, 889321536UL, 375621825UL, 2935845994UL, 1982459859UL, 3336799370UL, 294519309UL, 2661638345UL, 1089335942UL, 227150969UL, 1454919198UL, 3780503305UL, 1862290968UL, 1491836299UL, 766546986UL, 3638407467UL, 925906735UL, 208891816UL, 236714698UL, +2853181150UL, 3889751556UL, 2161215392UL, 853579433UL, 2131555681UL, 1396396345UL, 1088128136UL, 978252562UL, 2134024308UL, 2429920974UL, 1159468871UL, 2395949266UL, 1441791888UL, 916521377UL, 3950270431UL, 2663319810UL, 3873120593UL, 2080989388UL, 2896532502UL, 3176181708UL, 1736685126UL, 4081767288UL, 3515770288UL, 1371473598UL, 1491850178UL, 4284949727UL, 2774513541UL, 1541596000UL, 3948112869UL, 2114538326UL, 2641532252UL, 1837244955UL, +2292505300UL, 3179787565UL, 639953781UL, 785902378UL, 3852544833UL, 553508260UL, 23014564UL, 106722100UL, 2705412979UL, 3449440367UL, 950636401UL, 870804158UL, 629831074UL, 424163855UL, 373653940UL, 2739378330UL, 377730945UL, 418426029UL, 267367218UL, 554678849UL, 4222664331UL, 3346048120UL, 1870226737UL, 2435616108UL, 3747040233UL, 698046507UL, 1671346285UL, 4127293033UL, 568612264UL, 3467142937UL, 1627988025UL, 1305525598UL, +}, +{ +2246605826UL, 215030128UL, 871645668UL, 3402612852UL, 423273439UL, 316965236UL, 47416561UL, 1470716454UL, 2288582385UL, 2021890755UL, 2148091363UL, 167227868UL, 3085506034UL, 3365950545UL, 1170282137UL, 1345986409UL, 197195155UL, 2644113318UL, 2491271090UL, 2597072003UL, 170335901UL, 2540851884UL, 2584420407UL, 3609142920UL, 3052130502UL, 4018095157UL, 2850805299UL, 2777821400UL, 110647395UL, 3262987676UL, 1447103309UL, 3632575579UL, +3243210595UL, 1892770504UL, 4214485953UL, 38676169UL, 2431628817UL, 2836918800UL, 272023527UL, 2825888902UL, 2794421955UL, 2354379386UL, 452404203UL, 584718212UL, 1915053836UL, 1455821656UL, 4264066935UL, 1150980581UL, 3792433350UL, 3104909316UL, 441521402UL, 3807587668UL, 275969953UL, 3970844623UL, 3323695518UL, 3909107329UL, 290225599UL, 957520066UL, 4048181850UL, 2623778463UL, 1957371891UL, 540091753UL, 3072448879UL, 2386916346UL, +392549194UL, 1261391184UL, 4137605148UL, 314807135UL, 2916930821UL, 3168561018UL, 2332027308UL, 1967082817UL, 1849256214UL, 1141134412UL, 1206824012UL, 2088102210UL, 4170914605UL, 3399892824UL, 59190648UL, 1657183299UL, 1314626253UL, 500606287UL, 413229420UL, 1245395908UL, 664681UL, 2726979120UL, 3408998445UL, 2318397638UL, 1882820077UL, 2073055266UL, 4262833629UL, 1348801932UL, 229857331UL, 3086071450UL, 1327801028UL, 812015573UL, +2214355282UL, 2232635690UL, 3162540418UL, 2049877621UL, 470752564UL, 2527480795UL, 1285499716UL, 220173566UL, 4239277569UL, 788168494UL, 3748855859UL, 1360707769UL, 449512212UL, 1238219398UL, 2880205975UL, 2755133627UL, 372409230UL, 411800575UL, 2455333195UL, 4080817864UL, 3556684908UL, 2857940866UL, 1969081563UL, 2526852668UL, 1026062474UL, 1849785784UL, 3552290093UL, 4214448UL, 460332681UL, 30890894UL, 1108618048UL, 272438799UL, +3339891045UL, 1512685591UL, 1310038443UL, 2431938882UL, 1478442144UL, 2804640700UL, 3426381347UL, 861206186UL, 290322827UL, 2736623609UL, 327318125UL, 1922859957UL, 1939922519UL, 3539608908UL, 3442377433UL, 3868710131UL, 2244493875UL, 47774461UL, 3858864626UL, 3294523981UL, 1798515481UL, 565017248UL, 2633378137UL, 811307482UL, 1743357106UL, 419676111UL, 1688841846UL, 1799884674UL, 1720546272UL, 3900863156UL, 3506303345UL, 1719438472UL, +576775454UL, 2246605826UL, 215030128UL, 871645668UL, 3402612852UL, 619000856UL, 316965236UL, 47416561UL, 1470716454UL, 2288582385UL, 3464704266UL, 2148091363UL, 167227868UL, 3085506034UL, 3365950545UL, 901169164UL, 1345986409UL, 197195155UL, 2644113318UL, 2491271090UL, 3243741640UL, 170335901UL, 2540851884UL, 2584420407UL, 3609142920UL, 2051834116UL, 4018095157UL, 2850805299UL, 2777821400UL, 110647395UL, 2822981113UL, 1447103309UL, +3632575579UL, 3243210595UL, 1892770504UL, 1947501555UL, 38676169UL, 2431628817UL, 2836918800UL, 272023527UL, 4010280501UL, 2794421955UL, 2354379386UL, 452404203UL, 584718212UL, 3991257933UL, 1455821656UL, 4264066935UL, 1150980581UL, 3792433350UL, 2151631692UL, 441521402UL, 3807587668UL, 275969953UL, 3970844623UL, 3965914153UL, 3909107329UL, 290225599UL, 957520066UL, 4048181850UL, 4011285909UL, 1957371891UL, 540091753UL, 3072448879UL, +2386916346UL, 1347453316UL, 1261391184UL, 4137605148UL, 314807135UL, 2916930821UL, 840822698UL, 2332027308UL, 1967082817UL, 1849256214UL, 1141134412UL, 960593185UL, 2088102210UL, 4170914605UL, 3399892824UL, 59190648UL, 2261593014UL, 1314626253UL, 500606287UL, 413229420UL, 1245395908UL, 3401527918UL, 2726979120UL, 3408998445UL, 2318397638UL, 1882820077UL, 1683077666UL, 4262833629UL, 1348801932UL, 229857331UL, 3086071450UL, 3363644507UL, +812015573UL, 2214355282UL, 2232635690UL, 3162540418UL, 3579858747UL, 470752564UL, 2527480795UL, 1285499716UL, 220173566UL, 2294101261UL, 788168494UL, 3748855859UL, 1360707769UL, 449512212UL, 28595866UL, 2880205975UL, 2755133627UL, 372409230UL, 411800575UL, 1905311140UL, 4080817864UL, 3556684908UL, 2857940866UL, 1969081563UL, 148561593UL, 1026062474UL, 1849785784UL, 3552290093UL, 4214448UL, 2237247821UL, 30890894UL, 1108618048UL, +272438799UL, 3339891045UL, 169576507UL, 1310038443UL, 2431938882UL, 1478442144UL, 2804640700UL, 4119485855UL, 861206186UL, 290322827UL, 2736623609UL, 327318125UL, 3408620608UL, 1939922519UL, 3539608908UL, 3442377433UL, 3868710131UL, 1188056275UL, 47774461UL, 3858864626UL, 3294523981UL, 1798515481UL, 1228896851UL, 2633378137UL, 811307482UL, 1743357106UL, 419676111UL, 3111013241UL, 1799884674UL, 1720546272UL, 3900863156UL, 3506303345UL, +1474164586UL, 576775454UL, 2246605826UL, 215030128UL, 871645668UL, 2968519387UL, 619000856UL, 316965236UL, 47416561UL, 1470716454UL, 9648980UL, 3464704266UL, 2148091363UL, 167227868UL, 3085506034UL, 1505294373UL, 901169164UL, 1345986409UL, 197195155UL, 2644113318UL, 1227359150UL, 3243741640UL, 170335901UL, 2540851884UL, 2584420407UL, 1205921163UL, 2051834116UL, 4018095157UL, 2850805299UL, 2777821400UL, 2967529310UL, 2822981113UL, +1447103309UL, 3632575579UL, 3243210595UL, 532996977UL, 1947501555UL, 38676169UL, 2431628817UL, 2836918800UL, 1761031313UL, 4010280501UL, 2794421955UL, 2354379386UL, 452404203UL, 1222630846UL, 3991257933UL, 1455821656UL, 4264066935UL, 1150980581UL, 2344548386UL, 2151631692UL, 441521402UL, 3807587668UL, 275969953UL, 963889269UL, 3965914153UL, 3909107329UL, 290225599UL, 957520066UL, 4176220201UL, 4011285909UL, 1957371891UL, 540091753UL, +3072448879UL, 1810164615UL, 1347453316UL, 1261391184UL, 4137605148UL, 314807135UL, 2672526663UL, 840822698UL, 2332027308UL, 1967082817UL, 1849256214UL, 734862208UL, 960593185UL, 2088102210UL, 4170914605UL, 3399892824UL, 2471507530UL, 2261593014UL, 1314626253UL, 500606287UL, 413229420UL, 970185057UL, 3401527918UL, 2726979120UL, 3408998445UL, 2318397638UL, 708987193UL, 1683077666UL, 4262833629UL, 1348801932UL, 229857331UL, 749849397UL, +3363644507UL, 812015573UL, 2214355282UL, 2232635690UL, 2901095495UL, 3579858747UL, 470752564UL, 2527480795UL, 1285499716UL, 941862108UL, 2294101261UL, 788168494UL, 3748855859UL, 1360707769UL, 3818227212UL, 28595866UL, 2880205975UL, 2755133627UL, 372409230UL, 570110534UL, 1905311140UL, 4080817864UL, 3556684908UL, 2857940866UL, 2253777974UL, 148561593UL, 1026062474UL, 1849785784UL, 3552290093UL, 1525559608UL, 2237247821UL, 30890894UL, +1108618048UL, 272438799UL, 3996203631UL, 169576507UL, 1310038443UL, 2431938882UL, 1478442144UL, 2857841871UL, 4119485855UL, 861206186UL, 290322827UL, 2736623609UL, 1184217272UL, 3408620608UL, 1939922519UL, 3539608908UL, 3442377433UL, 1263700272UL, 1188056275UL, 47774461UL, 3858864626UL, 3294523981UL, 2611619UL, 1228896851UL, 2633378137UL, 811307482UL, 1743357106UL, 1930089302UL, 3111013241UL, 1799884674UL, 1720546272UL, 3900863156UL, +2370003471UL, 1474164586UL, 576775454UL, 2246605826UL, 215030128UL, 540197019UL, 2968519387UL, 619000856UL, 316965236UL, 47416561UL, 3585128733UL, 9648980UL, 3464704266UL, 2148091363UL, 167227868UL, 509283324UL, 1505294373UL, 901169164UL, 1345986409UL, 197195155UL, 3983525470UL, 1227359150UL, 3243741640UL, 170335901UL, 2540851884UL, 2812935262UL, 1205921163UL, 2051834116UL, 4018095157UL, 2850805299UL, 2798430304UL, 2967529310UL, +2822981113UL, 1447103309UL, 3632575579UL, 389184524UL, 532996977UL, 1947501555UL, 38676169UL, 2431628817UL, 1055068556UL, 1761031313UL, 4010280501UL, 2794421955UL, 2354379386UL, 965687576UL, 1222630846UL, 3991257933UL, 1455821656UL, 4264066935UL, 1551000086UL, 2344548386UL, 2151631692UL, 441521402UL, 3807587668UL, 3701529910UL, 963889269UL, 3965914153UL, 3909107329UL, 290225599UL, 1771599976UL, 4176220201UL, 4011285909UL, 1957371891UL, +540091753UL, 1670159873UL, 1810164615UL, 1347453316UL, 1261391184UL, 4137605148UL, 4191698993UL, 2672526663UL, 840822698UL, 2332027308UL, 1967082817UL, 3098515331UL, 734862208UL, 960593185UL, 2088102210UL, 4170914605UL, 2470055060UL, 2471507530UL, 2261593014UL, 1314626253UL, 500606287UL, 1100764382UL, 970185057UL, 3401527918UL, 2726979120UL, 3408998445UL, 4100198161UL, 708987193UL, 1683077666UL, 4262833629UL, 1348801932UL, 3744209503UL, +749849397UL, 3363644507UL, 812015573UL, 2214355282UL, 3217409412UL, 2901095495UL, 3579858747UL, 470752564UL, 2527480795UL, 552979949UL, 941862108UL, 2294101261UL, 788168494UL, 3748855859UL, 2355231228UL, 3818227212UL, 28595866UL, 2880205975UL, 2755133627UL, 833553378UL, 570110534UL, 1905311140UL, 4080817864UL, 3556684908UL, 4124102038UL, 2253777974UL, 148561593UL, 1026062474UL, 1849785784UL, 656329297UL, 1525559608UL, 2237247821UL, +30890894UL, 1108618048UL, 1464443032UL, 3996203631UL, 169576507UL, 1310038443UL, 2431938882UL, 2100788071UL, 2857841871UL, 4119485855UL, 861206186UL, 290322827UL, 3653047356UL, 1184217272UL, 3408620608UL, 1939922519UL, 3539608908UL, 4267170500UL, 1263700272UL, 1188056275UL, 47774461UL, 3858864626UL, 1046565728UL, 2611619UL, 1228896851UL, 2633378137UL, 811307482UL, 1312393456UL, 1930089302UL, 3111013241UL, 1799884674UL, 1720546272UL, +1199041144UL, 2406753856UL, 2108495166UL, 2126345981UL, 1524975128UL, 1269232392UL, 3162531748UL, 3076707658UL, 1736955170UL, 1036221745UL, 1232435193UL, 3945348482UL, 1057631163UL, 520376289UL, 4154435769UL, 1280565077UL, 1865705876UL, 1030078366UL, 1140849319UL, 1769263412UL, 1161866807UL, 2768552980UL, 561022685UL, 2712685799UL, 1501252058UL, 3608433719UL, 3138564149UL, 4093654128UL, 1218455911UL, 892700607UL, 2012017510UL, 3568315757UL, +4002239824UL, 1754440379UL, 2641708101UL, 1027390781UL, 199831087UL, 1261208885UL, 2058433786UL, 2101649235UL, 220966013UL, 3445375335UL, 1100438514UL, 4075559840UL, 4244062658UL, 3417249884UL, 150102478UL, 3337395219UL, 2464869101UL, 3720375949UL, 93353579UL, 2329780067UL, 777826834UL, 2745626035UL, 2984812746UL, 568848158UL, 1593919595UL, 1166619196UL, 96177504UL, 305329591UL, 4271176854UL, 3829149188UL, 1551058535UL, 2828280993UL, +1367551996UL, 4208083082UL, 2260803683UL, 3118708147UL, 434935608UL, 702805370UL, 3544156958UL, 792712531UL, 231019757UL, 136272259UL, 4049968615UL, 2722527811UL, 603697698UL, 2891035509UL, 4270409302UL, 1220615076UL, 1932569338UL, 1084454986UL, 468729683UL, 2377913518UL, 2068946556UL, 530579176UL, 1422294615UL, 4032799503UL, 2065706770UL, 604700228UL, 98049660UL, 3182511353UL, 935830212UL, 1938107848UL, 1266035034UL, 957505506UL, +2758220503UL, 1805223938UL, 3393041584UL, 3958541336UL, 2695487012UL, 3355668819UL, 276889675UL, 3098939423UL, 415941187UL, 180737121UL, 2638873657UL, 1103150707UL, 4255168358UL, 2736183195UL, 1275942292UL, 2687807236UL, 538129710UL, 3337005391UL, 3941968393UL, 1113153386UL, 3813628384UL, 1775835369UL, 296314749UL, 1697642748UL, 3614403315UL, 1953056095UL, 2102878063UL, 3161706344UL, 2207159580UL, 3078233525UL, 3836286614UL, 886914072UL, +1884037075UL, 4135819784UL, 1616380780UL, 1672616998UL, 3879848699UL, 2277472209UL, 3933249848UL, 2428044648UL, 2876076879UL, 165724720UL, 2277165385UL, 1984963196UL, 1456923194UL, 2406217222UL, 3388886718UL, 47522558UL, 1903557801UL, 1959641458UL, 2325355446UL, 3251147398UL, 2266553941UL, 2243962024UL, 1420017618UL, 1791159474UL, 1793406225UL, 601509698UL, 3207357979UL, 1189285184UL, 148538800UL, 2077251302UL, 3267239327UL, 2851475997UL, +}, +{ +2628162153UL, 3861478870UL, 2769884494UL, 3423483820UL, 1118276924UL, 536776894UL, 3742490940UL, 550084334UL, 2441329856UL, 2604618499UL, 2308745810UL, 1178166365UL, 1345165241UL, 4039508109UL, 1246601384UL, 3843182157UL, 2200144237UL, 91750284UL, 4290064840UL, 3363597477UL, 3243492274UL, 4271100308UL, 4186328336UL, 2291901989UL, 1834723222UL, 372220743UL, 2190417067UL, 2624886324UL, 3567647862UL, 1591175369UL, 2278087682UL, 2461678432UL, +232820452UL, 2714694382UL, 3070258434UL, 2412655444UL, 2667664607UL, 249083056UL, 4166379751UL, 1360927521UL, 2247816079UL, 3253689753UL, 1563674427UL, 1914999382UL, 2101454952UL, 1067816947UL, 1098201917UL, 4054175236UL, 1805828534UL, 1815913104UL, 738357340UL, 2597170030UL, 1689737432UL, 2004663483UL, 1160995461UL, 1008175050UL, 2004702919UL, 4258654415UL, 938972594UL, 2121583885UL, 2208729114UL, 276726877UL, 3973538591UL, 2991069145UL, +2345655326UL, 2980162173UL, 1915611444UL, 2332104940UL, 2382102873UL, 2324437093UL, 2640563452UL, 2680619359UL, 3413490949UL, 2140843463UL, 2424016743UL, 3735508133UL, 3421831326UL, 4037977349UL, 3721506282UL, 510431975UL, 1014707294UL, 1378686477UL, 1939678832UL, 2223101760UL, 2067687989UL, 309274614UL, 276596103UL, 3757624719UL, 1212251468UL, 2649271847UL, 4140361758UL, 2634738350UL, 2029358730UL, 3205861896UL, 3090549771UL, 3775019657UL, +2018542036UL, 3675805680UL, 3946144023UL, 331655838UL, 326568491UL, 1867863527UL, 1550945400UL, 3087000670UL, 2342003578UL, 3949479453UL, 586483056UL, 147951307UL, 503062740UL, 3823927166UL, 2789767841UL, 3121654578UL, 634238762UL, 4084629478UL, 3878778788UL, 435990088UL, 1724770389UL, 1403031256UL, 1334135626UL, 1096780503UL, 3288769545UL, 2793293893UL, 80675548UL, 1637232257UL, 1856565474UL, 2675485635UL, 1961165681UL, 1647512786UL, +4190102851UL, 4081320784UL, 2853183400UL, 3812341867UL, 278236392UL, 1700614299UL, 2765246084UL, 3846866009UL, 1220806787UL, 3655684157UL, 1133921183UL, 2779125219UL, 523552281UL, 703813725UL, 3110126767UL, 823843890UL, 290243102UL, 821297176UL, 364959993UL, 3381862130UL, 2305271841UL, 356059263UL, 2558018765UL, 3235968999UL, 1070598970UL, 2444411636UL, 3636221117UL, 4275517214UL, 4035198865UL, 3339014315UL, 2911872812UL, 4049586122UL, +4211583637UL, 2628162153UL, 3861478870UL, 2769884494UL, 3423483820UL, 3254616321UL, 536776894UL, 3742490940UL, 550084334UL, 2441329856UL, 1909596092UL, 2308745810UL, 1178166365UL, 1345165241UL, 4039508109UL, 1349347043UL, 3843182157UL, 2200144237UL, 91750284UL, 4290064840UL, 803098068UL, 3243492274UL, 4271100308UL, 4186328336UL, 2291901989UL, 2575673198UL, 372220743UL, 2190417067UL, 2624886324UL, 3567647862UL, 132569424UL, 2278087682UL, +2461678432UL, 232820452UL, 2714694382UL, 3490648253UL, 2412655444UL, 2667664607UL, 249083056UL, 4166379751UL, 3503294711UL, 2247816079UL, 3253689753UL, 1563674427UL, 1914999382UL, 3121933565UL, 1067816947UL, 1098201917UL, 4054175236UL, 1805828534UL, 816420552UL, 738357340UL, 2597170030UL, 1689737432UL, 2004663483UL, 397934907UL, 1008175050UL, 2004702919UL, 4258654415UL, 938972594UL, 156733019UL, 2208729114UL, 276726877UL, 3973538591UL, +2991069145UL, 2470446383UL, 2980162173UL, 1915611444UL, 2332104940UL, 2382102873UL, 3265195583UL, 2640563452UL, 2680619359UL, 3413490949UL, 2140843463UL, 142464483UL, 3735508133UL, 3421831326UL, 4037977349UL, 3721506282UL, 1898668265UL, 1014707294UL, 1378686477UL, 1939678832UL, 2223101760UL, 4085776926UL, 309274614UL, 276596103UL, 3757624719UL, 1212251468UL, 1116423339UL, 4140361758UL, 2634738350UL, 2029358730UL, 3205861896UL, 880658361UL, +3775019657UL, 2018542036UL, 3675805680UL, 3946144023UL, 839516623UL, 326568491UL, 1867863527UL, 1550945400UL, 3087000670UL, 420309880UL, 3949479453UL, 586483056UL, 147951307UL, 503062740UL, 416618471UL, 2789767841UL, 3121654578UL, 634238762UL, 4084629478UL, 1120413065UL, 435990088UL, 1724770389UL, 1403031256UL, 1334135626UL, 240966420UL, 3288769545UL, 2793293893UL, 80675548UL, 1637232257UL, 1785064235UL, 2675485635UL, 1961165681UL, +1647512786UL, 4190102851UL, 2775407492UL, 2853183400UL, 3812341867UL, 278236392UL, 1700614299UL, 2439624528UL, 3846866009UL, 1220806787UL, 3655684157UL, 1133921183UL, 366933679UL, 523552281UL, 703813725UL, 3110126767UL, 823843890UL, 132468066UL, 821297176UL, 364959993UL, 3381862130UL, 2305271841UL, 1048450041UL, 2558018765UL, 3235968999UL, 1070598970UL, 2444411636UL, 1699430013UL, 4275517214UL, 4035198865UL, 3339014315UL, 2911872812UL, +324524850UL, 4211583637UL, 2628162153UL, 3861478870UL, 2769884494UL, 1995585079UL, 3254616321UL, 536776894UL, 3742490940UL, 550084334UL, 2121458511UL, 1909596092UL, 2308745810UL, 1178166365UL, 1345165241UL, 3067877274UL, 1349347043UL, 3843182157UL, 2200144237UL, 91750284UL, 1246148630UL, 803098068UL, 3243492274UL, 4271100308UL, 4186328336UL, 2932236493UL, 2575673198UL, 372220743UL, 2190417067UL, 2624886324UL, 3945294599UL, 132569424UL, +2278087682UL, 2461678432UL, 232820452UL, 3341915918UL, 3490648253UL, 2412655444UL, 2667664607UL, 249083056UL, 2307336284UL, 3503294711UL, 2247816079UL, 3253689753UL, 1563674427UL, 1717494311UL, 3121933565UL, 1067816947UL, 1098201917UL, 4054175236UL, 971917867UL, 816420552UL, 738357340UL, 2597170030UL, 1689737432UL, 243915062UL, 397934907UL, 1008175050UL, 2004702919UL, 4258654415UL, 1807067458UL, 156733019UL, 2208729114UL, 276726877UL, +3973538591UL, 1909483753UL, 2470446383UL, 2980162173UL, 1915611444UL, 2332104940UL, 3454651559UL, 3265195583UL, 2640563452UL, 2680619359UL, 3413490949UL, 462852932UL, 142464483UL, 3735508133UL, 3421831326UL, 4037977349UL, 1372088341UL, 1898668265UL, 1014707294UL, 1378686477UL, 1939678832UL, 752503486UL, 4085776926UL, 309274614UL, 276596103UL, 3757624719UL, 4193030119UL, 1116423339UL, 4140361758UL, 2634738350UL, 2029358730UL, 1725105892UL, +880658361UL, 3775019657UL, 2018542036UL, 3675805680UL, 3496508290UL, 839516623UL, 326568491UL, 1867863527UL, 1550945400UL, 2685835387UL, 420309880UL, 3949479453UL, 586483056UL, 147951307UL, 1639139280UL, 416618471UL, 2789767841UL, 3121654578UL, 634238762UL, 3622035469UL, 1120413065UL, 435990088UL, 1724770389UL, 1403031256UL, 3548817929UL, 240966420UL, 3288769545UL, 2793293893UL, 80675548UL, 3119506726UL, 1785064235UL, 2675485635UL, +1961165681UL, 1647512786UL, 4019542081UL, 2775407492UL, 2853183400UL, 3812341867UL, 278236392UL, 3487875111UL, 2439624528UL, 3846866009UL, 1220806787UL, 3655684157UL, 3303554633UL, 366933679UL, 523552281UL, 703813725UL, 3110126767UL, 2477354049UL, 132468066UL, 821297176UL, 364959993UL, 3381862130UL, 4065162466UL, 1048450041UL, 2558018765UL, 3235968999UL, 1070598970UL, 191819556UL, 1699430013UL, 4275517214UL, 4035198865UL, 3339014315UL, +3588518026UL, 324524850UL, 4211583637UL, 2628162153UL, 3861478870UL, 3361198093UL, 1995585079UL, 3254616321UL, 536776894UL, 3742490940UL, 3912424229UL, 2121458511UL, 1909596092UL, 2308745810UL, 1178166365UL, 1882174246UL, 3067877274UL, 1349347043UL, 3843182157UL, 2200144237UL, 1210030640UL, 1246148630UL, 803098068UL, 3243492274UL, 4271100308UL, 402141998UL, 2932236493UL, 2575673198UL, 372220743UL, 2190417067UL, 1883679642UL, 3945294599UL, +132569424UL, 2278087682UL, 2461678432UL, 708189294UL, 3341915918UL, 3490648253UL, 2412655444UL, 2667664607UL, 2871800434UL, 2307336284UL, 3503294711UL, 2247816079UL, 3253689753UL, 2113837945UL, 1717494311UL, 3121933565UL, 1067816947UL, 1098201917UL, 1041869160UL, 971917867UL, 816420552UL, 738357340UL, 2597170030UL, 2306273930UL, 243915062UL, 397934907UL, 1008175050UL, 2004702919UL, 2345434637UL, 1807067458UL, 156733019UL, 2208729114UL, +276726877UL, 2452083872UL, 1909483753UL, 2470446383UL, 2980162173UL, 1915611444UL, 2043489400UL, 3454651559UL, 3265195583UL, 2640563452UL, 2680619359UL, 2845757473UL, 462852932UL, 142464483UL, 3735508133UL, 3421831326UL, 25103542UL, 1372088341UL, 1898668265UL, 1014707294UL, 1378686477UL, 2680788341UL, 752503486UL, 4085776926UL, 309274614UL, 276596103UL, 3663266970UL, 4193030119UL, 1116423339UL, 4140361758UL, 2634738350UL, 453005903UL, +1725105892UL, 880658361UL, 3775019657UL, 2018542036UL, 2601909713UL, 3496508290UL, 839516623UL, 326568491UL, 1867863527UL, 3474340574UL, 2685835387UL, 420309880UL, 3949479453UL, 586483056UL, 297934218UL, 1639139280UL, 416618471UL, 2789767841UL, 3121654578UL, 958889718UL, 3622035469UL, 1120413065UL, 435990088UL, 1724770389UL, 2589603756UL, 3548817929UL, 240966420UL, 3288769545UL, 2793293893UL, 972899860UL, 3119506726UL, 1785064235UL, +2675485635UL, 1961165681UL, 2576799764UL, 4019542081UL, 2775407492UL, 2853183400UL, 3812341867UL, 159345352UL, 3487875111UL, 2439624528UL, 3846866009UL, 1220806787UL, 3367080935UL, 3303554633UL, 366933679UL, 523552281UL, 703813725UL, 1717395617UL, 2477354049UL, 132468066UL, 821297176UL, 364959993UL, 1088290332UL, 4065162466UL, 1048450041UL, 2558018765UL, 3235968999UL, 285340039UL, 191819556UL, 1699430013UL, 4275517214UL, 4035198865UL, +3544133220UL, 285121978UL, 1175302919UL, 4101282768UL, 513236580UL, 890655666UL, 3051849972UL, 2315486379UL, 3067287276UL, 3134806925UL, 3926373006UL, 2502825498UL, 461387883UL, 770459119UL, 3121636621UL, 1243065093UL, 1612354797UL, 659033930UL, 621176955UL, 214256518UL, 371573588UL, 1168438671UL, 1233027650UL, 1984255965UL, 659404177UL, 1218841419UL, 1226193512UL, 4247589702UL, 334814687UL, 980422670UL, 2518384561UL, 4041002302UL, +1203659320UL, 509643440UL, 2528499450UL, 1512213710UL, 4052651069UL, 1378025938UL, 3436277168UL, 2797728577UL, 463383787UL, 1184681947UL, 283482187UL, 2421891582UL, 3200080903UL, 373817869UL, 452807139UL, 2002545143UL, 1068199574UL, 3390998240UL, 377559317UL, 1548403713UL, 1580741080UL, 253591624UL, 759280679UL, 2174360733UL, 1687952097UL, 1325235423UL, 3856575909UL, 652218568UL, 4130230594UL, 3757998028UL, 1349431618UL, 2870775414UL, +229741978UL, 1900794007UL, 201310771UL, 4075023260UL, 3390078853UL, 3572716207UL, 1959949436UL, 1000128498UL, 1636575064UL, 241058867UL, 2075461870UL, 1819342070UL, 619233032UL, 3164328001UL, 4280892071UL, 4219074185UL, 2719764611UL, 3827656652UL, 4062556527UL, 621515766UL, 2542375627UL, 3901998596UL, 2295087430UL, 2880672054UL, 2940372823UL, 2318642706UL, 914614262UL, 2549699597UL, 2907475284UL, 3901259809UL, 2663167002UL, 3775306719UL, +2212887565UL, 1271873285UL, 3673659531UL, 3856609875UL, 1195785209UL, 1204338358UL, 2785362544UL, 2398696803UL, 3038377816UL, 4288025143UL, 262511310UL, 4151907455UL, 924716723UL, 3298769960UL, 2065938273UL, 3277412030UL, 122636766UL, 2164055077UL, 1000638739UL, 2044933533UL, 2935604716UL, 2772787255UL, 3727331409UL, 1315627932UL, 2610657438UL, 832931652UL, 452359900UL, 681035792UL, 3312648046UL, 1059435047UL, 1489639114UL, 3647631796UL, +417952902UL, 731020350UL, 2847472725UL, 2779076784UL, 2674295324UL, 487600023UL, 2925909449UL, 3997011591UL, 3697231318UL, 967300591UL, 2310856069UL, 684710043UL, 811911286UL, 4174732177UL, 1010656728UL, 702780279UL, 920081774UL, 1578296057UL, 944734808UL, 2884038169UL, 2885919611UL, 2633474915UL, 2508946673UL, 3579216621UL, 656143887UL, 426108406UL, 2166202683UL, 991797657UL, 706498590UL, 561168186UL, 1144619335UL, 3136206425UL, +}, +{ +3600072515UL, 651444872UL, 2348224675UL, 1684848433UL, 1913333701UL, 3413467790UL, 1567802204UL, 2125206188UL, 2463158656UL, 2251055204UL, 4132590383UL, 3192977084UL, 3718261822UL, 3431519430UL, 3506690867UL, 1313208797UL, 637811069UL, 12802085UL, 3456408080UL, 166617386UL, 1764224523UL, 4016338923UL, 2225367442UL, 2461647273UL, 3137989854UL, 373730087UL, 3013524828UL, 242949418UL, 3443491410UL, 3671816408UL, 2391000148UL, 3964107377UL, +716535366UL, 1884597979UL, 3917515811UL, 3441985401UL, 2472173593UL, 4034695117UL, 2486526143UL, 1658764329UL, 1873516415UL, 884116165UL, 814992460UL, 1069506245UL, 3797556389UL, 838088473UL, 2279863068UL, 1002637017UL, 4174541774UL, 644478743UL, 4138151954UL, 4030442072UL, 297710349UL, 3507828614UL, 1403493362UL, 3132267322UL, 227377796UL, 388148240UL, 2760904473UL, 352998924UL, 1603734504UL, 1528807885UL, 2283620218UL, 737730350UL, +2761342715UL, 809367801UL, 1667936422UL, 1510238771UL, 3762862328UL, 1171532060UL, 647580587UL, 1460988169UL, 3944640945UL, 2331043627UL, 1965076564UL, 2913596196UL, 2960957119UL, 1316491503UL, 3086954934UL, 3471945989UL, 2485431762UL, 692294537UL, 3148362914UL, 3371415765UL, 2990795967UL, 706771848UL, 3734467362UL, 2768750385UL, 2061275631UL, 3935582473UL, 1449841372UL, 1239527551UL, 592595530UL, 1685341001UL, 3352323357UL, 4147988039UL, +4003871917UL, 4035869533UL, 3022833195UL, 1266052547UL, 1429645393UL, 565106475UL, 327014810UL, 348739711UL, 3262918351UL, 915509292UL, 397356303UL, 3248246752UL, 1122821778UL, 2373765260UL, 1795464380UL, 3485315196UL, 1731529670UL, 86888382UL, 2789587372UL, 850847993UL, 1794523220UL, 577288126UL, 1996569530UL, 909222664UL, 2601642298UL, 1469035973UL, 2727135938UL, 3467853736UL, 633292505UL, 756260381UL, 41782389UL, 226724724UL, +3633968708UL, 1695315503UL, 1846857904UL, 3185630605UL, 823108172UL, 3609336496UL, 3422558797UL, 2865413534UL, 564221408UL, 591845835UL, 2498463433UL, 3573926554UL, 1336639597UL, 4180084026UL, 3195588503UL, 2822864841UL, 1916459886UL, 2073158796UL, 56968669UL, 1234765864UL, 2456093821UL, 3500058416UL, 3146725645UL, 3295822468UL, 4135196531UL, 628000231UL, 745509757UL, 4143543278UL, 1941480444UL, 3607603517UL, 2288239329UL, 1991437813UL, +4081693775UL, 3600072515UL, 651444872UL, 2348224675UL, 1684848433UL, 3748890341UL, 3413467790UL, 1567802204UL, 2125206188UL, 2463158656UL, 1516568259UL, 4132590383UL, 3192977084UL, 3718261822UL, 3431519430UL, 461466951UL, 1313208797UL, 637811069UL, 12802085UL, 3456408080UL, 3444149988UL, 1764224523UL, 4016338923UL, 2225367442UL, 2461647273UL, 2594402002UL, 373730087UL, 3013524828UL, 242949418UL, 3443491410UL, 2740782133UL, 2391000148UL, +3964107377UL, 716535366UL, 1884597979UL, 3161911677UL, 3441985401UL, 2472173593UL, 4034695117UL, 2486526143UL, 3623045141UL, 1873516415UL, 884116165UL, 814992460UL, 1069506245UL, 1053106195UL, 838088473UL, 2279863068UL, 1002637017UL, 4174541774UL, 1806935386UL, 4138151954UL, 4030442072UL, 297710349UL, 3507828614UL, 2328331779UL, 3132267322UL, 227377796UL, 388148240UL, 2760904473UL, 3654577129UL, 1603734504UL, 1528807885UL, 2283620218UL, +737730350UL, 2134741424UL, 809367801UL, 1667936422UL, 1510238771UL, 3762862328UL, 4084104273UL, 647580587UL, 1460988169UL, 3944640945UL, 2331043627UL, 3458437694UL, 2913596196UL, 2960957119UL, 1316491503UL, 3086954934UL, 2404530503UL, 2485431762UL, 692294537UL, 3148362914UL, 3371415765UL, 3697728317UL, 706771848UL, 3734467362UL, 2768750385UL, 2061275631UL, 1337146928UL, 1449841372UL, 1239527551UL, 592595530UL, 1685341001UL, 3121493408UL, +4147988039UL, 4003871917UL, 4035869533UL, 3022833195UL, 2709537023UL, 1429645393UL, 565106475UL, 327014810UL, 348739711UL, 1278935671UL, 915509292UL, 397356303UL, 3248246752UL, 1122821778UL, 1086107506UL, 1795464380UL, 3485315196UL, 1731529670UL, 86888382UL, 3645735256UL, 850847993UL, 1794523220UL, 577288126UL, 1996569530UL, 1126950UL, 2601642298UL, 1469035973UL, 2727135938UL, 3467853736UL, 3668777652UL, 756260381UL, 41782389UL, +226724724UL, 3633968708UL, 738274780UL, 1846857904UL, 3185630605UL, 823108172UL, 3609336496UL, 3371270228UL, 2865413534UL, 564221408UL, 591845835UL, 2498463433UL, 4157618574UL, 1336639597UL, 4180084026UL, 3195588503UL, 2822864841UL, 3844986377UL, 2073158796UL, 56968669UL, 1234765864UL, 2456093821UL, 1001761927UL, 3146725645UL, 3295822468UL, 4135196531UL, 628000231UL, 541676954UL, 4143543278UL, 1941480444UL, 3607603517UL, 2288239329UL, +1068806322UL, 4081693775UL, 3600072515UL, 651444872UL, 2348224675UL, 47991343UL, 3748890341UL, 3413467790UL, 1567802204UL, 2125206188UL, 2662653600UL, 1516568259UL, 4132590383UL, 3192977084UL, 3718261822UL, 2554440323UL, 461466951UL, 1313208797UL, 637811069UL, 12802085UL, 982676468UL, 3444149988UL, 1764224523UL, 4016338923UL, 2225367442UL, 451503008UL, 2594402002UL, 373730087UL, 3013524828UL, 242949418UL, 1086137206UL, 2740782133UL, +2391000148UL, 3964107377UL, 716535366UL, 731470002UL, 3161911677UL, 3441985401UL, 2472173593UL, 4034695117UL, 44456710UL, 3623045141UL, 1873516415UL, 884116165UL, 814992460UL, 4004771121UL, 1053106195UL, 838088473UL, 2279863068UL, 1002637017UL, 1587145121UL, 1806935386UL, 4138151954UL, 4030442072UL, 297710349UL, 2570695340UL, 2328331779UL, 3132267322UL, 227377796UL, 388148240UL, 3570998746UL, 3654577129UL, 1603734504UL, 1528807885UL, +2283620218UL, 188017185UL, 2134741424UL, 809367801UL, 1667936422UL, 1510238771UL, 1503613101UL, 4084104273UL, 647580587UL, 1460988169UL, 3944640945UL, 3301866374UL, 3458437694UL, 2913596196UL, 2960957119UL, 1316491503UL, 2674694926UL, 2404530503UL, 2485431762UL, 692294537UL, 3148362914UL, 1645995464UL, 3697728317UL, 706771848UL, 3734467362UL, 2768750385UL, 670964862UL, 1337146928UL, 1449841372UL, 1239527551UL, 592595530UL, 4204421245UL, +3121493408UL, 4147988039UL, 4003871917UL, 4035869533UL, 3652555523UL, 2709537023UL, 1429645393UL, 565106475UL, 327014810UL, 2716443687UL, 1278935671UL, 915509292UL, 397356303UL, 3248246752UL, 204830047UL, 1086107506UL, 1795464380UL, 3485315196UL, 1731529670UL, 662578255UL, 3645735256UL, 850847993UL, 1794523220UL, 577288126UL, 4237140216UL, 1126950UL, 2601642298UL, 1469035973UL, 2727135938UL, 92392213UL, 3668777652UL, 756260381UL, +41782389UL, 226724724UL, 1123105466UL, 738274780UL, 1846857904UL, 3185630605UL, 823108172UL, 2880110296UL, 3371270228UL, 2865413534UL, 564221408UL, 591845835UL, 2356214088UL, 4157618574UL, 1336639597UL, 4180084026UL, 3195588503UL, 4266261353UL, 3844986377UL, 2073158796UL, 56968669UL, 1234765864UL, 3166457679UL, 1001761927UL, 3146725645UL, 3295822468UL, 4135196531UL, 496099322UL, 541676954UL, 4143543278UL, 1941480444UL, 3607603517UL, +2578543796UL, 1068806322UL, 4081693775UL, 3600072515UL, 651444872UL, 1131603264UL, 47991343UL, 3748890341UL, 3413467790UL, 1567802204UL, 2823058381UL, 2662653600UL, 1516568259UL, 4132590383UL, 3192977084UL, 4247798474UL, 2554440323UL, 461466951UL, 1313208797UL, 637811069UL, 2744898822UL, 982676468UL, 3444149988UL, 1764224523UL, 4016338923UL, 2845667517UL, 451503008UL, 2594402002UL, 373730087UL, 3013524828UL, 3442521115UL, 1086137206UL, +2740782133UL, 2391000148UL, 3964107377UL, 4060067791UL, 731470002UL, 3161911677UL, 3441985401UL, 2472173593UL, 4227407417UL, 44456710UL, 3623045141UL, 1873516415UL, 884116165UL, 2550700713UL, 4004771121UL, 1053106195UL, 838088473UL, 2279863068UL, 1296332348UL, 1587145121UL, 1806935386UL, 4138151954UL, 4030442072UL, 2552496880UL, 2570695340UL, 2328331779UL, 3132267322UL, 227377796UL, 3887816270UL, 3570998746UL, 3654577129UL, 1603734504UL, +1528807885UL, 3365552060UL, 188017185UL, 2134741424UL, 809367801UL, 1667936422UL, 1358744245UL, 1503613101UL, 4084104273UL, 647580587UL, 1460988169UL, 2318828416UL, 3301866374UL, 3458437694UL, 2913596196UL, 2960957119UL, 49464436UL, 2674694926UL, 2404530503UL, 2485431762UL, 692294537UL, 1803418945UL, 1645995464UL, 3697728317UL, 706771848UL, 3734467362UL, 2407932841UL, 670964862UL, 1337146928UL, 1449841372UL, 1239527551UL, 1124552917UL, +4204421245UL, 3121493408UL, 4147988039UL, 4003871917UL, 3542256025UL, 3652555523UL, 2709537023UL, 1429645393UL, 565106475UL, 2063548817UL, 2716443687UL, 1278935671UL, 915509292UL, 397356303UL, 1049916999UL, 204830047UL, 1086107506UL, 1795464380UL, 3485315196UL, 2183256184UL, 662578255UL, 3645735256UL, 850847993UL, 1794523220UL, 2943700388UL, 4237140216UL, 1126950UL, 2601642298UL, 1469035973UL, 535075238UL, 92392213UL, 3668777652UL, +756260381UL, 41782389UL, 1043025574UL, 1123105466UL, 738274780UL, 1846857904UL, 3185630605UL, 3324487649UL, 2880110296UL, 3371270228UL, 2865413534UL, 564221408UL, 2528599862UL, 2356214088UL, 4157618574UL, 1336639597UL, 4180084026UL, 592094844UL, 4266261353UL, 3844986377UL, 2073158796UL, 56968669UL, 629503707UL, 3166457679UL, 1001761927UL, 3146725645UL, 3295822468UL, 2725304934UL, 496099322UL, 541676954UL, 4143543278UL, 1941480444UL, +3557859116UL, 31832949UL, 3805791401UL, 4056283801UL, 242812250UL, 4072988068UL, 2316479446UL, 2260433816UL, 2211372380UL, 2039672698UL, 2947948280UL, 4106140026UL, 342600216UL, 98745656UL, 2541799209UL, 926067404UL, 2733213159UL, 3163537903UL, 2800370126UL, 2099121446UL, 1279545581UL, 3699822446UL, 3764095615UL, 690503808UL, 3799637505UL, 1000641330UL, 242588257UL, 3657834529UL, 824791208UL, 2529299371UL, 4081898575UL, 2120338882UL, +1273883107UL, 1680877886UL, 1253060582UL, 1760259553UL, 2250763915UL, 31780198UL, 2511451445UL, 3102141340UL, 861489797UL, 105854693UL, 70927387UL, 2725671050UL, 688282241UL, 2622257646UL, 3466254816UL, 1905008219UL, 2980966436UL, 2154356718UL, 1075686806UL, 1966147415UL, 2357249256UL, 2684600972UL, 400926709UL, 523449509UL, 2891602783UL, 673425710UL, 3766475216UL, 2319843954UL, 3471794777UL, 13838840UL, 1908374660UL, 3839606132UL, +3829795513UL, 3403561639UL, 1369780874UL, 4276407916UL, 3217619UL, 1284482371UL, 2020138237UL, 2804427294UL, 1194369854UL, 1094800747UL, 2119081501UL, 726494474UL, 490750173UL, 1117517565UL, 3498786968UL, 2163060528UL, 696718831UL, 2780121254UL, 1286646297UL, 1594539045UL, 411215116UL, 1407268753UL, 2759136967UL, 2179483407UL, 2088977769UL, 2737453188UL, 2411478102UL, 3112688013UL, 4112484868UL, 429293789UL, 426390687UL, 3158027863UL, +2601897382UL, 1546855515UL, 4258208908UL, 3691263847UL, 2394986813UL, 1986623921UL, 2632462203UL, 3551311099UL, 3309482741UL, 2632571927UL, 1200010240UL, 554555739UL, 4119397989UL, 622818813UL, 3116222066UL, 1801867255UL, 2738500841UL, 1452697246UL, 733457482UL, 1680421668UL, 1035766144UL, 468847991UL, 3606474156UL, 2612692123UL, 730556693UL, 859096521UL, 4005878655UL, 1138273887UL, 2182363629UL, 2710579590UL, 3345140092UL, 2562710857UL, +3859276724UL, 2318176233UL, 3964665794UL, 3295219265UL, 3037789445UL, 371545704UL, 3434130670UL, 3686032092UL, 19964088UL, 340386179UL, 2147090894UL, 1446742483UL, 3083526520UL, 561888846UL, 2903328518UL, 1524465288UL, 360120037UL, 2031515996UL, 1516035872UL, 2752848969UL, 1094251072UL, 984159948UL, 369999653UL, 864602622UL, 2402584241UL, 3028363830UL, 252580667UL, 480470405UL, 3201548259UL, 2739036185UL, 2198549891UL, 1978812013UL, +}, +{ +2546657140UL, 2771792972UL, 3371698159UL, 1137313111UL, 2399264952UL, 1204642544UL, 2090179262UL, 2948712987UL, 2908027331UL, 498636511UL, 2292804841UL, 1480836858UL, 2826016727UL, 196495965UL, 2168559184UL, 3910150715UL, 320076735UL, 3144753899UL, 3199094529UL, 1165806050UL, 728308199UL, 2322528104UL, 2891334400UL, 561853019UL, 4161870615UL, 1348321971UL, 2461357166UL, 1216229488UL, 1392766290UL, 3060494848UL, 3282469664UL, 1866493654UL, +2351421557UL, 4195620347UL, 1512242723UL, 478174598UL, 1087303780UL, 471631659UL, 2599553643UL, 791527994UL, 563537164UL, 1238109907UL, 3218421602UL, 133222502UL, 4182363220UL, 305688802UL, 2666439314UL, 2408520958UL, 787389550UL, 4226450542UL, 4107143646UL, 4103547035UL, 1840887424UL, 2686247491UL, 334267386UL, 3772035402UL, 3436827662UL, 1411515743UL, 2193739735UL, 1892746640UL, 4163192062UL, 2921191805UL, 1011310614UL, 2178118214UL, +33647321UL, 1121452997UL, 507942677UL, 2542792587UL, 351339975UL, 1586639416UL, 1918003826UL, 2513357034UL, 2747854573UL, 606238275UL, 1132105249UL, 574593993UL, 2655425816UL, 1680556547UL, 1831942411UL, 2587194016UL, 90710116UL, 4291431098UL, 1899367028UL, 3251152898UL, 3297078396UL, 2712235924UL, 1546135008UL, 897753268UL, 1619454780UL, 938130143UL, 1828916640UL, 3620488958UL, 1822437033UL, 172584228UL, 1853048226UL, 3659288522UL, +3623450763UL, 1893292786UL, 851522142UL, 3411705687UL, 4106341088UL, 4109830348UL, 1193339049UL, 878885723UL, 2964062476UL, 2320209608UL, 1777678953UL, 2886897705UL, 3856938396UL, 252913914UL, 3648685154UL, 544382669UL, 2631141468UL, 1524405364UL, 1848509666UL, 580646927UL, 2451560151UL, 181916967UL, 1426301928UL, 1652422182UL, 2625099169UL, 176664750UL, 1582626255UL, 1675120608UL, 2571617898UL, 2096572277UL, 2471745846UL, 419906507UL, +886861124UL, 1974832558UL, 3157060904UL, 216000225UL, 746978071UL, 1424984058UL, 1457979883UL, 809822177UL, 3833178010UL, 3926414726UL, 1423462846UL, 3024443248UL, 4067020014UL, 2881559869UL, 1376840097UL, 548130303UL, 1118013762UL, 1309103114UL, 2227304261UL, 4205319357UL, 228947246UL, 2167410411UL, 620496852UL, 2724112116UL, 705259153UL, 3499686911UL, 3085999115UL, 2447267299UL, 4190122199UL, 1091465954UL, 1233728238UL, 39711865UL, +1076751044UL, 2546657140UL, 2771792972UL, 3371698159UL, 1137313111UL, 3857150586UL, 1204642544UL, 2090179262UL, 2948712987UL, 2908027331UL, 368199414UL, 2292804841UL, 1480836858UL, 2826016727UL, 196495965UL, 3235583934UL, 3910150715UL, 320076735UL, 3144753899UL, 3199094529UL, 1374597050UL, 728308199UL, 2322528104UL, 2891334400UL, 561853019UL, 1515915224UL, 1348321971UL, 2461357166UL, 1216229488UL, 1392766290UL, 15252704UL, 3282469664UL, +1866493654UL, 2351421557UL, 4195620347UL, 192355609UL, 478174598UL, 1087303780UL, 471631659UL, 2599553643UL, 1725604263UL, 563537164UL, 1238109907UL, 3218421602UL, 133222502UL, 305098282UL, 305688802UL, 2666439314UL, 2408520958UL, 787389550UL, 3195522899UL, 4107143646UL, 4103547035UL, 1840887424UL, 2686247491UL, 1565529892UL, 3772035402UL, 3436827662UL, 1411515743UL, 2193739735UL, 1848198417UL, 4163192062UL, 2921191805UL, 1011310614UL, +2178118214UL, 3474206203UL, 1121452997UL, 507942677UL, 2542792587UL, 351339975UL, 3599278861UL, 1918003826UL, 2513357034UL, 2747854573UL, 606238275UL, 446979745UL, 574593993UL, 2655425816UL, 1680556547UL, 1831942411UL, 3338512802UL, 90710116UL, 4291431098UL, 1899367028UL, 3251152898UL, 1006512939UL, 2712235924UL, 1546135008UL, 897753268UL, 1619454780UL, 1429190743UL, 1828916640UL, 3620488958UL, 1822437033UL, 172584228UL, 2529855020UL, +3659288522UL, 3623450763UL, 1893292786UL, 851522142UL, 1417935793UL, 4106341088UL, 4109830348UL, 1193339049UL, 878885723UL, 1886400637UL, 2320209608UL, 1777678953UL, 2886897705UL, 3856938396UL, 1813134786UL, 3648685154UL, 544382669UL, 2631141468UL, 1524405364UL, 687661410UL, 580646927UL, 2451560151UL, 181916967UL, 1426301928UL, 1463347373UL, 2625099169UL, 176664750UL, 1582626255UL, 1675120608UL, 3387060344UL, 2096572277UL, 2471745846UL, +419906507UL, 886861124UL, 4209699955UL, 3157060904UL, 216000225UL, 746978071UL, 1424984058UL, 3063941448UL, 809822177UL, 3833178010UL, 3926414726UL, 1423462846UL, 750559587UL, 4067020014UL, 2881559869UL, 1376840097UL, 548130303UL, 4056763004UL, 1309103114UL, 2227304261UL, 4205319357UL, 228947246UL, 774411056UL, 620496852UL, 2724112116UL, 705259153UL, 3499686911UL, 2486247387UL, 2447267299UL, 4190122199UL, 1091465954UL, 1233728238UL, +54639263UL, 1076751044UL, 2546657140UL, 2771792972UL, 3371698159UL, 1152150303UL, 3857150586UL, 1204642544UL, 2090179262UL, 2948712987UL, 452427847UL, 368199414UL, 2292804841UL, 1480836858UL, 2826016727UL, 1929008184UL, 3235583934UL, 3910150715UL, 320076735UL, 3144753899UL, 895636897UL, 1374597050UL, 728308199UL, 2322528104UL, 2891334400UL, 1871824871UL, 1515915224UL, 1348321971UL, 2461357166UL, 1216229488UL, 3170568098UL, 15252704UL, +3282469664UL, 1866493654UL, 2351421557UL, 4253216490UL, 192355609UL, 478174598UL, 1087303780UL, 471631659UL, 4230260400UL, 1725604263UL, 563537164UL, 1238109907UL, 3218421602UL, 960481514UL, 305098282UL, 305688802UL, 2666439314UL, 2408520958UL, 242741163UL, 3195522899UL, 4107143646UL, 4103547035UL, 1840887424UL, 2768321503UL, 1565529892UL, 3772035402UL, 3436827662UL, 1411515743UL, 545362965UL, 1848198417UL, 4163192062UL, 2921191805UL, +1011310614UL, 1196775493UL, 3474206203UL, 1121452997UL, 507942677UL, 2542792587UL, 1948892535UL, 3599278861UL, 1918003826UL, 2513357034UL, 2747854573UL, 4172793632UL, 446979745UL, 574593993UL, 2655425816UL, 1680556547UL, 2986869736UL, 3338512802UL, 90710116UL, 4291431098UL, 1899367028UL, 3376952160UL, 1006512939UL, 2712235924UL, 1546135008UL, 897753268UL, 2061577225UL, 1429190743UL, 1828916640UL, 3620488958UL, 1822437033UL, 4221327184UL, +2529855020UL, 3659288522UL, 3623450763UL, 1893292786UL, 16446898UL, 1417935793UL, 4106341088UL, 4109830348UL, 1193339049UL, 2895194326UL, 1886400637UL, 2320209608UL, 1777678953UL, 2886897705UL, 117861450UL, 1813134786UL, 3648685154UL, 544382669UL, 2631141468UL, 1105253905UL, 687661410UL, 580646927UL, 2451560151UL, 181916967UL, 1605087684UL, 1463347373UL, 2625099169UL, 176664750UL, 1582626255UL, 1993431057UL, 3387060344UL, 2096572277UL, +2471745846UL, 419906507UL, 3219719670UL, 4209699955UL, 3157060904UL, 216000225UL, 746978071UL, 3304126047UL, 3063941448UL, 809822177UL, 3833178010UL, 3926414726UL, 4061584738UL, 750559587UL, 4067020014UL, 2881559869UL, 1376840097UL, 973425409UL, 4056763004UL, 1309103114UL, 2227304261UL, 4205319357UL, 939664759UL, 774411056UL, 620496852UL, 2724112116UL, 705259153UL, 176172666UL, 2486247387UL, 2447267299UL, 4190122199UL, 1091465954UL, +300145620UL, 54639263UL, 1076751044UL, 2546657140UL, 2771792972UL, 188149161UL, 1152150303UL, 3857150586UL, 1204642544UL, 2090179262UL, 626100323UL, 452427847UL, 368199414UL, 2292804841UL, 1480836858UL, 2700509669UL, 1929008184UL, 3235583934UL, 3910150715UL, 320076735UL, 1715326239UL, 895636897UL, 1374597050UL, 728308199UL, 2322528104UL, 2356051490UL, 1871824871UL, 1515915224UL, 1348321971UL, 2461357166UL, 243332180UL, 3170568098UL, +15252704UL, 3282469664UL, 1866493654UL, 4079212881UL, 4253216490UL, 192355609UL, 478174598UL, 1087303780UL, 3787911270UL, 4230260400UL, 1725604263UL, 563537164UL, 1238109907UL, 1147223471UL, 960481514UL, 305098282UL, 305688802UL, 2666439314UL, 1503870433UL, 242741163UL, 3195522899UL, 4107143646UL, 4103547035UL, 4041516761UL, 2768321503UL, 1565529892UL, 3772035402UL, 3436827662UL, 3952861918UL, 545362965UL, 1848198417UL, 4163192062UL, +2921191805UL, 793561655UL, 1196775493UL, 3474206203UL, 1121452997UL, 507942677UL, 3788690254UL, 1948892535UL, 3599278861UL, 1918003826UL, 2513357034UL, 3301940062UL, 4172793632UL, 446979745UL, 574593993UL, 2655425816UL, 667233719UL, 2986869736UL, 3338512802UL, 90710116UL, 4291431098UL, 2027122085UL, 3376952160UL, 1006512939UL, 2712235924UL, 1546135008UL, 2609276017UL, 2061577225UL, 1429190743UL, 1828916640UL, 3620488958UL, 1603195641UL, +4221327184UL, 2529855020UL, 3659288522UL, 3623450763UL, 2313432963UL, 16446898UL, 1417935793UL, 4106341088UL, 4109830348UL, 4106013120UL, 2895194326UL, 1886400637UL, 2320209608UL, 1777678953UL, 1952597964UL, 117861450UL, 1813134786UL, 3648685154UL, 544382669UL, 3108229631UL, 1105253905UL, 687661410UL, 580646927UL, 2451560151UL, 1160575897UL, 1605087684UL, 1463347373UL, 2625099169UL, 176664750UL, 1998534134UL, 1993431057UL, 3387060344UL, +2096572277UL, 2471745846UL, 2246406696UL, 3219719670UL, 4209699955UL, 3157060904UL, 216000225UL, 902956869UL, 3304126047UL, 3063941448UL, 809822177UL, 3833178010UL, 815366736UL, 4061584738UL, 750559587UL, 4067020014UL, 2881559869UL, 350775477UL, 973425409UL, 4056763004UL, 1309103114UL, 2227304261UL, 2047915817UL, 939664759UL, 774411056UL, 620496852UL, 2724112116UL, 3593903529UL, 176172666UL, 2486247387UL, 2447267299UL, 4190122199UL, +1450746791UL, 1521739409UL, 272699299UL, 4113952664UL, 1408743622UL, 4082014187UL, 2454446462UL, 1401621236UL, 2050232096UL, 4204834821UL, 2413497685UL, 1032465253UL, 4276089655UL, 1737267711UL, 3335718398UL, 1924071395UL, 1560525661UL, 3064183869UL, 1775038231UL, 89761304UL, 489201378UL, 1236489133UL, 2774076159UL, 822652970UL, 1583752702UL, 1781766972UL, 2238480533UL, 3428349870UL, 3344555477UL, 2251934941UL, 2533404243UL, 3651295253UL, +2359372862UL, 704049384UL, 3238382362UL, 2405156187UL, 2572833624UL, 531907732UL, 2240111412UL, 4102445586UL, 849739856UL, 3649572083UL, 3317634415UL, 1141345331UL, 1118528358UL, 1664181643UL, 648360156UL, 1364897187UL, 289264571UL, 1625825195UL, 1075970578UL, 3925373833UL, 2780782646UL, 727038162UL, 2824687935UL, 3844230994UL, 2070739238UL, 2437298873UL, 1837327520UL, 4248571219UL, 183041221UL, 3759390508UL, 3881974011UL, 658115161UL, +560642175UL, 32860408UL, 1321227669UL, 1380454450UL, 1676524786UL, 476585241UL, 4034481274UL, 1110506516UL, 815601591UL, 2009522227UL, 2168306897UL, 1856639149UL, 1328281664UL, 2710915389UL, 1886116025UL, 2074502324UL, 23109943UL, 670045122UL, 2926671795UL, 4269143768UL, 2688621201UL, 1618605914UL, 1541217762UL, 4273045819UL, 1029546542UL, 3663663567UL, 1402692384UL, 109336276UL, 2446546057UL, 2225682064UL, 3535545430UL, 3847123891UL, +369718877UL, 3411726117UL, 703735748UL, 3139527634UL, 22388546UL, 998860697UL, 2532911305UL, 1532808237UL, 4170332196UL, 1131906845UL, 1814343609UL, 4161931326UL, 1185668213UL, 1903273604UL, 3466154373UL, 3988139604UL, 1079368270UL, 991305574UL, 898158502UL, 2898908951UL, 651161128UL, 1952607949UL, 1221528540UL, 29979722UL, 3006846808UL, 2911550178UL, 2569412437UL, 1460616937UL, 2127921978UL, 3689931108UL, 950505297UL, 3469337654UL, +3180457017UL, 2316433735UL, 1464678429UL, 2867173456UL, 391248106UL, 3622065314UL, 2143251073UL, 860219584UL, 323835636UL, 340886643UL, 1805485977UL, 109344001UL, 1537119779UL, 1795626099UL, 2568079633UL, 3048040562UL, 1204069532UL, 2488753091UL, 2160014198UL, 3132782711UL, 1266102795UL, 91252225UL, 2018366053UL, 39675212UL, 979320891UL, 343397131UL, 814470367UL, 366655857UL, 3287033048UL, 3379301026UL, 1566381433UL, 3431153818UL, +}, +{ +2234324389UL, 1682296894UL, 3526681456UL, 3988544681UL, 1315506584UL, 1754723911UL, 3607564438UL, 3764062195UL, 3408328234UL, 2385116969UL, 3827569659UL, 4104590721UL, 2612634189UL, 1762747544UL, 1676800931UL, 1814546108UL, 2684685172UL, 1659194343UL, 3381624140UL, 2286640580UL, 688245437UL, 2593335056UL, 1657668516UL, 1161309746UL, 3390664973UL, 2460564382UL, 2811435329UL, 2169200311UL, 2768093584UL, 4288309691UL, 1341061221UL, 1361417084UL, +3060155336UL, 2526021346UL, 1037055386UL, 890124736UL, 2185462193UL, 765141735UL, 1841745804UL, 3562499272UL, 1437907207UL, 2127475991UL, 2845453063UL, 4007976206UL, 4160093314UL, 2717704308UL, 4193767498UL, 1667876711UL, 3477753188UL, 3150367681UL, 3224086539UL, 231347764UL, 2737121599UL, 1230656103UL, 4168131490UL, 1463860373UL, 2760968409UL, 2579133178UL, 2309591728UL, 2958907244UL, 1041094855UL, 685134804UL, 3861095208UL, 1088109135UL, +815655228UL, 2618003265UL, 3454840568UL, 1668276240UL, 1668403077UL, 663034899UL, 4020374281UL, 1896863688UL, 677285319UL, 4047674693UL, 4098535894UL, 2038783953UL, 236635760UL, 3641273565UL, 3568356824UL, 3405704765UL, 186484522UL, 3626346451UL, 3653227559UL, 281949942UL, 1847600066UL, 4168753288UL, 1723123703UL, 3600798445UL, 4267802363UL, 2947454105UL, 468768748UL, 2745777741UL, 26635454UL, 837186232UL, 206931043UL, 2601865569UL, +2021732453UL, 3171165636UL, 786833002UL, 116631308UL, 1604778670UL, 437644814UL, 2437761489UL, 3573139998UL, 2637030522UL, 972076738UL, 4075927397UL, 1427554739UL, 597414077UL, 559325169UL, 1774857312UL, 224593737UL, 3697511293UL, 3905126277UL, 2446278950UL, 1847061846UL, 333176687UL, 2988562696UL, 3623938567UL, 2389910304UL, 4273100167UL, 1673622334UL, 2163644598UL, 3666601063UL, 3971760462UL, 4176957983UL, 565952761UL, 566996714UL, +103136762UL, 3648349163UL, 115456167UL, 3265051494UL, 2826313040UL, 1898888678UL, 3921049266UL, 1276809956UL, 4051866478UL, 959265349UL, 851980436UL, 3105565302UL, 2905096898UL, 342438530UL, 3428101638UL, 912389587UL, 2306839396UL, 3613297213UL, 200159550UL, 3406974927UL, 832121231UL, 2998593393UL, 1242069873UL, 1464281204UL, 1828082526UL, 2620095350UL, 3727900009UL, 986958825UL, 3332332947UL, 1610600284UL, 3193282615UL, 1873987353UL, +537698841UL, 2234324389UL, 1682296894UL, 3526681456UL, 3988544681UL, 1112334635UL, 1754723911UL, 3607564438UL, 3764062195UL, 3408328234UL, 2702680798UL, 3827569659UL, 4104590721UL, 2612634189UL, 1762747544UL, 1596420149UL, 1814546108UL, 2684685172UL, 1659194343UL, 3381624140UL, 2424233156UL, 688245437UL, 2593335056UL, 1657668516UL, 1161309746UL, 260803614UL, 2460564382UL, 2811435329UL, 2169200311UL, 2768093584UL, 1426048416UL, 1341061221UL, +1361417084UL, 3060155336UL, 2526021346UL, 688976997UL, 890124736UL, 2185462193UL, 765141735UL, 1841745804UL, 1113361455UL, 1437907207UL, 2127475991UL, 2845453063UL, 4007976206UL, 1719248425UL, 2717704308UL, 4193767498UL, 1667876711UL, 3477753188UL, 449353539UL, 3224086539UL, 231347764UL, 2737121599UL, 1230656103UL, 2122699205UL, 1463860373UL, 2760968409UL, 2579133178UL, 2309591728UL, 4017154219UL, 1041094855UL, 685134804UL, 3861095208UL, +1088109135UL, 3954527144UL, 2618003265UL, 3454840568UL, 1668276240UL, 1668403077UL, 3235241899UL, 4020374281UL, 1896863688UL, 677285319UL, 4047674693UL, 4043186819UL, 2038783953UL, 236635760UL, 3641273565UL, 3568356824UL, 3946220303UL, 186484522UL, 3626346451UL, 3653227559UL, 281949942UL, 1896524045UL, 4168753288UL, 1723123703UL, 3600798445UL, 4267802363UL, 412498526UL, 468768748UL, 2745777741UL, 26635454UL, 837186232UL, 1473941762UL, +2601865569UL, 2021732453UL, 3171165636UL, 786833002UL, 3461566768UL, 1604778670UL, 437644814UL, 2437761489UL, 3573139998UL, 306196591UL, 972076738UL, 4075927397UL, 1427554739UL, 597414077UL, 2401305323UL, 1774857312UL, 224593737UL, 3697511293UL, 3905126277UL, 1527832817UL, 1847061846UL, 333176687UL, 2988562696UL, 3623938567UL, 2731158470UL, 4273100167UL, 1673622334UL, 2163644598UL, 3666601063UL, 1991088422UL, 4176957983UL, 565952761UL, +566996714UL, 103136762UL, 1639884175UL, 115456167UL, 3265051494UL, 2826313040UL, 1898888678UL, 2976556877UL, 1276809956UL, 4051866478UL, 959265349UL, 851980436UL, 2482970929UL, 2905096898UL, 342438530UL, 3428101638UL, 912389587UL, 2716490551UL, 3613297213UL, 200159550UL, 3406974927UL, 832121231UL, 2865829307UL, 1242069873UL, 1464281204UL, 1828082526UL, 2620095350UL, 3671861666UL, 986958825UL, 3332332947UL, 1610600284UL, 3193282615UL, +164496953UL, 537698841UL, 2234324389UL, 1682296894UL, 3526681456UL, 486931321UL, 1112334635UL, 1754723911UL, 3607564438UL, 3764062195UL, 898439171UL, 2702680798UL, 3827569659UL, 4104590721UL, 2612634189UL, 1703436382UL, 1596420149UL, 1814546108UL, 2684685172UL, 1659194343UL, 3421607784UL, 2424233156UL, 688245437UL, 2593335056UL, 1657668516UL, 362342820UL, 260803614UL, 2460564382UL, 2811435329UL, 2169200311UL, 4248717010UL, 1426048416UL, +1341061221UL, 1361417084UL, 3060155336UL, 2693026827UL, 688976997UL, 890124736UL, 2185462193UL, 765141735UL, 2445632748UL, 1113361455UL, 1437907207UL, 2127475991UL, 2845453063UL, 1830953748UL, 1719248425UL, 2717704308UL, 4193767498UL, 1667876711UL, 2469362144UL, 449353539UL, 3224086539UL, 231347764UL, 2737121599UL, 2917779591UL, 2122699205UL, 1463860373UL, 2760968409UL, 2579133178UL, 2600345316UL, 4017154219UL, 1041094855UL, 685134804UL, +3861095208UL, 3682591427UL, 3954527144UL, 2618003265UL, 3454840568UL, 1668276240UL, 988400088UL, 3235241899UL, 4020374281UL, 1896863688UL, 677285319UL, 2749516227UL, 4043186819UL, 2038783953UL, 236635760UL, 3641273565UL, 4073317913UL, 3946220303UL, 186484522UL, 3626346451UL, 3653227559UL, 872336642UL, 1896524045UL, 4168753288UL, 1723123703UL, 3600798445UL, 524095357UL, 412498526UL, 468768748UL, 2745777741UL, 26635454UL, 840544541UL, +1473941762UL, 2601865569UL, 2021732453UL, 3171165636UL, 1058640324UL, 3461566768UL, 1604778670UL, 437644814UL, 2437761489UL, 3615438045UL, 306196591UL, 972076738UL, 4075927397UL, 1427554739UL, 2369367008UL, 2401305323UL, 1774857312UL, 224593737UL, 3697511293UL, 4186564433UL, 1527832817UL, 1847061846UL, 333176687UL, 2988562696UL, 4039340326UL, 2731158470UL, 4273100167UL, 1673622334UL, 2163644598UL, 307949376UL, 1991088422UL, 4176957983UL, +565952761UL, 566996714UL, 4159448552UL, 1639884175UL, 115456167UL, 3265051494UL, 2826313040UL, 2698725478UL, 2976556877UL, 1276809956UL, 4051866478UL, 959265349UL, 293029699UL, 2482970929UL, 2905096898UL, 342438530UL, 3428101638UL, 4172766741UL, 2716490551UL, 3613297213UL, 200159550UL, 3406974927UL, 3723281866UL, 2865829307UL, 1242069873UL, 1464281204UL, 1828082526UL, 3304191156UL, 3671861666UL, 986958825UL, 3332332947UL, 1610600284UL, +2370407607UL, 164496953UL, 537698841UL, 2234324389UL, 1682296894UL, 826891606UL, 486931321UL, 1112334635UL, 1754723911UL, 3607564438UL, 3598993552UL, 898439171UL, 2702680798UL, 3827569659UL, 4104590721UL, 1421852097UL, 1703436382UL, 1596420149UL, 1814546108UL, 2684685172UL, 4090587429UL, 3421607784UL, 2424233156UL, 688245437UL, 2593335056UL, 4151905751UL, 362342820UL, 260803614UL, 2460564382UL, 2811435329UL, 2402832015UL, 4248717010UL, +1426048416UL, 1341061221UL, 1361417084UL, 1629089021UL, 2693026827UL, 688976997UL, 890124736UL, 2185462193UL, 303105066UL, 2445632748UL, 1113361455UL, 1437907207UL, 2127475991UL, 62024604UL, 1830953748UL, 1719248425UL, 2717704308UL, 4193767498UL, 667433630UL, 2469362144UL, 449353539UL, 3224086539UL, 231347764UL, 3918249451UL, 2917779591UL, 2122699205UL, 1463860373UL, 2760968409UL, 4274016442UL, 2600345316UL, 4017154219UL, 1041094855UL, +685134804UL, 643006688UL, 3682591427UL, 3954527144UL, 2618003265UL, 3454840568UL, 4180665518UL, 988400088UL, 3235241899UL, 4020374281UL, 1896863688UL, 3678687414UL, 2749516227UL, 4043186819UL, 2038783953UL, 236635760UL, 2880089648UL, 4073317913UL, 3946220303UL, 186484522UL, 3626346451UL, 2454620114UL, 872336642UL, 1896524045UL, 4168753288UL, 1723123703UL, 2692406059UL, 524095357UL, 412498526UL, 468768748UL, 2745777741UL, 918726515UL, +840544541UL, 1473941762UL, 2601865569UL, 2021732453UL, 3534238020UL, 1058640324UL, 3461566768UL, 1604778670UL, 437644814UL, 2894699005UL, 3615438045UL, 306196591UL, 972076738UL, 4075927397UL, 3468671461UL, 2369367008UL, 2401305323UL, 1774857312UL, 224593737UL, 2734827022UL, 4186564433UL, 1527832817UL, 1847061846UL, 333176687UL, 2437714719UL, 4039340326UL, 2731158470UL, 4273100167UL, 1673622334UL, 196072958UL, 307949376UL, 1991088422UL, +4176957983UL, 565952761UL, 847200194UL, 4159448552UL, 1639884175UL, 115456167UL, 3265051494UL, 2503079777UL, 2698725478UL, 2976556877UL, 1276809956UL, 4051866478UL, 2731665893UL, 293029699UL, 2482970929UL, 2905096898UL, 342438530UL, 581060953UL, 4172766741UL, 2716490551UL, 3613297213UL, 200159550UL, 4222335623UL, 3723281866UL, 2865829307UL, 1242069873UL, 1464281204UL, 1080647953UL, 3304191156UL, 3671861666UL, 986958825UL, 3332332947UL, +920422540UL, 3656094274UL, 4036161427UL, 2157099981UL, 1855437762UL, 1385781426UL, 199192882UL, 489599802UL, 3472601685UL, 717544078UL, 2241742884UL, 3951326913UL, 3590866192UL, 1087524220UL, 3517385549UL, 360484251UL, 2718513148UL, 1386577185UL, 1833613127UL, 2926418589UL, 1652463225UL, 548895720UL, 1343026759UL, 1797789098UL, 3229783023UL, 1745843414UL, 200554865UL, 2442780740UL, 2359926428UL, 2970332116UL, 3097392757UL, 134294482UL, +936225458UL, 1968264650UL, 64868134UL, 3821668262UL, 2502175363UL, 1623767635UL, 2936073062UL, 1991791011UL, 2971174068UL, 3142195911UL, 2874818345UL, 2192526584UL, 496586185UL, 2491564144UL, 2415210641UL, 314307270UL, 2936737494UL, 557604388UL, 1067914024UL, 3270690738UL, 375601880UL, 962749065UL, 3610467620UL, 402112984UL, 1432929499UL, 3872957776UL, 3971384069UL, 2223968592UL, 407083609UL, 2178236674UL, 1806303230UL, 3397564470UL, +12158764UL, 415570813UL, 4033667395UL, 3687406137UL, 801878150UL, 953500350UL, 3667783172UL, 1203668106UL, 902418194UL, 779786150UL, 774683730UL, 2870261992UL, 509192460UL, 1961621392UL, 1064906432UL, 3665710891UL, 1733725153UL, 1887608856UL, 1314631523UL, 4097239005UL, 29074501UL, 3472521950UL, 4040841657UL, 532128023UL, 2333441401UL, 1671717886UL, 1678544416UL, 1218347584UL, 3680929567UL, 4025753853UL, 2810948711UL, 1846100306UL, +3377469279UL, 3144481747UL, 2625781306UL, 730632118UL, 3162408393UL, 3423660386UL, 1364968369UL, 4270900402UL, 1075484840UL, 2892932277UL, 3700635052UL, 3853022563UL, 281755151UL, 1530909868UL, 2364069707UL, 2361723426UL, 738500028UL, 1401903990UL, 1543704261UL, 2442916222UL, 1076190609UL, 1882477803UL, 740024557UL, 1591015439UL, 2730909167UL, 2723330839UL, 1637373491UL, 3777799860UL, 2921269571UL, 3698591972UL, 3997463570UL, 3877862147UL, +1912888417UL, 3365137165UL, 3465700492UL, 771243134UL, 4037723169UL, 1715894739UL, 1025821874UL, 1924958945UL, 3382242859UL, 121591031UL, 483980724UL, 546523388UL, 2446882279UL, 856267778UL, 578739009UL, 2978085488UL, 480884914UL, 966764808UL, 457039953UL, 3817520708UL, 1113646451UL, 2503896910UL, 3507840816UL, 717151671UL, 4149352573UL, 1568869830UL, 395015863UL, 773165995UL, 1853682362UL, 2861368846UL, 1884368812UL, 1250092101UL, +}, +{ +916910638UL, 961623451UL, 1193013401UL, 1016438484UL, 4091279871UL, 287282633UL, 8590725UL, 3575333670UL, 324340905UL, 3133751747UL, 2840894649UL, 2980503178UL, 1111215768UL, 2783846375UL, 72516413UL, 4158424384UL, 2184094569UL, 2305724254UL, 4057093054UL, 1407652993UL, 3105191537UL, 768505376UL, 298782270UL, 993926164UL, 2694730042UL, 1479658113UL, 2376490281UL, 2767906402UL, 1619969256UL, 3256472015UL, 2563843533UL, 2974784738UL, +2529307107UL, 4289918826UL, 3105587575UL, 3748950898UL, 2182744253UL, 431888679UL, 3780324902UL, 2525978209UL, 54545903UL, 1688749940UL, 2394884334UL, 3477656171UL, 263834270UL, 1562965459UL, 804704330UL, 4185729868UL, 138898835UL, 2113063150UL, 327612841UL, 1252226275UL, 935318076UL, 2956823075UL, 4095101181UL, 1510586062UL, 156282440UL, 3386839706UL, 2294393752UL, 1306167091UL, 4005033667UL, 651716500UL, 4115192738UL, 123027719UL, +3873547487UL, 2910637335UL, 2571924586UL, 3489608656UL, 956791985UL, 2467423726UL, 3214531645UL, 2054232851UL, 49634692UL, 377192215UL, 1865068750UL, 2479252980UL, 3481787748UL, 3243507737UL, 605491073UL, 4062466752UL, 988602517UL, 1539348794UL, 1555068617UL, 2657884010UL, 460334294UL, 4240766479UL, 3639800790UL, 253377117UL, 3969136265UL, 488705329UL, 1722560286UL, 2289159295UL, 1025876008UL, 2927117896UL, 767521707UL, 2047999999UL, +4260853571UL, 2079302241UL, 2409677301UL, 1087552976UL, 2363907365UL, 2574464321UL, 2606273241UL, 3716086457UL, 26053603UL, 3162779415UL, 14843078UL, 2614076143UL, 1157531920UL, 2773275636UL, 2338825066UL, 435472225UL, 1399711137UL, 1224374788UL, 2154533280UL, 560135209UL, 935800607UL, 1940258814UL, 3826959530UL, 3423217355UL, 3704934971UL, 3815248829UL, 3878175339UL, 1395508015UL, 3295101527UL, 177901558UL, 4167531389UL, 1375148189UL, +3125377631UL, 557218961UL, 4088880299UL, 3478859071UL, 3687276754UL, 2845114223UL, 1713171361UL, 1756507633UL, 3160807894UL, 2375334470UL, 843542578UL, 1907952570UL, 1544844563UL, 2294372007UL, 3336681376UL, 734347193UL, 102566945UL, 2311037104UL, 4294750194UL, 3572240326UL, 732958152UL, 263733314UL, 2087890678UL, 331542297UL, 3549110380UL, 2073894939UL, 2104101380UL, 3670791368UL, 3122901693UL, 3799823891UL, 3783548253UL, 1102633864UL, +44327348UL, 916910638UL, 961623451UL, 1193013401UL, 1016438484UL, 1873779640UL, 287282633UL, 8590725UL, 3575333670UL, 324340905UL, 1144671533UL, 2840894649UL, 2980503178UL, 1111215768UL, 2783846375UL, 2000673937UL, 4158424384UL, 2184094569UL, 2305724254UL, 4057093054UL, 533488413UL, 3105191537UL, 768505376UL, 298782270UL, 993926164UL, 2015456740UL, 1479658113UL, 2376490281UL, 2767906402UL, 1619969256UL, 3120736988UL, 2563843533UL, +2974784738UL, 2529307107UL, 4289918826UL, 729503771UL, 3748950898UL, 2182744253UL, 431888679UL, 3780324902UL, 373638396UL, 54545903UL, 1688749940UL, 2394884334UL, 3477656171UL, 1083764681UL, 1562965459UL, 804704330UL, 4185729868UL, 138898835UL, 823405282UL, 327612841UL, 1252226275UL, 935318076UL, 2956823075UL, 899234846UL, 1510586062UL, 156282440UL, 3386839706UL, 2294393752UL, 2769934879UL, 4005033667UL, 651716500UL, 4115192738UL, +123027719UL, 3729538641UL, 2910637335UL, 2571924586UL, 3489608656UL, 956791985UL, 139360134UL, 3214531645UL, 2054232851UL, 49634692UL, 377192215UL, 2754746969UL, 2479252980UL, 3481787748UL, 3243507737UL, 605491073UL, 732155706UL, 988602517UL, 1539348794UL, 1555068617UL, 2657884010UL, 3753733088UL, 4240766479UL, 3639800790UL, 253377117UL, 3969136265UL, 3848735787UL, 1722560286UL, 2289159295UL, 1025876008UL, 2927117896UL, 3661948694UL, +2047999999UL, 4260853571UL, 2079302241UL, 2409677301UL, 3421911122UL, 2363907365UL, 2574464321UL, 2606273241UL, 3716086457UL, 2064343322UL, 3162779415UL, 14843078UL, 2614076143UL, 1157531920UL, 826449637UL, 2338825066UL, 435472225UL, 1399711137UL, 1224374788UL, 3770340198UL, 560135209UL, 935800607UL, 1940258814UL, 3826959530UL, 2963586762UL, 3704934971UL, 3815248829UL, 3878175339UL, 1395508015UL, 3721612680UL, 177901558UL, 4167531389UL, +1375148189UL, 3125377631UL, 1023552290UL, 4088880299UL, 3478859071UL, 3687276754UL, 2845114223UL, 3831557301UL, 1756507633UL, 3160807894UL, 2375334470UL, 843542578UL, 2798365898UL, 1544844563UL, 2294372007UL, 3336681376UL, 734347193UL, 1856808621UL, 2311037104UL, 4294750194UL, 3572240326UL, 732958152UL, 1999195012UL, 2087890678UL, 331542297UL, 3549110380UL, 2073894939UL, 3115936764UL, 3670791368UL, 3122901693UL, 3799823891UL, 3783548253UL, +132796150UL, 44327348UL, 916910638UL, 961623451UL, 1193013401UL, 1753944196UL, 1873779640UL, 287282633UL, 8590725UL, 3575333670UL, 1447720209UL, 1144671533UL, 2840894649UL, 2980503178UL, 1111215768UL, 1211945983UL, 2000673937UL, 4158424384UL, 2184094569UL, 2305724254UL, 402617261UL, 533488413UL, 3105191537UL, 768505376UL, 298782270UL, 2915553159UL, 2015456740UL, 1479658113UL, 2376490281UL, 2767906402UL, 3473761811UL, 3120736988UL, +2563843533UL, 2974784738UL, 2529307107UL, 737859212UL, 729503771UL, 3748950898UL, 2182744253UL, 431888679UL, 2013420163UL, 373638396UL, 54545903UL, 1688749940UL, 2394884334UL, 675998523UL, 1083764681UL, 1562965459UL, 804704330UL, 4185729868UL, 1165431355UL, 823405282UL, 327612841UL, 1252226275UL, 935318076UL, 2420680216UL, 899234846UL, 1510586062UL, 156282440UL, 3386839706UL, 2101339651UL, 2769934879UL, 4005033667UL, 651716500UL, +4115192738UL, 112049740UL, 3729538641UL, 2910637335UL, 2571924586UL, 3489608656UL, 305695595UL, 139360134UL, 3214531645UL, 2054232851UL, 49634692UL, 1073828255UL, 2754746969UL, 2479252980UL, 3481787748UL, 3243507737UL, 3392719169UL, 732155706UL, 988602517UL, 1539348794UL, 1555068617UL, 3246776527UL, 3753733088UL, 4240766479UL, 3639800790UL, 253377117UL, 872273450UL, 3848735787UL, 1722560286UL, 2289159295UL, 1025876008UL, 4168154213UL, +3661948694UL, 2047999999UL, 4260853571UL, 2079302241UL, 2380420842UL, 3421911122UL, 2363907365UL, 2574464321UL, 2606273241UL, 3881916078UL, 2064343322UL, 3162779415UL, 14843078UL, 2614076143UL, 473288515UL, 826449637UL, 2338825066UL, 435472225UL, 1399711137UL, 3068538992UL, 3770340198UL, 560135209UL, 935800607UL, 1940258814UL, 1469655183UL, 2963586762UL, 3704934971UL, 3815248829UL, 3878175339UL, 2410602840UL, 3721612680UL, 177901558UL, +4167531389UL, 1375148189UL, 1367577763UL, 1023552290UL, 4088880299UL, 3478859071UL, 3687276754UL, 678224549UL, 3831557301UL, 1756507633UL, 3160807894UL, 2375334470UL, 2884561721UL, 2798365898UL, 1544844563UL, 2294372007UL, 3336681376UL, 1938834658UL, 1856808621UL, 2311037104UL, 4294750194UL, 3572240326UL, 2786764913UL, 1999195012UL, 2087890678UL, 331542297UL, 3549110380UL, 3597797341UL, 3115936764UL, 3670791368UL, 3122901693UL, 3799823891UL, +1271317799UL, 132796150UL, 44327348UL, 916910638UL, 961623451UL, 2427821332UL, 1753944196UL, 1873779640UL, 287282633UL, 8590725UL, 1244012658UL, 1447720209UL, 1144671533UL, 2840894649UL, 2980503178UL, 3548902577UL, 1211945983UL, 2000673937UL, 4158424384UL, 2184094569UL, 2152623453UL, 402617261UL, 533488413UL, 3105191537UL, 768505376UL, 1095141108UL, 2915553159UL, 2015456740UL, 1479658113UL, 2376490281UL, 337998873UL, 3473761811UL, +3120736988UL, 2563843533UL, 2974784738UL, 3087228498UL, 737859212UL, 729503771UL, 3748950898UL, 2182744253UL, 2140410733UL, 2013420163UL, 373638396UL, 54545903UL, 1688749940UL, 528290088UL, 675998523UL, 1083764681UL, 1562965459UL, 804704330UL, 2536362875UL, 1165431355UL, 823405282UL, 327612841UL, 1252226275UL, 4037635314UL, 2420680216UL, 899234846UL, 1510586062UL, 156282440UL, 2012335895UL, 2101339651UL, 2769934879UL, 4005033667UL, +651716500UL, 2552583570UL, 112049740UL, 3729538641UL, 2910637335UL, 2571924586UL, 2436645403UL, 305695595UL, 139360134UL, 3214531645UL, 2054232851UL, 2384286326UL, 1073828255UL, 2754746969UL, 2479252980UL, 3481787748UL, 1948315585UL, 3392719169UL, 732155706UL, 988602517UL, 1539348794UL, 4110558494UL, 3246776527UL, 3753733088UL, 4240766479UL, 3639800790UL, 3627363812UL, 872273450UL, 3848735787UL, 1722560286UL, 2289159295UL, 4122430477UL, +4168154213UL, 3661948694UL, 2047999999UL, 4260853571UL, 1767882442UL, 2380420842UL, 3421911122UL, 2363907365UL, 2574464321UL, 2778622726UL, 3881916078UL, 2064343322UL, 3162779415UL, 14843078UL, 1513897109UL, 473288515UL, 826449637UL, 2338825066UL, 435472225UL, 322954918UL, 3068538992UL, 3770340198UL, 560135209UL, 935800607UL, 345602050UL, 1469655183UL, 2963586762UL, 3704934971UL, 3815248829UL, 3508249920UL, 2410602840UL, 3721612680UL, +177901558UL, 4167531389UL, 2161244150UL, 1367577763UL, 1023552290UL, 4088880299UL, 3478859071UL, 1108183104UL, 678224549UL, 3831557301UL, 1756507633UL, 3160807894UL, 2551630811UL, 2884561721UL, 2798365898UL, 1544844563UL, 2294372007UL, 2520267760UL, 1938834658UL, 1856808621UL, 2311037104UL, 4294750194UL, 2310096003UL, 2786764913UL, 1999195012UL, 2087890678UL, 331542297UL, 1205238749UL, 3597797341UL, 3115936764UL, 3670791368UL, 3122901693UL, +2008141679UL, 2018425028UL, 3435073328UL, 1452813805UL, 1628661138UL, 1323367156UL, 1062553693UL, 4029321700UL, 2772685842UL, 3798388850UL, 1315172209UL, 3930983291UL, 3816791373UL, 529176017UL, 3419610188UL, 3331589216UL, 4016977274UL, 2047089790UL, 3892571923UL, 2363414008UL, 1144631948UL, 3004954882UL, 2558739305UL, 19774033UL, 2525079911UL, 3774885821UL, 2817837373UL, 986111566UL, 1446678953UL, 3238485630UL, 3993748600UL, 1601954599UL, +3100591537UL, 2098009380UL, 3935971261UL, 4202546603UL, 3713465083UL, 3845664764UL, 2466365355UL, 1452340065UL, 2003576531UL, 1013434822UL, 2254608933UL, 783902023UL, 3129770529UL, 129130612UL, 821418228UL, 350036483UL, 3473671510UL, 4128495167UL, 2773832518UL, 683262085UL, 2143353417UL, 256251732UL, 1719056536UL, 2670223618UL, 328467339UL, 1564657740UL, 451231672UL, 2788353006UL, 882900088UL, 3255241056UL, 3198073758UL, 2541070985UL, +1941509325UL, 674933160UL, 207753676UL, 2605303964UL, 1681335994UL, 1143520001UL, 448872632UL, 302917879UL, 1100138495UL, 2058770021UL, 3116955098UL, 2081754747UL, 3734924767UL, 1916718058UL, 3873335960UL, 2740460398UL, 2171157007UL, 27677949UL, 2364721928UL, 175851655UL, 1468083950UL, 3162369526UL, 2441504540UL, 556978295UL, 2372096172UL, 3181101116UL, 2582850132UL, 1101292643UL, 862643740UL, 2095546242UL, 3261953801UL, 748040658UL, +3970037674UL, 819116843UL, 3594523650UL, 1597423019UL, 4109336883UL, 1198282420UL, 2905230517UL, 1729529596UL, 3230132814UL, 3640242164UL, 1899059108UL, 1944906555UL, 3426510495UL, 3035188107UL, 6448083UL, 1093882965UL, 2867500469UL, 3626379157UL, 1849073068UL, 897616501UL, 604221668UL, 1020676159UL, 4083635798UL, 1716022041UL, 3671877965UL, 1738820843UL, 30077467UL, 729231767UL, 3413193248UL, 207000406UL, 3854363185UL, 3302747326UL, +3293643267UL, 2101250157UL, 460131091UL, 4159442595UL, 1133391045UL, 1031215443UL, 4195487944UL, 45931575UL, 2922629291UL, 789302543UL, 3024994662UL, 442525623UL, 2850119076UL, 838309503UL, 2585361734UL, 1020449164UL, 1623631007UL, 955374631UL, 2932467671UL, 3713639221UL, 3019179416UL, 977970472UL, 1817244230UL, 3856774853UL, 1140530868UL, 886199600UL, 1218509766UL, 4001537244UL, 2840913665UL, 2133254364UL, 3332344608UL, 475291624UL, +}, +{ +1854921599UL, 2655519695UL, 3124573588UL, 319882484UL, 603545603UL, 4175512633UL, 141286453UL, 1183670252UL, 1789500145UL, 37351733UL, 3190829323UL, 2782782009UL, 493805446UL, 1228958246UL, 2672482554UL, 2274981421UL, 2935438833UL, 3625733677UL, 3679506394UL, 687805550UL, 134516308UL, 3576789728UL, 965007022UL, 1056542222UL, 2319405423UL, 3944221200UL, 950102624UL, 3848192810UL, 3205299696UL, 82033760UL, 1241913280UL, 1360146137UL, +1675732327UL, 2164452797UL, 3920498715UL, 2226452641UL, 3172047212UL, 1569171738UL, 2631589480UL, 2889660225UL, 2030783667UL, 2237381973UL, 2706217212UL, 3143638386UL, 1733174225UL, 1166820137UL, 3818389960UL, 193959252UL, 2793509934UL, 316291605UL, 2502743884UL, 1963136977UL, 3739017448UL, 25754513UL, 1590156485UL, 1856291967UL, 4143674472UL, 2538785911UL, 2159135699UL, 1908446793UL, 3303325234UL, 2589568800UL, 1193586059UL, 77481069UL, +789413194UL, 2556570543UL, 162987300UL, 1960844609UL, 2973799047UL, 4253906178UL, 315868734UL, 2542622968UL, 3949539136UL, 1479106582UL, 4225431384UL, 1235059630UL, 1533374854UL, 847792023UL, 4031286530UL, 4194276632UL, 164541100UL, 1010135841UL, 143302319UL, 1335585015UL, 1237311692UL, 20896020UL, 344974153UL, 2576803233UL, 3430251730UL, 984163376UL, 2680612471UL, 1276425436UL, 2400671554UL, 1628640140UL, 2161048926UL, 2109177634UL, +998215324UL, 3127793500UL, 1759998050UL, 3105138908UL, 2583746384UL, 2126302368UL, 3258602104UL, 1262742375UL, 3565617377UL, 3726060195UL, 157069329UL, 390662438UL, 3800994052UL, 2007694482UL, 377281730UL, 3251789121UL, 236703173UL, 122782596UL, 775407411UL, 3394010206UL, 4232159202UL, 468321553UL, 2704615220UL, 1332411375UL, 2978494251UL, 989230484UL, 3122841814UL, 2348872707UL, 731335994UL, 541354422UL, 223117443UL, 2225009071UL, +4230058949UL, 1875162926UL, 3897048544UL, 3550177883UL, 2461273592UL, 1046820583UL, 1333727817UL, 1378024753UL, 3686775275UL, 4230752590UL, 64834458UL, 1281467967UL, 729116355UL, 3886390916UL, 65029451UL, 3478506446UL, 1387684482UL, 1172004841UL, 2525409243UL, 1677678908UL, 1704646757UL, 930937262UL, 1088384271UL, 689357059UL, 1754542213UL, 702963842UL, 2864311668UL, 1960202673UL, 1009675673UL, 3742350158UL, 3751269215UL, 3166659283UL, +9090161UL, 1854921599UL, 2655519695UL, 3124573588UL, 319882484UL, 1422536794UL, 4175512633UL, 141286453UL, 1183670252UL, 1789500145UL, 850391877UL, 3190829323UL, 2782782009UL, 493805446UL, 1228958246UL, 837232655UL, 2274981421UL, 2935438833UL, 3625733677UL, 3679506394UL, 955772620UL, 134516308UL, 3576789728UL, 965007022UL, 1056542222UL, 874117013UL, 3944221200UL, 950102624UL, 3848192810UL, 3205299696UL, 543679720UL, 1241913280UL, +1360146137UL, 1675732327UL, 2164452797UL, 1169030022UL, 2226452641UL, 3172047212UL, 1569171738UL, 2631589480UL, 3783543297UL, 2030783667UL, 2237381973UL, 2706217212UL, 3143638386UL, 1560162209UL, 1166820137UL, 3818389960UL, 193959252UL, 2793509934UL, 4258046618UL, 2502743884UL, 1963136977UL, 3739017448UL, 25754513UL, 1204846712UL, 1856291967UL, 4143674472UL, 2538785911UL, 2159135699UL, 3889946075UL, 3303325234UL, 2589568800UL, 1193586059UL, +77481069UL, 969912041UL, 2556570543UL, 162987300UL, 1960844609UL, 2973799047UL, 427583517UL, 315868734UL, 2542622968UL, 3949539136UL, 1479106582UL, 92839917UL, 1235059630UL, 1533374854UL, 847792023UL, 4031286530UL, 1147875681UL, 164541100UL, 1010135841UL, 143302319UL, 1335585015UL, 368616909UL, 20896020UL, 344974153UL, 2576803233UL, 3430251730UL, 1078575783UL, 2680612471UL, 1276425436UL, 2400671554UL, 1628640140UL, 4149623645UL, +2109177634UL, 998215324UL, 3127793500UL, 1759998050UL, 3525419965UL, 2583746384UL, 2126302368UL, 3258602104UL, 1262742375UL, 1996113346UL, 3726060195UL, 157069329UL, 390662438UL, 3800994052UL, 982000497UL, 377281730UL, 3251789121UL, 236703173UL, 122782596UL, 2303768414UL, 3394010206UL, 4232159202UL, 468321553UL, 2704615220UL, 681592492UL, 2978494251UL, 989230484UL, 3122841814UL, 2348872707UL, 4089094260UL, 541354422UL, 223117443UL, +2225009071UL, 4230058949UL, 2754981128UL, 3897048544UL, 3550177883UL, 2461273592UL, 1046820583UL, 668143612UL, 1378024753UL, 3686775275UL, 4230752590UL, 64834458UL, 3765910650UL, 729116355UL, 3886390916UL, 65029451UL, 3478506446UL, 3419111947UL, 1172004841UL, 2525409243UL, 1677678908UL, 1704646757UL, 155635560UL, 1088384271UL, 689357059UL, 1754542213UL, 702963842UL, 2712009967UL, 1960202673UL, 1009675673UL, 3742350158UL, 3751269215UL, +129749802UL, 9090161UL, 1854921599UL, 2655519695UL, 3124573588UL, 809557750UL, 1422536794UL, 4175512633UL, 141286453UL, 1183670252UL, 1739311360UL, 850391877UL, 3190829323UL, 2782782009UL, 493805446UL, 1738527771UL, 837232655UL, 2274981421UL, 2935438833UL, 3625733677UL, 1858071296UL, 955772620UL, 134516308UL, 3576789728UL, 965007022UL, 3367712327UL, 874117013UL, 3944221200UL, 950102624UL, 3848192810UL, 2420548306UL, 543679720UL, +1241913280UL, 1360146137UL, 1675732327UL, 176019367UL, 1169030022UL, 2226452641UL, 3172047212UL, 1569171738UL, 76544055UL, 3783543297UL, 2030783667UL, 2237381973UL, 2706217212UL, 3283985735UL, 1560162209UL, 1166820137UL, 3818389960UL, 193959252UL, 346134252UL, 4258046618UL, 2502743884UL, 1963136977UL, 3739017448UL, 3887005605UL, 1204846712UL, 1856291967UL, 4143674472UL, 2538785911UL, 366578749UL, 3889946075UL, 3303325234UL, 2589568800UL, +1193586059UL, 2917569085UL, 969912041UL, 2556570543UL, 162987300UL, 1960844609UL, 61311938UL, 427583517UL, 315868734UL, 2542622968UL, 3949539136UL, 2278526422UL, 92839917UL, 1235059630UL, 1533374854UL, 847792023UL, 1361054176UL, 1147875681UL, 164541100UL, 1010135841UL, 143302319UL, 1348709332UL, 368616909UL, 20896020UL, 344974153UL, 2576803233UL, 3290873783UL, 1078575783UL, 2680612471UL, 1276425436UL, 2400671554UL, 628790408UL, +4149623645UL, 2109177634UL, 998215324UL, 3127793500UL, 2019336900UL, 3525419965UL, 2583746384UL, 2126302368UL, 3258602104UL, 2858154034UL, 1996113346UL, 3726060195UL, 157069329UL, 390662438UL, 2250549235UL, 982000497UL, 377281730UL, 3251789121UL, 236703173UL, 3487415996UL, 2303768414UL, 3394010206UL, 4232159202UL, 468321553UL, 2773608982UL, 681592492UL, 2978494251UL, 989230484UL, 3122841814UL, 3647638215UL, 4089094260UL, 541354422UL, +223117443UL, 2225009071UL, 2829509947UL, 2754981128UL, 3897048544UL, 3550177883UL, 2461273592UL, 282627696UL, 668143612UL, 1378024753UL, 3686775275UL, 4230752590UL, 1105868822UL, 3765910650UL, 729116355UL, 3886390916UL, 65029451UL, 328554604UL, 3419111947UL, 1172004841UL, 2525409243UL, 1677678908UL, 1395036942UL, 155635560UL, 1088384271UL, 689357059UL, 1754542213UL, 1076601715UL, 2712009967UL, 1960202673UL, 1009675673UL, 3742350158UL, +2581225953UL, 129749802UL, 9090161UL, 1854921599UL, 2655519695UL, 1393282220UL, 809557750UL, 1422536794UL, 4175512633UL, 141286453UL, 2211497169UL, 1739311360UL, 850391877UL, 3190829323UL, 2782782009UL, 2694871802UL, 1738527771UL, 837232655UL, 2274981421UL, 2935438833UL, 3145832503UL, 1858071296UL, 955772620UL, 134516308UL, 3576789728UL, 4045354759UL, 3367712327UL, 874117013UL, 3944221200UL, 950102624UL, 3562634568UL, 2420548306UL, +543679720UL, 1241913280UL, 1360146137UL, 3644280343UL, 176019367UL, 1169030022UL, 2226452641UL, 3172047212UL, 3927720006UL, 76544055UL, 3783543297UL, 2030783667UL, 2237381973UL, 1497233808UL, 3283985735UL, 1560162209UL, 1166820137UL, 3818389960UL, 2344066681UL, 346134252UL, 4258046618UL, 2502743884UL, 1963136977UL, 79988846UL, 3887005605UL, 1204846712UL, 1856291967UL, 4143674472UL, 3967952414UL, 366578749UL, 3889946075UL, 3303325234UL, +2589568800UL, 2193179011UL, 2917569085UL, 969912041UL, 2556570543UL, 162987300UL, 52882655UL, 61311938UL, 427583517UL, 315868734UL, 2542622968UL, 1575831590UL, 2278526422UL, 92839917UL, 1235059630UL, 1533374854UL, 2397068791UL, 1361054176UL, 1147875681UL, 164541100UL, 1010135841UL, 2586368032UL, 1348709332UL, 368616909UL, 20896020UL, 344974153UL, 3445652232UL, 3290873783UL, 1078575783UL, 2680612471UL, 1276425436UL, 3682156544UL, +628790408UL, 4149623645UL, 2109177634UL, 998215324UL, 4049708298UL, 2019336900UL, 3525419965UL, 2583746384UL, 2126302368UL, 1627944270UL, 2858154034UL, 1996113346UL, 3726060195UL, 157069329UL, 1481222640UL, 2250549235UL, 982000497UL, 377281730UL, 3251789121UL, 3564274539UL, 3487415996UL, 2303768414UL, 3394010206UL, 4232159202UL, 3509025997UL, 2773608982UL, 681592492UL, 2978494251UL, 989230484UL, 980252048UL, 3647638215UL, 4089094260UL, +541354422UL, 223117443UL, 543970497UL, 2829509947UL, 2754981128UL, 3897048544UL, 3550177883UL, 2736782140UL, 282627696UL, 668143612UL, 1378024753UL, 3686775275UL, 2728601425UL, 1105868822UL, 3765910650UL, 729116355UL, 3886390916UL, 1866378660UL, 328554604UL, 3419111947UL, 1172004841UL, 2525409243UL, 1506924008UL, 1395036942UL, 155635560UL, 1088384271UL, 689357059UL, 3587092123UL, 1076601715UL, 2712009967UL, 1960202673UL, 1009675673UL, +4292715891UL, 2465250857UL, 3267969665UL, 2459570573UL, 3644463083UL, 1637197500UL, 684559293UL, 3520611957UL, 2976084366UL, 1512112440UL, 1778285193UL, 1849742417UL, 3144801412UL, 3009052859UL, 820829188UL, 1382783871UL, 3373481539UL, 3777016406UL, 266942530UL, 1792334422UL, 4109859515UL, 1468149634UL, 1356457853UL, 623893785UL, 1301686542UL, 441704877UL, 3377795902UL, 879822753UL, 329462927UL, 543858304UL, 2221828617UL, 2996486613UL, +981774202UL, 1032220084UL, 1066536452UL, 1004068806UL, 1336694798UL, 3744375323UL, 3802436665UL, 3366526577UL, 418696462UL, 1776559103UL, 1291965608UL, 1623030339UL, 1443628607UL, 572114324UL, 899621592UL, 332121275UL, 3637616671UL, 457287722UL, 3803043476UL, 408472701UL, 660940326UL, 1209169008UL, 1202511620UL, 2906900959UL, 2600414642UL, 2015874468UL, 2931389161UL, 1760773669UL, 2601299639UL, 543821664UL, 3426280682UL, 1337602255UL, +3334593650UL, 1320885980UL, 3857269540UL, 2548321029UL, 2250001180UL, 673341051UL, 1900184720UL, 731675831UL, 2461790412UL, 2593291320UL, 1640301250UL, 863529987UL, 91627443UL, 2437824309UL, 2834231475UL, 4093270720UL, 1474594761UL, 4186662839UL, 1683556862UL, 1302286991UL, 806676270UL, 703274107UL, 3756759580UL, 674737904UL, 912015048UL, 1823306025UL, 1509430520UL, 3128952761UL, 290841833UL, 3917789380UL, 1022040580UL, 1810054038UL, +334998864UL, 1009274987UL, 310979037UL, 606749827UL, 546291081UL, 3438438313UL, 1840081424UL, 1950680845UL, 4217236364UL, 1814584903UL, 2814353208UL, 194196981UL, 1540331253UL, 3135937654UL, 773351497UL, 1878220007UL, 3097009802UL, 1252607159UL, 1378821846UL, 2741884614UL, 178612659UL, 3656860395UL, 1259606652UL, 3942111545UL, 488406826UL, 3640897405UL, 3419000480UL, 353909713UL, 2996208477UL, 2862593073UL, 108483327UL, 648472258UL, +1060249632UL, 1049865483UL, 430087518UL, 1364157854UL, 3367631180UL, 251313827UL, 2374149836UL, 2109357086UL, 479172068UL, 464775113UL, 1806677787UL, 3488082411UL, 356035738UL, 3080424395UL, 4134646749UL, 369528743UL, 1031004516UL, 2525336414UL, 4189798138UL, 3928909462UL, 568714397UL, 1681832820UL, 1753328641UL, 827357673UL, 1651960551UL, 1798317455UL, 737101952UL, 3257553606UL, 400882781UL, 1473208110UL, 4134183873UL, 2193420912UL, +}, +{ +2483976489UL, 2790651795UL, 3298324523UL, 3508205426UL, 2236819708UL, 917494217UL, 769620837UL, 3411018785UL, 2391335000UL, 1627061280UL, 3356773416UL, 1288706527UL, 4178910717UL, 3636299534UL, 4221874052UL, 3674654381UL, 537787012UL, 4271656840UL, 185820273UL, 1160533598UL, 1862365049UL, 2550353307UL, 1392072847UL, 1870891365UL, 1517453821UL, 524666025UL, 3645751565UL, 2415020247UL, 3691419894UL, 2580450642UL, 2130267479UL, 3636103610UL, +562446539UL, 750696587UL, 97137475UL, 3894066051UL, 2239638596UL, 3256181120UL, 3981041836UL, 774947039UL, 451287677UL, 3618957054UL, 4236303539UL, 1027744929UL, 1497195372UL, 498574915UL, 2164122779UL, 582902291UL, 3040883311UL, 1626221455UL, 1853378UL, 2125490000UL, 3185055972UL, 1607660025UL, 432884530UL, 779476209UL, 124284956UL, 2488937128UL, 2521389012UL, 107485781UL, 2873055013UL, 1171872946UL, 3130489952UL, 4273333914UL, +646240524UL, 3970896645UL, 942009076UL, 4069926418UL, 3129385884UL, 3470469370UL, 388702536UL, 450999415UL, 2995728716UL, 1687173264UL, 3049352827UL, 2648078738UL, 190663705UL, 486809970UL, 424002670UL, 2421764946UL, 2941043524UL, 3841512738UL, 119077561UL, 1801381572UL, 2208680167UL, 2502730219UL, 9899015UL, 2455199230UL, 3755314209UL, 3958460021UL, 3846398898UL, 1405136244UL, 2870563334UL, 821846618UL, 2790899812UL, 863647562UL, +629585032UL, 958925512UL, 1190540209UL, 57251233UL, 2109551995UL, 2294881622UL, 2603370255UL, 3839518646UL, 123838650UL, 3436270690UL, 1637121394UL, 3761101432UL, 954001192UL, 759760236UL, 3268295908UL, 2313083096UL, 630164216UL, 2367213191UL, 3992059381UL, 3292952769UL, 2040774258UL, 1420209005UL, 527547730UL, 1222399440UL, 1515078401UL, 2005580991UL, 645585788UL, 2256370254UL, 3057235502UL, 2870727428UL, 2785498804UL, 333440916UL, +1873686678UL, 2489794553UL, 3726728164UL, 3405629071UL, 3869328595UL, 3081963448UL, 2122133003UL, 1428788181UL, 4141962679UL, 41030733UL, 183716455UL, 36316501UL, 1430796327UL, 1884066707UL, 1216957106UL, 3455082673UL, 1092665987UL, 535070834UL, 3873372533UL, 175757671UL, 3414803303UL, 791028991UL, 3436610906UL, 2950895946UL, 977680845UL, 4224715886UL, 2809442211UL, 4044727083UL, 3035532020UL, 4253187882UL, 969203959UL, 2539482914UL, +813880136UL, 2483976489UL, 2790651795UL, 3298324523UL, 3508205426UL, 49280479UL, 917494217UL, 769620837UL, 3411018785UL, 2391335000UL, 3036738936UL, 3356773416UL, 1288706527UL, 4178910717UL, 3636299534UL, 2294957038UL, 3674654381UL, 537787012UL, 4271656840UL, 185820273UL, 2622722506UL, 1862365049UL, 2550353307UL, 1392072847UL, 1870891365UL, 2838104933UL, 524666025UL, 3645751565UL, 2415020247UL, 3691419894UL, 1295777418UL, 2130267479UL, +3636103610UL, 562446539UL, 750696587UL, 249830932UL, 3894066051UL, 2239638596UL, 3256181120UL, 3981041836UL, 3217398876UL, 451287677UL, 3618957054UL, 4236303539UL, 1027744929UL, 1724964245UL, 498574915UL, 2164122779UL, 582902291UL, 3040883311UL, 3101287841UL, 1853378UL, 2125490000UL, 3185055972UL, 1607660025UL, 1128474163UL, 779476209UL, 124284956UL, 2488937128UL, 2521389012UL, 338597864UL, 2873055013UL, 1171872946UL, 3130489952UL, +4273333914UL, 1557892392UL, 3970896645UL, 942009076UL, 4069926418UL, 3129385884UL, 2688433076UL, 388702536UL, 450999415UL, 2995728716UL, 1687173264UL, 157685189UL, 2648078738UL, 190663705UL, 486809970UL, 424002670UL, 979986388UL, 2941043524UL, 3841512738UL, 119077561UL, 1801381572UL, 2668625968UL, 2502730219UL, 9899015UL, 2455199230UL, 3755314209UL, 2699515741UL, 3846398898UL, 1405136244UL, 2870563334UL, 821846618UL, 505633792UL, +863647562UL, 629585032UL, 958925512UL, 1190540209UL, 2067402799UL, 2109551995UL, 2294881622UL, 2603370255UL, 3839518646UL, 2688067120UL, 3436270690UL, 1637121394UL, 3761101432UL, 954001192UL, 3206166733UL, 3268295908UL, 2313083096UL, 630164216UL, 2367213191UL, 3007494680UL, 3292952769UL, 2040774258UL, 1420209005UL, 527547730UL, 4047406592UL, 1515078401UL, 2005580991UL, 645585788UL, 2256370254UL, 13805572UL, 2870727428UL, 2785498804UL, +333440916UL, 1873686678UL, 1928222740UL, 3726728164UL, 3405629071UL, 3869328595UL, 3081963448UL, 2971423693UL, 1428788181UL, 4141962679UL, 41030733UL, 183716455UL, 4064095256UL, 1430796327UL, 1884066707UL, 1216957106UL, 3455082673UL, 985592757UL, 535070834UL, 3873372533UL, 175757671UL, 3414803303UL, 2159028553UL, 3436610906UL, 2950895946UL, 977680845UL, 4224715886UL, 345462057UL, 4044727083UL, 3035532020UL, 4253187882UL, 969203959UL, +984166534UL, 813880136UL, 2483976489UL, 2790651795UL, 3298324523UL, 1080001158UL, 49280479UL, 917494217UL, 769620837UL, 3411018785UL, 3216598401UL, 3036738936UL, 3356773416UL, 1288706527UL, 4178910717UL, 3311472057UL, 2294957038UL, 3674654381UL, 537787012UL, 4271656840UL, 220045511UL, 2622722506UL, 1862365049UL, 2550353307UL, 1392072847UL, 3057632678UL, 2838104933UL, 524666025UL, 3645751565UL, 2415020247UL, 252304106UL, 1295777418UL, +2130267479UL, 3636103610UL, 562446539UL, 80437039UL, 249830932UL, 3894066051UL, 2239638596UL, 3256181120UL, 117173223UL, 3217398876UL, 451287677UL, 3618957054UL, 4236303539UL, 1986849360UL, 1724964245UL, 498574915UL, 2164122779UL, 582902291UL, 288631030UL, 3101287841UL, 1853378UL, 2125490000UL, 3185055972UL, 824635664UL, 1128474163UL, 779476209UL, 124284956UL, 2488937128UL, 1231646648UL, 338597864UL, 2873055013UL, 1171872946UL, +3130489952UL, 708957725UL, 1557892392UL, 3970896645UL, 942009076UL, 4069926418UL, 2286522565UL, 2688433076UL, 388702536UL, 450999415UL, 2995728716UL, 2523361978UL, 157685189UL, 2648078738UL, 190663705UL, 486809970UL, 151444406UL, 979986388UL, 2941043524UL, 3841512738UL, 119077561UL, 3762447035UL, 2668625968UL, 2502730219UL, 9899015UL, 2455199230UL, 3532439568UL, 2699515741UL, 3846398898UL, 1405136244UL, 2870563334UL, 2242036665UL, +505633792UL, 863647562UL, 629585032UL, 958925512UL, 2618618630UL, 2067402799UL, 2109551995UL, 2294881622UL, 2603370255UL, 2461404010UL, 2688067120UL, 3436270690UL, 1637121394UL, 3761101432UL, 1076814097UL, 3206166733UL, 3268295908UL, 2313083096UL, 630164216UL, 12196305UL, 3007494680UL, 3292952769UL, 2040774258UL, 1420209005UL, 2609377752UL, 4047406592UL, 1515078401UL, 2005580991UL, 645585788UL, 865985176UL, 13805572UL, 2870727428UL, +2785498804UL, 333440916UL, 3735553268UL, 1928222740UL, 3726728164UL, 3405629071UL, 3869328595UL, 501640466UL, 2971423693UL, 1428788181UL, 4141962679UL, 41030733UL, 97561214UL, 4064095256UL, 1430796327UL, 1884066707UL, 1216957106UL, 3840122090UL, 985592757UL, 535070834UL, 3873372533UL, 175757671UL, 3856277268UL, 2159028553UL, 3436610906UL, 2950895946UL, 977680845UL, 3313441827UL, 345462057UL, 4044727083UL, 3035532020UL, 4253187882UL, +3468811573UL, 984166534UL, 813880136UL, 2483976489UL, 2790651795UL, 3733649754UL, 1080001158UL, 49280479UL, 917494217UL, 769620837UL, 3969566450UL, 3216598401UL, 3036738936UL, 3356773416UL, 1288706527UL, 2444128005UL, 3311472057UL, 2294957038UL, 3674654381UL, 537787012UL, 4166109669UL, 220045511UL, 2622722506UL, 1862365049UL, 2550353307UL, 2552992760UL, 3057632678UL, 2838104933UL, 524666025UL, 3645751565UL, 664164441UL, 252304106UL, +1295777418UL, 2130267479UL, 3636103610UL, 3227561061UL, 80437039UL, 249830932UL, 3894066051UL, 2239638596UL, 1071536668UL, 117173223UL, 3217398876UL, 451287677UL, 3618957054UL, 3066415327UL, 1986849360UL, 1724964245UL, 498574915UL, 2164122779UL, 3541914330UL, 288631030UL, 3101287841UL, 1853378UL, 2125490000UL, 2207189978UL, 824635664UL, 1128474163UL, 779476209UL, 124284956UL, 2117633906UL, 1231646648UL, 338597864UL, 2873055013UL, +1171872946UL, 891038594UL, 708957725UL, 1557892392UL, 3970896645UL, 942009076UL, 42952651UL, 2286522565UL, 2688433076UL, 388702536UL, 450999415UL, 2986730356UL, 2523361978UL, 157685189UL, 2648078738UL, 190663705UL, 3058267870UL, 151444406UL, 979986388UL, 2941043524UL, 3841512738UL, 1844101292UL, 3762447035UL, 2668625968UL, 2502730219UL, 9899015UL, 2599582093UL, 3532439568UL, 2699515741UL, 3846398898UL, 1405136244UL, 811001941UL, +2242036665UL, 505633792UL, 863647562UL, 629585032UL, 2722320710UL, 2618618630UL, 2067402799UL, 2109551995UL, 2294881622UL, 1820862072UL, 2461404010UL, 2688067120UL, 3436270690UL, 1637121394UL, 3642978005UL, 1076814097UL, 3206166733UL, 3268295908UL, 2313083096UL, 1900318020UL, 12196305UL, 3007494680UL, 3292952769UL, 2040774258UL, 520848705UL, 2609377752UL, 4047406592UL, 1515078401UL, 2005580991UL, 2530251392UL, 865985176UL, 13805572UL, +2870727428UL, 2785498804UL, 2878984912UL, 3735553268UL, 1928222740UL, 3726728164UL, 3405629071UL, 2717736455UL, 501640466UL, 2971423693UL, 1428788181UL, 4141962679UL, 3704214873UL, 97561214UL, 4064095256UL, 1430796327UL, 1884066707UL, 1721732760UL, 3840122090UL, 985592757UL, 535070834UL, 3873372533UL, 770732059UL, 3856277268UL, 2159028553UL, 3436610906UL, 2950895946UL, 33753949UL, 3313441827UL, 345462057UL, 4044727083UL, 3035532020UL, +4166506071UL, 2719759982UL, 1025532659UL, 3811323959UL, 713457907UL, 1577198020UL, 1719946821UL, 3963262337UL, 1719605451UL, 703663722UL, 1943886497UL, 2916371044UL, 1655862745UL, 109438187UL, 195575943UL, 2572727533UL, 2421761970UL, 1796539813UL, 2020762515UL, 1191344316UL, 2492085516UL, 2778033179UL, 4002316684UL, 1571080685UL, 1157340389UL, 3859584731UL, 3403766082UL, 2292873365UL, 2032258920UL, 1749575450UL, 848549431UL, 1893685820UL, +3510068298UL, 3308906564UL, 1193936308UL, 2561670234UL, 1043148718UL, 2611815896UL, 3832995202UL, 2436487998UL, 3377369330UL, 1174818128UL, 796514731UL, 1985886833UL, 88296218UL, 3032898657UL, 4101301361UL, 1486994584UL, 237792475UL, 1029399834UL, 1708840018UL, 2934039708UL, 1496674948UL, 4243234983UL, 3896751668UL, 1726119825UL, 2706068825UL, 1900013134UL, 2639641919UL, 1433377392UL, 2962655166UL, 1870954268UL, 3873603462UL, 1778084630UL, +2393311756UL, 4135022799UL, 3669603001UL, 811404758UL, 784379778UL, 4283689136UL, 405168660UL, 3873488622UL, 486946690UL, 347427153UL, 2139072474UL, 1143349522UL, 3780264455UL, 2938731842UL, 3864001470UL, 3497981827UL, 2703917008UL, 3222236962UL, 2604106616UL, 1281570367UL, 175937153UL, 433252852UL, 3232065906UL, 1111895932UL, 1027363895UL, 2435093744UL, 4232690481UL, 1940855209UL, 2844613991UL, 2095175619UL, 3479946852UL, 393314401UL, +3625733631UL, 1073779513UL, 2884072879UL, 4089630675UL, 3614205484UL, 1379809260UL, 3980251795UL, 3914556410UL, 3633356126UL, 3030204458UL, 1654727861UL, 3765074811UL, 959734060UL, 842315676UL, 353688341UL, 145655006UL, 1972100601UL, 1456042517UL, 3767579955UL, 4282066379UL, 498998655UL, 4123310742UL, 1801424182UL, 777808179UL, 655425670UL, 588715641UL, 2136252742UL, 1283378143UL, 639191135UL, 3132375783UL, 276649124UL, 2036776039UL, +3352396498UL, 3893441746UL, 3298373918UL, 1024178230UL, 2623051553UL, 1956117442UL, 2955394456UL, 2478945776UL, 3904945720UL, 769232312UL, 2168822980UL, 3715831945UL, 453874622UL, 3351529191UL, 3256151193UL, 808042625UL, 1700919462UL, 1008305347UL, 1518733915UL, 3194328753UL, 2228970756UL, 2604658038UL, 1376476152UL, 2147167203UL, 2585867511UL, 445717950UL, 3595016420UL, 3673970127UL, 3640614546UL, 494944945UL, 152508312UL, 4160926899UL, +}, +{ +3225674336UL, 827428943UL, 2858523441UL, 2447266124UL, 1539223637UL, 2299756421UL, 776912458UL, 279091824UL, 1152725492UL, 3903457284UL, 3987010398UL, 3996115574UL, 839506039UL, 3052513014UL, 28550291UL, 2597814974UL, 2328446377UL, 1961600298UL, 3695276714UL, 1334932648UL, 1141381380UL, 3025370440UL, 997698792UL, 931473445UL, 3091440507UL, 820119215UL, 3586778616UL, 1993126242UL, 4252838072UL, 3033829531UL, 2120026924UL, 65722921UL, +746724958UL, 461423533UL, 1582298542UL, 1564918930UL, 3710935369UL, 419349792UL, 3914061713UL, 2279209938UL, 770031171UL, 2062767935UL, 3373230309UL, 3582372364UL, 2025682996UL, 3352859025UL, 1262632952UL, 3140021482UL, 501370035UL, 2554730117UL, 352450195UL, 1002557127UL, 2813224858UL, 2808406559UL, 290476252UL, 4216846311UL, 1187381982UL, 3131323304UL, 1094330039UL, 2646234280UL, 655242013UL, 1152156402UL, 3658526705UL, 3565043535UL, +693375321UL, 2120064836UL, 3726555752UL, 97387177UL, 546586686UL, 1013492636UL, 3874404446UL, 440995849UL, 1929251266UL, 95137166UL, 564969023UL, 3559119399UL, 3855477390UL, 2439885481UL, 2492213232UL, 2611214170UL, 2054191666UL, 2778642234UL, 2267416277UL, 2194315209UL, 1360165075UL, 1018128176UL, 2841084399UL, 3028189871UL, 3631770575UL, 541021087UL, 1091467742UL, 2743780329UL, 3566538467UL, 1277066122UL, 279582475UL, 2712119598UL, +3296319359UL, 4187226385UL, 1468994750UL, 2946664285UL, 2284913307UL, 740953233UL, 3351500634UL, 1791054313UL, 3355533193UL, 610062694UL, 3089981426UL, 3469441840UL, 3225672476UL, 2223653903UL, 2593994385UL, 548784340UL, 549871569UL, 865468702UL, 1593939385UL, 645229999UL, 1412095765UL, 2814231763UL, 3619658094UL, 877462820UL, 2198765077UL, 1845119421UL, 4144145546UL, 1356681209UL, 848707034UL, 4144513299UL, 3231318896UL, 3382035479UL, +693621410UL, 2821661683UL, 4236142563UL, 680649431UL, 3290999942UL, 200856634UL, 617766412UL, 3194332974UL, 4102392657UL, 2776797278UL, 2932808060UL, 793967937UL, 2149374605UL, 3736514467UL, 3547689148UL, 3744888920UL, 98278184UL, 1497045279UL, 2945126332UL, 4285864315UL, 2791068812UL, 1939995011UL, 56752862UL, 864909862UL, 625377571UL, 2266362085UL, 1050287398UL, 925722519UL, 1008109592UL, 2819528345UL, 3573068613UL, 1915083884UL, +1536828870UL, 3225674336UL, 827428943UL, 2858523441UL, 2447266124UL, 2186287936UL, 2299756421UL, 776912458UL, 279091824UL, 1152725492UL, 1271286102UL, 3987010398UL, 3996115574UL, 839506039UL, 3052513014UL, 1036957208UL, 2597814974UL, 2328446377UL, 1961600298UL, 3695276714UL, 2395157917UL, 1141381380UL, 3025370440UL, 997698792UL, 931473445UL, 2727078785UL, 820119215UL, 3586778616UL, 1993126242UL, 4252838072UL, 1171102868UL, 2120026924UL, +65722921UL, 746724958UL, 461423533UL, 2335086228UL, 1564918930UL, 3710935369UL, 419349792UL, 3914061713UL, 1136716661UL, 770031171UL, 2062767935UL, 3373230309UL, 3582372364UL, 4100328450UL, 3352859025UL, 1262632952UL, 3140021482UL, 501370035UL, 2579000299UL, 352450195UL, 1002557127UL, 2813224858UL, 2808406559UL, 2642514897UL, 4216846311UL, 1187381982UL, 3131323304UL, 1094330039UL, 3092488663UL, 655242013UL, 1152156402UL, 3658526705UL, +3565043535UL, 3280658482UL, 2120064836UL, 3726555752UL, 97387177UL, 546586686UL, 584864345UL, 3874404446UL, 440995849UL, 1929251266UL, 95137166UL, 823950215UL, 3559119399UL, 3855477390UL, 2439885481UL, 2492213232UL, 2297040376UL, 2054191666UL, 2778642234UL, 2267416277UL, 2194315209UL, 573807317UL, 1018128176UL, 2841084399UL, 3028189871UL, 3631770575UL, 2747338726UL, 1091467742UL, 2743780329UL, 3566538467UL, 1277066122UL, 1715139924UL, +2712119598UL, 3296319359UL, 4187226385UL, 1468994750UL, 3361368810UL, 2284913307UL, 740953233UL, 3351500634UL, 1791054313UL, 4290564545UL, 610062694UL, 3089981426UL, 3469441840UL, 3225672476UL, 1010959310UL, 2593994385UL, 548784340UL, 549871569UL, 865468702UL, 1825306744UL, 645229999UL, 1412095765UL, 2814231763UL, 3619658094UL, 3792219969UL, 2198765077UL, 1845119421UL, 4144145546UL, 1356681209UL, 268197516UL, 4144513299UL, 3231318896UL, +3382035479UL, 693621410UL, 2786831464UL, 4236142563UL, 680649431UL, 3290999942UL, 200856634UL, 3822069622UL, 3194332974UL, 4102392657UL, 2776797278UL, 2932808060UL, 525501162UL, 2149374605UL, 3736514467UL, 3547689148UL, 3744888920UL, 3219948462UL, 1497045279UL, 2945126332UL, 4285864315UL, 2791068812UL, 2678467476UL, 56752862UL, 864909862UL, 625377571UL, 2266362085UL, 2258093843UL, 925722519UL, 1008109592UL, 2819528345UL, 3573068613UL, +2743241289UL, 1536828870UL, 3225674336UL, 827428943UL, 2858523441UL, 992128922UL, 2186287936UL, 2299756421UL, 776912458UL, 279091824UL, 2108721702UL, 1271286102UL, 3987010398UL, 3996115574UL, 839506039UL, 1315622698UL, 1036957208UL, 2597814974UL, 2328446377UL, 1961600298UL, 3098343478UL, 2395157917UL, 1141381380UL, 3025370440UL, 997698792UL, 1317753106UL, 2727078785UL, 820119215UL, 3586778616UL, 1993126242UL, 2295599934UL, 1171102868UL, +2120026924UL, 65722921UL, 746724958UL, 3999203443UL, 2335086228UL, 1564918930UL, 3710935369UL, 419349792UL, 1662083910UL, 1136716661UL, 770031171UL, 2062767935UL, 3373230309UL, 3271761171UL, 4100328450UL, 3352859025UL, 1262632952UL, 3140021482UL, 3981040854UL, 2579000299UL, 352450195UL, 1002557127UL, 2813224858UL, 1064251076UL, 2642514897UL, 4216846311UL, 1187381982UL, 3131323304UL, 2077640887UL, 3092488663UL, 655242013UL, 1152156402UL, +3658526705UL, 548941006UL, 3280658482UL, 2120064836UL, 3726555752UL, 97387177UL, 4112878213UL, 584864345UL, 3874404446UL, 440995849UL, 1929251266UL, 227230803UL, 823950215UL, 3559119399UL, 3855477390UL, 2439885481UL, 610498128UL, 2297040376UL, 2054191666UL, 2778642234UL, 2267416277UL, 518192832UL, 573807317UL, 1018128176UL, 2841084399UL, 3028189871UL, 2512871059UL, 2747338726UL, 1091467742UL, 2743780329UL, 3566538467UL, 386661563UL, +1715139924UL, 2712119598UL, 3296319359UL, 4187226385UL, 2508754324UL, 3361368810UL, 2284913307UL, 740953233UL, 3351500634UL, 1296305541UL, 4290564545UL, 610062694UL, 3089981426UL, 3469441840UL, 148510865UL, 1010959310UL, 2593994385UL, 548784340UL, 549871569UL, 124676809UL, 1825306744UL, 645229999UL, 1412095765UL, 2814231763UL, 2540745278UL, 3792219969UL, 2198765077UL, 1845119421UL, 4144145546UL, 3966655401UL, 268197516UL, 4144513299UL, +3231318896UL, 3382035479UL, 1674022032UL, 2786831464UL, 4236142563UL, 680649431UL, 3290999942UL, 4065303704UL, 3822069622UL, 3194332974UL, 4102392657UL, 2776797278UL, 3735376922UL, 525501162UL, 2149374605UL, 3736514467UL, 3547689148UL, 2064870756UL, 3219948462UL, 1497045279UL, 2945126332UL, 4285864315UL, 2389978045UL, 2678467476UL, 56752862UL, 864909862UL, 625377571UL, 2308006661UL, 2258093843UL, 925722519UL, 1008109592UL, 2819528345UL, +2927186231UL, 2743241289UL, 1536828870UL, 3225674336UL, 827428943UL, 1583633720UL, 992128922UL, 2186287936UL, 2299756421UL, 776912458UL, 298217241UL, 2108721702UL, 1271286102UL, 3987010398UL, 3996115574UL, 1041730366UL, 1315622698UL, 1036957208UL, 2597814974UL, 2328446377UL, 1386688725UL, 3098343478UL, 2395157917UL, 1141381380UL, 3025370440UL, 2292273773UL, 1317753106UL, 2727078785UL, 820119215UL, 3586778616UL, 206996196UL, 2295599934UL, +1171102868UL, 2120026924UL, 65722921UL, 3271158508UL, 3999203443UL, 2335086228UL, 1564918930UL, 3710935369UL, 3305544914UL, 1662083910UL, 1136716661UL, 770031171UL, 2062767935UL, 4244195826UL, 3271761171UL, 4100328450UL, 3352859025UL, 1262632952UL, 3581040310UL, 3981040854UL, 2579000299UL, 352450195UL, 1002557127UL, 1789606594UL, 1064251076UL, 2642514897UL, 4216846311UL, 1187381982UL, 1519386238UL, 2077640887UL, 3092488663UL, 655242013UL, +1152156402UL, 3732146227UL, 548941006UL, 3280658482UL, 2120064836UL, 3726555752UL, 2631398817UL, 4112878213UL, 584864345UL, 3874404446UL, 440995849UL, 3541162446UL, 227230803UL, 823950215UL, 3559119399UL, 3855477390UL, 560704260UL, 610498128UL, 2297040376UL, 2054191666UL, 2778642234UL, 1614756373UL, 518192832UL, 573807317UL, 1018128176UL, 2841084399UL, 927011949UL, 2512871059UL, 2747338726UL, 1091467742UL, 2743780329UL, 566198434UL, +386661563UL, 1715139924UL, 2712119598UL, 3296319359UL, 520529825UL, 2508754324UL, 3361368810UL, 2284913307UL, 740953233UL, 2414584088UL, 1296305541UL, 4290564545UL, 610062694UL, 3089981426UL, 120496553UL, 148510865UL, 1010959310UL, 2593994385UL, 548784340UL, 3206664898UL, 124676809UL, 1825306744UL, 645229999UL, 1412095765UL, 821445348UL, 2540745278UL, 3792219969UL, 2198765077UL, 1845119421UL, 3434574619UL, 3966655401UL, 268197516UL, +4144513299UL, 3231318896UL, 3856935910UL, 1674022032UL, 2786831464UL, 4236142563UL, 680649431UL, 3331403374UL, 4065303704UL, 3822069622UL, 3194332974UL, 4102392657UL, 2194924932UL, 3735376922UL, 525501162UL, 2149374605UL, 3736514467UL, 2041458481UL, 2064870756UL, 3219948462UL, 1497045279UL, 2945126332UL, 3515890044UL, 2389978045UL, 2678467476UL, 56752862UL, 864909862UL, 1009125580UL, 2308006661UL, 2258093843UL, 925722519UL, 1008109592UL, +4166824654UL, 3399481064UL, 3848337172UL, 841675162UL, 2388734555UL, 3373081217UL, 1627287001UL, 1958651480UL, 1771323855UL, 2126620758UL, 3879967947UL, 1885140905UL, 806066092UL, 2168342987UL, 3778265278UL, 943582962UL, 3895768303UL, 337928214UL, 3677576461UL, 1884088203UL, 2629440785UL, 2357038005UL, 2362450760UL, 2080907681UL, 2644383608UL, 4153875040UL, 794977307UL, 2675637463UL, 2655426076UL, 3481699657UL, 2262369403UL, 1038608931UL, +4210267953UL, 2376694315UL, 2661705117UL, 3994997027UL, 2994346963UL, 4074343171UL, 833108024UL, 3562046155UL, 1113632369UL, 3087093963UL, 2115712884UL, 2778607581UL, 2702162487UL, 1347693590UL, 4271098334UL, 2746712394UL, 1629623802UL, 1932973152UL, 3077074108UL, 1338011180UL, 848785806UL, 1834095770UL, 4017238UL, 2661097500UL, 2935787683UL, 1214195119UL, 3099491937UL, 3868451396UL, 1063740008UL, 2768962809UL, 2554721244UL, 695479209UL, +2634119800UL, 1379839034UL, 2653377927UL, 921934002UL, 3586936843UL, 3035369677UL, 769283110UL, 2417935220UL, 3330084607UL, 2020519519UL, 2546176786UL, 1523223165UL, 3654065096UL, 1835059231UL, 2776263618UL, 3837173427UL, 3236141295UL, 1184415634UL, 157448610UL, 2474336972UL, 3313035876UL, 309195150UL, 2288837115UL, 548743307UL, 528342914UL, 1527562212UL, 554918643UL, 2739291918UL, 2630873849UL, 155419923UL, 226845272UL, 1343735931UL, +3106346884UL, 4177975386UL, 2515480406UL, 2049734808UL, 2802879609UL, 1805234272UL, 317920918UL, 745796250UL, 3816657414UL, 4198378080UL, 3057334192UL, 503016924UL, 2027816790UL, 579332504UL, 3037999504UL, 2857298788UL, 911046668UL, 1170775701UL, 2369720UL, 3364839261UL, 1462383461UL, 181600856UL, 1315241696UL, 2861043792UL, 3549404088UL, 3974245218UL, 4141518566UL, 1195336199UL, 2291064152UL, 3287203016UL, 3867432937UL, 2593766219UL, +2114273192UL, 3716228986UL, 410286941UL, 2497285113UL, 1338500439UL, 3748757692UL, 2315519304UL, 545570554UL, 1519868916UL, 679216320UL, 3264840479UL, 4083041163UL, 261878334UL, 2370312122UL, 1408058272UL, 1287635274UL, 3433241543UL, 3923613754UL, 2423502603UL, 3948993135UL, 1418484161UL, 230113502UL, 1766447938UL, 3101286974UL, 917358979UL, 2836128279UL, 2859079881UL, 3162688352UL, 2158281644UL, 154509481UL, 2409785274UL, 3096379437UL, +}, +{ +2456954827UL, 2895978734UL, 1621803157UL, 230462381UL, 4046364119UL, 716597790UL, 2031510641UL, 2208319977UL, 1107910846UL, 3379950723UL, 3628284249UL, 1393263274UL, 3842378742UL, 768116962UL, 1782906996UL, 3022943801UL, 510040722UL, 2180373447UL, 1294989632UL, 1659724107UL, 953774117UL, 500296619UL, 2269873184UL, 3215368465UL, 3933601613UL, 2401810535UL, 3568992417UL, 617528376UL, 2437412983UL, 2921242388UL, 2311040363UL, 3695847323UL, +1609309841UL, 3222455492UL, 1108155620UL, 397599239UL, 3344183623UL, 1159383441UL, 81554651UL, 4223302962UL, 2812031899UL, 2613176831UL, 2967803832UL, 3560382993UL, 670173062UL, 2361031672UL, 1745444335UL, 2067906079UL, 3019908371UL, 2662226130UL, 2962440272UL, 3053411095UL, 92212044UL, 1041941495UL, 4116546365UL, 2094375399UL, 3992554702UL, 216246182UL, 2271736480UL, 1006434362UL, 4104644208UL, 2543874803UL, 1310440964UL, 1956002873UL, +1485192936UL, 3027546418UL, 448786402UL, 749040342UL, 406538664UL, 2522826782UL, 3681979470UL, 3941253886UL, 672615054UL, 3655479714UL, 392178376UL, 1619518340UL, 1639889010UL, 666186812UL, 4094569743UL, 2947917117UL, 3308938954UL, 1572886498UL, 1065510431UL, 2158389109UL, 1583642689UL, 1763046973UL, 3578310229UL, 4106948216UL, 58659757UL, 691952777UL, 3394715763UL, 3333944006UL, 3020203798UL, 3598064251UL, 3151881711UL, 2071056894UL, +1263790655UL, 4188233031UL, 4230429856UL, 3088041549UL, 3031631424UL, 3912597408UL, 1768734847UL, 1975027092UL, 3976493733UL, 2376551740UL, 1137628506UL, 535767974UL, 3105256806UL, 15427398UL, 2472341690UL, 685997424UL, 1374644561UL, 2446214061UL, 2844847931UL, 1058649390UL, 1581230869UL, 1725846082UL, 3062699842UL, 1116400547UL, 1095426642UL, 2940190462UL, 4276038488UL, 2091764667UL, 4074059985UL, 98163536UL, 4157153745UL, 32476821UL, +2354284775UL, 752663757UL, 2987293678UL, 1119786914UL, 3019442904UL, 111185876UL, 3569592548UL, 3991775183UL, 3161418733UL, 3973354577UL, 1650454973UL, 426129509UL, 3659038742UL, 1387393667UL, 543731583UL, 781586523UL, 917315276UL, 832142534UL, 3911092159UL, 325250500UL, 2735441676UL, 163564958UL, 1002098855UL, 337936437UL, 1869530240UL, 2233969733UL, 4108076124UL, 3255026725UL, 4072134049UL, 2083771067UL, 1559589006UL, 1845121907UL, +466036013UL, 2456954827UL, 2895978734UL, 1621803157UL, 230462381UL, 2022150409UL, 716597790UL, 2031510641UL, 2208319977UL, 1107910846UL, 1838834877UL, 3628284249UL, 1393263274UL, 3842378742UL, 768116962UL, 2303040715UL, 3022943801UL, 510040722UL, 2180373447UL, 1294989632UL, 3074858415UL, 953774117UL, 500296619UL, 2269873184UL, 3215368465UL, 3531413908UL, 2401810535UL, 3568992417UL, 617528376UL, 2437412983UL, 1730632320UL, 2311040363UL, +3695847323UL, 1609309841UL, 3222455492UL, 3189359980UL, 397599239UL, 3344183623UL, 1159383441UL, 81554651UL, 1933731121UL, 2812031899UL, 2613176831UL, 2967803832UL, 3560382993UL, 758113139UL, 2361031672UL, 1745444335UL, 2067906079UL, 3019908371UL, 3537991495UL, 2962440272UL, 3053411095UL, 92212044UL, 1041941495UL, 2653519981UL, 2094375399UL, 3992554702UL, 216246182UL, 2271736480UL, 695350220UL, 4104644208UL, 2543874803UL, 1310440964UL, +1956002873UL, 3373048130UL, 3027546418UL, 448786402UL, 749040342UL, 406538664UL, 4081844472UL, 3681979470UL, 3941253886UL, 672615054UL, 3655479714UL, 197563239UL, 1619518340UL, 1639889010UL, 666186812UL, 4094569743UL, 2518320719UL, 3308938954UL, 1572886498UL, 1065510431UL, 2158389109UL, 3320483696UL, 1763046973UL, 3578310229UL, 4106948216UL, 58659757UL, 3412172826UL, 3394715763UL, 3333944006UL, 3020203798UL, 3598064251UL, 1693717788UL, +2071056894UL, 1263790655UL, 4188233031UL, 4230429856UL, 2564478937UL, 3031631424UL, 3912597408UL, 1768734847UL, 1975027092UL, 3546175061UL, 2376551740UL, 1137628506UL, 535767974UL, 3105256806UL, 450760279UL, 2472341690UL, 685997424UL, 1374644561UL, 2446214061UL, 1873063065UL, 1058649390UL, 1581230869UL, 1725846082UL, 3062699842UL, 813496775UL, 1095426642UL, 2940190462UL, 4276038488UL, 2091764667UL, 3857233976UL, 98163536UL, 4157153745UL, +32476821UL, 2354284775UL, 3115605568UL, 2987293678UL, 1119786914UL, 3019442904UL, 111185876UL, 996447434UL, 3991775183UL, 3161418733UL, 3973354577UL, 1650454973UL, 1089784804UL, 3659038742UL, 1387393667UL, 543731583UL, 781586523UL, 2711412312UL, 832142534UL, 3911092159UL, 325250500UL, 2735441676UL, 3563501139UL, 1002098855UL, 337936437UL, 1869530240UL, 2233969733UL, 1156926454UL, 3255026725UL, 4072134049UL, 2083771067UL, 1559589006UL, +3832870112UL, 466036013UL, 2456954827UL, 2895978734UL, 1621803157UL, 2340808859UL, 2022150409UL, 716597790UL, 2031510641UL, 2208319977UL, 1823993818UL, 1838834877UL, 3628284249UL, 1393263274UL, 3842378742UL, 2489609764UL, 2303040715UL, 3022943801UL, 510040722UL, 2180373447UL, 4204167795UL, 3074858415UL, 953774117UL, 500296619UL, 2269873184UL, 2320314628UL, 3531413908UL, 2401810535UL, 3568992417UL, 617528376UL, 712451843UL, 1730632320UL, +2311040363UL, 3695847323UL, 1609309841UL, 3224192365UL, 3189359980UL, 397599239UL, 3344183623UL, 1159383441UL, 758272390UL, 1933731121UL, 2812031899UL, 2613176831UL, 2967803832UL, 3986798661UL, 758113139UL, 2361031672UL, 1745444335UL, 2067906079UL, 3814344052UL, 3537991495UL, 2962440272UL, 3053411095UL, 92212044UL, 817573506UL, 2653519981UL, 2094375399UL, 3992554702UL, 216246182UL, 2456924809UL, 695350220UL, 4104644208UL, 2543874803UL, +1310440964UL, 1151286621UL, 3373048130UL, 3027546418UL, 448786402UL, 749040342UL, 637572176UL, 4081844472UL, 3681979470UL, 3941253886UL, 672615054UL, 3038758846UL, 197563239UL, 1619518340UL, 1639889010UL, 666186812UL, 4254608071UL, 2518320719UL, 3308938954UL, 1572886498UL, 1065510431UL, 3100620860UL, 3320483696UL, 1763046973UL, 3578310229UL, 4106948216UL, 403923766UL, 3412172826UL, 3394715763UL, 3333944006UL, 3020203798UL, 1859724785UL, +1693717788UL, 2071056894UL, 1263790655UL, 4188233031UL, 2908736862UL, 2564478937UL, 3031631424UL, 3912597408UL, 1768734847UL, 966714666UL, 3546175061UL, 2376551740UL, 1137628506UL, 535767974UL, 1561255376UL, 450760279UL, 2472341690UL, 685997424UL, 1374644561UL, 3122124160UL, 1873063065UL, 1058649390UL, 1581230869UL, 1725846082UL, 3791666219UL, 813496775UL, 1095426642UL, 2940190462UL, 4276038488UL, 2802023399UL, 3857233976UL, 98163536UL, +4157153745UL, 32476821UL, 1640659450UL, 3115605568UL, 2987293678UL, 1119786914UL, 3019442904UL, 4278091706UL, 996447434UL, 3991775183UL, 3161418733UL, 3973354577UL, 3398421232UL, 1089784804UL, 3659038742UL, 1387393667UL, 543731583UL, 1694361696UL, 2711412312UL, 832142534UL, 3911092159UL, 325250500UL, 166035542UL, 3563501139UL, 1002098855UL, 337936437UL, 1869530240UL, 1306446339UL, 1156926454UL, 3255026725UL, 4072134049UL, 2083771067UL, +61899937UL, 3832870112UL, 466036013UL, 2456954827UL, 2895978734UL, 767569205UL, 2340808859UL, 2022150409UL, 716597790UL, 2031510641UL, 1690074863UL, 1823993818UL, 1838834877UL, 3628284249UL, 1393263274UL, 546011580UL, 2489609764UL, 2303040715UL, 3022943801UL, 510040722UL, 825252468UL, 4204167795UL, 3074858415UL, 953774117UL, 500296619UL, 1952242515UL, 2320314628UL, 3531413908UL, 2401810535UL, 3568992417UL, 4254767597UL, 712451843UL, +1730632320UL, 2311040363UL, 3695847323UL, 2393864919UL, 3224192365UL, 3189359980UL, 397599239UL, 3344183623UL, 1759399025UL, 758272390UL, 1933731121UL, 2812031899UL, 2613176831UL, 2809078783UL, 3986798661UL, 758113139UL, 2361031672UL, 1745444335UL, 1223235915UL, 3814344052UL, 3537991495UL, 2962440272UL, 3053411095UL, 3711100000UL, 817573506UL, 2653519981UL, 2094375399UL, 3992554702UL, 2987412942UL, 2456924809UL, 695350220UL, 4104644208UL, +2543874803UL, 2746231792UL, 1151286621UL, 3373048130UL, 3027546418UL, 448786402UL, 801157439UL, 637572176UL, 4081844472UL, 3681979470UL, 3941253886UL, 975875511UL, 3038758846UL, 197563239UL, 1619518340UL, 1639889010UL, 3137491209UL, 4254608071UL, 2518320719UL, 3308938954UL, 1572886498UL, 631178204UL, 3100620860UL, 3320483696UL, 1763046973UL, 3578310229UL, 3338308117UL, 403923766UL, 3412172826UL, 3394715763UL, 3333944006UL, 37220448UL, +1859724785UL, 1693717788UL, 2071056894UL, 1263790655UL, 228419012UL, 2908736862UL, 2564478937UL, 3031631424UL, 3912597408UL, 3862306448UL, 966714666UL, 3546175061UL, 2376551740UL, 1137628506UL, 1114919961UL, 1561255376UL, 450760279UL, 2472341690UL, 685997424UL, 2456661198UL, 3122124160UL, 1873063065UL, 1058649390UL, 1581230869UL, 2996925693UL, 3791666219UL, 813496775UL, 1095426642UL, 2940190462UL, 1642720015UL, 2802023399UL, 3857233976UL, +98163536UL, 4157153745UL, 1578965959UL, 1640659450UL, 3115605568UL, 2987293678UL, 1119786914UL, 1748408698UL, 4278091706UL, 996447434UL, 3991775183UL, 3161418733UL, 4123935663UL, 3398421232UL, 1089784804UL, 3659038742UL, 1387393667UL, 770706529UL, 1694361696UL, 2711412312UL, 832142534UL, 3911092159UL, 335435644UL, 166035542UL, 3563501139UL, 1002098855UL, 337936437UL, 2961857543UL, 1306446339UL, 1156926454UL, 3255026725UL, 4072134049UL, +1717290230UL, 1323146393UL, 2156340433UL, 2065716367UL, 2597996276UL, 3402032152UL, 779574284UL, 2369501052UL, 2316224856UL, 2720986136UL, 3016786025UL, 2916554213UL, 3476215746UL, 1132150235UL, 2619889920UL, 1279664685UL, 679206534UL, 4014394509UL, 3624968312UL, 1480455625UL, 725015758UL, 707677352UL, 3764409715UL, 1938306480UL, 2171474419UL, 3379664161UL, 684262379UL, 2142433069UL, 43407198UL, 1398850259UL, 2059135843UL, 240266749UL, +3788738212UL, 118513026UL, 820245055UL, 1152812311UL, 1398373423UL, 3188977726UL, 872620936UL, 2084649448UL, 807979538UL, 819501992UL, 615447916UL, 3393148006UL, 1765623964UL, 2514767257UL, 3711360450UL, 2941886951UL, 3739102698UL, 4022385962UL, 2306039667UL, 3321267290UL, 2179238310UL, 3192652502UL, 2118792870UL, 2571142127UL, 761776508UL, 873010906UL, 1609627751UL, 4260021041UL, 1747852747UL, 960771906UL, 2647903291UL, 77475681UL, +1282566533UL, 4022186916UL, 2681128032UL, 1554542462UL, 3181701944UL, 1168469070UL, 74236514UL, 2806532232UL, 3981048887UL, 1888842784UL, 2888607878UL, 1763028723UL, 701886756UL, 4124077776UL, 3738147505UL, 4066663138UL, 3816449863UL, 921061872UL, 2956972182UL, 3159072916UL, 3337110888UL, 3552795700UL, 2281281091UL, 671098116UL, 1282750020UL, 1008618197UL, 2363767765UL, 1812013295UL, 1854965999UL, 131027176UL, 666394000UL, 2062217824UL, +1763334218UL, 551118598UL, 1277961175UL, 3523893635UL, 1855881150UL, 2067903393UL, 2590963277UL, 3214508854UL, 1604911832UL, 1906690475UL, 389417851UL, 2711591984UL, 427723436UL, 1039703630UL, 639602991UL, 444779318UL, 2722002973UL, 3927985419UL, 1297446054UL, 298277450UL, 656022205UL, 134304205UL, 3847728042UL, 3339100423UL, 407022043UL, 1282443442UL, 3173884578UL, 1417906094UL, 2364502739UL, 2158353472UL, 2402775649UL, 1807696073UL, +2837535198UL, 705887737UL, 2129202688UL, 3853676283UL, 1388329793UL, 875153687UL, 2367465660UL, 2763058233UL, 2500632304UL, 2196920062UL, 491306883UL, 277753357UL, 3868415380UL, 324867643UL, 3654474955UL, 2569410351UL, 1128175417UL, 1853572398UL, 1133201743UL, 662085935UL, 2263514999UL, 3077768113UL, 3309730620UL, 3602394176UL, 3747458070UL, 188422725UL, 813812450UL, 1502276531UL, 3909138356UL, 2766044599UL, 3760928321UL, 573108836UL, +}, +{ +1240264181UL, 1624064648UL, 3039823158UL, 2013985253UL, 1473300299UL, 2762062141UL, 3273470484UL, 1889745445UL, 2516996174UL, 3190376531UL, 996186898UL, 3893981177UL, 1268272590UL, 3226095713UL, 153038465UL, 2184871198UL, 3224094011UL, 2526518401UL, 1738960059UL, 1187560605UL, 4194384320UL, 2837011297UL, 3638232350UL, 367907454UL, 574009898UL, 1948901330UL, 60430044UL, 1569835584UL, 3160561697UL, 321792583UL, 3179087993UL, 1936928378UL, +412346905UL, 4020812489UL, 2603392174UL, 3499496781UL, 1499441233UL, 1062415256UL, 1347130973UL, 1823246794UL, 3411391800UL, 4253618056UL, 1507733072UL, 1605629518UL, 1503312494UL, 8035741UL, 4038904206UL, 2408545792UL, 969543501UL, 954847087UL, 956553276UL, 3096241999UL, 2566194741UL, 84678421UL, 3882676079UL, 2483934330UL, 3673546814UL, 2461422466UL, 620385599UL, 898325340UL, 2145883445UL, 3653728520UL, 3744850294UL, 2441124935UL, +904854507UL, 3216304963UL, 2373268568UL, 2354362010UL, 1245572787UL, 2894748714UL, 2889136188UL, 3716879184UL, 1766013949UL, 1305712667UL, 1227530310UL, 4051221847UL, 925440190UL, 1508686692UL, 1104647879UL, 1496666754UL, 3300504219UL, 127787091UL, 1528394637UL, 1739640835UL, 2475711496UL, 3792639955UL, 1450796299UL, 1634217367UL, 3289785095UL, 2149949989UL, 811612039UL, 1750779366UL, 1157474938UL, 514004414UL, 2264909096UL, 3730411668UL, +3308882513UL, 1834571716UL, 378288317UL, 3800023701UL, 763396788UL, 1597708317UL, 983953861UL, 94566098UL, 1548157668UL, 3755427117UL, 1646496505UL, 3748241449UL, 3439805936UL, 2321644449UL, 3805706235UL, 4220083901UL, 1069923823UL, 2984004391UL, 3824885361UL, 1967477766UL, 218978249UL, 348955028UL, 3188651823UL, 1008338679UL, 2331688720UL, 1562995454UL, 1837179689UL, 3033872688UL, 3007293665UL, 1759522678UL, 319754369UL, 2763991927UL, +1983149629UL, 1353197132UL, 1489552694UL, 2990539062UL, 3244609108UL, 669775440UL, 886127995UL, 1636688014UL, 1251222487UL, 2351883247UL, 3261502906UL, 3139614137UL, 3203790139UL, 2777648095UL, 3693390579UL, 3540514982UL, 3200191735UL, 750726325UL, 1014534145UL, 2091792357UL, 3931704474UL, 1383925867UL, 2038878506UL, 2247134268UL, 2840132188UL, 61137652UL, 1162051299UL, 399657268UL, 1682018695UL, 2640231287UL, 1733438115UL, 3611823506UL, +2077891037UL, 1240264181UL, 1624064648UL, 3039823158UL, 2013985253UL, 4188888201UL, 2762062141UL, 3273470484UL, 1889745445UL, 2516996174UL, 2621448256UL, 996186898UL, 3893981177UL, 1268272590UL, 3226095713UL, 952803645UL, 2184871198UL, 3224094011UL, 2526518401UL, 1738960059UL, 738368399UL, 4194384320UL, 2837011297UL, 3638232350UL, 367907454UL, 3772812520UL, 1948901330UL, 60430044UL, 1569835584UL, 3160561697UL, 1655622513UL, 3179087993UL, +1936928378UL, 412346905UL, 4020812489UL, 3754224996UL, 3499496781UL, 1499441233UL, 1062415256UL, 1347130973UL, 1167581269UL, 3411391800UL, 4253618056UL, 1507733072UL, 1605629518UL, 1867781671UL, 8035741UL, 4038904206UL, 2408545792UL, 969543501UL, 3189323143UL, 956553276UL, 3096241999UL, 2566194741UL, 84678421UL, 996778900UL, 2483934330UL, 3673546814UL, 2461422466UL, 620385599UL, 3129088144UL, 2145883445UL, 3653728520UL, 3744850294UL, +2441124935UL, 4230756652UL, 3216304963UL, 2373268568UL, 2354362010UL, 1245572787UL, 1600525238UL, 2889136188UL, 3716879184UL, 1766013949UL, 1305712667UL, 59908073UL, 4051221847UL, 925440190UL, 1508686692UL, 1104647879UL, 2931214731UL, 3300504219UL, 127787091UL, 1528394637UL, 1739640835UL, 62963469UL, 3792639955UL, 1450796299UL, 1634217367UL, 3289785095UL, 667987389UL, 811612039UL, 1750779366UL, 1157474938UL, 514004414UL, 2737193098UL, +3730411668UL, 3308882513UL, 1834571716UL, 378288317UL, 3452657469UL, 763396788UL, 1597708317UL, 983953861UL, 94566098UL, 2752347916UL, 3755427117UL, 1646496505UL, 3748241449UL, 3439805936UL, 4222757079UL, 3805706235UL, 4220083901UL, 1069923823UL, 2984004391UL, 3887639520UL, 1967477766UL, 218978249UL, 348955028UL, 3188651823UL, 4168456281UL, 2331688720UL, 1562995454UL, 1837179689UL, 3033872688UL, 814903833UL, 1759522678UL, 319754369UL, +2763991927UL, 1983149629UL, 3818528075UL, 1489552694UL, 2990539062UL, 3244609108UL, 669775440UL, 1004789460UL, 1636688014UL, 1251222487UL, 2351883247UL, 3261502906UL, 4143823654UL, 3203790139UL, 2777648095UL, 3693390579UL, 3540514982UL, 153421222UL, 750726325UL, 1014534145UL, 2091792357UL, 3931704474UL, 4018591985UL, 2038878506UL, 2247134268UL, 2840132188UL, 61137652UL, 1455028838UL, 399657268UL, 1682018695UL, 2640231287UL, 1733438115UL, +1853142849UL, 2077891037UL, 1240264181UL, 1624064648UL, 3039823158UL, 2235369076UL, 4188888201UL, 2762062141UL, 3273470484UL, 1889745445UL, 3627876603UL, 2621448256UL, 996186898UL, 3893981177UL, 1268272590UL, 2687846008UL, 952803645UL, 2184871198UL, 3224094011UL, 2526518401UL, 861379413UL, 738368399UL, 4194384320UL, 2837011297UL, 3638232350UL, 3753321702UL, 3772812520UL, 1948901330UL, 60430044UL, 1569835584UL, 581506474UL, 1655622513UL, +3179087993UL, 1936928378UL, 412346905UL, 2710043900UL, 3754224996UL, 3499496781UL, 1499441233UL, 1062415256UL, 2704745463UL, 1167581269UL, 3411391800UL, 4253618056UL, 1507733072UL, 4215403465UL, 1867781671UL, 8035741UL, 4038904206UL, 2408545792UL, 3252742933UL, 3189323143UL, 956553276UL, 3096241999UL, 2566194741UL, 1865159158UL, 996778900UL, 2483934330UL, 3673546814UL, 2461422466UL, 3123557619UL, 3129088144UL, 2145883445UL, 3653728520UL, +3744850294UL, 21840044UL, 4230756652UL, 3216304963UL, 2373268568UL, 2354362010UL, 1934462999UL, 1600525238UL, 2889136188UL, 3716879184UL, 1766013949UL, 2822794708UL, 59908073UL, 4051221847UL, 925440190UL, 1508686692UL, 2938291976UL, 2931214731UL, 3300504219UL, 127787091UL, 1528394637UL, 1914923136UL, 62963469UL, 3792639955UL, 1450796299UL, 1634217367UL, 257322213UL, 667987389UL, 811612039UL, 1750779366UL, 1157474938UL, 3083649350UL, +2737193098UL, 3730411668UL, 3308882513UL, 1834571716UL, 2778729422UL, 3452657469UL, 763396788UL, 1597708317UL, 983953861UL, 1337754195UL, 2752347916UL, 3755427117UL, 1646496505UL, 3748241449UL, 3942745717UL, 4222757079UL, 3805706235UL, 4220083901UL, 1069923823UL, 1314928500UL, 3887639520UL, 1967477766UL, 218978249UL, 348955028UL, 3425797638UL, 4168456281UL, 2331688720UL, 1562995454UL, 1837179689UL, 1814071277UL, 814903833UL, 1759522678UL, +319754369UL, 2763991927UL, 1079270448UL, 3818528075UL, 1489552694UL, 2990539062UL, 3244609108UL, 2944573315UL, 1004789460UL, 1636688014UL, 1251222487UL, 2351883247UL, 1356892540UL, 4143823654UL, 3203790139UL, 2777648095UL, 3693390579UL, 983917956UL, 153421222UL, 750726325UL, 1014534145UL, 2091792357UL, 296882400UL, 4018591985UL, 2038878506UL, 2247134268UL, 2840132188UL, 3508266160UL, 1455028838UL, 399657268UL, 1682018695UL, 2640231287UL, +2480988791UL, 1853142849UL, 2077891037UL, 1240264181UL, 1624064648UL, 1741738969UL, 2235369076UL, 4188888201UL, 2762062141UL, 3273470484UL, 3569498651UL, 3627876603UL, 2621448256UL, 996186898UL, 3893981177UL, 4026533880UL, 2687846008UL, 952803645UL, 2184871198UL, 3224094011UL, 1290870737UL, 861379413UL, 738368399UL, 4194384320UL, 2837011297UL, 3833099205UL, 3753321702UL, 3772812520UL, 1948901330UL, 60430044UL, 4131290878UL, 581506474UL, +1655622513UL, 3179087993UL, 1936928378UL, 2379952582UL, 2710043900UL, 3754224996UL, 3499496781UL, 1499441233UL, 593780490UL, 2704745463UL, 1167581269UL, 3411391800UL, 4253618056UL, 621889762UL, 4215403465UL, 1867781671UL, 8035741UL, 4038904206UL, 2045289976UL, 3252742933UL, 3189323143UL, 956553276UL, 3096241999UL, 2188329018UL, 1865159158UL, 996778900UL, 2483934330UL, 3673546814UL, 2717648418UL, 3123557619UL, 3129088144UL, 2145883445UL, +3653728520UL, 1528077261UL, 21840044UL, 4230756652UL, 3216304963UL, 2373268568UL, 803158556UL, 1934462999UL, 1600525238UL, 2889136188UL, 3716879184UL, 161827512UL, 2822794708UL, 59908073UL, 4051221847UL, 925440190UL, 3599942370UL, 2938291976UL, 2931214731UL, 3300504219UL, 127787091UL, 4082579845UL, 1914923136UL, 62963469UL, 3792639955UL, 1450796299UL, 2035446714UL, 257322213UL, 667987389UL, 811612039UL, 1750779366UL, 2344204796UL, +3083649350UL, 2737193098UL, 3730411668UL, 3308882513UL, 2765191583UL, 2778729422UL, 3452657469UL, 763396788UL, 1597708317UL, 1854746879UL, 1337754195UL, 2752347916UL, 3755427117UL, 1646496505UL, 4020292301UL, 3942745717UL, 4222757079UL, 3805706235UL, 4220083901UL, 1408262601UL, 1314928500UL, 3887639520UL, 1967477766UL, 218978249UL, 2173193841UL, 3425797638UL, 4168456281UL, 2331688720UL, 1562995454UL, 2835294077UL, 1814071277UL, 814903833UL, +1759522678UL, 319754369UL, 4048528178UL, 1079270448UL, 3818528075UL, 1489552694UL, 2990539062UL, 787253600UL, 2944573315UL, 1004789460UL, 1636688014UL, 1251222487UL, 3584515216UL, 1356892540UL, 4143823654UL, 3203790139UL, 2777648095UL, 1681621541UL, 983917956UL, 153421222UL, 750726325UL, 1014534145UL, 3951869055UL, 296882400UL, 4018591985UL, 2038878506UL, 2247134268UL, 1990726826UL, 3508266160UL, 1455028838UL, 399657268UL, 1682018695UL, +3360119279UL, 3151120565UL, 3011208718UL, 3694535943UL, 104562665UL, 2827623271UL, 249712003UL, 3413221355UL, 2347164236UL, 3227498378UL, 1805068659UL, 2118219686UL, 1568133029UL, 902801951UL, 175637375UL, 3812819970UL, 2162769758UL, 3845613089UL, 1795179477UL, 171494391UL, 3765826349UL, 1725798906UL, 345463508UL, 2481043227UL, 226569380UL, 3250095421UL, 1085199388UL, 3107594542UL, 4011388155UL, 1092611190UL, 3239339214UL, 4211849464UL, +4109911546UL, 81212018UL, 3691937144UL, 2477407396UL, 3320520455UL, 3070067913UL, 3808621884UL, 252917069UL, 3394860294UL, 1092442235UL, 2876536384UL, 1684120191UL, 431096075UL, 1701716708UL, 639881684UL, 3066183997UL, 3660504927UL, 2047274UL, 3424756424UL, 760932520UL, 2457976057UL, 1705265011UL, 2691137533UL, 3684307557UL, 3532744498UL, 2319162513UL, 1015534908UL, 1907173398UL, 2820698743UL, 1264455116UL, 2323788906UL, 3062240844UL, +1878550513UL, 1717353426UL, 1805673248UL, 62425157UL, 3662381032UL, 1964107209UL, 2559831960UL, 2117844804UL, 1228721677UL, 4240498866UL, 3212920337UL, 2338600301UL, 931588693UL, 2379606585UL, 3643222352UL, 4154645082UL, 1115847065UL, 2079427925UL, 2256943798UL, 2795103368UL, 2688136486UL, 1458062143UL, 1767222217UL, 635424385UL, 284062050UL, 1547163554UL, 3380046528UL, 1145758046UL, 3935976713UL, 4017430175UL, 3863367362UL, 3041367424UL, +303263160UL, 1465965696UL, 3757919837UL, 3083072836UL, 4024514094UL, 1381331179UL, 2393446325UL, 3256476469UL, 4066482738UL, 3437941107UL, 1051266504UL, 921764078UL, 2933305619UL, 1358097211UL, 4100978724UL, 2709958834UL, 574590507UL, 961767386UL, 21100886UL, 753746372UL, 4072632446UL, 733729367UL, 3060214669UL, 289165105UL, 426065754UL, 2036100240UL, 2172365757UL, 502856627UL, 84490194UL, 2630806596UL, 1206161269UL, 1009438449UL, +569581317UL, 1836947000UL, 3125379675UL, 1756936428UL, 3772694822UL, 3670337911UL, 3020603818UL, 2376224883UL, 2539951453UL, 2053395002UL, 3525193914UL, 1991480838UL, 3786481083UL, 873873707UL, 1693894743UL, 2450223985UL, 754878026UL, 1943356492UL, 401524329UL, 759931885UL, 611231307UL, 147950334UL, 599693701UL, 3358729722UL, 3649058074UL, 906423787UL, 1333804225UL, 875187278UL, 1115838692UL, 2476325972UL, 3307226674UL, 3539078918UL, +}, + +}; +#endif + +#ifdef CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS +#undef CURAND_XORWOW_PRECALCULATED_DEVICE_QUALIFIERS +#endif + +#ifdef CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS +#undef CURAND_XORWOW_PRECALCULATED_HOST_QUALIFIERS +#endif + +#endif // CURAND_XORWOW_PRECALCULATED_H_ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_uniform.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_uniform.h new file mode 100644 index 0000000000000000000000000000000000000000..7a4af8afa328c186d9ea33a8c8226e19aba4793e --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/include/curand_uniform.h @@ -0,0 +1,498 @@ + + /* Copyright 2010-2018 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * The source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * The Licensed Deliverables contained herein are PROPRIETARY and + * CONFIDENTIAL to NVIDIA and are being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. THEY ARE + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + + +#if !defined(CURAND_UNIFORM_H_) +#define CURAND_UNIFORM_H_ + +/** + * \defgroup DEVICE Device API + * + * @{ + */ + +#ifndef __CUDACC_RTC__ +#include +#endif // __CUDACC_RTC__ + +#include "curand_mrg32k3a.h" +#include "curand_mtgp32_kernel.h" +#include "curand_philox4x32_x.h" + + +QUALIFIERS float _curand_uniform(unsigned int x) +{ + return x * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); +} + +QUALIFIERS float4 _curand_uniform4(uint4 x) +{ + float4 y; + y.x = x.x * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + y.y = x.y * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + y.z = x.z * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + y.w = x.w * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); + return y; +} + +QUALIFIERS float _curand_uniform(unsigned long long x) +{ + unsigned int t; + t = (unsigned int)(x >> 32); + return t * CURAND_2POW32_INV + (CURAND_2POW32_INV/2.0f); +} + +QUALIFIERS double _curand_uniform_double(unsigned int x) +{ + return x * CURAND_2POW32_INV_DOUBLE + CURAND_2POW32_INV_DOUBLE; +} + +QUALIFIERS double _curand_uniform_double(unsigned long long x) +{ + return (x >> 11) * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/2.0); +} + +QUALIFIERS double _curand_uniform_double_hq(unsigned int x, unsigned int y) +{ + unsigned long long z = (unsigned long long)x ^ + ((unsigned long long)y << (53 - 32)); + return z * CURAND_2POW53_INV_DOUBLE + (CURAND_2POW53_INV_DOUBLE/2.0); +} + +QUALIFIERS float curand_uniform(curandStateTest_t *state) +{ + return _curand_uniform(curand(state)); +} + +QUALIFIERS double curand_uniform_double(curandStateTest_t *state) +{ + return _curand_uniform_double(curand(state)); +} + +/** + * \brief Return a uniformly distributed float from an XORWOW generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the XORWOW generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation may use any number of calls to \p curand() to + * get enough random bits to create the return value. The current + * implementation uses one call. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateXORWOW_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from an XORWOW generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the XORWOW generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * The implementation may use any number of calls to \p curand() to + * get enough random bits to create the return value. The current + * implementation uses exactly two calls. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateXORWOW_t *state) +{ + unsigned int x, y; + x = curand(state); + y = curand(state); + return _curand_uniform_double_hq(x, y); +} +/** + * \brief Return a uniformly distributed float from an MRG32k3a generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the MRG32k3a generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation returns up to 23 bits of mantissa, with the minimum + * return value \f$ 2^{-32} \f$ + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateMRG32k3a_t *state) +{ + return ((float)(curand_MRG32k3a(state)*MRG32K3A_NORM)); +} + +/** + * \brief Return a uniformly distributed double from an MRG32k3a generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the MRG32k3a generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * Note the implementation returns at most 32 random bits of mantissa as + * outlined in the seminal paper by L'Ecuyer. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateMRG32k3a_t *state) +{ + return curand_MRG32k3a(state)*MRG32K3A_NORM; +} + + + +/** + * \brief Return a uniformly distributed tuple of 2 doubles from an Philox4_32_10 generator. + * + * Return a uniformly distributed 2 doubles (double4) between \p 0.0 and \p 1.0 + * from the Philox4_32_10 generator in \p state, increment position of generator by 4. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * \param state - Pointer to state to update + * + * \return 2 uniformly distributed doubles between \p 0.0 and \p 1.0 + */ + +QUALIFIERS double2 curand_uniform2_double(curandStatePhilox4_32_10_t *state) +{ + uint4 _x; + double2 result; + _x = curand4(state); + result.x = _curand_uniform_double_hq(_x.x,_x.y); + result.y = _curand_uniform_double_hq(_x.z,_x.w); + return result; +} + + +// not a part of API +QUALIFIERS double4 curand_uniform4_double(curandStatePhilox4_32_10_t *state) +{ + uint4 _x, _y; + double4 result; + _x = curand4(state); + _y = curand4(state); + result.x = _curand_uniform_double_hq(_x.x,_x.y); + result.y = _curand_uniform_double_hq(_x.z,_x.w); + result.z = _curand_uniform_double_hq(_y.x,_y.y); + result.w = _curand_uniform_double_hq(_y.z,_y.w); + return result; +} + +/** + * \brief Return a uniformly distributed float from a Philox4_32_10 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the Philox4_32_10 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0 and \p 1.0 + * + */ +QUALIFIERS float curand_uniform(curandStatePhilox4_32_10_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed tuple of 4 floats from a Philox4_32_10 generator. + * + * Return a uniformly distributed 4 floats between \p 0.0f and \p 1.0f + * from the Philox4_32_10 generator in \p state, increment position of generator by 4. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0 and \p 1.0 + * + */ +QUALIFIERS float4 curand_uniform4(curandStatePhilox4_32_10_t *state) +{ + return _curand_uniform4(curand4(state)); +} + +/** + * \brief Return a uniformly distributed float from a MTGP32 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the MTGP32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateMtgp32_t *state) +{ + return _curand_uniform(curand(state)); +} +/** + * \brief Return a uniformly distributed double from a MTGP32 generator. + * + * Return a uniformly distributed double between \p 0.0f and \p 1.0f + * from the MTGP32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * Note that the implementation uses only 32 random bits to generate a single double + * precision value. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0f and \p 1.0f + */ +QUALIFIERS double curand_uniform_double(curandStateMtgp32_t *state) +{ + return _curand_uniform_double(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from a Philox4_32_10 generator. + * + * Return a uniformly distributed double between \p 0.0f and \p 1.0f + * from the Philox4_32_10 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * Note that the implementation uses only 32 random bits to generate a single double + * precision value. + * + * \p curand_uniform2_double() is recommended for higher quality uniformly distributed + * double precision values. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0f and \p 1.0f + */ + +QUALIFIERS double curand_uniform_double(curandStatePhilox4_32_10_t *state) +{ + return _curand_uniform_double(curand(state)); +} + + +/** + * \brief Return a uniformly distributed float from a Sobol32 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the Sobol32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand(). + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateSobol32_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from a Sobol32 generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the Sobol32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand() + * to preserve the quasirandom properties of the sequence. + * + * Note that the implementation uses only 32 random bits to generate a single double + * precision value. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateSobol32_t *state) +{ + return _curand_uniform_double(curand(state)); +} +/** + * \brief Return a uniformly distributed float from a scrambled Sobol32 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the scrambled Sobol32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand(). + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateScrambledSobol32_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from a scrambled Sobol32 generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the scrambled Sobol32 generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand() + * to preserve the quasirandom properties of the sequence. + * + * Note that the implementation uses only 32 random bits to generate a single double + * precision value. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateScrambledSobol32_t *state) +{ + return _curand_uniform_double(curand(state)); +} +/** + * \brief Return a uniformly distributed float from a Sobol64 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the Sobol64 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand(). + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateSobol64_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from a Sobol64 generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the Sobol64 generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand() + * to preserve the quasirandom properties of the sequence. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateSobol64_t *state) +{ + return _curand_uniform_double(curand(state)); +} +/** + * \brief Return a uniformly distributed float from a scrambled Sobol64 generator. + * + * Return a uniformly distributed float between \p 0.0f and \p 1.0f + * from the scrambled Sobol64 generator in \p state, increment position of generator. + * Output range excludes \p 0.0f but includes \p 1.0f. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand(). + * + * \param state - Pointer to state to update + * + * \return uniformly distributed float between \p 0.0f and \p 1.0f + */ +QUALIFIERS float curand_uniform(curandStateScrambledSobol64_t *state) +{ + return _curand_uniform(curand(state)); +} + +/** + * \brief Return a uniformly distributed double from a scrambled Sobol64 generator. + * + * Return a uniformly distributed double between \p 0.0 and \p 1.0 + * from the scrambled Sobol64 generator in \p state, increment position of generator. + * Output range excludes \p 0.0 but includes \p 1.0. Denormalized floating + * point outputs are never returned. + * + * The implementation is guaranteed to use a single call to \p curand() + * to preserve the quasirandom properties of the sequence. + * + * \param state - Pointer to state to update + * + * \return uniformly distributed double between \p 0.0 and \p 1.0 + */ +QUALIFIERS double curand_uniform_double(curandStateScrambledSobol64_t *state) +{ + return _curand_uniform_double(curand(state)); +} + +#endif // !defined(CURAND_UNIFORM_H_) diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/lib/__init__.py b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/lib/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/lib/__pycache__/__init__.cpython-312.pyc b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/lib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..559480745cde99a749d78838c979b24f1c9a6e11 Binary files /dev/null and b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/curand/lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl.h new file mode 100644 index 0000000000000000000000000000000000000000..01c58461e532c13344571dcc9ca8621e5eb701fa --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl.h @@ -0,0 +1,518 @@ +/************************************************************************* + * Copyright (c) 2015-2021, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef NCCL_H_ +#define NCCL_H_ + +#include +#include +#if CUDART_VERSION >= 11000 +#include +#endif +#if CUDART_VERSION >= 11080 +#include +#endif + +#define NCCL_MAJOR 2 +#define NCCL_MINOR 27 +#define NCCL_PATCH 5 +#define NCCL_SUFFIX "" + +#define NCCL_VERSION_CODE 22705 +#define NCCL_VERSION(X,Y,Z) (((X) <= 2 && (Y) <= 8) ? (X) * 1000 + (Y) * 100 + (Z) : (X) * 10000 + (Y) * 100 + (Z)) + +#ifdef __cplusplus +extern "C" { +#endif + +#include +/* Opaque handle to communicator */ +typedef struct ncclComm* ncclComm_t; +typedef struct ncclWindow* ncclWindow_t; +#define NCCL_COMM_NULL NULL + +#define NCCL_UNIQUE_ID_BYTES 128 +typedef struct { char internal[NCCL_UNIQUE_ID_BYTES]; } ncclUniqueId; + +/* Error type */ +typedef enum { ncclSuccess = 0, + ncclUnhandledCudaError = 1, + ncclSystemError = 2, + ncclInternalError = 3, + ncclInvalidArgument = 4, + ncclInvalidUsage = 5, + ncclRemoteError = 6, + ncclInProgress = 7, + ncclNumResults = 8 } ncclResult_t; + +#define NCCL_CONFIG_UNDEF_INT INT_MIN +#define NCCL_CONFIG_UNDEF_PTR NULL +#define NCCL_SPLIT_NOCOLOR -1 +#define NCCL_UNDEF_FLOAT -1.0f + +/* Window Registration flags */ +#define NCCL_WIN_DEFAULT 0x00 +#define NCCL_WIN_COLL_SYMMETRIC 0x01 + +/* NCCL performance policy */ +#define NCCL_CTA_POLICY_DEFAULT 0x00 +#define NCCL_CTA_POLICY_EFFICIENCY 0x01 + +/* ncclCommShrink flags*/ +#define NCCL_SHRINK_DEFAULT 0x00 /* shrink the parent communicator */ +#define NCCL_SHRINK_ABORT 0x01 /* First, terminate ongoing parent operations, and then shrink the parent communicator */ + +/* Communicator configuration. Users can assign value to attributes to specify the + * behavior of a communicator. */ +typedef struct ncclConfig_v22700 { + /* attributes that users should never touch. */ + size_t size; + unsigned int magic; + unsigned int version; + /* attributes that users are able to customize. */ + int blocking; + int cgaClusterSize; + int minCTAs; + int maxCTAs; + const char *netName; + int splitShare; + int trafficClass; + const char *commName; + int collnetEnable; + int CTAPolicy; + int shrinkShare; + int nvlsCTAs; +} ncclConfig_t; + +/* Config initializer must be assigned to initialize config structure when it is created. + * Not initialized config will result in NCCL error. */ +#define NCCL_CONFIG_INITIALIZER { \ + sizeof(ncclConfig_t), /* size */ \ + 0xcafebeef, /* magic */ \ + NCCL_VERSION(NCCL_MAJOR, NCCL_MINOR, NCCL_PATCH), /* version */ \ + NCCL_CONFIG_UNDEF_INT, /* blocking */ \ + NCCL_CONFIG_UNDEF_INT, /* cgaClusterSize */ \ + NCCL_CONFIG_UNDEF_INT, /* minCTAs */ \ + NCCL_CONFIG_UNDEF_INT, /* maxCTAs */ \ + NCCL_CONFIG_UNDEF_PTR, /* netName */ \ + NCCL_CONFIG_UNDEF_INT, /* splitShare */ \ + NCCL_CONFIG_UNDEF_INT, /* trafficClass */ \ + NCCL_CONFIG_UNDEF_PTR, /* commName */ \ + NCCL_CONFIG_UNDEF_INT, /* collnetEnable */ \ + NCCL_CONFIG_UNDEF_INT, /* CTAPolicy */ \ + NCCL_CONFIG_UNDEF_INT, /* shrinkShare */ \ + NCCL_CONFIG_UNDEF_INT, /* nvlsCTAs */ \ +} + +/* This struct will be used by ncclGroupSimulateEnd() API to query information about simulation. */ +typedef struct ncclSimInfo_v22200 { + size_t size; + unsigned int magic; + unsigned int version; + float estimatedTime; +} ncclSimInfo_t; + +/* NCCL_SIM_INFO_INITIALIZER must be assigned to initialize simInfo structure when it is created. + * Not initialized simInfo will result in NCCL error. */ +#define NCCL_SIM_INFO_INITIALIZER { \ + sizeof(ncclSimInfo_t), /* size */ \ + 0x74685283, /* magic */ \ + NCCL_VERSION(NCCL_MAJOR, NCCL_MINOR, NCCL_PATCH), /* version */ \ + NCCL_UNDEF_FLOAT /* estimated time */ \ +} + +/* NCCL malloc and free function for all types of NCCL optimizations + * (e.g. user buffer registration). The actual allocated size might + * be larger than requested due to granularity requirement. */ +ncclResult_t ncclMemAlloc(void** ptr, size_t size); +ncclResult_t pncclMemAlloc(void** ptr, size_t size); + +ncclResult_t ncclMemFree(void *ptr); +ncclResult_t pncclMemFree(void *ptr); + +/* Return the NCCL_VERSION_CODE of the NCCL library in the supplied integer. + * This integer is coded with the MAJOR, MINOR and PATCH level of the + * NCCL library + */ +ncclResult_t ncclGetVersion(int *version); +ncclResult_t pncclGetVersion(int *version); + +/* Generates an Id to be used in ncclCommInitRank. ncclGetUniqueId should be + * called once and the Id should be distributed to all ranks in the + * communicator before calling ncclCommInitRank. */ +ncclResult_t ncclGetUniqueId(ncclUniqueId* uniqueId); +ncclResult_t pncclGetUniqueId(ncclUniqueId* uniqueId); + +/* Create a new communicator (multi thread/process version) with a configuration + * set by users. */ +ncclResult_t ncclCommInitRankConfig(ncclComm_t* comm, int nranks, ncclUniqueId commId, int rank, ncclConfig_t* config); +ncclResult_t pncclCommInitRankConfig(ncclComm_t* comm, int nranks, ncclUniqueId commId, int rank, ncclConfig_t* config); + +/* Creates a new communicator (multi thread/process version). + * rank must be between 0 and nranks-1 and unique within a communicator clique. + * Each rank is associated to a CUDA device, which has to be set before calling + * ncclCommInitRank. + * ncclCommInitRank implicitly syncronizes with other ranks, so it must be + * called by different threads/processes or use ncclGroupStart/ncclGroupEnd. */ +ncclResult_t ncclCommInitRank(ncclComm_t* comm, int nranks, ncclUniqueId commId, int rank); +ncclResult_t pncclCommInitRank(ncclComm_t* comm, int nranks, ncclUniqueId commId, int rank); + +/* Creates a clique of communicators (single process version). + * This is a convenience function to create a single-process communicator clique. + * Returns an array of ndev newly initialized communicators in comm. + * comm should be pre-allocated with size at least ndev*sizeof(ncclComm_t). + * If devlist is NULL, the first ndev CUDA devices are used. + * Order of devlist defines user-order of processors within the communicator. */ +ncclResult_t ncclCommInitAll(ncclComm_t* comm, int ndev, const int* devlist); +ncclResult_t pncclCommInitAll(ncclComm_t* comm, int ndev, const int* devlist); + +/* Finalize a communicator. ncclCommFinalize flushes all issued communications, + * and marks communicator state as ncclInProgress. The state will change to ncclSuccess + * when the communicator is globally quiescent and related resources are freed; then, + * calling ncclCommDestroy can locally free the rest of the resources (e.g. communicator + * itself) without blocking. */ +ncclResult_t ncclCommFinalize(ncclComm_t comm); +ncclResult_t pncclCommFinalize(ncclComm_t comm); + +/* Frees local resources associated with communicator object. */ +ncclResult_t ncclCommDestroy(ncclComm_t comm); +ncclResult_t pncclCommDestroy(ncclComm_t comm); + +/* Frees resources associated with communicator object and aborts any operations + * that might still be running on the device. */ +ncclResult_t ncclCommAbort(ncclComm_t comm); +ncclResult_t pncclCommAbort(ncclComm_t comm); + +/* Creates one or more communicators from an existing one. + * Ranks with the same color will end up in the same communicator. + * Within the new communicator, key will be used to order ranks. + * NCCL_SPLIT_NOCOLOR as color will indicate the rank will not be part of any group + * and will therefore return a NULL communicator. + * If config is NULL, the new communicator will inherit the original communicator's + * configuration*/ +ncclResult_t ncclCommSplit(ncclComm_t comm, int color, int key, ncclComm_t *newcomm, ncclConfig_t* config); +ncclResult_t pncclCommSplit(ncclComm_t comm, int color, int key, ncclComm_t *newcomm, ncclConfig_t* config); + +/* Shrink existing communicator. + * Ranks in excludeRanksList will be removed form the existing communicator. + * Within the new communicator, ranks will be re-ordered to fill the gap of removed ones. + * If config is NULL, the new communicator will inherit the original communicator's configuration + * The flag enables NCCL to adapt to various states of the parent communicator, see NCCL_SHRINK flags.*/ +ncclResult_t ncclCommShrink(ncclComm_t comm, int* excludeRanksList, int excludeRanksCount, ncclComm_t* newcomm, ncclConfig_t* config, int shrinkFlags); +ncclResult_t pncclCommShrink(ncclComm_t comm, int* excludeRanksList, int excludeRanksCount, ncclComm_t* newcomm, ncclConfig_t* config, int shrinkFlags); + +/* Creates a new communicator (multi thread/process version), similar to ncclCommInitRankConfig. + * Allows to use more than one ncclUniqueId (up to one per rank), indicated by nId, to accelerate the init operation. + * The number of ncclUniqueIds and their order must be the same for every rank. + */ +ncclResult_t ncclCommInitRankScalable(ncclComm_t* newcomm, int nranks, int myrank, int nId, ncclUniqueId* commIds, ncclConfig_t* config); +ncclResult_t pncclCommInitRankScalable(ncclComm_t* newcomm, int nranks, int myrank, int nId, ncclUniqueId* commIds, ncclConfig_t* config); + +/* Returns a string for each error code. */ +const char* ncclGetErrorString(ncclResult_t result); +const char* pncclGetErrorString(ncclResult_t result); + +/* Returns a human-readable message of the last error that occurred. */ +const char* ncclGetLastError(ncclComm_t comm); +const char* pncclGetLastError(ncclComm_t comm); + +/* Reload environment variables that determine logging. */ +void ncclResetDebugInit(); +void pncclResetDebugInit(); + +/* Checks whether the comm has encountered any asynchronous errors */ +ncclResult_t ncclCommGetAsyncError(ncclComm_t comm, ncclResult_t *asyncError); +ncclResult_t pncclCommGetAsyncError(ncclComm_t comm, ncclResult_t *asyncError); + +/* Gets the number of ranks in the communicator clique. */ +ncclResult_t ncclCommCount(const ncclComm_t comm, int* count); +ncclResult_t pncclCommCount(const ncclComm_t comm, int* count); + +/* Returns the cuda device number associated with the communicator. */ +ncclResult_t ncclCommCuDevice(const ncclComm_t comm, int* device); +ncclResult_t pncclCommCuDevice(const ncclComm_t comm, int* device); + +/* Returns the user-ordered "rank" associated with the communicator. */ +ncclResult_t ncclCommUserRank(const ncclComm_t comm, int* rank); +ncclResult_t pncclCommUserRank(const ncclComm_t comm, int* rank); + +/* Register CUDA buffer for zero-copy operation */ +ncclResult_t ncclCommRegister(const ncclComm_t comm, void* buff, size_t size, void** handle); +ncclResult_t pncclCommRegister(const ncclComm_t comm, void* buff, size_t size, void** handle); + +/* Deregister CUDA buffer */ +ncclResult_t ncclCommDeregister(const ncclComm_t comm, void* handle); +ncclResult_t pncclCommDeregister(const ncclComm_t comm, void* handle); + +/* Register memory window */ +ncclResult_t ncclCommWindowRegister(ncclComm_t comm, void* buff, size_t size, ncclWindow_t* win, int winFlags); +ncclResult_t pncclCommWindowRegister(ncclComm_t comm, void* buff, size_t size, ncclWindow_t* win, int winFlags); + +/* Deregister symmetric memory */ +ncclResult_t ncclCommWindowDeregister(ncclComm_t comm, ncclWindow_t win); +ncclResult_t pncclCommWindowDeregister(ncclComm_t comm, ncclWindow_t win); + +/* Reduction operation selector */ +typedef enum { ncclNumOps_dummy = 5 } ncclRedOp_dummy_t; +typedef enum { ncclSum = 0, + ncclProd = 1, + ncclMax = 2, + ncclMin = 3, + ncclAvg = 4, + /* ncclNumOps: The number of built-in ncclRedOp_t values. Also + * serves as the least possible value for dynamic ncclRedOp_t's + * as constructed by ncclRedOpCreate*** functions. */ + ncclNumOps = 5, + /* ncclMaxRedOp: The largest valid value for ncclRedOp_t. + * It is defined to be the largest signed value (since compilers + * are permitted to use signed enums) that won't grow + * sizeof(ncclRedOp_t) when compared to previous NCCL versions to + * maintain ABI compatibility. */ + ncclMaxRedOp = 0x7fffffff>>(32-8*sizeof(ncclRedOp_dummy_t)) + } ncclRedOp_t; + +/* Data types */ +typedef enum { ncclInt8 = 0, ncclChar = 0, + ncclUint8 = 1, + ncclInt32 = 2, ncclInt = 2, + ncclUint32 = 3, + ncclInt64 = 4, + ncclUint64 = 5, + ncclFloat16 = 6, ncclHalf = 6, + ncclFloat32 = 7, ncclFloat = 7, + ncclFloat64 = 8, ncclDouble = 8, + ncclBfloat16 = 9, + ncclFloat8e4m3 = 10, + ncclFloat8e5m2 = 11, + ncclNumTypes = 12 +} ncclDataType_t; + +/* ncclScalarResidence_t: Location and dereferencing logic for scalar arguments. */ +typedef enum { + /* ncclScalarDevice: The scalar is in device-visible memory and will be + * dereferenced while the collective is running. */ + ncclScalarDevice = 0, + + /* ncclScalarHostImmediate: The scalar is in host-visible memory and will be + * dereferenced before the ncclRedOpCreate***() function returns. */ + ncclScalarHostImmediate = 1 +} ncclScalarResidence_t; + +/* + * ncclRedOpCreatePreMulSum + * + * Creates a new reduction operator which pre-multiplies input values by a given + * scalar locally before reducing them with peer values via summation. For use + * only with collectives launched against *comm* and *datatype*. The + * *residence* argument indicates how/when the memory pointed to by *scalar* + * will be dereferenced. Upon return, the newly created operator's handle + * is stored in *op*. + */ +ncclResult_t ncclRedOpCreatePreMulSum(ncclRedOp_t *op, void *scalar, ncclDataType_t datatype, ncclScalarResidence_t residence, ncclComm_t comm); +ncclResult_t pncclRedOpCreatePreMulSum(ncclRedOp_t *op, void *scalar, ncclDataType_t datatype, ncclScalarResidence_t residence, ncclComm_t comm); + +/* + * ncclRedOpDestroy + * + * Destroys the reduction operator *op*. The operator must have been created by + * ncclRedOpCreatePreMul with the matching communicator *comm*. An operator may be + * destroyed as soon as the last NCCL function which is given that operator returns. + */ +ncclResult_t ncclRedOpDestroy(ncclRedOp_t op, ncclComm_t comm); +ncclResult_t pncclRedOpDestroy(ncclRedOp_t op, ncclComm_t comm); + +/* + * Collective communication operations + * + * Collective communication operations must be called separately for each + * communicator in a communicator clique. + * + * They return when operations have been enqueued on the CUDA stream. + * + * Since they may perform inter-CPU synchronization, each call has to be done + * from a different thread or process, or need to use Group Semantics (see + * below). + */ + +/* + * Reduce + * + * Reduces data arrays of length count in sendbuff into recvbuff using op + * operation. + * recvbuff may be NULL on all calls except for root device. + * root is the rank (not the CUDA device) where data will reside after the + * operation is complete. + * + * In-place operation will happen if sendbuff == recvbuff. + */ +ncclResult_t ncclReduce(const void* sendbuff, void* recvbuff, size_t count, ncclDataType_t datatype, + ncclRedOp_t op, int root, ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclReduce(const void* sendbuff, void* recvbuff, size_t count, ncclDataType_t datatype, + ncclRedOp_t op, int root, ncclComm_t comm, cudaStream_t stream); + +/* + * (deprecated) Broadcast (in-place) + * + * Copies count values from root to all other devices. + * root is the rank (not the CUDA device) where data resides before the + * operation is started. + * + * This operation is implicitely in place. + */ +ncclResult_t ncclBcast(void* buff, size_t count, ncclDataType_t datatype, int root, + ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclBcast(void* buff, size_t count, ncclDataType_t datatype, int root, + ncclComm_t comm, cudaStream_t stream); + +/* + * Broadcast + * + * Copies count values from root to all other devices. + * root is the rank (not the CUDA device) where data resides before the + * operation is started. + * + * In-place operation will happen if sendbuff == recvbuff. + */ +ncclResult_t ncclBroadcast(const void* sendbuff, void* recvbuff, size_t count, ncclDataType_t datatype, int root, + ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclBroadcast(const void* sendbuff, void* recvbuff, size_t count, ncclDataType_t datatype, int root, + ncclComm_t comm, cudaStream_t stream); + +/* + * All-Reduce + * + * Reduces data arrays of length count in sendbuff using op operation, and + * leaves identical copies of result on each recvbuff. + * + * In-place operation will happen if sendbuff == recvbuff. + */ +ncclResult_t ncclAllReduce(const void* sendbuff, void* recvbuff, size_t count, + ncclDataType_t datatype, ncclRedOp_t op, ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclAllReduce(const void* sendbuff, void* recvbuff, size_t count, + ncclDataType_t datatype, ncclRedOp_t op, ncclComm_t comm, cudaStream_t stream); + +/* + * Reduce-Scatter + * + * Reduces data in sendbuff using op operation and leaves reduced result + * scattered over the devices so that recvbuff on rank i will contain the i-th + * block of the result. + * Assumes sendcount is equal to nranks*recvcount, which means that sendbuff + * should have a size of at least nranks*recvcount elements. + * + * In-place operations will happen if recvbuff == sendbuff + rank * recvcount. + */ +ncclResult_t ncclReduceScatter(const void* sendbuff, void* recvbuff, + size_t recvcount, ncclDataType_t datatype, ncclRedOp_t op, ncclComm_t comm, + cudaStream_t stream); +ncclResult_t pncclReduceScatter(const void* sendbuff, void* recvbuff, + size_t recvcount, ncclDataType_t datatype, ncclRedOp_t op, ncclComm_t comm, + cudaStream_t stream); + +/* + * All-Gather + * + * Each device gathers sendcount values from other GPUs into recvbuff, + * receiving data from rank i at offset i*sendcount. + * Assumes recvcount is equal to nranks*sendcount, which means that recvbuff + * should have a size of at least nranks*sendcount elements. + * + * In-place operations will happen if sendbuff == recvbuff + rank * sendcount. + */ +ncclResult_t ncclAllGather(const void* sendbuff, void* recvbuff, size_t sendcount, + ncclDataType_t datatype, ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclAllGather(const void* sendbuff, void* recvbuff, size_t sendcount, + ncclDataType_t datatype, ncclComm_t comm, cudaStream_t stream); + +/* + * Send + * + * Send data from sendbuff to rank peer. + * + * Rank peer needs to call ncclRecv with the same datatype and the same count from this + * rank. + * + * This operation is blocking for the GPU. If multiple ncclSend and ncclRecv operations + * need to progress concurrently to complete, they must be fused within a ncclGroupStart/ + * ncclGroupEnd section. + */ +ncclResult_t ncclSend(const void* sendbuff, size_t count, ncclDataType_t datatype, int peer, + ncclComm_t comm, cudaStream_t stream); +ncclResult_t pncclSend(const void* sendbuff, size_t count, ncclDataType_t datatype, int peer, + ncclComm_t comm, cudaStream_t stream); + +/* + * Receive + * + * Receive data from rank peer into recvbuff. + * + * Rank peer needs to call ncclSend with the same datatype and the same count to this + * rank. + * + * This operation is blocking for the GPU. If multiple ncclSend and ncclRecv operations + * need to progress concurrently to complete, they must be fused within a ncclGroupStart/ + * ncclGroupEnd section. + */ +ncclResult_t pncclRecv(void* recvbuff, size_t count, ncclDataType_t datatype, int peer, + ncclComm_t comm, cudaStream_t stream); +ncclResult_t ncclRecv(void* recvbuff, size_t count, ncclDataType_t datatype, int peer, + ncclComm_t comm, cudaStream_t stream); + +/* + * Group semantics + * + * When managing multiple GPUs from a single thread, and since NCCL collective + * calls may perform inter-CPU synchronization, we need to "group" calls for + * different ranks/devices into a single call. + * + * Grouping NCCL calls as being part of the same collective operation is done + * using ncclGroupStart and ncclGroupEnd. ncclGroupStart will enqueue all + * collective calls until the ncclGroupEnd call, which will wait for all calls + * to be complete. Note that for collective communication, ncclGroupEnd only + * guarantees that the operations are enqueued on the streams, not that + * the operation is effectively done. + * + * Both collective communication and ncclCommInitRank can be used in conjunction + * of ncclGroupStart/ncclGroupEnd, but not together. + * + * Group semantics also allow to fuse multiple operations on the same device + * to improve performance (for aggregated collective calls), or to permit + * concurrent progress of multiple send/receive operations. + */ + +/* + * Group Start + * + * Start a group call. All calls to NCCL until ncclGroupEnd will be fused into + * a single NCCL operation. Nothing will be started on the CUDA stream until + * ncclGroupEnd. + */ +ncclResult_t ncclGroupStart(); +ncclResult_t pncclGroupStart(); + +/* + * Group End + * + * End a group call. Start a fused NCCL operation consisting of all calls since + * ncclGroupStart. Operations on the CUDA stream depending on the NCCL operations + * need to be called after ncclGroupEnd. + */ +ncclResult_t ncclGroupEnd(); +ncclResult_t pncclGroupEnd(); + +/* + * Group Simulate End + * + * Simulate a ncclGroupEnd() call and return NCCL's simulation info in a struct. + */ +ncclResult_t ncclGroupSimulateEnd(ncclSimInfo_t* simInfo); +ncclResult_t pncclGroupSimulateEnd(ncclSimInfo_t* simInfo); + +#ifdef __cplusplus +} // end extern "C" +#endif + +#endif // end include guard diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device.h new file mode 100644 index 0000000000000000000000000000000000000000..35e216c6288ceb0291276a0ba070c8c5da075888 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device.h @@ -0,0 +1,15 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#include "nccl_device/coop.h" +#include "nccl_device/impl/barrier__funcs.h" +#include "nccl_device/impl/comm__funcs.h" +#include "nccl_device/impl/core__funcs.h" +#include "nccl_device/impl/ll_a2a__funcs.h" +#include "nccl_device/impl/lsa_barrier__funcs.h" +#include "nccl_device/impl/gin__funcs.h" +#include "nccl_device/impl/gin_barrier__funcs.h" +#include "nccl_device/impl/ptr__funcs.h" diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/barrier.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/barrier.h new file mode 100644 index 0000000000000000000000000000000000000000..0c11f6e5c2c6108cb41fe14a475df1f9c19579ad --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/barrier.h @@ -0,0 +1,47 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_BARRIER_H_ +#define _NCCL_DEVICE_BARRIER_H_ +#include "impl/core__types.h" +#include "impl/lsa_barrier__types.h" +#include "impl/gin_barrier__types.h" + +#if __CUDACC__ +template +struct ncclBarrierSession_internal; + +template +struct ncclBarrierSession: ncclBarrierSession_internal { + // Full featured constructor: + NCCL_DEVICE_INLINE ncclBarrierSession( + Coop, ncclTeam innerTeam, ncclTeam outerTeam, ncclGin, + ncclLsaBarrierHandle innerBarHandle, + ncclGinBarrierHandle outerBarHandle, + uint32_t index, + bool multimem=false, ncclMultimemHandle innerMmHandle={} + ); + // Convenience constructors for baked in teams: + NCCL_DEVICE_INLINE ncclBarrierSession( + Coop, ncclTeamTagWorld, ncclGin, uint32_t index, bool multimem=false + ); + NCCL_DEVICE_INLINE ncclBarrierSession( + Coop, ncclTeamTagLsa, ncclDevComm const&, uint32_t index, bool multimem=false + ); + NCCL_DEVICE_INLINE ncclBarrierSession( + Coop, ncclTeamTagRail, ncclGin, uint32_t index + ); + + ncclBarrierSession(ncclBarrierSession const&) = delete; // Sessions are not copyable + + NCCL_DEVICE_INLINE ncclLsaBarrierSession& lsaBarrier(); + NCCL_DEVICE_INLINE ncclGinBarrierSession& ginBarrier(); + + NCCL_DEVICE_INLINE void sync(Coop, cuda::memory_order, ncclGinFenceLevel); +}; +#endif + +#endif // _NCCL_DEVICE_BARRIER_H_ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/comm.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/comm.h new file mode 100644 index 0000000000000000000000000000000000000000..d989ce1f639a1680bb326ce9052a604320cf8b90 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/comm.h @@ -0,0 +1,10 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_COMM_H_ +#define _NCCL_DEVICE_COMM_H_ +#include "core.h" +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/coop.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/coop.h new file mode 100644 index 0000000000000000000000000000000000000000..4af229dfbe556d4b2a8d0fdfd9b7093500d3b005 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/coop.h @@ -0,0 +1,211 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_COOP_H_ +#define _NCCL_DEVICE_COOP_H_ +#include "utility.h" + +// ncclCoop[Foo]: NCCL's versions of CUDA's Cooperative Groups. They conform +// to just this subset of the CUDA API: +// int Coop::thread_rank(); +// int Coop::size(); +// int Coop::num_threads(); // same as size() +// void Coop::sync(); + +#if __CUDACC__ +template +struct ncclCoopTile { // An aligned pow2 set of threads within the warp. + static_assert(nccl::utility::isPow2(nThreadsPow2) && nThreadsPow2 <= 32, "Condition required"); + + NCCL_DEVICE_INLINE int thread_rank() const { + return nccl::utility::lane() % nThreadsPow2; + } + NCCL_DEVICE_INLINE constexpr int size() const { return nThreadsPow2; } + NCCL_DEVICE_INLINE constexpr int num_threads() const { return nThreadsPow2; } + + NCCL_DEVICE_INLINE uint32_t laneMask() const { + return (-1u>>(32-nThreadsPow2))<<(nccl::utility::lane() & -nThreadsPow2); + } + NCCL_DEVICE_INLINE void sync() { + if (nThreadsPow2 > 1) __syncwarp(laneMask()); + } +}; +#endif + +#if __CUDACC__ +typedef ncclCoopTile<1> ncclCoopThread; +typedef ncclCoopTile<32> ncclCoopWarp; +#endif + +#if __CUDACC__ +struct ncclCoopLanes { // Some lanes of this warp. + uint32_t lmask; + + NCCL_DEVICE_INLINE constexpr ncclCoopLanes(uint32_t lmask=-1u): lmask(lmask) {} + + NCCL_DEVICE_INLINE int thread_rank() const { + return __popc(lmask & nccl::utility::lanemask_lt()); + } + NCCL_DEVICE_INLINE int size() const { + return __popc(lmask); + } + NCCL_DEVICE_INLINE int num_threads() const { + return __popc(lmask); + } + NCCL_DEVICE_INLINE void sync() { + __syncwarp(lmask); + } +}; +#endif + +#if __CUDACC__ +// A set of consecutive warps that the user has also supplied with a unique +// id from [0..15]. It is an error for two different warp spans with the same +// id to be in a collective concurrently. +struct ncclCoopWarpSpan { + uint32_t warp0:8, nWarps:8, id:8; + + NCCL_DEVICE_INLINE constexpr ncclCoopWarpSpan(int warp0, int nWarps, int id): + warp0(warp0), nWarps(nWarps), id(id) { + } + + NCCL_DEVICE_INLINE int thread_rank() const { + return threadIdx.x - 32*warp0; + } + NCCL_DEVICE_INLINE int size() const { + return 32*nWarps; + } + NCCL_DEVICE_INLINE int num_threads() const { + return 32*nWarps; + } + + NCCL_DEVICE_INLINE void sync() { + //asm volatile("barrier.sync %0, %1;" :: "r"(1+id), "r"(32*nWarps) : "memory"); + __barrier_sync_count(1+id, 32*nWarps); + } +}; +#endif + +#if __CUDACC__ +struct ncclCoopCta { + NCCL_DEVICE_INLINE int thread_rank() const { return threadIdx.x; } + NCCL_DEVICE_INLINE int size() const { return blockDim.x; } + NCCL_DEVICE_INLINE int num_threads() const { return blockDim.x; } + NCCL_DEVICE_INLINE void sync() { __syncthreads(); } +}; +#endif + +#if __CUDACC__ +template +NCCL_DEVICE_INLINE uint32_t ncclCoopGetLaneMask(ncclCoopTile coop) { + return coop.laneMask(); +} +NCCL_DEVICE_INLINE uint32_t ncclCoopGetLaneMask(ncclCoopLanes coop) { + return coop.lmask; +} +NCCL_DEVICE_INLINE uint32_t ncclCoopGetLaneMask(ncclCoopWarpSpan coop) { + return -1u; +} +NCCL_DEVICE_INLINE uint32_t ncclCoopGetLaneMask(ncclCoopCta coop) { + return -1u; +} +#endif + +#if __CUDACC__ +// ncclCoopIsThread: +// At compile time do we know the given coop is a single thread only. +template +NCCL_DEVICE_INLINE constexpr bool ncclCoopIsThread(ncclCoopTile) { + return nThreads == 1; +} +NCCL_DEVICE_INLINE constexpr bool ncclCoopIsThread(ncclCoopLanes) { return false; } +NCCL_DEVICE_INLINE constexpr bool ncclCoopIsThread(ncclCoopWarpSpan) { return false; } +NCCL_DEVICE_INLINE constexpr bool ncclCoopIsThread(ncclCoopCta) { return false; } +#endif + +#if __CUDACC__ +template +NCCL_DEVICE_INLINE constexpr bool ncclCoopWithinWarp(ncclCoopTile) { return true; } +NCCL_DEVICE_INLINE constexpr bool ncclCoopWithinWarp(ncclCoopLanes) { return true; } +NCCL_DEVICE_INLINE constexpr bool ncclCoopWithinWarp(ncclCoopWarpSpan) { return false; } +NCCL_DEVICE_INLINE constexpr bool ncclCoopWithinWarp(ncclCoopCta) { return false; } +#endif + +#if __CUDACC__ +// Pick threads of our warp that are safe to use collectively. +NCCL_DEVICE_INLINE ncclCoopLanes ncclCoopCoalesced() { + return ncclCoopLanes{__activemask()}; +} +#endif + +#if __CUDACC__ +// Pick threads of our warp that are safe to use collectively given that this +// is a collective on the provided cooperative group. +template +NCCL_DEVICE_INLINE ncclCoopTile<32> ncclCoopCoalesced(Coop) { + return ncclCoopTile<32>(); +} +NCCL_DEVICE_INLINE ncclCoopLanes ncclCoopCoalesced(ncclCoopLanes coop) { + return coop; +} +template +NCCL_DEVICE_INLINE ncclCoopTile ncclCoopCoalesced(ncclCoopTile coop) { + return coop; +} +#endif + +#if __CUDACC__ +template +NCCL_DEVICE_INLINE T ncclCoopBcast(ncclCoopTile, T value, int root, bool entrySync=true) { + constexpr int n = (sizeof(T)+4-1)/4; + union { uint32_t u[n]; T v; }; + v = value; + #pragma unroll + for (int i=0; i < n; i++) u[i] = __shfl_sync(-1u, u[i], root, nThreads); + return v; +} +template +NCCL_DEVICE_INLINE T ncclCoopBcast(ncclCoopLanes coop, T value, int root, bool entrySync=true) { + uint32_t m = coop.lmask; + uint32_t r = root == 0 ? __ffs(m)-1 : __fns(m, 0, 1+root); + constexpr int n = (sizeof(T)+4-1)/4; + union { uint32_t u[n]; T v; }; + v = value; + #pragma unroll + for (int i=0; i < n; i++) u[i] = __shfl_sync(m, u[i], r); + return v; +} + +NCCL_DEVICE_INLINE ulong2* ncclCoopBcast_WarpSpan_stash() { + __shared__ ulong2 stash[15]; + return stash; +} + +template +NCCL_DEVICE_INLINE T ncclCoopBcast(ncclCoopWarpSpan coop, T value, int root, bool entrySync=true) { + static_assert(sizeof(T) <= sizeof(ncclCoopBcast_WarpSpan_stash()[0]), "Required"); + if (entrySync) coop.sync(); + if (coop.thread_rank() == root) *(T*)&ncclCoopBcast_WarpSpan_stash()[coop.id] = value; + coop.sync(); + return *(T*)&ncclCoopBcast_WarpSpan_stash()[coop.id]; +} + +NCCL_DEVICE_INLINE ulong2* ncclCoopBcast_Cta_stash() { + __shared__ ulong2 stash; + return &stash; +} + +template +NCCL_DEVICE_INLINE T ncclCoopBcast(ncclCoopCta coop, T value, int root, bool entrySync=true) { + static_assert(sizeof(T) <= sizeof(*ncclCoopBcast_Cta_stash()), "Required"); + if (entrySync) coop.sync(); + if (coop.thread_rank() == root) *(T*)ncclCoopBcast_Cta_stash() = value; + coop.sync(); + return *(T*)ncclCoopBcast_Cta_stash(); +} +#endif + +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/core.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/core.h new file mode 100644 index 0000000000000000000000000000000000000000..9b0061a72d68bcb03a2174dfd62cf81b9ac938a2 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/core.h @@ -0,0 +1,169 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_CORE_H_ +#define _NCCL_DEVICE_CORE_H_ +#include +#include "coop.h" +#include "utility.h" + +struct ncclDevComm; +typedef struct ncclDevComm ncclDevComm_t; + +struct ncclTeam; +typedef struct ncclTeam ncclTeam_t; + +// typedef struct ncclWindow_vidmem* ncclWindow_t; // in nccl.h + +struct ncclMultimemHandle; +typedef struct ncclMultimemHandle ncclMultimemHandle_t; + +typedef uint32_t ncclDevResourceHandle; +typedef ncclDevResourceHandle ncclDevResourceHandle_t; + +typedef uint32_t ncclGinSignal_t; +typedef uint32_t ncclGinCounter_t; + +struct ncclLsaBarrierHandle; +typedef struct ncclLsaBarrierHandle ncclLsaBarrierHandle_t; + +struct ncclGinBarrierHandle; +typedef struct ncclGinBarrierHandle ncclGinBarrierHandle_t; + +struct ncclLLA2AHandle; +typedef struct ncclLLA2AHandle ncclLLA2AHandle_t; + +struct ncclTeam { + int nRanks, rank, stride; +}; + +#if __cplusplus +template struct ncclSymPtr; +#endif + +#if __cplusplus +struct ncclTeamTagWorld {}; +struct ncclTeamTagLsa {}; +struct ncclTeamTagRail {}; +#endif + +struct ncclDevCommRequirements; +typedef struct ncclDevCommRequirements ncclDevCommRequirements_t; + +struct ncclDevResourceRequirements; +typedef struct ncclDevResourceRequirements ncclDevResourceRequirements_t; + +struct ncclTeamRequirements; +typedef struct ncclTeamRequirements ncclTeamRequirements_t; + +struct ncclDevCommRequirements { + ncclDevResourceRequirements_t* resourceRequirementsList; + ncclTeamRequirements_t* teamRequirementsList; + + bool lsaMultimem; // Enable multimem on lsa team + + int barrierCount; + int lsaBarrierCount; + int railGinBarrierCount; + + int lsaLLA2ABlockCount, lsaLLA2ASlotCount; + + bool ginForceEnable; + int ginContextCount; // This is a hint, the actual context count in the devcomm may not match. + int ginSignalCount; // Guaranteed to start at id=0 + int ginCounterCount; // Guaranteed to start at id=0 +}; + +struct ncclDevResourceRequirements { + ncclDevResourceRequirements_t* next; + size_t bufferSize, bufferAlign; + ncclDevResourceHandle_t* outBufferHandle; // If non-null, target assigned during ncclDevCommCreate. + int ginSignalCount; + int ginCounterCount; + ncclGinSignal_t* outGinSignalStart; + ncclGinCounter_t* outGinCounterStart; +}; + +struct ncclTeamRequirements { + ncclTeamRequirements_t* next; + ncclTeam_t team; + bool multimem; + ncclMultimemHandle_t* outMultimemHandle; // If non-null, target assigned during ncclDevCommCreate. +}; + +NCCL_EXTERN_C __host__ ncclResult_t ncclDevCommCreate(ncclComm_t, ncclDevCommRequirements_t const*, ncclDevComm_t* outDevComm); +NCCL_EXTERN_C __host__ ncclResult_t ncclDevCommDestroy(ncclComm_t, ncclDevComm_t const* devComm); + +//////////////////////////////////////////////////////////////////////////////// +// Team API: + +#if __cplusplus +NCCL_HOST_DEVICE_INLINE ncclTeam ncclTeamWorld(ncclDevComm const&); +#endif +NCCL_EXTERN_C __host__ ncclTeam_t ncclTeamWorld(ncclComm_t); + +#if __cplusplus +NCCL_HOST_DEVICE_INLINE ncclTeam ncclTeamLsa(ncclDevComm const&); +#endif +NCCL_EXTERN_C __host__ ncclTeam_t ncclTeamLsa(ncclComm_t); + +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE bool ncclTeamRankIsMember(ncclTeam_t a, ncclTeam_t b, int bPeer); +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE int ncclTeamRankToTeam(ncclTeam_t a, ncclTeam_t b, int bPeer); + +#if __cplusplus +NCCL_HOST_DEVICE_INLINE int ncclTeamRankToWorld(ncclDevComm const&, ncclTeam, int rank); +#endif +NCCL_EXTERN_C __host__ int ncclTeamRankToWorld(ncclComm_t, ncclTeam_t, int rank); + +#if __cplusplus +NCCL_HOST_DEVICE_INLINE int ncclTeamRankToLsa(ncclDevComm const&, ncclTeam, int rank); +#endif +NCCL_EXTERN_C __host__ int ncclTeamRankToLsa(ncclComm_t, ncclTeam_t, int rank); + +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE ncclTeam_t ncclTeamInnerFactor(ncclTeam_t parent, int innerSize); +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE ncclTeam_t ncclTeamOuterFactor(ncclTeam_t parent, int innerSize); + +// Interpret each team as a set of ranks. This function assumes that `subset` +// is a subset of `parent`. Thus the number of ranks in the set difference of +// `parent` minus `subset` is `super.nRanks - subset.nRanks`. Given `index` this +// function returns the index'th element of `parent` minus `subset`. +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE int ncclTeamRankInDifference(ncclTeam_t parent, ncclTeam_t subset, int index); + +// Equivalent to ncclTeamOuterFactor of lsa team. +#if __cplusplus +NCCL_HOST_DEVICE_INLINE ncclTeam ncclTeamRail(ncclDevComm const&); +#endif +NCCL_EXTERN_C __host__ ncclTeam_t ncclTeamRail(ncclComm_t); + +// Get offset of resource buffer within `comm.resourceWindow`. +NCCL_EXTERN_C NCCL_HOST_DEVICE_INLINE size_t ncclGetResourceBufferOffset(ncclDevResourceHandle_t); + +#if __CUDACC__ +NCCL_DEVICE_INLINE ncclSymPtr ncclGetResourceBuffer(ncclDevComm const&, ncclDevResourceHandle); +#endif + +//////////////////////////////////////////////////////////////////////////////// +// Window API: + +#if __CUDACC__ +NCCL_DEVICE_INLINE void* ncclGetLocalPointer(ncclWindow_t w, size_t offset); +NCCL_DEVICE_INLINE void* ncclGetLsaPointer(ncclWindow_t w, size_t offset, int peer); +NCCL_DEVICE_INLINE void* ncclGetPeerPointer(ncclWindow_t w, size_t offset, int peer); +NCCL_DEVICE_INLINE void* ncclGetPeerPointer(ncclWindow_t w, size_t offset, ncclTeam tm, int peer); +NCCL_DEVICE_INLINE void* ncclGetMultimemPointer(ncclWindow_t w, size_t offset, ncclMultimemHandle mmHandle); +NCCL_DEVICE_INLINE void* ncclGetLsaMultimemPointer(ncclWindow_t w, size_t offset, ncclDevComm const&); +#endif + +#if __CUDACC__ +// Convenience for combining ncclGet***Pointer() with resource handle. +NCCL_DEVICE_INLINE void* ncclGetResourceBufferLocalPointer(ncclDevComm const&, ncclDevResourceHandle); +NCCL_DEVICE_INLINE void* ncclGetResourceBufferLsaPointer(ncclDevComm const&, ncclDevResourceHandle, int peer); +NCCL_DEVICE_INLINE void* ncclGetResourceBufferPeerPointer(ncclDevComm const&, ncclDevResourceHandle, ncclTeam, int peer); +NCCL_DEVICE_INLINE void* ncclGetResourceBufferMultimemPointer(ncclDevComm const&, ncclDevResourceHandle, ncclMultimemHandle); +NCCL_DEVICE_INLINE void* ncclGetResourceBufferLsaMultimemPointer(ncclDevComm const&, ncclDevResourceHandle); +#endif + +#endif // _NCCL_DEVICE_CORE_H_ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin.h new file mode 100644 index 0000000000000000000000000000000000000000..45623d08c65280dde4004483d982fb2f5bb435f5 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin.h @@ -0,0 +1,207 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_GIN_SESSION_H_ +#define _NCCL_DEVICE_GIN_SESSION_H_ +#include "core.h" +#include "gin/gin_device_common.h" + +#if __CUDACC__ +struct ncclGinCtx; // Definition in nccl_device/gin/gin_device_host_common.h +template struct ncclGinCtx_M; // ... + +struct ncclGinDescriptorSmem; // A type user allocates in __shared__ memory + +// Used as completion actions for ncclGinSession::put +struct ncclGin_None {}; + +struct ncclGin_SignalAdd { ncclGinSignal_t signal; uint64_t value; }; +// SignalInc: equivalent to SignalAdd{+1} except it may not be mixed with any +// other signal operator without intervening signal reset(). Formally: for a +// given signal, all operations between successive reset()'s of that signal must +// either all be SignalInc or all not SignalInc. +struct ncclGin_SignalInc { ncclGinSignal_t signal; }; +// Support deferred: +// struct ncclGin_SignalSet { ncclGinSignal_t signal; uint64_t value; }; +struct ncclGin_CounterInc { ncclGinCounter_t counter; }; + +struct ncclGin_DescriptorSmem { ncclGinDescriptorSmem* descriptor; }; + +template +struct ncclGin_BackendMask; + +template +using ncclGin_BackendOne = ncclGin_BackendMask<(1u<<(int)backend)>; + +using ncclGin = ncclGin_BackendMask; + +#endif + +#if __CUDACC__ +template +struct ncclGin_BackendMask { + ncclDevComm const& comm; + uint32_t nContexts:8, contextId:8, _ginBackend:8; + + // Loads GIN context into registers. Each context has one QP per peer. + NCCL_DEVICE_INLINE ncclGin_BackendMask(ncclDevComm const&, int contextIndex); + + template< + // Action to take on peer when put completes. If a signalling action is used + // then that signal will be visible only after the payload of this put as well as + // the payloads of preceding puts on this netContext to the same peer are settled. + typename RemoteAction = ncclGin_None, // one of ncclGin_{None|SignalInc|SignalAdd|SignalSet} + // Action to take locally when source has been consumed. + typename LocalAction = ncclGin_None, // one of ncclGin_{None|CounterInc} + // Set of threads participating in this put. Must be a subset of Coop. + typename Coop = ncclCoopThread, + // Optional smem descriptor space to use. Either ncclGin_{None|DescriptorSmem} + typename DescriptorSmem = ncclGin_None + > + NCCL_DEVICE_INLINE void put( + ncclTeam, int peer, + ncclWindow_t dstWnd, size_t dstOffset, + ncclWindow_t srcWnd, size_t srcOffset, size_t bytes, + RemoteAction remoteAction = ncclGin_None{}, + LocalAction localAction = ncclGin_None{}, + Coop coop = ncclCoopThread{}, + DescriptorSmem descriptor = ncclGin_None{}, + cuda::thread_scope alreadyReleased = cuda::thread_scope_thread, + cuda::thread_scope expected_scope = cuda::thread_scope_device + ) const; + + template< + typename T, + // Action to take on peer when put completes. If a signalling action is used + // then that signal will be visible only after the payload of this put as well as + // the payloads of preceding puts on this context to the same peer are settled. + typename RemoteAction = ncclGin_None, // one of ncclGin_{None|SignalInc|SignalAdd|SignalSet} + // Action to take locally when source has been consumed. + typename LocalAction = ncclGin_None, // one of ncclGin_{None|CounterInc} + // Set of threads participating in this put. Must be a subset of Coop. + typename Coop = ncclCoopThread, + // Optional smem descriptor space to use. Either ncclGin_{None|DescriptorSmem} + typename DescriptorSmem = ncclGin_None + > + NCCL_DEVICE_INLINE void put( + ncclTeam, int peer, + ncclSymPtr dstElts, ncclSymPtr srcElts, size_t nElts, + RemoteAction remoteAction = ncclGin_None{}, + LocalAction localAction = ncclGin_None{}, + Coop coop = ncclCoopThread{}, + DescriptorSmem descriptor = ncclGin_None{}, + cuda::thread_scope alreadyReleased = cuda::thread_scope_thread, + cuda::thread_scope expected_scope = cuda::thread_scope_device + ) const; + + template< + typename T, // requires sizeof(T) <= 8 + // See put() for all template arguments. + typename RemoteAction = ncclGin_None, + typename Coop = ncclCoopThread, + typename DescriptorSmem = ncclGin_None + > + NCCL_DEVICE_INLINE void putValue( + ncclTeam, int peer, + ncclWindow_t dstWnd, size_t dstOffset, T value, + RemoteAction remoteAction = ncclGin_None{}, + Coop coop = ncclCoopThread{}, + DescriptorSmem descriptor = ncclGin_None{}, + cuda::thread_scope alreadyReleased = cuda::thread_scope_thread, + cuda::thread_scope expected_scope = cuda::thread_scope_device + ) const; + + template< + typename T, // requires sizeof(T) <= 8 + // See put() for all template arguments. + typename RemoteAction = ncclGin_None, + typename Coop = ncclCoopThread, + typename DescriptorSmem = ncclGin_None + > + NCCL_DEVICE_INLINE void putValue( + ncclTeam, int peer, + ncclSymPtr dst, T value, + RemoteAction remoteAction = ncclGin_None{}, + Coop coop = ncclCoopThread{}, + DescriptorSmem descriptor = ncclGin_None{}, + cuda::thread_scope alreadyReleased = cuda::thread_scope_thread, + cuda::thread_scope expected_scope = cuda::thread_scope_device + ) const; + + template + NCCL_DEVICE_INLINE void signal( + ncclTeam, int peer, RemoteAction remoteAction, + Coop coop = ncclCoopThread(), + DescriptorSmem descriptor = ncclGin_None{}, + cuda::thread_scope alreadyReleased = cuda::thread_scope_thread, + cuda::thread_scope expected_scope = cuda::thread_scope_device + ) const; + + // All source buffers from put's from any thread in this coop will be safe to reuse. + // Flush does not guarantee that data has settled in remote memory. + template + NCCL_DEVICE_INLINE void flush(Coop, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Counter and signal wait use "rolling" comparison logic of a given bit-width + // such that unsigned overflow does not disturb the property that: x < x+1. + // + // bool rolling_less_equal(uint64_t a, uint64_t b, int bits) { + // uint64_t m = uint64_t(-1)>>(64-bits); + // return ((b-a) & m) <= (m>>1); + // } + // + // The condition waited for is that the supplied value is rolling_less_equal + // to the internal value. + // + // Counters are restricted to using a maximum of 56 bits despite that being fewer + // than a uint64_t can carry. + + NCCL_DEVICE_INLINE uint64_t readCounter(ncclGinCounter_t counter, int bits=56, cuda::memory_order ord = cuda::memory_order_acquire) const; + + template + NCCL_DEVICE_INLINE void waitCounter(Coop, ncclGinCounter_t counter, uint64_t least, int bits=56, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Each signal has a dedicated "shadow" which the user is free to manipulate for + // any reason. The only calls which manipulate the shadow are `increaseSignalShadow` + // and `resetSignal`. + NCCL_DEVICE_INLINE uint64_t* getSignalShadowPtr(ncclGinSignal_t signal) const; + NCCL_DEVICE_INLINE void increaseSignalShadow(ncclGinSignal_t signal, uint64_t delta) const; + + // Returns current value of signal with all but bottom bits set to zero. + NCCL_DEVICE_INLINE uint64_t readSignal(ncclGinSignal_t signal, int bits=64, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Wait for signal to meet or exceed value. + template + NCCL_DEVICE_INLINE void waitSignal(Coop, ncclGinSignal_t signal, uint64_t least, int bits=64, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Wait for signal to meet or exceed shadow value. + template + NCCL_DEVICE_INLINE void waitSignalMeetShadow(Coop, ncclGinSignal_t signal, int bits=64, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Wait until signal exceeds shadow by `leastDelta` (typically 1), updates shadow + // with latest value, and returns with `before` equal to previous shadow value + // and `delta` equal to difference. + template + NCCL_DEVICE_INLINE void waitSignalFollowShadow(Coop, ncclGinSignal_t signal, Uint leastDelta, Uint* before, Uint* delta, int bits=64, cuda::memory_order ord = cuda::memory_order_acquire) const; + + // Sets to zero. May not race with concurrent modifications to counter. + NCCL_DEVICE_INLINE void resetCounter(ncclGinCounter_t counter) const; + // Sets signal and shadow to zero. May not race with concurrent modifcations to signal. + NCCL_DEVICE_INLINE void resetSignal(ncclGinSignal_t signal) const; + + ////////////////////////////////////////////////////////////////////////////// + // internal: + + void* _ginHandle; + uint64_t* _signalShadows; + + NCCL_DEVICE_INLINE ncclGinCtx_M _makeCtx() const; +}; +#endif + +#endif // _NCCL_DEVICE_GIN_SESSION_H_ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_def.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_def.h new file mode 100644 index 0000000000000000000000000000000000000000..1de849c94d86b32d6762fa7e34f7e39153ea8d85 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_def.h @@ -0,0 +1,398 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_def.h + * @brief GDAKI common definitions + * + * @{ + */ +#ifndef DOCA_GPUNETIO_VERBS_DEF_H +#define DOCA_GPUNETIO_VERBS_DEF_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Macro to temporarily cast a variable to volatile. + */ +#define DOCA_GPUNETIO_VOLATILE(x) (*(volatile typeof(x) *)&(x)) + +/** + * Default warp size value of 32 threads + */ +#define DOCA_GPUNETIO_VERBS_WARP_SIZE 32 + +/** + * Default warp full mask value + */ +#define DOCA_GPUNETIO_VERBS_WARP_FULL_MASK 0xffffffff + +/** + * Default page size alignment on GPU + */ +#define DOCA_GPUNETIO_VERBS_PAGE_SIZE 65536 + +/** + * CQE Consumer Index Mask - 24bits counter + */ +#define DOCA_GPUNETIO_VERBS_CQE_CI_MASK 0xFFFFFF + +/** + * WQE Producer Index Mask - 16bits counter + */ +#define DOCA_GPUNETIO_VERBS_WQE_PI_MASK 0xFFFF + +#define DOCA_GPUNETIO_IB_MLX5_WQE_SQ_SHIFT 6 + +/** + * Set to 1 if mkeys passed to the wqe functions + * are already swapped by application. + * Otherwise set it to 0. + */ +#define DOCA_GPUNETIO_VERBS_MKEY_SWAPPED 1 + +/** + * Enable debug prints in this headerfile. + * Bad for performance, should be used only for debugging + */ +#ifndef DOCA_GPUNETIO_VERBS_ENABLE_DEBUG +#define DOCA_GPUNETIO_VERBS_ENABLE_DEBUG 0 +#endif + +#if DOCA_GPUNETIO_VERBS_ENABLE_DEBUG == 1 +#include +#define DOCA_GPUNETIO_VERBS_ASSERT(x) assert(x) +#else +#define DOCA_GPUNETIO_VERBS_ASSERT(x) \ + do { \ + } while (0) +#endif + +/** + * WQE data segment inline data with byte count + */ +#define DOCA_GPUNETIO_VERBS_MAX_INLINE_SIZE 28 + +/** + * CQE Opcode Shift Bytes + */ +#define DOCA_GPUNETIO_VERBS_MLX5_CQE_OPCODE_SHIFT 4 + +#define DOCA_GPUNETIO_VERBS_CQE_SIZE 64 + +#define DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT 8 +/** + * Max RDMA transfer size + */ +#define DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT 30 +#define DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE \ + (1ULL << DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT) // 1GiB + +#ifndef ACCESS_ONCE +#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) +#endif + +#ifndef READ_ONCE +#define READ_ONCE(x) ACCESS_ONCE(x) +#endif + +#ifndef WRITE_ONCE +#define WRITE_ONCE(x, v) (ACCESS_ONCE(x) = (v)) +#endif + +enum { + DOCA_GPUNETIO_IB_MLX5_OPCODE_NOP = 0x00, + DOCA_GPUNETIO_IB_MLX5_OPCODE_SEND_INVAL = 0x01, + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE = 0x08, + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE_IMM = 0x09, + DOCA_GPUNETIO_IB_MLX5_OPCODE_SEND = 0x0a, + DOCA_GPUNETIO_IB_MLX5_OPCODE_SEND_IMM = 0x0b, + DOCA_GPUNETIO_IB_MLX5_OPCODE_TSO = 0x0e, + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_READ = 0x10, + DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_CS = 0x11, + DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA = 0x12, + DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14, + DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15, + DOCA_GPUNETIO_IB_MLX5_OPCODE_FMR = 0x19, + DOCA_GPUNETIO_IB_MLX5_OPCODE_LOCAL_INVAL = 0x1b, + DOCA_GPUNETIO_IB_MLX5_OPCODE_WAIT = 0x0f, + DOCA_GPUNETIO_IB_MLX5_OPCODE_CONFIG_CMD = 0x1f, + DOCA_GPUNETIO_IB_MLX5_OPCODE_SET_PSV = 0x20, + DOCA_GPUNETIO_IB_MLX5_OPCODE_DUMP = 0x23, + DOCA_GPUNETIO_IB_MLX5_OPCODE_UMR = 0x25, + DOCA_GPUNETIO_IB_MLX5_OPCODE_TAG_MATCHING = 0x28, + DOCA_GPUNETIO_IB_MLX5_OPCODE_FLOW_TBL_ACCESS = 0x2c, + DOCA_GPUNETIO_IB_MLX5_OPCODE_MMO = 0x2F, +}; + +enum { + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ON_CQE_ERROR = 0x0, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ON_FIRST_CQE_ERROR = 0x1, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ALWAYS = 0x2, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_AND_EQE = 0x3, +}; + +enum { + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_NO_FENCE = 0x0, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_INITIATOR_SMALL_FENCE = 0x1, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_FENCE = 0x2, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_STRONG_ORDERING = 0x3, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_FENCE_AND_INITIATOR_SMALL_FENCE = 0x4, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_CUSTOM = 0x100, /* None of the previous, use custom value */ +}; + +/** + * GPUNetIO Verbs flags for WQE control segment + */ +enum doca_gpu_dev_verbs_wqe_ctrl_flags { + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE = DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ALWAYS << 2, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_ERROR_UPDATE = + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ON_CQE_ERROR << 2, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_FIRST_CQE_ERROR = + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CE_CQE_ON_FIRST_CQE_ERROR << 2, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_SOLICITED = 1 << 1, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FENCE = + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_FENCE_AND_INITIATOR_SMALL_FENCE << 5, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_INITIATOR_SMALL_FENCE = + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_INITIATOR_SMALL_FENCE << 5, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_STRONG_ORDERING = + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_FM_STRONG_ORDERING << 5 +}; + +enum { + DOCA_GPUNETIO_IB_MLX5_RCV_DBR = 0, + DOCA_GPUNETIO_IB_MLX5_SND_DBR = 1, +}; + +/** + * @enum doca_gpu_dev_verbs_mem_type + * @brief Memory type of the buffer. + */ +enum doca_gpu_dev_verbs_mem_type { + DOCA_GPUNETIO_VERBS_MEM_TYPE_AUTO = + 0, ///< Automatically select the most performant memory type + DOCA_GPUNETIO_VERBS_MEM_TYPE_HOST = 1, ///< Allocate resource on host memory + DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU = 2, ///< Allocate resource on GPU memory + DOCA_GPUNETIO_VERBS_MEM_TYPE_MAX = INT_MAX ///< Sentinel value +}; + +/** + * @enum doca_gpu_dev_verbs_mem_type + * @brief Memory type of the buffer. + */ +enum doca_gpu_dev_verbs_qp_type { + DOCA_GPUNETIO_VERBS_QP_SQ = 0, ///< Use QP SQ +}; + +enum doca_gpu_dev_verbs_exec_scope { + DOCA_GPUNETIO_VERBS_EXEC_SCOPE_THREAD = 0, + DOCA_GPUNETIO_VERBS_EXEC_SCOPE_WARP +}; + +/** + * @enum doca_gpu_dev_verbs_sync_scope + * @brief Synchronization scope. + */ +enum doca_gpu_dev_verbs_sync_scope { + DOCA_GPUNETIO_VERBS_SYNC_SCOPE_SYS = 0, ///< System synchronization scope + DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU = 1, ///< GPU synchronization scope + DOCA_GPUNETIO_VERBS_SYNC_SCOPE_CTA = 2, ///< CTA synchronization scope + DOCA_GPUNETIO_VERBS_SYNC_SCOPE_MAX = INT_MAX ///< Sentinel value +}; + +/** + * @enum doca_gpu_dev_verbs_resource_sharing_mode + * @brief Resource sharing mode. + */ +enum doca_gpu_dev_verbs_resource_sharing_mode { + DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE = + 0, ///< The resource is exclusive to one CUDA thread + DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA = 1, ///< The resource is shared among CUDA + ///< threads in the same CTA + DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU = 2, ///< The resource is shared among CUDA + ///< threads in the same GPU + DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_MAX = INT_MAX ///< Sentinel value +}; + +/** + * @enum doca_gpu_dev_verbs_nic_handler + * @brief The processor that handles the NIC. + */ +enum doca_gpu_dev_verbs_nic_handler { + DOCA_GPUNETIO_VERBS_NIC_HANDLER_AUTO = 0, ///< Automatically select the most performant handler + DOCA_GPUNETIO_VERBS_NIC_HANDLER_CPU_PROXY = 1, ///< CPU Proxy + DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_DB = 2, ///< GPU SM, regular DB + DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_BF = 3, ///< GPU SM, BlueFlame DB + DOCA_GPUNETIO_VERBS_NIC_HANDLER_TYPE_MAX, ///< Sentinel value +}; + +/** + * @enum doca_gpu_dev_verbs_gpu_code_opt + * @brief GPU code optimization for GDA-KI. They can be combined using bitwise or. + */ +enum doca_gpu_dev_verbs_gpu_code_opt { + DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_DEFAULT = 0, ///< Use default code optimization + DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_ASYNC_STORE_RELEASE = (1 << 0), ///< Use store.async.release + ///< code optimization + DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_MAX = INT_MAX ///< Sentinel value +}; + +enum doca_gpu_dev_verbs_signal_op { + DOCA_GPUNETIO_VERBS_SIGNAL_OP_ADD = 0, ///< Signal operation - Add +}; + +enum { + DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_RDMA_WRITE_INL_MIN = 3, + DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_RDMA_WRITE_INL_MAX = 4, + DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_ATOMIC_FA_CAS = 4, + DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_WAIT = 2 +}; + +enum { + DOCA_GPUNETIO_IB_MLX5_INLINE_SEG = 0x80000000, +}; + +enum { + DOCA_GPUNETIO_IB_MLX5_CQE_OWNER_MASK = 1, + DOCA_GPUNETIO_IB_MLX5_CQE_REQ = 0, + DOCA_GPUNETIO_IB_MLX5_CQE_RESP_WR_IMM = 1, + DOCA_GPUNETIO_IB_MLX5_CQE_RESP_SEND = 2, + DOCA_GPUNETIO_IB_MLX5_CQE_RESP_SEND_IMM = 3, + DOCA_GPUNETIO_IB_MLX5_CQE_RESP_SEND_INV = 4, + DOCA_GPUNETIO_IB_MLX5_CQE_RESIZE_CQ = 5, + DOCA_GPUNETIO_IB_MLX5_CQE_NO_PACKET = 6, + DOCA_GPUNETIO_IB_MLX5_CQE_SIG_ERR = 12, + DOCA_GPUNETIO_IB_MLX5_CQE_REQ_ERR = 13, + DOCA_GPUNETIO_IB_MLX5_CQE_RESP_ERR = 14, + DOCA_GPUNETIO_IB_MLX5_CQE_INVALID = 15, +}; + +struct doca_gpunetio_ib_mlx5_wqe_data_seg { + __be32 byte_count; + __be32 lkey; + __be64 addr; +}; + +struct doca_gpunetio_ib_mlx5_wqe_ctrl_seg { + __be32 opmod_idx_opcode; + __be32 qpn_ds; + uint8_t signature; + __be16 dci_stream_channel_id; + uint8_t fm_ce_se; + __be32 imm; +} __attribute__((__packed__)) __attribute__((__aligned__(4))); + +struct doca_gpunetio_ib_mlx5_wqe_raddr_seg { + __be64 raddr; + __be32 rkey; + __be32 reserved; +}; + +struct doca_gpunetio_ib_mlx5_wqe_atomic_seg { + __be64 swap_add; + __be64 compare; +}; + +struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg { + uint32_t byte_count; +}; + +struct doca_gpunetio_ib_mlx5_tm_cqe { + __be32 success; + __be16 hw_phase_cnt; + uint8_t rsvd0[12]; +}; + +struct doca_gpunetio_ib_ibv_tmh { + uint8_t opcode; /* from enum ibv_tmh_op */ + uint8_t reserved[3]; /* must be zero */ + __be32 app_ctx; /* opaque user data */ + __be64 tag; +}; + +struct doca_gpunetio_ib_mlx5_cqe64 { + union { + struct { + uint8_t rsvd0[2]; + __be16 wqe_id; + uint8_t rsvd4[13]; + uint8_t ml_path; + uint8_t rsvd20[4]; + __be16 slid; + __be32 flags_rqpn; + uint8_t hds_ip_ext; + uint8_t l4_hdr_type_etc; + __be16 vlan_info; + }; + struct doca_gpunetio_ib_mlx5_tm_cqe tm_cqe; + /* TMH is scattered to CQE upon match */ + struct doca_gpunetio_ib_ibv_tmh tmh; + }; + __be32 srqn_uidx; + __be32 imm_inval_pkey; + uint8_t app; + uint8_t app_op; + __be16 app_info; + __be32 byte_cnt; + __be64 timestamp; + __be32 sop_drop_qpn; + __be16 wqe_counter; + uint8_t signature; + uint8_t op_own; +}; + +struct doca_gpunetio_ib_mlx5_err_cqe_ex { + uint8_t rsvd0[32]; + __be32 srqn; + uint8_t rsvd1[16]; + uint8_t hw_err_synd; + uint8_t hw_synd_type; + uint8_t vendor_err_synd; + uint8_t syndrome; + __be32 s_wqe_opcode_qpn; + __be16 wqe_counter; + uint8_t signature; + uint8_t op_own; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* DOCA_GPUNETIO_VERBS_DEF_H */ + +/** @} */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_dev.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_dev.h new file mode 100644 index 0000000000000000000000000000000000000000..1067833df653372f370eb9dbeb33e800fd4f20d3 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/common/doca_gpunetio_verbs_dev.h @@ -0,0 +1,203 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_dev.h + * @brief GDAKI common definitions + * + * @{ + */ +#ifndef DOCA_GPUNETIO_VERBS_DEV_H +#define DOCA_GPUNETIO_VERBS_DEV_H + +#include "doca_gpunetio_verbs_def.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @typedef doca_gpu_dev_verbs_ticket_t + * @brief Ticket type used in one-sided APIs. + */ +typedef uint64_t doca_gpu_dev_verbs_ticket_t; + +/** + * Describes GPUNetIO dev WQE crtl segment. + */ +struct doca_gpu_dev_verbs_wqe_ctrl_seg { + __be32 opmod_idx_opcode; /**< opcode + wqe idx */ + __be32 qpn_ds; /**< qp number */ + union { + struct { + uint8_t signature; /**< signature */ + uint8_t rsvd[2]; /**< reserved */ + uint8_t fm_ce_se; /**< fm_ce_se */ + }; + struct { + __be32 signature_fm_ce_se; /**< all flags in or */ + }; + }; + + __be32 imm; /**< immediate */ +} __attribute__((__aligned__(8))); + +/** + * Describes GPUNetIO dev WQE crtl segment. + */ +struct doca_gpu_dev_verbs_wqe_wait_seg { + uint32_t resv[2]; + __be32 max_index; + __be32 qpn_cqn; +} __attribute__((__packed__)) __attribute__((__aligned__(8))); + +/** + * @struct doca_gpu_dev_verbs_addr + * @brief This structure holds the address and key of a memory region. + */ +struct doca_gpu_dev_verbs_addr { + uint64_t addr; + __be32 key; +}; + +/** + * Describes GPUNetIO dev general WQE. + */ +struct doca_gpu_dev_verbs_wqe { + union { + /* Generic inline Data */ + struct { + uint8_t inl_data[64]; + }; + + /* Generic Data */ + struct { + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg1; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg2; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg3; + }; + + /* Read/Write */ + struct { + struct doca_gpu_dev_verbs_wqe_ctrl_seg rw_cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rw_rseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg rw_dseg0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg rw_dseg1; + }; + + /* Atomic */ + struct { + struct doca_gpu_dev_verbs_wqe_ctrl_seg at_cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg at_rseg; + struct doca_gpunetio_ib_mlx5_wqe_atomic_seg at_seg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg at_dseg; + }; + + /* Send */ + struct { + struct doca_gpu_dev_verbs_wqe_ctrl_seg snd_cseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg snd_dseg0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg snd_dseg1; + struct doca_gpunetio_ib_mlx5_wqe_data_seg snd_dseg2; + }; + + /* Wait */ + struct { + struct doca_gpu_dev_verbs_wqe_ctrl_seg wait_cseg; + struct doca_gpu_dev_verbs_wqe_wait_seg wait_dseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg padding0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg padding1; + }; + }; +} __attribute__((__aligned__(8))); + +/** + * Describes GPUNetIO dev CQ + */ +struct doca_gpu_dev_verbs_cq { + uint8_t *cqe_daddr; /**< CQE address */ + uint32_t cq_num; /**< CQ number */ + uint32_t cqe_num; /**< Total number of CQEs in CQ */ + __be32 *dbrec; /**< CQE Doorbell Record */ + uint64_t cqe_ci; /**< CQE Consumer Index */ + uint32_t cqe_mask; /**< Mask of total number of CQEs in CQ */ + uint8_t cqe_size; /**< Single CQE size (64B default) */ + uint64_t cqe_rsvd; /**< All previous CQEs are polled */ + enum doca_gpu_dev_verbs_mem_type mem_type; ///< Memory type of the completion queue +}; + +/** + * Describes GPUNetIO dev QP + */ +struct doca_gpu_dev_verbs_qp { + uint64_t sq_rsvd_index; ///< All WQE slots prior to this index are reserved + uint64_t sq_ready_index; ///< All WQE slots prior to this index are ready + uint64_t sq_wqe_pi; /**< tbd */ + uint32_t sq_num; /**< SQ num */ + uint32_t sq_num_shift8; /**< SQ num << 8 */ + uint32_t sq_num_shift8_be; /**< SQ num << 8 big endian */ + uint32_t sq_num_shift8_be_1ds; /**< SQ num << 8 big endian */ + uint32_t sq_num_shift8_be_2ds; /**< SQ num << 8 big endian */ + uint32_t sq_num_shift8_be_3ds; /**< SQ num << 8 big endian */ + uint32_t sq_num_shift8_be_4ds; /**< SQ num << 8 big endian */ + int sq_lock; /**< SQ lock */ + uint16_t sq_wqe_num; /**< tbd */ + uint16_t sq_wqe_mask; /**< tbd */ + uint8_t *sq_wqe_daddr; /**< tbd */ + __be32 *sq_dbrec; /**< tbd */ + uint64_t *sq_db; /**< tbd */ + + /* Compatibility with DOCA GPUNetIO full, not really used */ + uint32_t rq_num; /**< tbd */ + uint64_t rq_wqe_pi; /**< tbd */ + uint32_t rq_wqe_num; /**< tbd */ + uint32_t rq_wqe_mask; /**< tbd */ + uint8_t *rq_wqe_daddr; /**< tbd */ + __be32 *rq_dbrec; /**< tbd */ + uint32_t rcv_wqe_size; /**< tbd */ + uint64_t rq_rsvd_index; /**< All previous WQEs are reserved */ + uint64_t rq_ready_index; /**< All previous WQEs are ready */ + int rq_lock; /**< RQ lock */ + + struct doca_gpu_dev_verbs_cq cq_sq; /**< SQ CQ connected to QP */ + struct doca_gpu_dev_verbs_cq cq_rq; /**< RQ CQ connected to QP */ + + enum doca_gpu_dev_verbs_nic_handler nic_handler; ///< NIC handler + enum doca_gpu_dev_verbs_mem_type mem_type; ///< Memory type of the completion +} __attribute__((__aligned__(8))); + +#ifdef __cplusplus +} +#endif + +#endif /* DOCA_GPUNETIO_VERBS_DEV_H */ + +/** @} */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_common.cuh b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_common.cuh new file mode 100644 index 0000000000000000000000000000000000000000..293754d59c3212c89ebc2f51c033150857a52c8f --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_common.cuh @@ -0,0 +1,422 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_common.cuh + * @brief GDAKI common device structs and functions + * + * @{ + */ +#ifndef DOCA_GPUNETIO_DEV_VERBS_COMMON_H +#define DOCA_GPUNETIO_DEV_VERBS_COMMON_H + +#include +#include +#include +#include + +#include "../common/doca_gpunetio_verbs_dev.h" + +#if __CUDA_ARCH__ >= 1000 +#define DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE 1 +#endif + +#if __CUDA_ARCH__ >= 900 +#define DOCA_GPUNETIO_VERBS_HAS_TMA_COPY 1 +#endif + +#if CUDA_VERSION >= 12020 +#define DOCA_GPUNETIO_VERBS_HAS_STORE_RELAXED_MMIO 1 +#else +#warning "warning: doca_gpunetio should be used with a CUDA version >= 12020." +#endif + +#if CUDA_VERSION >= 12080 && __CUDA_ARCH__ >= 900 +#define DOCA_GPUNETIO_VERBS_HAS_FENCE_ACQUIRE_RELEASE_PTX 1 +#endif + +/** + * @brief Queries the global timer + * + * @return The value of the global timer + */ +__device__ static __forceinline__ uint64_t doca_gpu_dev_verbs_query_globaltimer() { + uint64_t ret; + asm volatile("mov.u64 %0, %%globaltimer;" : "=l"(ret)::"memory"); + return ret; +} + +__device__ static __forceinline__ unsigned int doca_gpu_dev_verbs_get_lane_id() { + unsigned int ret; + asm volatile("mov.u32 %0, %%laneid;" : "=r"(ret)); + return ret; +} + +__device__ static __forceinline__ uint64_t doca_gpu_dev_verbs_bswap64(uint64_t x) { + uint64_t ret; + asm volatile( + "{\n\t" + ".reg .b32 mask;\n\t" + ".reg .b32 ign;\n\t" + ".reg .b32 lo;\n\t" + ".reg .b32 hi;\n\t" + ".reg .b32 new_lo;\n\t" + ".reg .b32 new_hi;\n\t" + "mov.b32 mask, 0x0123;\n\t" + "mov.b64 {lo,hi}, %1;\n\t" + "prmt.b32 new_hi, lo, ign, mask;\n\t" + "prmt.b32 new_lo, hi, ign, mask;\n\t" + "mov.b64 %0, {new_lo,new_hi};\n\t" + "}" + : "=l"(ret) + : "l"(x)); + return ret; +} + +__device__ static __forceinline__ uint32_t doca_gpu_dev_verbs_bswap32(uint32_t x) { + uint32_t ret; + asm volatile( + "{\n\t" + ".reg .b32 mask;\n\t" + ".reg .b32 ign;\n\t" + "mov.b32 mask, 0x0123;\n\t" + "prmt.b32 %0, %1, ign, mask;\n\t" + "}" + : "=r"(ret) + : "r"(x)); + return ret; +} + +__device__ static __forceinline__ uint16_t doca_gpu_dev_verbs_bswap16(uint16_t x) { + uint16_t ret; + asm volatile( + "{\n\t" + ".reg .b8 hi;\n\t" + ".reg .b8 lo;\n\t" + "mov.b16 {hi, lo}, %1;\n\t" + "mov.b16 %0, {lo, hi};\n\t" + "}" + : "=h"(ret) + : "h"(x)); + return ret; +} + +#ifdef DOCA_GPUNETIO_VERBS_HAS_STORE_RELAXED_MMIO +__device__ static __forceinline__ void doca_gpu_dev_verbs_store_relaxed_mmio(uint64_t *ptr, + uint64_t val) { + asm volatile("st.mmio.relaxed.sys.global.b64 [%0], %1;" : : "l"(ptr), "l"(val)); +} +#endif + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_fence_acquire() { +#ifdef DOCA_GPUNETIO_VERBS_HAS_FENCE_ACQUIRE_RELEASE_PTX + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_CTA) + asm volatile("fence.acquire.cta;"); + else if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("fence.acquire.gpu;"); + else + asm volatile("fence.acquire.sys;"); +#else + // fence.acquire is not available in PTX. Emulate that with st.release. + uint32_t dummy; + const uint32_t val = 0; + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_CTA) + asm volatile("ld.acquire.cta.b32 %0, [%1];" : : "r"(val), "l"(&dummy)); + else if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("ld.acquire.gpu.b32 %0, [%1];" : : "r"(val), "l"(&dummy)); + else + asm volatile("ld.acquire.sys.b32 %0, [%1];" : : "r"(val), "l"(&dummy)); +#endif +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_fence_release() { +#ifdef DOCA_GPUNETIO_VERBS_HAS_FENCE_ACQUIRE_RELEASE_PTX + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_CTA) + asm volatile("fence.release.cta;"); + else if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("fence.release.gpu;"); + else + asm volatile("fence.release.sys;"); +#else + // fence.release is not available in PTX. Emulate that with st.release. + uint32_t dummy; + const uint32_t val = 0; + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_CTA) + asm volatile("st.release.cta.u32 [%0], %1;" : : "l"(&dummy), "r"(val)); + else if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("st.release.gpu.u32 [%0], %1;" : : "l"(&dummy), "r"(val)); + else + asm volatile("st.release.sys.u32 [%0], %1;" : : "l"(&dummy), "r"(val)); +#endif +} + +#ifdef DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_async_store_release(uint32_t *ptr, + uint32_t val) { + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("st.async.mmio.release.gpu.b32 [%0], %1;" : : "l"(ptr), "r"(val)); + else + asm volatile("st.async.mmio.release.sys.global.b32 [%0], %1;" : : "l"(ptr), "r"(val)); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_async_store_release(uint64_t *ptr, + uint64_t val) { + if (sync_scope == DOCA_GPUNETIO_VERBS_SYNC_SCOPE_GPU) + asm volatile("st.async.mmio.release.gpu.global.b64 [%0], %1;" : : "l"(ptr), "l"(val)); + else + asm volatile("st.async.mmio.release.sys.global.b64 [%0], %1;" : : "l"(ptr), "l"(val)); +} +#endif + +__device__ static __forceinline__ bool doca_gpu_dev_verbs_isaligned(void *ptr, size_t alignment) { + bool status; + status = (((uintptr_t)ptr & (alignment - 1)) == 0); + return status; +} + +/** + * @brief Copy data from src to dst. The data must have natural alignment with it's size. + * + * @param dst - Destination pointer + * @param src - Source pointer + * @param bytes - Number of bytes to copy + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_memcpy_aligned_data(void *dst, void *src, + size_t bytes) { + size_t remaining_bytes = bytes; + size_t copied_size; + while (remaining_bytes > 0) { + if (remaining_bytes >= sizeof(uint32_t)) { + *(uint32_t *)dst = *(uint32_t *)src; + copied_size = sizeof(uint32_t); + } else if (remaining_bytes >= sizeof(uint16_t)) { + *(uint16_t *)dst = *(uint16_t *)src; + copied_size = sizeof(uint16_t); + } else { + *(uint8_t *)dst = *(uint8_t *)src; + copied_size = sizeof(uint8_t); + } + remaining_bytes -= copied_size; + dst = (void *)((uintptr_t)dst + copied_size); + src = (void *)((uintptr_t)src + copied_size); + } +} + +/** + * @brief Copy data from src to dst. The data may or may not have natural alignment with it's size. + * + * @param dst - Destination pointer + * @param src - Source pointer + * @param bytes - Number of bytes to copy + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_memcpy_data(void *dst, void *src, + size_t bytes) { + size_t remaining_bytes = bytes; + size_t copied_size; + while (remaining_bytes > 0) { + if (doca_gpu_dev_verbs_isaligned(dst, sizeof(uint64_t)) && + doca_gpu_dev_verbs_isaligned(src, sizeof(uint64_t)) && + remaining_bytes >= sizeof(uint64_t)) { + *(uint64_t *)dst = *(uint64_t *)src; + copied_size = sizeof(uint64_t); + } else if (doca_gpu_dev_verbs_isaligned(dst, sizeof(uint32_t)) && + doca_gpu_dev_verbs_isaligned(src, sizeof(uint32_t)) && + remaining_bytes >= sizeof(uint32_t)) { + *(uint32_t *)dst = *(uint32_t *)src; + copied_size = sizeof(uint32_t); + } else if (doca_gpu_dev_verbs_isaligned(dst, sizeof(uint16_t)) && + doca_gpu_dev_verbs_isaligned(src, sizeof(uint16_t)) && + remaining_bytes >= sizeof(uint16_t)) { + *(uint16_t *)dst = *(uint16_t *)src; + copied_size = sizeof(uint16_t); + } else { + *(uint8_t *)dst = *(uint8_t *)src; + copied_size = sizeof(uint8_t); + } + remaining_bytes -= copied_size; + dst = (void *)((uintptr_t)dst + copied_size); + src = (void *)((uintptr_t)src + copied_size); + } +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_memcpy_inl_aligned_data(T *dst, T *src, + size_t bytes) { + size_t remaining_bytes = bytes; + const size_t copied_size = sizeof(T); + while (remaining_bytes > 0) { + remaining_bytes -= copied_size; + dst = (void *)((uintptr_t)dst + copied_size); + src = (void *)((uintptr_t)src + copied_size); + } +} + +template +__device__ static __forceinline__ T doca_gpu_dev_verbs_atomic_max(T *ptr, T val) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) { + T old_val = *ptr; + *ptr = max(old_val, val); + return old_val; + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) { + cuda::atomic_ref ptr_aref(*ptr); + return ptr_aref.fetch_max( + val, need_fence_acquire ? cuda::memory_order_acquire : cuda::memory_order_relaxed); + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) { + cuda::atomic_ref ptr_aref(*ptr); + return ptr_aref.fetch_max( + val, need_fence_acquire ? cuda::memory_order_acquire : cuda::memory_order_relaxed); + } + return 0; +} + +template +__device__ static __forceinline__ T doca_gpu_dev_verbs_atomic_add(T *ptr, T val) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) { + T old_val = *ptr; + *ptr = old_val + val; + return old_val; + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) { + cuda::atomic_ref ptr_aref(*ptr); + return ptr_aref.fetch_add(val, cuda::memory_order_relaxed); + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) { + cuda::atomic_ref ptr_aref(*ptr); + return ptr_aref.fetch_add(val, cuda::memory_order_relaxed); + } + return 0; +} + +template +__device__ static __forceinline__ T doca_gpu_dev_verbs_atomic_read(T *ptr) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) + return *ptr; + else + return READ_ONCE(*ptr); +} + +/** + * @brief Lock a resource + * + * @param lock - Pointer to the lock + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_lock(int *lock) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) { + *lock = 1; + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) { + while (atomicCAS_block(lock, 0, 1) != 0) continue; + doca_gpu_dev_verbs_fence_acquire(); + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) { + while (atomicCAS(lock, 0, 1) != 0) continue; + doca_gpu_dev_verbs_fence_acquire(); + } +} + +/** + * @brief Unlock a resource + * + * @param lock - Pointer to the lock + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_unlock(int *lock) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) { + *lock = 0; + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) { + cuda::atomic_ref lock_aref(*lock); + lock_aref.store(0, cuda::memory_order_release); + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) { + cuda::atomic_ref lock_aref(*lock); + lock_aref.store(0, cuda::memory_order_release); + } +} + +__device__ static __forceinline__ uint8_t doca_gpu_dev_verbs_load_relaxed_sys_global(uint8_t *ptr) { + uint16_t ret; + asm volatile("ld.relaxed.sys.global.L1::no_allocate.b8 %0, [%1];" : "=h"(ret) : "l"(ptr)); + return (uint8_t)ret; +} + +__device__ static __forceinline__ uint32_t +doca_gpu_dev_verbs_load_relaxed_sys_global(uint32_t *ptr) { + uint32_t ret; + asm volatile("ld.relaxed.sys.global.L1::no_allocate.b32 %0, [%1];" : "=r"(ret) : "l"(ptr)); + return ret; +} + +__device__ static __forceinline__ uint64_t +doca_gpu_dev_verbs_load_relaxed_sys_global(uint64_t *ptr) { + uint64_t ret; + asm volatile("ld.relaxed.sys.global.L1::no_allocate.b64 %0, [%1];" : "=l"(ret) : "l"(ptr)); + return ret; +} + +template +__device__ static __forceinline__ uint64_t doca_gpu_dev_verbs_load_relaxed(uint64_t *ptr) { + uint64_t ret = 0; + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) + ret = *ptr; + else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) + asm volatile("ld.relaxed.cta.b64 %0, [%1];" : "=l"(ret) : "l"(ptr)); + else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) + asm volatile("ld.relaxed.gpu.b64 %0, [%1];" : "=l"(ret) : "l"(ptr)); + return ret; +} + +/** + * @brief Calculate the ceiling of x / y, where y is (2^denominator_shift) + * + * @param x - Numerator + * @param denominator_shift - Denominator shift (y = 2^denominator_shift) + * @return The ceiling of x / y + */ +__device__ static __forceinline__ uint64_t +doca_gpu_dev_verbs_div_ceil_aligned_pow2(uint64_t x, unsigned int denominator_shift) { + uint64_t y = 1ULL << denominator_shift; + return ((x & ~(y - 1)) >> denominator_shift) + (!!(x & (y - 1))); +} + +/** + * @brief Calculate the ceiling of x / y, where y is (2^denominator_shift). + * The result must fit in 32 bits. This is a faster implementation than gdaki_div_ceil_aligned_pow2. + * + * @param x - Numerator + * @param denominator_shift - Denominator shift (y = 2^denominator_shift) + * @return The ceiling of x / y + */ +__device__ static __forceinline__ uint32_t +doca_gpu_dev_verbs_div_ceil_aligned_pow2_32bits(uint64_t x, int denominator_shift) { + return uint32_t(x >> denominator_shift) + !!__funnelshift_r(0, uint32_t(x), denominator_shift); +} + +#endif /* DOCA_GPUNETIO_DEV_VERBS_COMMON_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_counter.cuh b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_counter.cuh new file mode 100644 index 0000000000000000000000000000000000000000..f178866435ea82b20eee01e6c7305d3e8c4312cb --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_counter.cuh @@ -0,0 +1,421 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_counter.cuh + * @brief GDAKI CUDA device functions for One-sided Shared QP ops + * + * @{ + */ + +#ifndef DOCA_GPUNETIO_DEV_VERBS_COUNTER_CUH +#define DOCA_GPUNETIO_DEV_VERBS_COUNTER_CUH + +#include "doca_gpunetio_dev_verbs_qp.cuh" +#include "doca_gpunetio_dev_verbs_cq.cuh" + +/** + * @brief Submit work requests to the NIC using the DB protocol. + * + * @param qps - Array of Queue Pair (QP) + * @param prod_indices - Array of producer indices + * @param num_qps - Number of Queue Pair (QP) + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_db_multi_qps( + struct doca_gpu_dev_verbs_qp **qps, uint64_t *prod_indices) { + DOCA_GPUNETIO_VERBS_ASSERT(num_qps >= 2); + uint64_t old_prod_indices[num_qps]; + __be64 db_vals[num_qps]; + +#pragma unroll 2 + for (unsigned int i = 0; i < num_qps; i++) { + doca_gpu_dev_verbs_lock(&qps[i]->sq_lock); + old_prod_indices[i] = doca_gpu_dev_verbs_atomic_max( + &qps[i]->sq_wqe_pi, prod_indices[i]); + if (old_prod_indices[i] < prod_indices[i]) { + // Early rining of the DB to push WQEs to the NIC ASAP. + __be64 *db_ptr = (__be64 *)__ldg((uintptr_t *)&qps[i]->sq_db); + db_vals[i] = doca_gpu_dev_verbs_prepare_db(qps[i], prod_indices[i]); + +#ifdef DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE + if (code_opt & DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_ASYNC_STORE_RELEASE) { + doca_gpu_dev_verbs_async_store_release((uint64_t *)db_ptr, + (uint64_t)db_vals[i]); + } else +#endif + { + doca_gpu_dev_verbs_fence_release(); +#ifdef DOCA_GPUNETIO_VERBS_HAS_STORE_RELAXED_MMIO + { doca_gpu_dev_verbs_store_relaxed_mmio((uint64_t *)db_ptr, (uint64_t)db_vals[i]); } +#else + { + cuda::atomic_ref db_ptr_aref( + *((uint64_t *)db_ptr)); + db_ptr_aref.store(db_vals[i], cuda::memory_order_relaxed); + } +#endif + } + } + } + +#pragma unroll 2 + for (unsigned int i = 0; i < num_qps; i++) { + if (old_prod_indices[i] < prod_indices[i]) { + // In case the recovery path is triggered, the later DB ringing will cover for + // correctness. + doca_priv_gpu_dev_verbs_update_dbr(qps[i], prod_indices[i]); + __be64 *db_ptr = (__be64 *)__ldg((uintptr_t *)&qps[i]->sq_db); +#ifdef DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE + if (code_opt & DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_ASYNC_STORE_RELEASE) { + doca_gpu_dev_verbs_async_store_release((uint64_t *)db_ptr, + (uint64_t)db_vals[i]); + } else +#endif + { + doca_gpu_dev_verbs_fence_release(); +#ifdef DOCA_GPUNETIO_VERBS_HAS_STORE_RELAXED_MMIO + { doca_gpu_dev_verbs_store_relaxed_mmio((uint64_t *)db_ptr, (uint64_t)db_vals[i]); } +#else + { + cuda::atomic_ref db_ptr_aref( + *((uint64_t *)db_ptr)); + db_ptr_aref.store(db_vals[i], cuda::memory_order_relaxed); + } +#endif + } + } + doca_gpu_dev_verbs_unlock(&qps[i]->sq_lock); + } +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_proxy_multi_qps( + struct doca_gpu_dev_verbs_qp **qps, uint64_t *prod_indices) { + DOCA_GPUNETIO_VERBS_ASSERT(num_qps >= 2); + doca_gpu_dev_verbs_fence_release(); + +#pragma unroll 2 + for (unsigned int i = 0; i < num_qps; i++) { + doca_gpu_dev_verbs_ring_proxy(qps[i], prod_indices[i]); + } +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_multi_qps( + struct doca_gpu_dev_verbs_qp **qps, uint64_t *prod_indices) { + DOCA_GPUNETIO_VERBS_ASSERT(num_qps >= 2); + if (nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_AUTO) { + const enum doca_gpu_dev_verbs_nic_handler qp_nic_handler = + (enum doca_gpu_dev_verbs_nic_handler)__ldg((int *)&qps[0]->nic_handler); + if (qp_nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_DB) + doca_gpu_dev_verbs_submit_db_multi_qps( + qps, prod_indices); + else + doca_gpu_dev_verbs_submit_proxy_multi_qps( + qps, prod_indices); + } else if (nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_DB) { + doca_gpu_dev_verbs_submit_db_multi_qps( + qps, prod_indices); + } else { + doca_gpu_dev_verbs_submit_proxy_multi_qps( + qps, prod_indices); + } +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_counter( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_qp *companion_qp, + struct doca_gpu_dev_verbs_addr counter_raddr, struct doca_gpu_dev_verbs_addr counter_laddr, + uint64_t counter_val) { + constexpr unsigned int num_qps = 2; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx; + uint64_t wqe_idx; + size_t remaining_size = size; + size_t size_; + uint64_t num_chunks = + doca_gpu_dev_verbs_div_ceil_aligned_pow2(size, DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT); + num_chunks = num_chunks > 1 ? num_chunks : 1; + + // DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, num_chunks); +#pragma unroll 1 + for (uint64_t i = 0; i < num_chunks; i++) { + wqe_idx = base_wqe_idx + i; + size_ = remaining_size > DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + ? DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + : remaining_size; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + [[likely]] if (size_ > 0) { + doca_gpu_dev_verbs_wqe_prepare_write( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, 0, + raddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), raddr.key, + laddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), laddr.key, size_); + } else { + doca_gpu_dev_verbs_wqe_prepare_nop(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE); + } + remaining_size -= size_; + } + + doca_gpu_dev_verbs_mark_wqes_ready(qp, base_wqe_idx, wqe_idx); + + uint64_t companion_base_wqe_idx = + doca_gpu_dev_verbs_reserve_wq_slots(companion_qp, 2); + uint64_t companion_wqe_idx = companion_base_wqe_idx; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_wait(companion_qp, wqe_ptr, companion_wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, wqe_idx, + qp->cq_sq.cq_num); + + ++companion_wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + companion_qp, wqe_ptr, companion_wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, counter_raddr.addr, counter_raddr.key, + counter_laddr.addr, counter_laddr.key, sizeof(uint64_t), counter_val, 0); + doca_gpu_dev_verbs_mark_wqes_ready(companion_qp, companion_base_wqe_idx, + companion_wqe_idx); + + doca_gpu_dev_verbs_qp *qps[num_qps] = {qp, companion_qp}; + uint64_t prod_indices[num_qps] = {wqe_idx + 1, companion_wqe_idx + 1}; + doca_gpu_dev_verbs_submit_multi_qps( + qps, prod_indices); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p_counter( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + struct doca_gpu_dev_verbs_qp *companion_qp, struct doca_gpu_dev_verbs_addr counter_raddr, + struct doca_gpu_dev_verbs_addr counter_laddr, uint64_t counter_val) { + constexpr unsigned int num_qps = 2; + uint64_t wqe_idx; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + + // DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, 1); + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_header(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, + raddr.addr, raddr.key, sizeof(T)); + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_data(qp, wqe_ptr, value); + doca_gpu_dev_verbs_mark_wqes_ready(qp, wqe_idx, wqe_idx); + + uint64_t companion_base_wqe_idx = + doca_gpu_dev_verbs_reserve_wq_slots(companion_qp, 2); + uint64_t companion_wqe_idx = companion_base_wqe_idx; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_wait(companion_qp, wqe_ptr, companion_wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, wqe_idx, + qp->cq_sq.cq_num); + + ++companion_wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + companion_qp, wqe_ptr, companion_wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, counter_raddr.addr, counter_raddr.key, + counter_laddr.addr, counter_laddr.key, sizeof(uint64_t), counter_val, 0); + doca_gpu_dev_verbs_mark_wqes_ready(companion_qp, companion_base_wqe_idx, + companion_wqe_idx); + + doca_gpu_dev_verbs_qp *qps[num_qps] = {qp, companion_qp}; + uint64_t prod_indices[num_qps] = {wqe_idx + 1, companion_wqe_idx + 1}; + doca_gpu_dev_verbs_submit_multi_qps( + qps, prod_indices); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_signal_counter( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + struct doca_gpu_dev_verbs_qp *companion_qp, struct doca_gpu_dev_verbs_addr counter_raddr, + struct doca_gpu_dev_verbs_addr counter_laddr, uint64_t counter_val) { + constexpr unsigned int num_qps = 2; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx; + uint64_t wqe_idx; + size_t remaining_size = size; + size_t size_; + uint64_t num_chunks = + doca_gpu_dev_verbs_div_ceil_aligned_pow2(size, DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT); + num_chunks = num_chunks > 1 ? num_chunks : 1; + + // DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + // Put + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, num_chunks + 1); +#pragma unroll 1 + for (uint64_t i = 0; i < num_chunks; i++) { + wqe_idx = base_wqe_idx + i; + size_ = remaining_size > DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + ? DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + : remaining_size; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + [[likely]] if (size_ > 0) { + doca_gpu_dev_verbs_wqe_prepare_write( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, 0, + raddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), raddr.key, + laddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), laddr.key, size_); + } else { + doca_gpu_dev_verbs_wqe_prepare_nop(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE); + } + remaining_size -= size_; + } + + // Signal + ++wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, sig_raddr.addr, sig_raddr.key, sig_laddr.addr, + sig_laddr.key, sizeof(uint64_t), sig_val, 0); + + doca_gpu_dev_verbs_mark_wqes_ready(qp, base_wqe_idx, wqe_idx); + + // Counter + uint64_t companion_base_wqe_idx = + doca_gpu_dev_verbs_reserve_wq_slots(companion_qp, 2); + uint64_t companion_wqe_idx = companion_base_wqe_idx; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_wait(companion_qp, wqe_ptr, companion_wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, wqe_idx, + qp->cq_sq.cq_num); + + ++companion_wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + companion_qp, wqe_ptr, companion_wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, counter_raddr.addr, counter_raddr.key, + counter_laddr.addr, counter_laddr.key, sizeof(uint64_t), counter_val, 0); + doca_gpu_dev_verbs_mark_wqes_ready(companion_qp, companion_base_wqe_idx, + companion_wqe_idx); + + doca_gpu_dev_verbs_qp *qps[num_qps] = {qp, companion_qp}; + uint64_t prod_indices[num_qps] = {wqe_idx + 1, companion_wqe_idx + 1}; + doca_gpu_dev_verbs_submit_multi_qps( + qps, prod_indices); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_signal_counter( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + struct doca_gpu_dev_verbs_qp *companion_qp, struct doca_gpu_dev_verbs_addr counter_raddr, + struct doca_gpu_dev_verbs_addr counter_laddr, uint64_t counter_val) { + constexpr unsigned int num_qps = 2; + uint64_t wqe_idx; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + + // DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + // Signal + wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, 1); + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, sig_raddr.addr, sig_raddr.key, sig_laddr.addr, + sig_laddr.key, sizeof(uint64_t), sig_val, 0); + + doca_gpu_dev_verbs_mark_wqes_ready(qp, wqe_idx, wqe_idx); + + // Counter + uint64_t companion_base_wqe_idx = + doca_gpu_dev_verbs_reserve_wq_slots(companion_qp, 2); + uint64_t companion_wqe_idx = companion_base_wqe_idx; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_wait(companion_qp, wqe_ptr, companion_wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, wqe_idx, + qp->cq_sq.cq_num); + + ++companion_wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(companion_qp, companion_wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + companion_qp, wqe_ptr, companion_wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, counter_raddr.addr, counter_raddr.key, + counter_laddr.addr, counter_laddr.key, sizeof(uint64_t), counter_val, 0); + doca_gpu_dev_verbs_mark_wqes_ready(companion_qp, companion_base_wqe_idx, + companion_wqe_idx); + + doca_gpu_dev_verbs_qp *qps[num_qps] = {qp, companion_qp}; + uint64_t prod_indices[num_qps] = {wqe_idx + 1, companion_wqe_idx + 1}; + doca_gpu_dev_verbs_submit_multi_qps( + qps, prod_indices); +} + +#endif /* DOCA_GPUNETIO_DEV_VERBS_COUNTER_CUH */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_cq.cuh b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_cq.cuh new file mode 100644 index 0000000000000000000000000000000000000000..ae834a7ba4f445fdad5d5ab57d4ccac4d1e3b5d0 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_cq.cuh @@ -0,0 +1,295 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_cq.cuh + * @brief GDAKI CUDA device functions for CQ management + * + * @{ + */ +#ifndef DOCA_GPUNETIO_DEV_VERBS_CQ_H +#define DOCA_GPUNETIO_DEV_VERBS_CQ_H + +#include + +#include "doca_gpunetio_dev_verbs_common.cuh" + +/** + * @brief Return device CQ SQ pointer from a device QP + * + * @param[in] qp - Dev QP pointer + * + * @return Dev CQ pointer + */ +__device__ static __forceinline__ struct doca_gpu_dev_verbs_cq *doca_gpu_dev_verbs_qp_get_cq_sq( + struct doca_gpu_dev_verbs_qp *qp) { + return &(qp->cq_sq); +} + +/** + * @brief Increament and round up CQE id + * + * @param[in] cqe_idx - cqe idx + * @param[in] increment - cqe idx increment + * + * @return cqe incremented idx + */ +__device__ static __forceinline__ uint32_t doca_gpu_dev_verbs_cqe_idx_inc_mask(uint32_t cqe_idx, + uint32_t increment) { + return (cqe_idx + increment) & DOCA_GPUNETIO_VERBS_CQE_CI_MASK; +} + +#if DOCA_GPUNETIO_VERBS_ENABLE_DEBUG == 1 +/** + * @brief Print error CQE values + * + * @param[in] cqe64 - erroneous cqe + * + * @return + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_cq_print_cqe_err( + struct doca_gpunetio_ib_mlx5_cqe64 *cqe64) { + struct doca_gpunetio_ib_mlx5_err_cqe_ex *err_cqe = + (struct doca_gpunetio_ib_mlx5_err_cqe_ex *)cqe64; + + printf( + "got completion with err: " + "syndrome=%#x, vendor_err_synd=%#x, " + "hw_err_synd=%#x, hw_synd_type=%#x, wqe_counter=%u\n", + err_cqe->syndrome, err_cqe->vendor_err_synd, err_cqe->hw_err_synd, err_cqe->hw_synd_type, + doca_gpu_dev_verbs_bswap16(err_cqe->wqe_counter)); +} +#endif + +/** + * @brief [Internal] Poll the Completion Queue (CQ) at a specific index. + * This function does not update the SW consumer index nor guarantees the ordering. + * It also does not wait for the completion to arrive. + * + * @param qp - Queue Pair (QP) + * @param cons_index - Index of the Completion Queue (CQ) to be polled + */ +template +__device__ static __forceinline__ int doca_priv_gpu_dev_verbs_poll_one_cq_at( + struct doca_gpu_dev_verbs_cq *cq, uint64_t cons_index) { + uint8_t *cqe = (uint8_t *)__ldg((uintptr_t *)&cq->cqe_daddr); + const uint32_t cqe_num = __ldg(&cq->cqe_num); + uint32_t idx = cons_index & (cqe_num - 1); + struct doca_gpunetio_ib_mlx5_cqe64 *cqe64 = + (struct doca_gpunetio_ib_mlx5_cqe64 *)(cqe + (idx * DOCA_GPUNETIO_VERBS_CQE_SIZE)); + + uint64_t cqe_ci = doca_gpu_dev_verbs_load_relaxed(&cq->cqe_ci); + + if (cons_index < cqe_ci) return 0; + if (cons_index >= cqe_ci + cqe_num) return EBUSY; + + uint8_t opown; + uint8_t opcode; + bool observed_completion; + +#if __CUDA_ARCH__ >= 900 + opown = doca_gpu_dev_verbs_load_relaxed_sys_global((uint8_t *)&cqe64->op_own); + + observed_completion = + !((opown & DOCA_GPUNETIO_IB_MLX5_CQE_OWNER_MASK) ^ !!(cons_index & cqe_num)); +#else + uint32_t cqe_chunk; + uint16_t wqe_counter; + + cqe_chunk = doca_gpu_dev_verbs_load_relaxed_sys_global((uint32_t *)&cqe64->wqe_counter); + cqe_chunk = doca_gpu_dev_verbs_bswap32(cqe_chunk); + wqe_counter = cqe_chunk >> 16; + opown = cqe_chunk & 0xff; + + observed_completion = + !((opown & DOCA_GPUNETIO_IB_MLX5_CQE_OWNER_MASK) ^ !!(cons_index & cqe_num)) && + (wqe_counter == ((uint32_t)cons_index & 0xffff)); +#endif + + if (!observed_completion) return EBUSY; + + opcode = opown >> DOCA_GPUNETIO_VERBS_MLX5_CQE_OPCODE_SHIFT; + +#if DOCA_GPUNETIO_VERBS_ENABLE_DEBUG == 1 + if (opcode == DOCA_GPUNETIO_IB_MLX5_CQE_REQ_ERR) doca_gpu_dev_verbs_cq_print_cqe_err(cqe64); +#endif + return (opcode == DOCA_GPUNETIO_IB_MLX5_CQE_REQ_ERR) * -EIO; +} + +/** + * @brief Poll the Completion Queue (CQ) at a specific index. This function does + * not wait for the completion to arrive. + * + * @param qp - Queue Pair (QP) + * @param cons_index - Index of the Completion Queue (CQ) to be polled + * @return On success, doca_gpu_dev_verbs_poll_one_cq_at() returns 0. If the completion is + * not available, returns EBUSY. If it is a completion with error, returns a + * negative value. + */ +template +__device__ static __forceinline__ int doca_gpu_dev_verbs_poll_one_cq_at( + struct doca_gpu_dev_verbs_cq *cq, uint64_t cons_index) { + int status = + doca_priv_gpu_dev_verbs_poll_one_cq_at(cq, cons_index); + if (status == 0) { + doca_gpu_dev_verbs_fence_acquire(); + doca_gpu_dev_verbs_atomic_max(&cq->cqe_ci, cons_index + 1); + } + return status; +} + +/** + * @brief [Internal] Poll the Completion Queue (CQ) at a specific index. + * This function does not update the SW consumer index nor guarantees the ordering. + * + * @param qp - Queue Pair (QP) + * @param cons_index - Index of the Completion Queue (CQ) to be polled + */ +template +__device__ static __forceinline__ int doca_priv_gpu_dev_verbs_poll_cq_at( + struct doca_gpu_dev_verbs_cq *cq, uint64_t cons_index) { + struct doca_gpunetio_ib_mlx5_cqe64 *cqe = + (struct doca_gpunetio_ib_mlx5_cqe64 *)__ldg((uintptr_t *)&cq->cqe_daddr); + const uint32_t cqe_num = __ldg(&cq->cqe_num); + uint32_t idx = cons_index & (cqe_num - 1); + struct doca_gpunetio_ib_mlx5_cqe64 *cqe64 = &cqe[idx]; + uint8_t opown; + uint8_t opcode; + uint64_t cqe_ci; +#if __CUDA_ARCH__ >= 900 + do { + cqe_ci = doca_gpu_dev_verbs_load_relaxed(&cq->cqe_ci); + [[unlikely]] if (cons_index < cqe_ci) + return 0; + opown = doca_gpu_dev_verbs_load_relaxed_sys_global((uint8_t *)&cqe64->op_own); + } while ((cons_index >= cqe_ci + cqe_num) || + ((cqe_ci <= cons_index) && + ((opown & DOCA_GPUNETIO_IB_MLX5_CQE_OWNER_MASK) ^ !!(cons_index & cqe_num)))); +#else + uint32_t cqe_chunk; + uint16_t wqe_counter; + + do { + cqe_ci = doca_gpu_dev_verbs_load_relaxed(&cq->cqe_ci); + [[unlikely]] if (cons_index < cqe_ci) + return 0; + cqe_chunk = doca_gpu_dev_verbs_load_relaxed_sys_global((uint32_t *)&cqe64->wqe_counter); + cqe_chunk = doca_gpu_dev_verbs_bswap32(cqe_chunk); + wqe_counter = cqe_chunk >> 16; + opown = cqe_chunk & 0xff; + } while ((cons_index >= cqe_ci + cqe_num) || + ((cqe_ci <= cons_index) && + (((opown & DOCA_GPUNETIO_IB_MLX5_CQE_OWNER_MASK) ^ !!(cons_index & cqe_num)) || + (wqe_counter != ((uint32_t)cons_index & 0xffff))))); +#endif + + opcode = opown >> DOCA_GPUNETIO_VERBS_MLX5_CQE_OPCODE_SHIFT; + +#if DOCA_GPUNETIO_VERBS_ENABLE_DEBUG == 1 + if (opcode == DOCA_GPUNETIO_IB_MLX5_CQE_REQ_ERR) doca_gpu_dev_verbs_cq_print_cqe_err(cqe64); +#endif + return (opcode == DOCA_GPUNETIO_IB_MLX5_CQE_REQ_ERR) * -EIO; +} + +/** + * @brief Poll the Completion Queue (CQ) at a specific index. This function waits for the completion + * to arrive. + * + * @param qp - Queue Pair (QP) + * @param cons_index - Index of the Completion Queue (CQ) to be polled + * @return On success, doca_gpu_dev_verbs_poll_cq_at() returns 0. If it is a completion with + * error, returns a negative value. + */ +template +__device__ static __forceinline__ int doca_gpu_dev_verbs_poll_cq_at( + struct doca_gpu_dev_verbs_cq *cq, uint64_t cons_index) { + int status = doca_priv_gpu_dev_verbs_poll_cq_at(cq, cons_index); + if (status == 0) { + doca_gpu_dev_verbs_fence_acquire(); + doca_gpu_dev_verbs_atomic_max(&cq->cqe_ci, cons_index + 1); + } + return status; +} + +/** + * @brief Poll the Completion Queue (CQ). This function waits for the completion to arrive. + * + * @param qp - Queue Pair (QP) + * @param count - Number of completions to poll + * @return On success, doca_gpu_dev_verbs_poll_cq() returns 0. If it is a completion with + * error, returns a negative value. + */ +template +__device__ static __forceinline__ int doca_gpu_dev_verbs_poll_cq(struct doca_gpu_dev_verbs_cq *cq, + uint32_t count) { + uint64_t cons_index = + doca_gpu_dev_verbs_atomic_add(&cq->cqe_rsvd, count) + + count - 1; + return doca_gpu_dev_verbs_poll_cq_at(cq, cons_index); +} + +/** + * @brief Increment CQ DBREC + * + * @param[in] cq - GPU Completion Queue + * @param[in] cqe_num - CQE num to increment + * + * @return new CQE consumer index + */ +template +__device__ static __forceinline__ uint32_t +doca_gpu_dev_verbs_cq_update_dbrec(struct doca_gpu_dev_verbs_cq *cq, uint32_t cqe_num) { + uint32_t cqe_ci = DOCA_GPUNETIO_VOLATILE(cq->cqe_ci); + + cqe_ci = (cqe_ci + cqe_num) & DOCA_GPUNETIO_VERBS_CQE_CI_MASK; + if (is_overrun == false) { + asm volatile("st.release.gpu.global.L1::no_allocate.b32 [%0], %1;" + : + : "l"(cq->dbrec), "r"(doca_gpu_dev_verbs_bswap32(cqe_ci))); + } + + DOCA_GPUNETIO_VOLATILE(cq->cqe_ci) = cqe_ci; + + return cqe_ci; +} + +#endif /* DOCA_GPUNETIO_DEV_VERBS_CQ_H */ + +/** @} */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_onesided.cuh b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_onesided.cuh new file mode 100644 index 0000000000000000000000000000000000000000..57c65bec1c880e3f5fa9ae5403e1b1b1580b53f3 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_onesided.cuh @@ -0,0 +1,508 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_onesided.cuh + * @brief GDAKI CUDA device functions for One-sided Shared QP ops + * + * @{ + */ + +#ifndef DOCA_GPUNETIO_DEV_VERBS_ONESIDED_CUH +#define DOCA_GPUNETIO_DEV_VERBS_ONESIDED_CUH + +#include "doca_gpunetio_dev_verbs_qp.cuh" +#include "doca_gpunetio_dev_verbs_cq.cuh" + +/* **************************************** PUT **************************************** */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_thread( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, doca_gpu_dev_verbs_ticket_t *out_ticket) { + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx; + uint64_t wqe_idx; + size_t remaining_size = size; + size_t size_; + uint32_t num_chunks = doca_gpu_dev_verbs_div_ceil_aligned_pow2_32bits( + size, DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT); + num_chunks = num_chunks > 1 ? num_chunks : 1; + + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, num_chunks); +#pragma unroll 1 + for (uint64_t i = 0; i < num_chunks; i++) { + wqe_idx = base_wqe_idx + i; + size_ = remaining_size > DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + ? DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + : remaining_size; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + [[likely]] if (size_ > 0) { + doca_gpu_dev_verbs_wqe_prepare_write( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, 0, + raddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), raddr.key, + laddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), laddr.key, size_); + } else { + doca_gpu_dev_verbs_wqe_prepare_nop(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE); + } + remaining_size -= size_; + } + + doca_gpu_dev_verbs_mark_wqes_ready(qp, base_wqe_idx, wqe_idx); + doca_gpu_dev_verbs_submit(qp, wqe_idx + 1); + + *out_ticket = wqe_idx; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_warp( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, doca_gpu_dev_verbs_ticket_t *out_ticket) { +#if __CUDA_ARCH__ >= 800 + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx = 0, wqe_idx; + uint32_t base_wqe_idx_0 = 0, base_wqe_idx_1 = 0; + uint32_t lane_idx = doca_gpu_dev_verbs_get_lane_id(); + + DOCA_GPUNETIO_VERBS_ASSERT(size <= DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE); + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + + if (lane_idx == 0) { + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots( + qp, DOCA_GPUNETIO_VERBS_WARP_SIZE); + base_wqe_idx_0 = (uint32_t)base_wqe_idx; + base_wqe_idx_1 = (uint32_t)(base_wqe_idx >> 32); + } + __syncwarp(); + + base_wqe_idx_0 = __reduce_max_sync(DOCA_GPUNETIO_VERBS_WARP_FULL_MASK, base_wqe_idx_0); + base_wqe_idx_1 = __reduce_max_sync(DOCA_GPUNETIO_VERBS_WARP_FULL_MASK, base_wqe_idx_1); + base_wqe_idx = ((uint64_t)base_wqe_idx_1) << 32 | base_wqe_idx_0; + + wqe_idx = base_wqe_idx + lane_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_wqe_prepare_write(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, 0, raddr.addr, + raddr.key, laddr.addr, laddr.key, size); + + __syncwarp(); + if (lane_idx == 0) { + doca_gpu_dev_verbs_mark_wqes_ready( + qp, base_wqe_idx, base_wqe_idx + DOCA_GPUNETIO_VERBS_WARP_SIZE - 1); + doca_gpu_dev_verbs_submit(qp, base_wqe_idx + DOCA_GPUNETIO_VERBS_WARP_SIZE); + } + __syncwarp(); + + *out_ticket = wqe_idx; +#else + printf("__CUDA_ARCH__ < 800, WARP mode not enabled\n"); + *out_ticket = 0; +#endif +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, doca_gpu_dev_verbs_ticket_t *out_ticket) { + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_THREAD) + doca_gpu_dev_verbs_put_thread(qp, raddr, laddr, size, + out_ticket); + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_WARP) + doca_gpu_dev_verbs_put_warp(qp, raddr, laddr, size, + out_ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put(struct doca_gpu_dev_verbs_qp *qp, + struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, + size_t size) { + uint64_t ticket; + doca_gpu_dev_verbs_put(qp, raddr, laddr, size, + &ticket); +} + +/* **************************************** PUT INLINE **************************************** */ + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p_thread( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + uint64_t wqe_idx; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, 1); + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_header(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, + raddr.addr, raddr.key, sizeof(T)); + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_data(qp, wqe_ptr, value); + doca_gpu_dev_verbs_mark_wqes_ready(qp, wqe_idx, wqe_idx); + doca_gpu_dev_verbs_submit(qp, wqe_idx + 1); + + *out_ticket = wqe_idx; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p_warp( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + *out_ticket = 0; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_THREAD) + doca_gpu_dev_verbs_p_thread(qp, raddr, value, + out_ticket); + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_WARP) + doca_gpu_dev_verbs_p_warp(qp, raddr, value, + out_ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p(struct doca_gpu_dev_verbs_qp *qp, + struct doca_gpu_dev_verbs_addr raddr, + T value) { + uint64_t ticket; + doca_gpu_dev_verbs_p(qp, raddr, value, + &ticket); +} + +/* **************************************** PUT SIGNAL **************************************** */ + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_signal_thread( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx; + uint64_t wqe_idx; + size_t remaining_size = size; + size_t size_; + + uint32_t num_chunks = doca_gpu_dev_verbs_div_ceil_aligned_pow2_32bits( + size, DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE_SHIFT); + num_chunks = num_chunks > 1 ? num_chunks : 1; + + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, num_chunks + 1); + +#pragma unroll 1 + for (uint64_t i = 0; i < num_chunks; i++) { + wqe_idx = base_wqe_idx + i; + size_ = remaining_size > DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + ? DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE + : remaining_size; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + [[likely]] if (size_ > 0) { + doca_gpu_dev_verbs_wqe_prepare_write( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, 0, + raddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), raddr.key, + laddr.addr + (i * DOCA_GPUNETIO_VERBS_MAX_TRANSFER_SIZE), laddr.key, size_); + } else { + doca_gpu_dev_verbs_wqe_prepare_nop(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE); + } + remaining_size -= size_; + } + + ++wqe_idx; + + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_wqe_prepare_atomic( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, sig_raddr.addr, sig_raddr.key, sig_laddr.addr, + sig_laddr.key, sizeof(uint64_t), sig_val, 0); + + doca_gpu_dev_verbs_mark_wqes_ready(qp, base_wqe_idx, wqe_idx); + + doca_gpu_dev_verbs_submit(qp, wqe_idx + 1); + + *out_ticket = wqe_idx; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_signal_warp( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + *out_ticket = 0; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_THREAD) + doca_gpu_dev_verbs_put_signal_thread( + qp, raddr, laddr, size, sig_raddr, sig_laddr, sig_val, out_ticket); + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_WARP) + doca_gpu_dev_verbs_put_signal_warp( + qp, raddr, laddr, size, sig_raddr, sig_laddr, sig_val, out_ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_put_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, + struct doca_gpu_dev_verbs_addr laddr, size_t size, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val) { + uint64_t ticket; + doca_gpu_dev_verbs_put_signal( + qp, raddr, laddr, size, sig_raddr, sig_laddr, sig_val, &ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + struct doca_gpu_dev_verbs_addr sig_raddr, struct doca_gpu_dev_verbs_addr sig_laddr, + uint64_t sig_val, doca_gpu_dev_verbs_ticket_t *out_ticket) { + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + uint64_t base_wqe_idx; + uint64_t wqe_idx; + + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + base_wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, 2); + wqe_idx = base_wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_header(qp, wqe_ptr, wqe_idx, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, + raddr.addr, raddr.key, sizeof(T)); + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_data(qp, wqe_ptr, value); + + ++wqe_idx; + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + doca_gpu_dev_verbs_wqe_prepare_atomic( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, sig_raddr.addr, sig_raddr.key, sig_laddr.addr, + sig_laddr.key, sizeof(uint64_t), sig_val, 0); + + doca_gpu_dev_verbs_mark_wqes_ready(qp, base_wqe_idx, wqe_idx); + doca_gpu_dev_verbs_submit(qp, wqe_idx + 1); + + *out_ticket = wqe_idx; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_p_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr raddr, T value, + struct doca_gpu_dev_verbs_addr sig_raddr, struct doca_gpu_dev_verbs_addr sig_laddr, + uint64_t sig_val) { + uint64_t ticket; + doca_gpu_dev_verbs_p_signal( + qp, raddr, value, sig_raddr, sig_laddr, sig_val, &ticket); +} + +/* **************************************** SIGNAL **************************************** */ + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_signal_thread( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + uint64_t wqe_idx; + struct doca_gpu_dev_verbs_wqe *wqe_ptr; + + DOCA_GPUNETIO_VERBS_ASSERT(out_ticket != NULL); + DOCA_GPUNETIO_VERBS_ASSERT(qp != NULL); + // DOCA_GPUNETIO_VERBS_ASSERT(qp->mem_type == DOCA_GPUNETIO_VERBS_MEM_TYPE_GPU); + + wqe_idx = doca_gpu_dev_verbs_reserve_wq_slots(qp, 1); + wqe_ptr = doca_gpu_dev_verbs_get_wqe_ptr(qp, wqe_idx); + + doca_gpu_dev_verbs_wqe_prepare_atomic( + qp, wqe_ptr, wqe_idx, DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA, + DOCA_GPUNETIO_IB_MLX5_WQE_CTRL_CQ_UPDATE, sig_raddr.addr, sig_raddr.key, sig_laddr.addr, + sig_laddr.key, sizeof(uint64_t), sig_val, 0); + + doca_gpu_dev_verbs_mark_wqes_ready(qp, wqe_idx, wqe_idx); + doca_gpu_dev_verbs_submit(qp, wqe_idx + 1); + + *out_ticket = wqe_idx; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_signal_warp( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + *out_ticket = 0; +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val, + doca_gpu_dev_verbs_ticket_t *out_ticket) { + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_THREAD) + doca_gpu_dev_verbs_signal_thread( + qp, sig_raddr, sig_laddr, sig_val, out_ticket); + if (exec_scope == DOCA_GPUNETIO_VERBS_EXEC_SCOPE_WARP) + doca_gpu_dev_verbs_signal_warp( + qp, sig_raddr, sig_laddr, sig_val, out_ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_signal( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_addr sig_raddr, + struct doca_gpu_dev_verbs_addr sig_laddr, uint64_t sig_val) { + uint64_t ticket; + doca_gpu_dev_verbs_signal(qp, sig_raddr, sig_laddr, + sig_val, &ticket); +} + +/* **************************************** OTHERS **************************************** */ + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_wait(struct doca_gpu_dev_verbs_qp *qp, + doca_gpu_dev_verbs_ticket_t ticket) { + doca_gpu_dev_verbs_poll_cq_at(doca_gpu_dev_verbs_qp_get_cq_sq(qp), + ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_wait(struct doca_gpu_dev_verbs_qp *qp) { + uint64_t ticket = + doca_gpu_dev_verbs_atomic_read(&qp->sq_rsvd_index); + [[unlikely]] if (ticket == 0) + return; + --ticket; + doca_gpu_dev_verbs_poll_cq_at(doca_gpu_dev_verbs_qp_get_cq_sq(qp), + ticket); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_fence(struct doca_gpu_dev_verbs_qp *qp) { + // This is no-op in the current implementation + return; +} + +#endif /* DOCA_GPUNETIO_DEV_VERBS_ONESIDED_CUH */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_qp.cuh b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_qp.cuh new file mode 100644 index 0000000000000000000000000000000000000000..64019b00cbfd54a349ecc08cc6564189dbdf4273 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/device/doca_gpunetio_dev_verbs_qp.cuh @@ -0,0 +1,824 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_dev_verbs_qp.cuh + * @brief GDAKI CUDA device functions for QP management + * + * @{ + */ +#ifndef DOCA_GPUNETIO_DEV_VERBS_QP_H +#define DOCA_GPUNETIO_DEV_VERBS_QP_H + +#include +#include "doca_gpunetio_dev_verbs_cq.cuh" + +/* *********** WQE UTILS *********** */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_store_wqe_seg(uint64_t *ptr, + uint64_t *val) { + asm volatile("st.weak.cs.v2.b64 [%0], {%1, %2};" : : "l"(ptr), "l"(val[0]), "l"(val[1])); +} + +/** + * @brief Get a pointer to the WQE buffer at a specific index + * + * @param qp - Queue Pair (QP) + * @param wqe_idx - Index of the WQE to get + * @return Pointer to the WQE buffer at the specified index + */ +__device__ static __forceinline__ struct doca_gpu_dev_verbs_wqe *doca_gpu_dev_verbs_get_wqe_ptr( + struct doca_gpu_dev_verbs_qp *qp, uint16_t wqe_idx) { + const uint16_t nwqes_mask = __ldg(&qp->sq_wqe_mask); + const uintptr_t wqe_addr = __ldg((uintptr_t *)&qp->sq_wqe_daddr); + const uint16_t idx = wqe_idx & nwqes_mask; + return (struct doca_gpu_dev_verbs_wqe *)(wqe_addr + + (idx << DOCA_GPUNETIO_IB_MLX5_WQE_SQ_SHIFT)); +} + +/* *********** WQE SHARING *********** */ + +/** + * @brief Wait until the given WQE slot is available. + * All prior WQE slots are also guaranteed to be available. + * + * @param qp - Queue Pair (QP) + * @param wqe_idx - WQE slot index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_wait_until_slot_available( + struct doca_gpu_dev_verbs_qp *qp, uint64_t wqe_idx) { + const uint16_t nwqes = __ldg(&qp->sq_wqe_num); + [[likely]] if (wqe_idx >= nwqes) + doca_gpu_dev_verbs_poll_cq_at(&(qp->cq_sq), + wqe_idx - nwqes); +} + +/** + * @brief Reserve a number of WQE slots. + * + * @param qp - Queue Pair (QP) + * @param count - Number of WQE slots to reserve + * @return The index of the first reserved WQE slot + */ +template +__device__ static __forceinline__ uint64_t +doca_gpu_dev_verbs_reserve_wq_slots(struct doca_gpu_dev_verbs_qp *qp, uint32_t count) { + uint64_t wqe_idx = + doca_gpu_dev_verbs_atomic_add(&qp->sq_rsvd_index, count); + if (wait_for_availability) + doca_gpu_dev_verbs_wait_until_slot_available(qp, + wqe_idx + count - 1); + return wqe_idx; +} + +/** + * @brief Mark the WQEs in the range [from_wqe_idx, to_wqe_idx] as ready. + * + * @param qp - Queue Pair (QP) + * @param from_wqe_idx - Starting WQE index + * @param to_wqe_idx - Ending WQE index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_mark_wqes_ready( + struct doca_gpu_dev_verbs_qp *qp, uint64_t from_wqe_idx, uint64_t to_wqe_idx) { + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) + qp->sq_ready_index = to_wqe_idx + 1; + else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_CTA) { + doca_gpu_dev_verbs_fence_release(); + cuda::atomic_ref ready_index_aref(qp->sq_ready_index); + while (ready_index_aref.load(cuda::memory_order_relaxed) != from_wqe_idx) continue; + doca_gpu_dev_verbs_fence_acquire(); + ready_index_aref.store(to_wqe_idx + 1, cuda::memory_order_relaxed); + } else if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_GPU) { + doca_gpu_dev_verbs_fence_release(); + cuda::atomic_ref ready_index_aref(qp->sq_ready_index); + while (ready_index_aref.load(cuda::memory_order_relaxed) != from_wqe_idx) continue; + doca_gpu_dev_verbs_fence_acquire(); + ready_index_aref.store(to_wqe_idx + 1, cuda::memory_order_relaxed); + } +} + +/* *********** QP DBR/DB *********** */ + +/** + * @brief Prepare the DBR (Doorbell Record) + * + * @param prod_index - Producer index + * @return DBR value + */ +__device__ static __forceinline__ __be32 doca_gpu_dev_verbs_prepare_dbr(uint32_t prod_index) { + __be32 dbrec_val; + + // This is equivalent to + // HTOBE32(dbrec_head & 0xffff); + asm volatile( + "{\n\t" + ".reg .b32 mask1;\n\t" + ".reg .b32 dbrec_head_16b;\n\t" + ".reg .b32 ign;\n\t" + ".reg .b32 mask2;\n\t" + "mov.b32 mask1, 0xffff;\n\t" + "mov.b32 mask2, 0x123;\n\t" + "and.b32 dbrec_head_16b, %1, mask1;\n\t" + "prmt.b32 %0, dbrec_head_16b, ign, mask2;\n\t" + "}" + : "=r"(dbrec_val) + : "r"(prod_index)); + + return dbrec_val; +} + +/** + * @brief [Internal] Update the NIC DBR (Doorbell Record). + * This function does not guarantee the ordering. + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + */ +template +__device__ static __forceinline__ void doca_priv_gpu_dev_verbs_update_dbr( + struct doca_gpu_dev_verbs_qp *qp, uint32_t prod_index) { + __be32 dbrec_val = doca_gpu_dev_verbs_prepare_dbr(prod_index); + __be32 *dbrec_ptr = (__be32 *)__ldg((uintptr_t *)&qp->sq_dbrec); + + cuda::atomic_ref<__be32, cuda::thread_scope_system> dbrec_ptr_aref(*dbrec_ptr); + dbrec_ptr_aref.store(dbrec_val, cuda::memory_order_relaxed); +} + +/** + * @brief Update the NIC DBR (Doorbell Record) + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_update_dbr( + struct doca_gpu_dev_verbs_qp *qp, uint32_t prod_index) { + __be32 dbrec_val = doca_gpu_dev_verbs_prepare_dbr(prod_index); + __be32 *dbrec_ptr = (__be32 *)__ldg((uintptr_t *)&qp->sq_dbrec); + +#ifdef DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE + if (code_opt & DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_ASYNC_STORE_RELEASE) { + doca_gpu_dev_verbs_async_store_release(dbrec_ptr, dbrec_val); + } else +#endif + { + doca_gpu_dev_verbs_fence_release(); + doca_priv_gpu_dev_verbs_update_dbr(qp, prod_index); + } +} + +/** + * @brief Prepare the DB (Doorbell) + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + * @return DB value + */ +__device__ static __forceinline__ __be64 +doca_gpu_dev_verbs_prepare_db(struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_index) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg ctrl_seg = {0}; + + // The only ctrl segment fields that are inspected while ringing + // the DB are QP number and WQE index + ctrl_seg.qpn_ds = __ldg(&qp->sq_num_shift8_be); + ctrl_seg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32((prod_index << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT)); + + return *(uint64_t *)&ctrl_seg; +} + +/* *************************** Ring Doorbell *************************** */ + +/** + * @brief Ring the DB (Doorbell) + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_ring_db(struct doca_gpu_dev_verbs_qp *qp, + uint64_t prod_index) { + __be64 *db_ptr = (__be64 *)__ldg((uintptr_t *)&qp->sq_db); + __be64 db_val = doca_gpu_dev_verbs_prepare_db(qp, prod_index); + +#ifdef DOCA_GPUNETIO_VERBS_HAS_ASYNC_STORE_RELEASE + if (code_opt & DOCA_GPUNETIO_VERBS_GPU_CODE_OPT_ASYNC_STORE_RELEASE) { + doca_gpu_dev_verbs_async_store_release((uint64_t *)db_ptr, (uint64_t)db_val); + } else +#endif +#ifdef DOCA_GPUNETIO_VERBS_HAS_STORE_RELAXED_MMIO + { + doca_gpu_dev_verbs_fence_release(); + doca_gpu_dev_verbs_store_relaxed_mmio((uint64_t *)db_ptr, (uint64_t)db_val); + } +#else + { + cuda::atomic_ref db_ptr_aref(*((uint64_t *)db_ptr)); + doca_gpu_dev_verbs_fence_release(); + db_ptr_aref.store(db_val, cuda::memory_order_relaxed); + } +#endif +} + +#ifdef DOCA_GPUNETIO_VERBS_HAS_TMA_COPY +/** + * @brief Ring the BF (BlueFlame). Requires shared memory. + * + * @param qp - Queue Pair (QP) + * @param wqe - WQE to be ringed. This buffer must be in shared memory. + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_ring_bf( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr) { + void *bf_ptr = (void *)__ldg((uintptr_t *)&qp->sq_db); + uint64_t *wqe = (uint64_t *)wqe_ptr; + + doca_gpu_dev_verbs_fence_release(); + asm volatile("cp.async.bulk.global.shared::cta.bulk_group [%0], [%1], 64;" + : + : "l"(bf_ptr), "l"(*wqe)); +} +#endif + +/** + * @brief Ring the BF (BlueFlame). Requires at least 8 threads in the warp. + * + * @param qp - Queue Pair (QP) + * @param wqe - WQE to be ringed + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_ring_bf_warp( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr) { + unsigned int lane_id = doca_gpu_dev_verbs_get_lane_id(); + uint64_t *bf_ptr = (uint64_t *)qp->sq_db; + uint64_t *wqe = (uint64_t *)wqe_ptr; + + if (lane_id == 0) doca_gpu_dev_verbs_fence_release(); + __syncwarp(); + + if (lane_id < 8) { + bf_ptr[lane_id] = wqe[lane_id]; + } +} + +/** + * @brief Ring the proxy. + * + * @param qp - Queue Pair (QP) + * @param prod_idx - Producer index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_ring_proxy( + struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_idx) { + uint64_t *proxy_ptr = (uint64_t *)__ldg((uintptr_t *)&qp->sq_db); + cuda::atomic_ref proxy_ptr_aref(*proxy_ptr); + + if (resource_sharing_mode == DOCA_GPUNETIO_VERBS_RESOURCE_SHARING_MODE_EXCLUSIVE) { + proxy_ptr_aref.store(prod_idx, cuda::memory_order_relaxed); + WRITE_ONCE(*proxy_ptr, prod_idx); + } else { + proxy_ptr_aref.fetch_max(prod_idx, cuda::memory_order_relaxed); + } +} + +/** + * @brief Submit a work request to the NIC using the DB protocol. + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_db( + struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_index) { + doca_gpu_dev_verbs_lock(&qp->sq_lock); + + uint64_t old_prod_index = doca_gpu_dev_verbs_atomic_max( + &qp->sq_wqe_pi, prod_index); + if (old_prod_index < prod_index) { + // Early rining of the DB to push WQEs to the NIC ASAP. + doca_gpu_dev_verbs_ring_db(qp, prod_index); + + // In case the recovery path is triggered, the later DB ringing will cover for correctness. + doca_priv_gpu_dev_verbs_update_dbr(qp, prod_index); + doca_gpu_dev_verbs_ring_db(qp, prod_index); + } + + doca_gpu_dev_verbs_unlock(&qp->sq_lock); +} + +/** + * @brief Submit a work request to the NIC using the BlueFlame protocol. + * This function requires a single thread. Users must pass a pointer to a WQE stored in shared + * memory. Hopper or a newer generation is required to leaverage the BlueFlame protocol. + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + * @param smem_wqe - WQE to be submitted directly to the NIC. The buffer must be in shared memory. + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_bf( + struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_index, + struct doca_gpu_dev_verbs_wqe *smem_wqe) { +#ifdef DOCA_GPUNETIO_VERBS_HAS_TMA_COPY + doca_gpu_dev_verbs_lock(&qp->sq_lock); + unsigned long long int old_prod_index = + doca_gpu_dev_verbs_atomic_max( + (unsigned long long int *)&qp->sq_wqe_pi, (unsigned long long int)prod_index); + if (old_prod_index < prod_index) { + doca_gpu_dev_verbs_ring_bf(qp, smem_wqe); + doca_priv_gpu_dev_verbs_update_dbr(qp, prod_index); + doca_gpu_dev_verbs_ring_db(qp, prod_index); + } + doca_gpu_dev_verbs_unlock(&qp->sq_lock); +#else + doca_gpu_dev_verbs_submit_db(qp, prod_index); +#endif +} + +/** + * @brief Submit all the WQEs up to the given producer index to the NIC using the BlueFlame + * protocol. This function must be called by all threads in the warp. At least 8 threads are + * required. + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + * @param wqe - WQE to be submitted directly to the NIC + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_bf_warp( + struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_index, struct doca_gpu_dev_verbs_wqe *wqe) { + unsigned int lane_id = doca_gpu_dev_verbs_get_lane_id(); + unsigned long long int old_prod_index; + if (lane_id == 0) { + doca_gpu_dev_verbs_lock(&qp->sq_lock); + old_prod_index = + doca_gpu_dev_verbs_atomic_max( + (unsigned long long int *)&qp->sq_wqe_pi, (unsigned long long int)prod_index); + } + __syncwarp(); + old_prod_index = __shfl_sync(0xFFFFFFFF, old_prod_index, 0); + if (old_prod_index < prod_index) { + doca_gpu_dev_verbs_ring_bf_warp(qp, wqe); + __syncwarp(); + if (lane_id == 0) { + doca_priv_gpu_dev_verbs_update_dbr(qp, prod_index); + doca_gpu_dev_verbs_ring_db(qp, prod_index); + } + } + if (lane_id == 0) doca_gpu_dev_verbs_unlock(&qp->sq_lock); + __syncwarp(); +} + +/** + * @brief Submit all the WQEs up to the given producer index to the NIC via the CPU proxy. + * + * @param qp - Queue Pair (QP) + * @param prod_index - Producer index + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit_proxy( + struct doca_gpu_dev_verbs_qp *qp, uint64_t prod_index) { + doca_gpu_dev_verbs_fence_release(); + doca_gpu_dev_verbs_ring_proxy(qp, prod_index); +} + +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_submit(struct doca_gpu_dev_verbs_qp *qp, + uint64_t prod_index) { + const enum doca_gpu_dev_verbs_nic_handler qp_nic_handler = + (enum doca_gpu_dev_verbs_nic_handler)__ldg((int *)&qp->nic_handler); + if (nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_AUTO) { + if (qp_nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_DB) + doca_gpu_dev_verbs_submit_db( + qp, prod_index); + else + doca_gpu_dev_verbs_submit_proxy(qp, prod_index); + } else if (nic_handler == DOCA_GPUNETIO_VERBS_NIC_HANDLER_GPU_SM_DB) { + doca_gpu_dev_verbs_submit_db(qp, + prod_index); + } else { + doca_gpu_dev_verbs_submit_proxy(qp, prod_index); + } +} + +/* *********** WQE PREPARATION *********** */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_nop( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + + cseg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32(((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | + DOCA_GPUNETIO_IB_MLX5_OPCODE_NOP); + cseg.qpn_ds = __ldg(&qp->sq_num_shift8_be_1ds); + cseg.fm_ce_se = ctrl_flags; + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); +} + +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_write( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, const uint32_t opcode, + enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint32_t immediate, + const uint64_t raddr, const uint32_t rkey, const uint64_t laddr0, const uint32_t lkey0, + const uint32_t bytes0) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg0; + + cseg.opmod_idx_opcode = doca_gpu_dev_verbs_bswap32( + ((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | opcode); + cseg.qpn_ds = __ldg(&qp->sq_num_shift8_be_3ds); + cseg.fm_ce_se = ctrl_flags; + cseg.imm = immediate; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + dseg0.byte_count = + doca_gpu_dev_verbs_bswap32(bytes0 & uint32_t(DOCA_GPUNETIO_IB_MLX5_INLINE_SEG - 1)); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg0.lkey = lkey0; +#else + dseg0.lkey = doca_gpu_dev_verbs_bswap32(lkey0); +#endif + dseg0.addr = doca_gpu_dev_verbs_bswap64(laddr0); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg2), (uint64_t *)&(dseg0)); +} + +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_write( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, const uint32_t opcode, + enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint32_t immediate, + const uint64_t raddr, const uint32_t rkey, const uint64_t laddr0, const uint32_t lkey0, + const uint32_t bytes0, const uint64_t laddr1, const uint32_t lkey1, const uint32_t bytes1) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg1; + + cseg.opmod_idx_opcode = doca_gpu_dev_verbs_bswap32( + ((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | opcode); + cseg.qpn_ds = __ldg(&qp->sq_num_shift8_be_4ds); + cseg.fm_ce_se = ctrl_flags; + cseg.imm = immediate; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + dseg0.byte_count = + doca_gpu_dev_verbs_bswap32(bytes0 & uint32_t(DOCA_GPUNETIO_IB_MLX5_INLINE_SEG - 1)); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg0.lkey = lkey0; +#else + dseg0.lkey = doca_gpu_dev_verbs_bswap32(lkey0); +#endif + dseg0.addr = doca_gpu_dev_verbs_bswap64(laddr0); + + dseg1.byte_count = + doca_gpu_dev_verbs_bswap32(bytes1 & uint32_t(DOCA_GPUNETIO_IB_MLX5_INLINE_SEG - 1)); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg1.lkey = lkey1; +#else + dseg1.lkey = doca_gpu_dev_verbs_bswap32(lkey1); +#endif + dseg1.addr = doca_gpu_dev_verbs_bswap64(laddr1); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg2), (uint64_t *)&(dseg0)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg3), (uint64_t *)&(dseg1)); +} + +/** + * @brief Prepare the header segment of an inline RDMA Write WQE. + * The data segment is prepared separately. + * + * @param qp - Queue Pair (QP) + * @param send_wr - Send Work Request to be prepared + * @param wqe_idx - Index of the WQE to be prepared + * @param out_wqes - Pointer to the WQE buffer to write the prepared WQE to + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_header( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint64_t raddr, + const uint32_t rkey, const uint32_t bytes) { + int ds; + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + + if (bytes > sizeof(struct doca_gpunetio_ib_mlx5_wqe_data_seg) - + sizeof(struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg)) + ds = DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_RDMA_WRITE_INL_MAX; + else + ds = DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_RDMA_WRITE_INL_MIN; + + assert(bytes <= DOCA_GPUNETIO_VERBS_MAX_INLINE_SIZE); + + cseg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32(((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_WRITE); + cseg.qpn_ds = doca_gpu_dev_verbs_bswap32(__ldg(&qp->sq_num_shift8) | ds); + cseg.fm_ce_se = ctrl_flags; + // cseg.imm = 0; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); +} + +/** + * @brief Prepare the data segment of an inline RDMA Write WQE. + * + * @param qp - Queue Pair (QP) + * @param data - Data to be written + * @param out_wqes - Pointer to the WQE buffer to write the prepared WQE to + */ +template +__device__ static __forceinline__ void doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_data( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, T data) { + struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg *data_seg_ptr = + (struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg + *)((uintptr_t)wqe_ptr + sizeof(struct doca_gpu_dev_verbs_wqe_ctrl_seg) + + sizeof(struct doca_gpunetio_ib_mlx5_wqe_raddr_seg)); + struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg data_seg; + uint32_t bytes = sizeof(T); + + data_seg.byte_count = doca_gpu_dev_verbs_bswap32(bytes | DOCA_GPUNETIO_IB_MLX5_INLINE_SEG); + *(uint32_t *)data_seg_ptr = data_seg.byte_count; + if (bytes <= sizeof(uint32_t)) { + T *dst = (T *)((uintptr_t)data_seg_ptr + sizeof(data_seg)); + *dst = data; + } else { + uint32_t *dst32 = (uint32_t *)((uintptr_t)data_seg_ptr + sizeof(data_seg)); + dst32[0] = ((uint32_t *)&data)[0]; + dst32[1] = ((uint32_t *)&data)[1]; + } +} + +/** + * @brief Prepare a RDMA Write WQE with inline data + * + * @param qp - Queue Pair (QP) + * @param send_wr - Send Work Request to be prepared + * @param wqe_idx - Index of the WQE to be prepared + * @param out_wqes - Pointer to the WQE buffer to write the prepared WQE to + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_write_inl( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint64_t raddr, + const uint32_t rkey, const uint64_t laddr, const uint32_t bytes) { + struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg data_seg; + struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg *data_seg_ptr = + (struct doca_gpunetio_ib_mlx5_wqe_inl_data_seg + *)((uintptr_t)wqe_ptr + sizeof(struct doca_gpu_dev_verbs_wqe_ctrl_seg) + + sizeof(struct doca_gpunetio_ib_mlx5_wqe_raddr_seg)); + + doca_gpu_dev_verbs_prepare_inl_rdma_write_wqe_header(qp, wqe_ptr, wqe_idx, ctrl_flags, raddr, + rkey, bytes); + + data_seg.byte_count = doca_gpu_dev_verbs_bswap32(bytes | DOCA_GPUNETIO_IB_MLX5_INLINE_SEG); + *(uint32_t *)data_seg_ptr = data_seg.byte_count; + + doca_gpu_dev_verbs_memcpy_data((void *)((uintptr_t)data_seg_ptr + sizeof(data_seg)), + (void *)(uintptr_t)laddr, bytes); +} + +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_read( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint64_t raddr, + const uint32_t rkey, const uint64_t laddr0, const uint32_t lkey0, const uint32_t bytes0) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg0; + + cseg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32(((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_READ); + cseg.qpn_ds = __ldg(&qp->sq_num_shift8_be_3ds); + cseg.fm_ce_se = ctrl_flags; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + dseg0.byte_count = doca_gpu_dev_verbs_bswap32(bytes0); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg0.lkey = lkey0; +#else + dseg0.lkey = doca_gpu_dev_verbs_bswap32(lkey0); +#endif + dseg0.addr = doca_gpu_dev_verbs_bswap64(laddr0); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg2), (uint64_t *)&(dseg0)); +} + +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_read( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint64_t raddr, + const uint32_t rkey, const uint64_t laddr0, const uint32_t lkey0, const uint32_t bytes0, + const uint64_t laddr1, const uint32_t lkey1, const uint32_t bytes1) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg0; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg1; + + cseg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32(((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | + DOCA_GPUNETIO_IB_MLX5_OPCODE_RDMA_READ); + cseg.qpn_ds = doca_gpu_dev_verbs_bswap32(__ldg(&qp->sq_num_shift8) | 4); + cseg.fm_ce_se = ctrl_flags; + // cseg.imm = 0; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + dseg0.byte_count = + doca_gpu_dev_verbs_bswap32(bytes0 & uint32_t(DOCA_GPUNETIO_IB_MLX5_INLINE_SEG - 1)); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg0.lkey = lkey0; +#else + dseg0.lkey = doca_gpu_dev_verbs_bswap32(lkey0); +#endif + dseg0.addr = doca_gpu_dev_verbs_bswap64(laddr0); + + dseg1.byte_count = + doca_gpu_dev_verbs_bswap32(bytes1 & uint32_t(DOCA_GPUNETIO_IB_MLX5_INLINE_SEG - 1)); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg1.lkey = lkey1; +#else + dseg1.lkey = doca_gpu_dev_verbs_bswap32(lkey1); +#endif + dseg1.addr = doca_gpu_dev_verbs_bswap64(laddr1); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg2), (uint64_t *)&(dseg0)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg3), (uint64_t *)&(dseg1)); +} + +/** + * @brief Prepare an Atomic WQE + * + * @param qp - Queue Pair (QP) + * @param send_wr - Send Work Request to be prepared + * @param wqe_idx - Index of the WQE to be prepared + * @param out_wqes - Pointer to the WQE buffer to write the prepared WQE to + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_atomic( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, + const uint16_t wqe_idx, const uint32_t opcode, + enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint64_t raddr, const uint32_t rkey, + const uint64_t laddr, const uint32_t lkey, const uint32_t bytes, const uint64_t compare_add, + const uint64_t swap_add) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpunetio_ib_mlx5_wqe_raddr_seg rseg; + struct doca_gpunetio_ib_mlx5_wqe_atomic_seg atseg; + struct doca_gpunetio_ib_mlx5_wqe_data_seg dseg; + + cseg.opmod_idx_opcode = doca_gpu_dev_verbs_bswap32( + ((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | opcode); + cseg.qpn_ds = __ldg(&qp->sq_num_shift8_be_4ds); + cseg.fm_ce_se = ctrl_flags; + + rseg.raddr = doca_gpu_dev_verbs_bswap64(raddr); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + rseg.rkey = rkey; +#else + rseg.rkey = doca_gpu_dev_verbs_bswap32(rkey); +#endif + + atseg.swap_add = doca_gpu_dev_verbs_bswap64( + opcode == DOCA_GPUNETIO_IB_MLX5_OPCODE_ATOMIC_FA ? compare_add : swap_add); + atseg.compare = doca_gpu_dev_verbs_bswap64(compare_add); + + dseg.byte_count = doca_gpu_dev_verbs_bswap32(bytes); +#if DOCA_GPUNETIO_VERBS_MKEY_SWAPPED == 1 + dseg.lkey = lkey; +#else + dseg.lkey = doca_gpu_dev_verbs_bswap32(lkey); +#endif + dseg.addr = doca_gpu_dev_verbs_bswap64(laddr); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(rseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg2), (uint64_t *)&(atseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg3), (uint64_t *)&(dseg)); +} + +/** + * @brief Prepare a Wait WQE + * + * @param qp - Queue Pair (QP) + * @param send_wr - Send Work Request to be prepared + * @param wqe_idx - Index of the WQE to be prepared + * @param out_wqes - Pointer to the WQE buffer to write the prepared WQE to + */ +__device__ static __forceinline__ void doca_gpu_dev_verbs_wqe_prepare_wait( + struct doca_gpu_dev_verbs_qp *qp, struct doca_gpu_dev_verbs_wqe *wqe_ptr, uint16_t wqe_idx, + enum doca_gpu_dev_verbs_wqe_ctrl_flags ctrl_flags, const uint32_t max_index, + const uint32_t qpn_cqn) { + struct doca_gpu_dev_verbs_wqe_ctrl_seg cseg; + struct doca_gpu_dev_verbs_wqe_wait_seg wseg; + + cseg.opmod_idx_opcode = + doca_gpu_dev_verbs_bswap32(((uint32_t)wqe_idx << DOCA_GPUNETIO_VERBS_WQE_IDX_SHIFT) | + DOCA_GPUNETIO_IB_MLX5_OPCODE_WAIT); + cseg.qpn_ds = doca_gpu_dev_verbs_bswap32(__ldg(&qp->sq_num_shift8) | + DOCA_GPUNETIO_VERBS_WQE_SEG_CNT_WAIT); + cseg.fm_ce_se = ctrl_flags; + // cseg.imm = 0; + + wseg.max_index = doca_gpu_dev_verbs_bswap32(max_index); + wseg.qpn_cqn = doca_gpu_dev_verbs_bswap32(qpn_cqn); + + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg0), (uint64_t *)&(cseg)); + doca_gpu_dev_verbs_store_wqe_seg((uint64_t *)&(wqe_ptr->dseg1), (uint64_t *)&(wseg)); +} + +#endif /* DOCA_GPUNETIO_DEV_VERBS_QP_H */ + +/** @} */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/doca_gpunetio_device.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/doca_gpunetio_device.h new file mode 100644 index 0000000000000000000000000000000000000000..39483f5addf415553ab49afb1dc02c0a02fbf26d --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/doca_gpunetio/doca_gpunetio_device.h @@ -0,0 +1,47 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file doca_gpunetio_device.h + * @brief A header file that includes all necessary device APIs + */ + +#ifndef DOCA_GPUNETIO_DEVICE_H +#define DOCA_GPUNETIO_DEVICE_H + +#include "common/doca_gpunetio_verbs_def.h" +#include "common/doca_gpunetio_verbs_dev.h" +#include "device/doca_gpunetio_dev_verbs_common.cuh" +#include "device/doca_gpunetio_dev_verbs_cq.cuh" +#include "device/doca_gpunetio_dev_verbs_qp.cuh" +#include "device/doca_gpunetio_dev_verbs_onesided.cuh" +#include "device/doca_gpunetio_dev_verbs_counter.cuh" + +#endif /* DOCA_GPUNETIO_DEVICE_H */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki.h new file mode 100644 index 0000000000000000000000000000000000000000..c14a5e2923f4fb483deb19cdc8c0f7573eb5c9e8 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki.h @@ -0,0 +1,214 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_GIN_GDAKI_H_ +#define _NCCL_DEVICE_GIN_GDAKI_H_ + +#ifndef DOCA_VERBS_USE_CUDA_WRAPPER +#define DOCA_VERBS_USE_CUDA_WRAPPER +#endif + +#ifndef DOCA_VERBS_USE_NET_WRAPPER +#define DOCA_VERBS_USE_NET_WRAPPER +#endif + +#ifdef NCCL_DEVICE_GIN_GDAKI_ENABLE_DEBUG +#define DOCA_GPUNETIO_VERBS_ENABLE_DEBUG 1 +#endif + +#include "../gin_device_common.h" +#include "gin_gdaki_device_host_common.h" +#include "doca_gpunetio/doca_gpunetio_device.h" + +#ifdef NCCL_DEVICE_GIN_GDAKI_ENABLE_DEBUG +#include +#endif + +template <> +struct ncclGinApi_Put { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx ctx, Coop coop, int peer, bool hasWins, + ncclGinWindow_t dstWin, size_t dstOff, ncclGinWindow_t srcWin, + size_t srcOff, size_t bytes, bool hasSignal, + ncclGinSignal_t signalId, ncclGinSignalOp_t signalOp, + uint64_t signalOpArg, bool hasCounter, + ncclGinCounter_t counterId, bool hasDescriptor, + ncclGinDescriptorSmem* descriptor, + cuda::thread_scope required, cuda::thread_scope given) { + using nccl::utility::loadConst; + + coop.sync(); + if (coop.thread_rank() == 0) { + ncclGinGdakiGPUContext* gdaki = (struct ncclGinGdakiGPUContext*)ctx.handle; + doca_gpu_dev_verbs_qp* qp = loadConst(&gdaki->gdqp) + peer; + doca_gpu_dev_verbs_qp* companion_qp; + ncclGinGdakiMemHandle* dstMh = (ncclGinGdakiMemHandle*)dstWin; + ncclGinGdakiMemHandle* srcMh = (ncclGinGdakiMemHandle*)srcWin; + + doca_gpu_dev_verbs_addr raddr, laddr; + if (hasWins) { + raddr.addr = dstOff; + raddr.key = loadConst(loadConst(&dstMh->rkeys) + peer); + laddr.addr = srcOff, laddr.key = loadConst(&srcMh->lkey); + } + + doca_gpu_dev_verbs_addr sig_raddr, sig_laddr; + if (hasSignal) { + if (signalOp == ncclGinSignalInc) signalOpArg = 1; + sig_raddr.addr = sizeof(uint64_t) * signalId; + sig_raddr.key = loadConst(loadConst(&gdaki->signals_table.rkeys) + peer); + sig_laddr.addr = 0; + sig_laddr.key = loadConst(&gdaki->sink_buffer_lkey); + } + + doca_gpu_dev_verbs_addr counter_raddr, counter_laddr; + if (hasCounter) { + companion_qp = loadConst(&gdaki->companion_gdqp) + peer; + counter_raddr.addr = sizeof(uint64_t) * counterId; + counter_raddr.key = loadConst(loadConst(&gdaki->counters_table.rkeys) + ctx.rank); + counter_laddr.addr = 0; + counter_laddr.key = loadConst(&gdaki->sink_buffer_lkey); + } + + // cuda::thread_scope_system has the lowest value + if ((required == cuda::thread_scope_system) && (given > required)) { + doca_gpu_dev_verbs_fence_release(); + } + + if (hasWins) { + if (hasSignal && hasCounter) { + doca_gpu_dev_verbs_put_signal_counter( + qp, raddr, laddr, bytes, sig_raddr, sig_laddr, signalOpArg, companion_qp, counter_raddr, + counter_laddr, 1); + } else if (hasSignal) { + doca_gpu_dev_verbs_put_signal( + qp, raddr, laddr, bytes, sig_raddr, sig_laddr, signalOpArg); + } else if (hasCounter) { + doca_gpu_dev_verbs_put_counter(qp, raddr, laddr, bytes, companion_qp, counter_raddr, + counter_laddr, 1); + } else { + doca_gpu_dev_verbs_put(qp, raddr, laddr, bytes); + } + } else { + if (hasCounter) { + doca_gpu_dev_verbs_signal_counter( + qp, sig_raddr, sig_laddr, signalOpArg, companion_qp, counter_raddr, counter_laddr, 1); + } else { + doca_gpu_dev_verbs_signal( + qp, sig_raddr, sig_laddr, signalOpArg); + } + } + +#ifdef NCCL_DEVICE_GIN_GDAKI_ENABLE_DEBUG + doca_gpu_dev_verbs_wait(qp); + if (hasCounter) doca_gpu_dev_verbs_wait(companion_qp); +#endif + } + coop.sync(); + } +}; + +template <> +struct ncclGinApi_PutValue { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx ctx, Coop coop, int peer, ncclGinWindow_t dstWin, + size_t dstOff, T srcVal, bool hasSignal, + ncclGinSignal_t signalId, ncclGinSignalOp_t signalOp, + uint64_t signalOpArg, bool hasDescriptor, + ncclGinDescriptorSmem* descriptor, + cuda::thread_scope required, cuda::thread_scope given) { + using nccl::utility::loadConst; + + coop.sync(); + if (coop.thread_rank() == 0) { + ncclGinGdakiGPUContext* gdaki = (struct ncclGinGdakiGPUContext*)ctx.handle; + doca_gpu_dev_verbs_qp* qp = loadConst(&gdaki->gdqp) + peer; + ncclGinGdakiMemHandle* dstMh = (ncclGinGdakiMemHandle*)dstWin; + + doca_gpu_dev_verbs_addr raddr; + raddr.addr = dstOff; + raddr.key = loadConst(loadConst(&dstMh->rkeys) + peer); + + doca_gpu_dev_verbs_addr sig_raddr, sig_laddr; + if (hasSignal) { + if (signalOp == ncclGinSignalInc) signalOpArg = 1; + sig_raddr.addr = sizeof(uint64_t) * signalId; + sig_raddr.key = loadConst(loadConst(&gdaki->signals_table.rkeys) + peer); + sig_laddr.addr = 0; + sig_laddr.key = loadConst(&gdaki->sink_buffer_lkey); + } + + // cuda::thread_scope_system has the lowest value + if ((required == cuda::thread_scope_system) && (given > required)) { + doca_gpu_dev_verbs_fence_release(); + } + + if (hasSignal) { + doca_gpu_dev_verbs_p_signal( + qp, raddr, srcVal, sig_raddr, sig_laddr, signalOpArg); + } else { + doca_gpu_dev_verbs_p(qp, raddr, srcVal); + } + +#ifdef NCCL_DEVICE_GIN_GDAKI_ENABLE_DEBUG + doca_gpu_dev_verbs_wait(qp); +#endif + } + coop.sync(); + } +}; + +template <> +struct ncclGinApi_ResetCounter { + NCCL_DEVICE_INLINE static void call(ncclGinCtx ctx, ncclGinCounter_t counterId) { + using nccl::utility::loadConst; + ncclGinGdakiGPUContext* gdaki = (ncclGinGdakiGPUContext*)ctx.handle; + loadConst(&gdaki->counters_table.buffer)[counterId] = 0; + } +}; + +template <> +struct ncclGinApi_ResetSignal { + NCCL_DEVICE_INLINE static void call(ncclGinCtx ctx, ncclGinSignal_t signalId) { + using nccl::utility::loadConst; + ncclGinGdakiGPUContext* gdaki = (ncclGinGdakiGPUContext*)ctx.handle; + loadConst(&gdaki->signals_table.buffer)[signalId] = 0; + } +}; + +template <> +struct ncclGinApi_GetCounterPtr { + NCCL_DEVICE_INLINE static uint64_t* call(ncclGinCtx ctx, ncclGinCounter_t counterId) { + using nccl::utility::loadConst; + ncclGinGdakiGPUContext* gdaki = (ncclGinGdakiGPUContext*)ctx.handle; + return loadConst(&gdaki->counters_table.buffer) + counterId; + } +}; + +template <> +struct ncclGinApi_GetSignalPtr { + NCCL_DEVICE_INLINE static uint64_t* call(ncclGinCtx ctx, ncclGinSignal_t signalId) { + using nccl::utility::loadConst; + ncclGinGdakiGPUContext* gdaki = (ncclGinGdakiGPUContext*)ctx.handle; + return loadConst(&gdaki->signals_table.buffer) + signalId; + } +}; + +template <> +struct ncclGinApi_Flush { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx ctx, Coop coop, cuda::memory_order ord) { + using nccl::utility::loadConst; + ncclGinGdakiGPUContext* gdaki = (ncclGinGdakiGPUContext*)ctx.handle; + doca_gpu_dev_verbs_qp* qps = loadConst(&gdaki->gdqp); +#pragma unroll 1 + for (int peer = coop.thread_rank(); peer < ctx.nRanks; peer += coop.size()) { + doca_gpu_dev_verbs_wait(qps + peer); + } + } +}; + +#endif /* _NCCL_DEVICE_GIN_GDAKI_H_ */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki_device_host_common.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki_device_host_common.h new file mode 100644 index 0000000000000000000000000000000000000000..20299346f317b6f31980e647e7135ce1d5686d74 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gdaki/gin_gdaki_device_host_common.h @@ -0,0 +1,36 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_DEVICE_GIN_GDAKI_DEVICE_HOST_COMMON_H_ +#define _NCCL_DEVICE_GIN_GDAKI_DEVICE_HOST_COMMON_H_ + +#include + +#define NCCL_GIN_GDAKI_VERSION 100 + +template +struct ncclGinGdakiGlobalGPUBufferTable { + T *buffer; + __be32 *rkeys; + __be32 lkey; +}; + +struct ncclGinGdakiGPUContext { + struct doca_gpu_dev_verbs_qp *gdqp; + struct doca_gpu_dev_verbs_qp *companion_gdqp; + struct ncclGinGdakiGlobalGPUBufferTable counters_table; + struct ncclGinGdakiGlobalGPUBufferTable signals_table; + + // Local buffer we don't consume but is required for some operations. + __be32 sink_buffer_lkey; +}; + +struct ncclGinGdakiMemHandle { + __be32 *rkeys; + __be32 lkey; +}; + +#endif /* _NCCL_DEVICE_GIN_GDAKI_DEVICE_HOST_COMMON_H_ */ diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_api.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_api.h new file mode 100644 index 0000000000000000000000000000000000000000..20dde3af30dd56e9551014ac124daff73d7ac80e --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_api.h @@ -0,0 +1,18 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ +#ifndef _NCCL_GIN_DEVICE_API_H_ +#define _NCCL_GIN_DEVICE_API_H_ + +#include "gin_device_common.h" + +#if NCCL_GIN_GDAKI_ENABLE +#include "gdaki/gin_gdaki.h" +#endif +#if NCCL_GIN_PROXY_ENABLE +#include "proxy/gin_proxy.h" +#endif + +#endif diff --git a/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_common.h b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_common.h new file mode 100644 index 0000000000000000000000000000000000000000..d0d4c8fa371052cf7a63bd48206c63ac153d6431 --- /dev/null +++ b/URSA/.venv_ursa/lib/python3.12/site-packages/nvidia/nccl/include/nccl_device/gin/gin_device_common.h @@ -0,0 +1,120 @@ +/************************************************************************* + * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * + * See LICENSE.txt for license information + ************************************************************************/ + +#ifndef _NCCL_GIN_DEVICE_COMMON_H_ +#define _NCCL_GIN_DEVICE_COMMON_H_ + +#include "../net_device.h" +#include "../utility.h" +#include "gin_device_host_common.h" + +#if CUDA_VERSION >= 12080 && __CUDA_ARCH__ >= 900 +#define NCCL_GIN_HAS_FENCE_ACQUIRE_RELEASE_PTX 1 +#endif + +#ifndef NCCL_GIN_PROXY_ENABLE +#define NCCL_GIN_PROXY_ENABLE 1 +#endif + +#ifndef NCCL_GIN_GDAKI_ENABLE +#if CUDA_VERSION >= 12020 && __CUDA_ARCH__ >= 700 +#define NCCL_GIN_GDAKI_ENABLE 1 +#else +#define NCCL_GIN_GDAKI_ENABLE 0 +#endif +#endif + +#define NCCL_GIN_BACKEND_MASK_ALL \ + (((NCCL_GIN_PROXY_ENABLE) ? 1u : 0u) << (unsigned)NCCL_NET_DEVICE_GIN_PROXY | \ + ((NCCL_GIN_GDAKI_ENABLE) ? 1u : 0u) << (unsigned)NCCL_NET_DEVICE_GIN_GDAKI) + +struct ncclGinCtx { + ncclNetDeviceType backend; + int rank; + int nRanks; + void* handle; +}; + +template +struct ncclGinCtx_M : ncclGinCtx {}; + +struct ncclGinDescriptorSmem { + alignas(16) char space[64]; +}; + +#if __CUDACC__ +template +struct ncclGinApi_Put { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx, Coop coop, int peer, bool hasWins, + ncclGinWindow_t dstWin, size_t dstOff, ncclGinWindow_t srcWin, + size_t srcOff, size_t bytes, bool hasSignal, + ncclGinSignal_t signalId, ncclGinSignalOp_t signalOp, + uint64_t signalOpArg, bool hasCounter, + ncclGinCounter_t counterId, bool hasDescriptor, + ncclGinDescriptorSmem* descriptor, + cuda::thread_scope required, cuda::thread_scope given); +}; + +template +struct ncclGinApi_PutValue { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx, Coop coop, int peer, ncclGinWindow_t dstWin, + size_t dstOff, T srcData, bool hasSignal, + ncclGinSignal_t signalId, ncclGinSignalOp_t signalOp, + uint64_t signalOpArg, bool hasDescriptor, + ncclGinDescriptorSmem* descriptor, + cuda::thread_scope required, cuda::thread_scope given); +}; + +template +struct ncclGinApi_GetSignalPtr { + NCCL_DEVICE_INLINE static uint64_t* call(ncclGinCtx, int peer, ncclGinSignal_t signalId); +}; +template +struct ncclGinApi_GetCounterPtr { + NCCL_DEVICE_INLINE static uint64_t* call(ncclGinCtx, int peer, ncclGinCounter_t counterId); +}; + +template +struct ncclGinApi_ResetSignal { + NCCL_DEVICE_INLINE static void call(ncclGinCtx, ncclGinSignal_t signalId); +}; + +template +struct ncclGinApi_ResetCounter { + NCCL_DEVICE_INLINE static void call(ncclGinCtx, ncclGinCounter_t counterId); +}; + +template +struct ncclGinApi_Flush { + template + NCCL_DEVICE_INLINE static void call(ncclGinCtx, Coop, cuda::memory_order ord); +}; +#endif + +#if __CUDACC__ +template