Coverage Report

Created: 2025-03-04 07:22

/src/serenity/AK/StringFloatingPointConversions.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2022, Dan Klishch <danilklishch@gmail.com>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#include <AK/Array.h>
8
#include <AK/BuiltinWrappers.h>
9
#include <AK/FloatingPoint.h>
10
#include <AK/StringFloatingPointConversions.h>
11
#include <AK/UFixedBigInt.h>
12
13
namespace AK {
14
15
// This entire algorithm is an implementation of the paper: Ryu: Fast Float-to-String Conversion
16
// by Ulf Adams, available at https://dl.acm.org/doi/pdf/10.1145/3192366.3192369 and an implementation
17
// at https://github.com/ulfjack/ryu . A lot of possible mistakes from the article were corrected, see
18
// discussion at https://github.com/SerenityOS/serenity/pull/15796 .
19
//
20
// Not implemented for float80, as it will require an insane lookup table size (193Kb).
21
//
22
// Run stress tests from https://github.com/DanShaders/serenity-arithmetic-benchmark after non-trivial
23
// modifications.
24
25
// These approximations should match the ones used in the Python script.
26
static constexpr i64 log10_5_num = 10043;
27
static constexpr i64 log10_5_denum = 14369;
28
29
static constexpr i64 log10_2_num = 1406;
30
static constexpr i64 log10_2_denum = 4671;
31
32
static constexpr i64 log2_5_num = 8245;
33
static constexpr i64 log2_5_denum = 3551;
34
35
template<typename Number, size_t Size1, size_t Size2>
36
struct LookupInformation {
37
    i32 b0, b1; // B0 and B1 from the paper (accidentally swapped)
38
    Number lt[Size1];
39
    Number ge[Size2];
40
};
41
42
template<FloatingPoint>
43
int lookup_table;
44
45
template<typename FloatingPoint, typename MultiplyAndShiftFunction>
46
FloatingPointExponentialForm inner_convert_floating_point_to_decimal_exponential_form(FloatingPoint value, MultiplyAndShiftFunction const& multiply_and_shift)
47
0
{
48
0
    using Extractor = FloatExtractor<FloatingPoint>;
49
50
0
    auto bit_representation = Extractor::from_float(value);
51
52
0
    bool sign = bit_representation.sign;
53
0
    i32 exponent = bit_representation.exponent;
54
0
    u64 mantissa = bit_representation.mantissa;
55
56
    // For +0, it is {.sign = 0, fraction = 0, exponent = 0},
57
    // for -0, is {.sign = 1, fraction = 0, exponent = 0},
58
0
    if (exponent == 0 && mantissa == 0)
59
0
        return { sign, 0, 0 };
60
61
    // for +inf, -inf, and NaN is undefined.
62
0
    VERIFY(exponent != Extractor::exponent_max);
63
64
    // Step 1. Decode the floating point number, and unify normalized and subnormal cases.
65
0
    u64 real_mantissa = (exponent == 0 ? 0 : (1ull << Extractor::mantissa_bits)) + mantissa;
66
0
    i32 real_exponent = (exponent == 0 ? 1 : exponent) - Extractor::exponent_bias - Extractor::mantissa_bits;
67
    // abs(value) = real_mantissa * 2 ^ real_exponent
68
69
    // Step 2. Determine the interval of information-preserving outputs.
70
    // u, v, w are, respectively, lower bound for answer, exact value and upper bound for answer.
71
0
    i32 synthetic_exponent = real_exponent - 2;
72
0
    u64 u = 4 * real_mantissa - (mantissa == 0 && exponent > 1 ? 1 : 2);
73
0
    u64 v = 4 * real_mantissa;
74
0
    u64 w = 4 * real_mantissa + 2;
75
    // u * 2 ^ synthetic_exponent < abs(answer) < w * 2 ^ synthetic_exponent        (1)
76
    // abs(value) = v * 2 ^ synthetic_exponent (yet another representation)
77
78
    // Step 3'. Convert to a decimal power base and simultaneously remove most digits.
79
    // We want to skip `skipped_iters' iterations of the main conversion loop and find out if
80
    // last `skipped_iters' digits of u, v and w would have been zeroes.
81
0
    i32 skipped_iters;
82
0
    bool all_u_zero, all_v_zero, all_w_zero;
83
84
0
    if (synthetic_exponent < 0) {
85
0
        skipped_iters = max(0, -synthetic_exponent * log10_5_num / log10_5_denum - 1);
86
87
0
        all_u_zero = count_trailing_zeroes(u) >= skipped_iters;
88
0
        all_v_zero = count_trailing_zeroes(v) >= skipped_iters;
89
0
        all_w_zero = count_trailing_zeroes(w) >= skipped_iters;
90
91
0
        auto multiplier = lookup_table<FloatingPoint>.lt[-synthetic_exponent - skipped_iters];
92
0
        i32 k_numerator = (log2_5_num + 1) * (-synthetic_exponent - skipped_iters);
93
0
        i32 k = max(0, (k_numerator + log2_5_denum - 1) / log2_5_denum + lookup_table<FloatingPoint>.b0);
94
0
        u = multiply_and_shift(u, multiplier, skipped_iters - k);
95
0
        v = multiply_and_shift(v, multiplier, skipped_iters - k);
96
0
        w = multiply_and_shift(w, multiplier, skipped_iters - k);
97
0
    } else {
98
0
        skipped_iters = max(0, synthetic_exponent * log10_2_num / log10_2_denum - 1);
99
100
        // Checks if value is divisible by 5 ^ power.
101
0
        auto is_divisible_by_pow_5 = [](u64 value, i32 power) {
102
0
            constexpr Array<u64, 5> powers_of_five = { { 5, 25, 625, 390625, 152587890625 } };
103
104
0
            if (power <= 0 || value == 0)
105
0
                return true;
106
0
            if (power >= 28) // 2 ^ 64 - 1 < 5 ^ 28
107
0
                return false;
108
109
0
            i32 result = 0;
110
0
            for (i32 i = 5; i--;) {
111
0
                if (value % powers_of_five[i] == 0) {
112
0
                    value /= powers_of_five[i];
113
0
                    result += 1 << i;
114
0
                }
115
0
            }
116
0
            return result >= power;
117
0
        };
Unexecuted instantiation: StringFloatingPointConversions.cpp:_ZZN2AK56inner_convert_floating_point_to_decimal_exponential_formIfZNS_50convert_floating_point_to_decimal_exponential_formITkNS_8Concepts13FloatingPointEfEENS_28FloatingPointExponentialFormET_E3$_0EES3_S4_RKT0_ENKUlmiE_clEmi
Unexecuted instantiation: StringFloatingPointConversions.cpp:_ZZN2AK56inner_convert_floating_point_to_decimal_exponential_formIdZNS_50convert_floating_point_to_decimal_exponential_formITkNS_8Concepts13FloatingPointEdEENS_28FloatingPointExponentialFormET_E3$_0EES3_S4_RKT0_ENKUlmiE_clEmi
118
119
0
        all_u_zero = is_divisible_by_pow_5(u, skipped_iters);
120
0
        all_v_zero = is_divisible_by_pow_5(v, skipped_iters);
121
0
        all_w_zero = is_divisible_by_pow_5(w, skipped_iters);
122
123
0
        auto multiplier = lookup_table<FloatingPoint>.ge[skipped_iters];
124
0
        i32 k = log2_5_num * skipped_iters / log2_5_denum + lookup_table<FloatingPoint>.b1;
125
0
        u = multiply_and_shift(u, multiplier, skipped_iters + k - synthetic_exponent);
126
0
        v = multiply_and_shift(v, multiplier, skipped_iters + k - synthetic_exponent);
127
0
        w = multiply_and_shift(w, multiplier, skipped_iters + k - synthetic_exponent);
128
0
    }
129
130
    // Step 4'. Find the shortest, correctly-rounded decimal representation in the interval.
131
0
    bool is_even = ~mantissa & 1;
132
0
    bool accept_smaller = is_even && all_u_zero;
133
0
    bool accept_larger = is_even || !all_w_zero;
134
135
0
    if (!accept_larger)
136
0
        --w;
137
138
0
    bool all_a_zero = accept_smaller;
139
0
    bool all_b_zero = all_v_zero;
140
0
    int last_digit = 0;
141
142
0
    int exponent10 = skipped_iters - max(-synthetic_exponent, 0);
143
144
0
    while (u / 10 < w / 10) {
145
0
        all_a_zero &= u % 10 == 0;
146
0
        all_b_zero &= last_digit == 0;
147
0
        last_digit = v % 10;
148
149
0
        u /= 10;
150
0
        v /= 10;
151
0
        w /= 10;
152
0
        ++exponent10;
153
0
    }
154
0
    if (all_a_zero) {
155
0
        while (u % 10 == 0) {
156
0
            all_b_zero &= last_digit == 0;
157
0
            last_digit = v % 10;
158
159
0
            u /= 10;
160
0
            v /= 10;
161
0
            w /= 10;
162
0
            ++exponent10;
163
0
        }
164
0
    }
165
166
0
    bool is_tie = all_b_zero && last_digit == 5;
167
0
    bool want_round_down = last_digit < 5 || (is_tie && v % 2 == 0);
168
0
    bool round_down = (want_round_down && (u != v || all_a_zero)) || (v + 1 > w);
169
0
    return { sign, round_down ? v : v + 1, exponent10 };
170
0
}
Unexecuted instantiation: StringFloatingPointConversions.cpp:_ZN2AK56inner_convert_floating_point_to_decimal_exponential_formIfZNS_50convert_floating_point_to_decimal_exponential_formITkNS_8Concepts13FloatingPointEfEENS_28FloatingPointExponentialFormET_E3$_0EES3_S4_RKT0_
Unexecuted instantiation: StringFloatingPointConversions.cpp:_ZN2AK56inner_convert_floating_point_to_decimal_exponential_formIdZNS_50convert_floating_point_to_decimal_exponential_formITkNS_8Concepts13FloatingPointEdEENS_28FloatingPointExponentialFormET_E3$_0EES3_S4_RKT0_
171
172
static u128 multiply(u64 a, u64 b)
173
0
{
174
0
    return UFixedBigInt<64>(a).wide_multiply(b);
175
0
}
176
177
template<>
178
FloatingPointExponentialForm convert_floating_point_to_decimal_exponential_form<float>(float value)
179
0
{
180
0
    auto multiply_and_shift = [](u64 operand, u64 multiplier, i32 shift) {
181
0
        auto result = multiply(operand, multiplier);
182
0
        if (shift < 0)
183
0
            return static_cast<u64>(result << static_cast<u32>(-shift));
184
0
        else
185
0
            return static_cast<u64>(result >> static_cast<u32>(shift));
186
0
    };
187
188
0
    return inner_convert_floating_point_to_decimal_exponential_form(value, multiply_and_shift);
189
0
}
190
191
template<>
192
FloatingPointExponentialForm convert_floating_point_to_decimal_exponential_form<double>(double value)
193
0
{
194
0
    auto multiply_and_shift = [](u64 operand, u64 const multiplier[2], i32 shift) {
195
0
        u128 a = multiply(operand, multiplier[0]);
196
0
        u128 b = multiply(operand, multiplier[1]) + a.high();
197
0
        u64 c = a.low();
198
199
0
        if (0 <= shift && shift < 64) {
200
0
            return (c >> shift) | (b << static_cast<u32>(64 - shift)).low();
201
0
        } else if (shift < 0) {
202
0
            return c << static_cast<u32>(-shift);
203
0
        } else {
204
0
            VERIFY(64 <= shift && shift <= 128);
205
0
            return (b >> static_cast<u32>(shift - 64)).low();
206
0
        }
207
0
    };
208
209
0
    return inner_convert_floating_point_to_decimal_exponential_form(value, multiply_and_shift);
210
0
}
211
212
// Step 0. Precompute lookup tables for the given floating point type.
213
// Lookup tables was generated using the following Python script.
214
/*
215
from math import *
216
from more_itertools import chunked
217
218
219
def ifloor(x, y):
220
    assert y > 0
221
    if x < 0:
222
        return (x - y + 1) // y
223
    else:
224
        return x // y
225
226
227
def iceil(x, y):
228
    assert y > 0
229
    if x < 0:
230
        return x // y
231
    else:
232
        return (x + y - 1) // y
233
234
235
# Finds X = min(a * x % b) and Y = max(a * x % b) where 1 <= x <= N and returns (X, Y)
236
# Algorithm is from https://github.com/jk-jeon/Grisu-Exact/blob/master/other_files/Grisu-Exact.pdf , p. 22
237
def minmax_euclid(a, b, N):
238
    a_i, b_i = a, b
239
    s_i, u_i = 1, 0
240
241
    while True:
242
        q_i = iceil(b_i, a_i) - 1
243
        b_i1 = b_i - q_i * a_i
244
        u_i1 = u_i + q_i * s_i
245
246
        if N < u_i1:
247
            k = ifloor(N - u_i, s_i)
248
            return (a_i, b - b_i + k * a_i)
249
250
        p_i = iceil(a_i, b_i1) - 1
251
        a_i1 = a_i - p_i * b_i1
252
        s_i1 = s_i + p_i * u_i1
253
254
        if N < s_i1:
255
            k = ifloor(N - s_i, u_i1)
256
            return (a_i - k * b_i1, b - b_i1)
257
258
        if b_i1 == b_i and a_i1 == a_i:
259
            if N < s_i1 + u_i1:
260
                return (a_i1, b - b_i1)
261
            else:
262
                return (0, b - b_i1)
263
264
        b_i, u_i, a_i, s_i = b_i1, u_i1, a_i1, s_i1
265
266
267
assert minmax_euclid(3, 8, 5) == (1, 7)
268
269
270
def calculate_lookup_tables(mantissa_bits, exponent_bits, nibbles_per_wide_digit, wide_digits_count, digit_suffix):
271
    def split_by_wide_digits_and_print(value):
272
        length = wide_digits_count * nibbles_per_wide_digit
273
        number = reversed(list(chunked(f"{value:0{length}x}", nibbles_per_wide_digit)))
274
        number = ", ".join(map(lambda x: "0x" + "".join(x) + digit_suffix, number))
275
        print(f"{{ {number} }},")
276
277
    mantissa_bias = 1 << mantissa_bits
278
    mantissa_max = (1 << mantissa_bits) - 1
279
    exponent_bias = (1 << (exponent_bits - 1)) - 1
280
    exponent_max = (1 << exponent_bits) - 1
281
282
    real_exponent_min = 1 - exponent_bias - mantissa_bits
283
    real_exponent_max = exponent_max - exponent_bias - mantissa_bits
284
    # real_exponent_min <= ef < real_exponent_max
285
286
    synthetic_exponent_min = real_exponent_min - 2
287
    synthetic_exponent_max = real_exponent_max - 2
288
    # synthetic_exponent_min <= e2 < synthetic_exponent_max
289
290
    max_synthetic_mantissa = 4 * (mantissa_bias + mantissa_max) + 2
291
292
    # The following are some random approximations. Absolutely nothing special with these exact numbers.
293
    LOG10_5_NUM = 10043
294
    LOG10_5_DENUM = 14369
295
    assert LOG10_5_NUM / LOG10_5_DENUM < log(5, 10)
296
297
    LOG10_2_NUM = 1406
298
    LOG10_2_DENUM = 4671
299
    assert LOG10_2_NUM / LOG10_2_DENUM < log(2, 10)
300
301
    LOG2_5_NUM = 8245
302
    LOG2_5_DENUM = 3551
303
    assert LOG2_5_NUM / LOG2_5_DENUM < log(5, 2)
304
    assert (LOG2_5_NUM + 1) / LOG2_5_DENUM > log(5, 2)
305
306
    # We want to find maximal b0, such that ceil(log(5, 2) * (-e2 - q)) + b0 <= k. One might plot (-e2 - q, k) from the
307
    # iterations of the following loop and k = (-e2 - q) * log(5, 2) to understand the motivation behind this.
308
    b0 = 0
309
    q0max = 0
310
311
    for e2 in range(synthetic_exponent_min, 0):
312
        # q = max(0, floor(-e2 * log(5, 10)) - 1)
313
        q = max(0, ifloor(-e2 * LOG10_5_NUM, LOG10_5_DENUM) - 1)
314
315
        q0max = max(q0max, -e2 - q)
316
        a = 5 ** (-e2 - q)
317
        b = 2 ** q
318
319
        [min_modular_product, _] = minmax_euclid(a, b, max_synthetic_mantissa)
320
321
        # Directly via lemma 3.4 we obtain
322
        # k = floor(log2(min_modular_product / max_synthetic_mantissa))
323
        # But computing this directly might result in OverflowError, so we approximate the value
324
        k = (min_modular_product.bit_length() - 1) - max_synthetic_mantissa.bit_length()
325
326
        # "It is never wrong just to use 0"
327
        #                           -- Some Guy
328
        k = max(k, 0)
329
330
        # coefficient = 5 ** (-e2 - q) // 2 ** k
331
332
        # ceil(log(5, 2) * (-e2 - q)) + b0 <= k
333
        # b0 <= k - ceil(log(5, 2) * (-e2 - q))
334
        b0 = min(b0, k - iceil((-e2 - q) * (LOG2_5_NUM + 1), LOG2_5_DENUM))
335
336
    print('b0 =', b0)
337
    print('q0max =', q0max)
338
    for q in range(0, q0max + 1):
339
        k = max(0, iceil((LOG2_5_NUM + 1) * q, LOG2_5_DENUM) + b0)
340
        coefficient = 5 ** q // 2 ** k
341
        split_by_wide_digits_and_print(coefficient)
342
343
344
    # Finding minimal b1, such that floor(log(5, 2) * q) + b1 >= k.
345
    b1 = 0
346
    q1max = 0
347
348
    for e2 in range(0, synthetic_exponent_max):
349
        # q = max(0, floor(e2 * log(2, 10)) - 1)
350
        q = max(0, ifloor(e2 * LOG10_2_NUM, LOG10_2_DENUM) - 1)
351
352
        q1max = max(q1max, q)
353
        a = 2 ** (e2 - q)
354
        b = 5 ** q
355
356
        [_, max_modular_product] = minmax_euclid(a, b, max_synthetic_mantissa)
357
358
        # Via lemma 3.3:
359
        # k = ceil(log2(max_synthetic_mantissa * a * b / (b - max_modular_product)))
360
        numerator = max_synthetic_mantissa * a * b
361
        denumerator = b - max_modular_product
362
        k = numerator.bit_length() - denumerator.bit_length() + 1
363
364
        # coefficient = 2 ** k // 5 ** q + 1
365
366
        # b1 = max(b1, k - floor(log(5, 2) * q))
367
        b1 = max(b1, k - ifloor(q * LOG2_5_NUM, LOG2_5_DENUM))
368
369
    print('b1 =', b1)
370
    print('q1max =', q1max)
371
    for q in range(0, q1max + 1):
372
        k = ifloor(LOG2_5_NUM * q, LOG2_5_DENUM) + b1
373
        coefficient = 2 ** k // 5 ** q + 1
374
        split_by_wide_digits_and_print(coefficient)
375
376
377
# float:
378
print("float:")
379
calculate_lookup_tables(
380
    23, 8,
381
    16, 1, "ULL"
382
)
383
384
# double:
385
print("double:")
386
calculate_lookup_tables(
387
    52, 11,
388
    16, 2, "ULL"
389
)
390
391
# long double:
392
# print("long double:")
393
# calculate_lookup_tables(
394
#   64, 15,
395
#   8, 5, "U"
396
# )
397
*/
398
template<>
399
constexpr LookupInformation<u64, 48, 30> lookup_table<float> {
400
    .b0 = -64,
401
    .b1 = 62,
402
    .lt = {
403
        0x0000000000000001ULL,
404
        0x0000000000000005ULL,
405
        0x0000000000000019ULL,
406
        0x000000000000007dULL,
407
        0x0000000000000271ULL,
408
        0x0000000000000c35ULL,
409
        0x0000000000003d09ULL,
410
        0x000000000001312dULL,
411
        0x000000000005f5e1ULL,
412
        0x00000000001dcd65ULL,
413
        0x00000000009502f9ULL,
414
        0x0000000002e90eddULL,
415
        0x000000000e8d4a51ULL,
416
        0x0000000048c27395ULL,
417
        0x000000016bcc41e9ULL,
418
        0x000000071afd498dULL,
419
        0x0000002386f26fc1ULL,
420
        0x000000b1a2bc2ec5ULL,
421
        0x000003782dace9d9ULL,
422
        0x00001158e460913dULL,
423
        0x000056bc75e2d631ULL,
424
        0x0001b1ae4d6e2ef5ULL,
425
        0x000878678326eac9ULL,
426
        0x002a5a058fc295edULL,
427
        0x00d3c21bcecceda1ULL,
428
        0x0422ca8b0a00a425ULL,
429
        0x14adf4b7320334b9ULL,
430
        0x6765c793fa10079dULL,
431
        0x813f3978f8940984ULL,
432
        0xa18f07d736b90be5ULL,
433
        0xc9f2c9cd04674edeULL,
434
        0xfc6f7c4045812296ULL,
435
        0x9dc5ada82b70b59dULL,
436
        0xc5371912364ce305ULL,
437
        0xf684df56c3e01bc6ULL,
438
        0x9a130b963a6c115cULL,
439
        0xc097ce7bc90715b3ULL,
440
        0xf0bdc21abb48db20ULL,
441
        0x96769950b50d88f4ULL,
442
        0xbc143fa4e250eb31ULL,
443
        0xeb194f8e1ae525fdULL,
444
        0x92efd1b8d0cf37beULL,
445
        0xb7abc627050305adULL,
446
        0xe596b7b0c643c719ULL,
447
        0x8f7e32ce7bea5c6fULL,
448
        0xb35dbf821ae4f38bULL,
449
        0xe0352f62a19e306eULL,
450
        0x8c213d9da502de45ULL,
451
    },
452
    .ge = {
453
        0x4000000000000001ULL,
454
        0x3333333333333334ULL,
455
        0x28f5c28f5c28f5c3ULL,
456
        0x20c49ba5e353f7cfULL,
457
        0x346dc5d63886594bULL,
458
        0x29f16b11c6d1e109ULL,
459
        0x218def416bdb1a6eULL,
460
        0x35afe535795e90b0ULL,
461
        0x2af31dc4611873c0ULL,
462
        0x225c17d04dad2966ULL,
463
        0x36f9bfb3af7b7570ULL,
464
        0x2bfaffc2f2c92ac0ULL,
465
        0x232f33025bd42233ULL,
466
        0x384b84d092ed0385ULL,
467
        0x2d09370d42573604ULL,
468
        0x24075f3dceac2b37ULL,
469
        0x39a5652fb1137857ULL,
470
        0x2e1dea8c8da92d13ULL,
471
        0x24e4bba3a4875742ULL,
472
        0x3b07929f6da5586aULL,
473
        0x2f394219248446bbULL,
474
        0x25c768141d369efcULL,
475
        0x3c7240202ebdcb2dULL,
476
        0x305b66802564a28aULL,
477
        0x26af8533511d4ed5ULL,
478
        0x3de5a1ebb4fbb155ULL,
479
        0x318481895d962777ULL,
480
        0x279d346de4781f93ULL,
481
        0x3f61ed7ca0c03284ULL,
482
        0x32b4bdfd4d668ed0ULL,
483
    },
484
};
485
486
template<>
487
constexpr LookupInformation<u64[2], 326, 291> lookup_table<double> {
488
    .b0 = -125,
489
    .b1 = 125,
490
    .lt = {
491
        { 0x0000000000000001ULL, 0x0000000000000000ULL },
492
        { 0x0000000000000005ULL, 0x0000000000000000ULL },
493
        { 0x0000000000000019ULL, 0x0000000000000000ULL },
494
        { 0x000000000000007dULL, 0x0000000000000000ULL },
495
        { 0x0000000000000271ULL, 0x0000000000000000ULL },
496
        { 0x0000000000000c35ULL, 0x0000000000000000ULL },
497
        { 0x0000000000003d09ULL, 0x0000000000000000ULL },
498
        { 0x000000000001312dULL, 0x0000000000000000ULL },
499
        { 0x000000000005f5e1ULL, 0x0000000000000000ULL },
500
        { 0x00000000001dcd65ULL, 0x0000000000000000ULL },
501
        { 0x00000000009502f9ULL, 0x0000000000000000ULL },
502
        { 0x0000000002e90eddULL, 0x0000000000000000ULL },
503
        { 0x000000000e8d4a51ULL, 0x0000000000000000ULL },
504
        { 0x0000000048c27395ULL, 0x0000000000000000ULL },
505
        { 0x000000016bcc41e9ULL, 0x0000000000000000ULL },
506
        { 0x000000071afd498dULL, 0x0000000000000000ULL },
507
        { 0x0000002386f26fc1ULL, 0x0000000000000000ULL },
508
        { 0x000000b1a2bc2ec5ULL, 0x0000000000000000ULL },
509
        { 0x000003782dace9d9ULL, 0x0000000000000000ULL },
510
        { 0x00001158e460913dULL, 0x0000000000000000ULL },
511
        { 0x000056bc75e2d631ULL, 0x0000000000000000ULL },
512
        { 0x0001b1ae4d6e2ef5ULL, 0x0000000000000000ULL },
513
        { 0x000878678326eac9ULL, 0x0000000000000000ULL },
514
        { 0x002a5a058fc295edULL, 0x0000000000000000ULL },
515
        { 0x00d3c21bcecceda1ULL, 0x0000000000000000ULL },
516
        { 0x0422ca8b0a00a425ULL, 0x0000000000000000ULL },
517
        { 0x14adf4b7320334b9ULL, 0x0000000000000000ULL },
518
        { 0x6765c793fa10079dULL, 0x0000000000000000ULL },
519
        { 0x04fce5e3e2502611ULL, 0x0000000000000002ULL },
520
        { 0x18f07d736b90be55ULL, 0x000000000000000aULL },
521
        { 0x7cb2734119d3b7a9ULL, 0x0000000000000032ULL },
522
        { 0x6f7c40458122964dULL, 0x00000000000000fcULL },
523
        { 0x2d6d415b85acef81ULL, 0x00000000000004eeULL },
524
        { 0xe32246c99c60ad85ULL, 0x00000000000018a6ULL },
525
        { 0x6fab61f00de36399ULL, 0x0000000000007b42ULL },
526
        { 0x2e58e9b04570f1fdULL, 0x000000000002684cULL },
527
        { 0xe7bc90715b34b9f1ULL, 0x00000000000c097cULL },
528
        { 0x86aed236c807a1b5ULL, 0x00000000003c2f70ULL },
529
        { 0xa16a1b11e8262889ULL, 0x00000000012ced32ULL },
530
        { 0x2712875988becaadULL, 0x0000000005e0a1fdULL },
531
        { 0xc35ca4bfabb9f561ULL, 0x000000001d6329f1ULL },
532
        { 0xd0cf37be5aa1cae5ULL, 0x0000000092efd1b8ULL },
533
        { 0x140c16b7c528f679ULL, 0x00000002deaf189cULL },
534
        { 0x643c7196d9ccd05dULL, 0x0000000e596b7b0cULL },
535
        { 0xf52e37f2410011d1ULL, 0x00000047bf19673dULL },
536
        { 0xc9e717bb45005915ULL, 0x00000166bb7f0435ULL },
537
        { 0xf18376a85901bd69ULL, 0x00000701a97b150cULL },
538
        { 0xb7915149bd08b30dULL, 0x000023084f676940ULL },
539
        { 0x95d69670b12b7f41ULL, 0x0000af298d050e43ULL },
540
        { 0xed30f03375d97c45ULL, 0x00036bcfc1194751ULL },
541
        { 0xa1f4b1014d3f6d59ULL, 0x00111b0ec57e6499ULL },
542
        { 0x29c77506823d22bdULL, 0x00558749db77f700ULL },
543
        { 0xd0e549208b31adb1ULL, 0x01aba4714957d300ULL },
544
        { 0x147a6da2b7f86475ULL, 0x085a36366eb71f04ULL },
545
        { 0x33321216cbecfb24ULL, 0x14e1878814c9cd8aULL },
546
        { 0xbffe969c7ee839edULL, 0x1a19e96a19fc40ecULL },
547
        { 0xf7ff1e21cf512434ULL, 0x105031e2503da893ULL },
548
        { 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL },
549
        { 0x337e9f14d3eec892ULL, 0x197d4df19d605767ULL },
550
        { 0x802f236d04753d5bULL, 0x0fee50b7025c36a0ULL },
551
        { 0xa03aec4845928cb2ULL, 0x13e9e4e4c2f34448ULL },
552
        { 0xc849a75a56f72fdeULL, 0x18e45e1df3b0155aULL },
553
        { 0x7a5c1130ecb4fbd6ULL, 0x1f1d75a5709c1ab1ULL },
554
        { 0xec798abe93f11d65ULL, 0x13726987666190aeULL },
555
        { 0xa797ed6e38ed64bfULL, 0x184f03e93ff9f4daULL },
556
        { 0x517de8c9c728bdefULL, 0x1e62c4e38ff87211ULL },
557
        { 0xd2eeb17e1c7976b5ULL, 0x12fdbb0e39fb474aULL },
558
        { 0x87aa5ddda397d462ULL, 0x17bd29d1c87a191dULL },
559
        { 0xe994f5550c7dc97bULL, 0x1dac74463a989f64ULL },
560
        { 0x11fd195527ce9dedULL, 0x128bc8abe49f639fULL },
561
        { 0xd67c5faa71c24568ULL, 0x172ebad6ddc73c86ULL },
562
        { 0x8c1b77950e32d6c2ULL, 0x1cfa698c95390ba8ULL },
563
        { 0x57912abd28dfc639ULL, 0x121c81f7dd43a749ULL },
564
        { 0xad75756c7317b7c8ULL, 0x16a3a275d494911bULL },
565
        { 0x98d2d2c78fdda5baULL, 0x1c4c8b1349b9b562ULL },
566
        { 0x9f83c3bcb9ea8794ULL, 0x11afd6ec0e14115dULL },
567
        { 0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL },
568
        { 0x493de1d6e27e73d7ULL, 0x1ba2bfd0d5ff5b22ULL },
569
        { 0x6dc6ad264d8f0866ULL, 0x1145b7e285bf98f5ULL },
570
        { 0xc938586fe0f2ca80ULL, 0x159725db272f7f32ULL },
571
        { 0x7b866e8bd92f7d20ULL, 0x1afcef51f0fb5effULL },
572
        { 0xad34051767bdae34ULL, 0x10de1593369d1b5fULL },
573
        { 0x9881065d41ad19c1ULL, 0x15159af804446237ULL },
574
        { 0x7ea147f492186032ULL, 0x1a5b01b605557ac5ULL },
575
        { 0x6f24ccf8db4f3c1fULL, 0x1078e111c3556cbbULL },
576
        { 0x4aee003712230b27ULL, 0x14971956342ac7eaULL },
577
        { 0xdda98044d6abcdf0ULL, 0x19bcdfabc13579e4ULL },
578
        { 0x0a89f02b062b60b6ULL, 0x10160bcb58c16c2fULL },
579
        { 0xcd2c6c35c7b638e4ULL, 0x141b8ebe2ef1c73aULL },
580
        { 0x8077874339a3c71dULL, 0x1922726dbaae3909ULL },
581
        { 0xe0956914080cb8e4ULL, 0x1f6b0f092959c74bULL },
582
        { 0x6c5d61ac8507f38eULL, 0x13a2e965b9d81c8fULL },
583
        { 0x4774ba17a649f072ULL, 0x188ba3bf284e23b3ULL },
584
        { 0x1951e89d8fdc6c8fULL, 0x1eae8caef261aca0ULL },
585
        { 0x0fd3316279e9c3d9ULL, 0x132d17ed577d0be4ULL },
586
        { 0x13c7fdbb186434cfULL, 0x17f85de8ad5c4eddULL },
587
        { 0x58b9fd29de7d4203ULL, 0x1df67562d8b36294ULL },
588
        { 0xb7743e3a2b0e4942ULL, 0x12ba095dc7701d9cULL },
589
        { 0xe5514dc8b5d1db92ULL, 0x17688bb5394c2503ULL },
590
        { 0xdea5a13ae3465277ULL, 0x1d42aea2879f2e44ULL },
591
        { 0x0b2784c4ce0bf38aULL, 0x1249ad2594c37cebULL },
592
        { 0xcdf165f6018ef06dULL, 0x16dc186ef9f45c25ULL },
593
        { 0x416dbf7381f2ac88ULL, 0x1c931e8ab871732fULL },
594
        { 0x88e497a83137abd5ULL, 0x11dbf316b346e7fdULL },
595
        { 0xeb1dbd923d8596caULL, 0x1652efdc6018a1fcULL },
596
        { 0x25e52cf6cce6fc7dULL, 0x1be7abd3781eca7cULL },
597
        { 0x97af3c1a40105dceULL, 0x1170cb642b133e8dULL },
598
        { 0xfd9b0b20d0147542ULL, 0x15ccfe3d35d80e30ULL },
599
        { 0x3d01cde904199292ULL, 0x1b403dcc834e11bdULL },
600
        { 0x462120b1a28ffb9bULL, 0x1108269fd210cb16ULL },
601
        { 0xd7a968de0b33fa82ULL, 0x154a3047c694fddbULL },
602
        { 0xcd93c3158e00f923ULL, 0x1a9cbc59b83a3d52ULL },
603
        { 0xc07c59ed78c09bb6ULL, 0x10a1f5b813246653ULL },
604
        { 0xb09b7068d6f0c2a3ULL, 0x14ca732617ed7fe8ULL },
605
        { 0xdcc24c830cacf34cULL, 0x19fd0fef9de8dfe2ULL },
606
        { 0xc9f96fd1e7ec180fULL, 0x103e29f5c2b18bedULL },
607
        { 0x3c77cbc661e71e13ULL, 0x144db473335deee9ULL },
608
        { 0x8b95beb7fa60e598ULL, 0x1961219000356aa3ULL },
609
        { 0x373d9732fc7c8f7fULL, 0x0fdcb4fa002162a6ULL },
610
        { 0xc50cfcffbb9bb35fULL, 0x13d3e2388029bb4fULL },
611
        { 0xb6503c3faa82a037ULL, 0x18c8dac6a0342a23ULL },
612
        { 0xa3e44b4f95234844ULL, 0x1efb1178484134acULL },
613
        { 0xe66eaf11bd360d2bULL, 0x135ceaeb2d28c0ebULL },
614
        { 0xe00a5ad62c839075ULL, 0x183425a5f872f126ULL },
615
        { 0x980cf18bb7a47493ULL, 0x1e412f0f768fad70ULL },
616
        { 0x5f0816f752c6c8dcULL, 0x12e8bd69aa19cc66ULL },
617
        { 0xf6ca1cb527787b13ULL, 0x17a2ecc414a03f7fULL },
618
        { 0xf47ca3e2715699d7ULL, 0x1d8ba7f519c84f5fULL },
619
        { 0xf8cde66d86d62026ULL, 0x127748f9301d319bULL },
620
        { 0xf7016008e88ba830ULL, 0x17151b377c247e02ULL },
621
        { 0xb4c1b80b22ae923cULL, 0x1cda62055b2d9d83ULL },
622
        { 0x50f91306f5ad1b65ULL, 0x12087d4358fc8272ULL },
623
        { 0xe53757c8b318623fULL, 0x168a9c942f3ba30eULL },
624
        { 0x9e852dbadfde7acfULL, 0x1c2d43b93b0a8bd2ULL },
625
        { 0xa3133c94cbeb0cc1ULL, 0x119c4a53c4e69763ULL },
626
        { 0x8bd80bb9fee5cff1ULL, 0x16035ce8b6203d3cULL },
627
        { 0xaece0ea87e9f43eeULL, 0x1b843422e3a84c8bULL },
628
        { 0x4d40c9294f238a75ULL, 0x1132a095ce492fd7ULL },
629
        { 0x2090fb73a2ec6d12ULL, 0x157f48bb41db7bcdULL },
630
        { 0x68b53a508ba78856ULL, 0x1adf1aea12525ac0ULL },
631
        { 0x417144725748b536ULL, 0x10cb70d24b7378b8ULL },
632
        { 0x51cd958eed1ae283ULL, 0x14fe4d06de5056e6ULL },
633
        { 0xe640faf2a8619b24ULL, 0x1a3de04895e46c9fULL },
634
        { 0xefe89cd7a93d00f7ULL, 0x1066ac2d5daec3e3ULL },
635
        { 0xebe2c40d938c4134ULL, 0x14805738b51a74dcULL },
636
        { 0x26db7510f86f5181ULL, 0x19a06d06e2611214ULL },
637
        { 0x9849292a9b4592f1ULL, 0x100444244d7cab4cULL },
638
        { 0xbe5b73754216f7adULL, 0x1405552d60dbd61fULL },
639
        { 0xadf25052929cb598ULL, 0x1906aa78b912cba7ULL },
640
        { 0xccb772339ba1f17fULL, 0x0fa42a8b73abbf48ULL },
641
        { 0xffe54ec0828a6ddfULL, 0x138d352e5096af1aULL },
642
        { 0xbfdea270a32d0957ULL, 0x18708279e4bc5ae1ULL },
643
        { 0x2fd64b0ccbf84badULL, 0x1e8ca3185deb719aULL },
644
        { 0x5de5eee7ff7b2f4cULL, 0x1317e5ef3ab32700ULL },
645
        { 0x755f6aa1ff59fb1fULL, 0x17dddf6b095ff0c0ULL },
646
        { 0x92b7454a7f3079e7ULL, 0x1dd55745cbb7ecf0ULL },
647
        { 0x5bb28b4e8f7e4c30ULL, 0x12a5568b9f52f416ULL },
648
        { 0xf29f2e22335ddf3cULL, 0x174eac2e8727b11bULL },
649
        { 0xef46f9aac035570bULL, 0x1d22573a28f19d62ULL },
650
        { 0xd58c5c0ab8215667ULL, 0x123576845997025dULL },
651
        { 0x4aef730d6629ac01ULL, 0x16c2d4256ffcc2f5ULL },
652
        { 0x9dab4fd0bfb41701ULL, 0x1c73892ecbfbf3b2ULL },
653
        { 0xa28b11e277d08e60ULL, 0x11c835bd3f7d784fULL },
654
        { 0x8b2dd65b15c4b1f9ULL, 0x163a432c8f5cd663ULL },
655
        { 0x6df94bf1db35de77ULL, 0x1bc8d3f7b3340bfcULL },
656
        { 0xc4bbcf772901ab0aULL, 0x115d847ad000877dULL },
657
        { 0x35eac354f34215cdULL, 0x15b4e5998400a95dULL },
658
        { 0x8365742a30129b40ULL, 0x1b221effe500d3b4ULL },
659
        { 0xd21f689a5e0ba108ULL, 0x10f5535fef208450ULL },
660
        { 0x06a742c0f58e894aULL, 0x1532a837eae8a565ULL },
661
        { 0x4851137132f22b9dULL, 0x1a7f5245e5a2cebeULL },
662
        { 0xed32ac26bfd75b42ULL, 0x108f936baf85c136ULL },
663
        { 0xa87f57306fcd3212ULL, 0x14b378469b673184ULL },
664
        { 0xd29f2cfc8bc07e97ULL, 0x19e056584240fde5ULL },
665
        { 0xa3a37c1dd7584f1eULL, 0x102c35f729689eafULL },
666
        { 0x8c8c5b254d2e62e6ULL, 0x14374374f3c2c65bULL },
667
        { 0x6faf71eea079fb9fULL, 0x1945145230b377f2ULL },
668
        { 0x85cda735244c3d43ULL, 0x0fcb2cb35e702af7ULL },
669
        { 0x674111026d5f4c94ULL, 0x13bdf7e0360c35b5ULL },
670
        { 0xc111554308b71fbaULL, 0x18ad75d8438f4322ULL },
671
        { 0x7155aa93cae4e7a8ULL, 0x1ed8d34e547313ebULL },
672
        { 0x26d58a9c5ecf10c9ULL, 0x13478410f4c7ec73ULL },
673
        { 0xf08aed437682d4fbULL, 0x1819651531f9e78fULL },
674
        { 0xecada89454238a3aULL, 0x1e1fbe5a7e786173ULL },
675
        { 0x73ec895cb4963664ULL, 0x12d3d6f88f0b3ce8ULL },
676
        { 0x90e7abb3e1bbc3fdULL, 0x1788ccb6b2ce0c22ULL },
677
        { 0x352196a0da2ab4fdULL, 0x1d6affe45f818f2bULL },
678
        { 0x0134fe24885ab11eULL, 0x1262dfeebbb0f97bULL },
679
        { 0xc1823dadaa715d65ULL, 0x16fb97ea6a9d37d9ULL },
680
        { 0x31e2cd19150db4bfULL, 0x1cba7de5054485d0ULL },
681
        { 0x1f2dc02fad2890f7ULL, 0x11f48eaf234ad3a2ULL },
682
        { 0xa6f9303b9872b535ULL, 0x1671b25aec1d888aULL },
683
        { 0x50b77c4a7e8f6282ULL, 0x1c0e1ef1a724eaadULL },
684
        { 0x5272adae8f199d91ULL, 0x1188d357087712acULL },
685
        { 0x670f591a32e004f6ULL, 0x15eb082cca94d757ULL },
686
        { 0x40d32f60bf980633ULL, 0x1b65ca37fd3a0d2dULL },
687
        { 0x4883fd9c77bf03e0ULL, 0x111f9e62fe44483cULL },
688
        { 0x5aa4fd0395aec4d8ULL, 0x156785fbbdd55a4bULL },
689
        { 0x314e3c447b1a760eULL, 0x1ac1677aad4ab0deULL },
690
        { 0xded0e5aaccf089c9ULL, 0x10b8e0acac4eae8aULL },
691
        { 0x96851f15802cac3bULL, 0x14e718d7d7625a2dULL },
692
        { 0xfc2666dae037d74aULL, 0x1a20df0dcd3af0b8ULL },
693
        { 0x9d980048cc22e68eULL, 0x10548b68a044d673ULL },
694
        { 0x84fe005aff2ba032ULL, 0x1469ae42c8560c10ULL },
695
        { 0xa63d8071bef6883eULL, 0x198419d37a6b8f14ULL },
696
        { 0xe7e67047175a1527ULL, 0x0ff290242c83396cULL },
697
        { 0x21e00c58dd309a70ULL, 0x13ef342d37a407c8ULL },
698
        { 0x2a580f6f147cc10dULL, 0x18eb0138858d09baULL },
699
        { 0x5a7709a56ccdf8a8ULL, 0x0f92e0c353782614ULL },
700
        { 0x7114cc0ec80176d2ULL, 0x137798f428562f99ULL },
701
        { 0xcd59ff127a01d486ULL, 0x18557f31326bbb7fULL },
702
        { 0xc0b07ed7188249a8ULL, 0x1e6adefd7f06aa5fULL },
703
        { 0xd86e4f466f516e09ULL, 0x1302cb5e6f642a7bULL },
704
        { 0xce89e3180b25c98bULL, 0x17c37e360b3d351aULL },
705
        { 0x822c5bde0def3beeULL, 0x1db45dc38e0c8261ULL },
706
        { 0xf15bb96ac8b58575ULL, 0x1290ba9a38c7d17cULL },
707
        { 0x2db2a7c57ae2e6d2ULL, 0x1734e940c6f9c5dcULL },
708
        { 0x391f51b6d99ba086ULL, 0x1d022390f8b83753ULL },
709
        { 0x03b3931248014454ULL, 0x1221563a9b732294ULL },
710
        { 0x04a077d6da019569ULL, 0x16a9abc9424feb39ULL },
711
        { 0x45c895cc9081fac3ULL, 0x1c5416bb92e3e607ULL },
712
        { 0x8b9d5d9fda513cbaULL, 0x11b48e353bce6fc4ULL },
713
        { 0xae84b507d0e58be8ULL, 0x1621b1c28ac20bb5ULL },
714
        { 0x1a25e249c51eeee3ULL, 0x1baa1e332d728ea3ULL },
715
        { 0xf057ad6e1b33554dULL, 0x114a52dffc679925ULL },
716
        { 0x6c6d98c9a2002aa1ULL, 0x159ce797fb817f6fULL },
717
        { 0x4788fefc0a803549ULL, 0x1b04217dfa61df4bULL },
718
        { 0x0cb59f5d8690214eULL, 0x10e294eebc7d2b8fULL },
719
        { 0xcfe30734e83429a1ULL, 0x151b3a2a6b9c7672ULL },
720
        { 0x83dbc9022241340aULL, 0x1a6208b50683940fULL },
721
        { 0xb2695da15568c086ULL, 0x107d457124123c89ULL },
722
        { 0x1f03b509aac2f0a7ULL, 0x149c96cd6d16cbacULL },
723
        { 0x26c4a24c1573acd1ULL, 0x19c3bc80c85c7e97ULL },
724
        { 0x783ae56f8d684c03ULL, 0x101a55d07d39cf1eULL },
725
        { 0x16499ecb70c25f03ULL, 0x1420eb449c8842e6ULL },
726
        { 0x9bdc067e4cf2f6c4ULL, 0x19292615c3aa539fULL },
727
        { 0xc169840ef017da3bULL, 0x0fb9b7cd9a4a7443ULL },
728
        { 0xb1c3e512ac1dd0c9ULL, 0x13a825c100dd1154ULL },
729
        { 0xde34de57572544fcULL, 0x18922f31411455a9ULL },
730
        { 0x55c215ed2cee963bULL, 0x1eb6bafd91596b14ULL },
731
        { 0xb5994db43c151de5ULL, 0x133234de7ad7e2ecULL },
732
        { 0xe2ffa1214b1a655eULL, 0x17fec216198ddba7ULL },
733
        { 0xdbbf89699de0feb6ULL, 0x1dfe729b9ff15291ULL },
734
        { 0x2957b5e202ac9f31ULL, 0x12bf07a143f6d39bULL },
735
        { 0xf3ada35a8357c6feULL, 0x176ec98994f48881ULL },
736
        { 0x70990c31242db8bdULL, 0x1d4a7bebfa31aaa2ULL },
737
        { 0x865fa79eb69c9376ULL, 0x124e8d737c5f0aa5ULL },
738
        { 0xe7f791866443b854ULL, 0x16e230d05b76cd4eULL },
739
        { 0xa1f575e7fd54a669ULL, 0x1c9abd04725480a2ULL },
740
        { 0xa53969b0fe54e801ULL, 0x11e0b622c774d065ULL },
741
        { 0x0e87c41d3dea2202ULL, 0x1658e3ab7952047fULL },
742
        { 0xd229b5248d64aa82ULL, 0x1bef1c9657a6859eULL },
743
        { 0x435a1136d85eea91ULL, 0x117571ddf6c81383ULL },
744
        { 0x143095848e76a536ULL, 0x15d2ce55747a1864ULL },
745
        { 0x193cbae5b2144e83ULL, 0x1b4781ead1989e7dULL },
746
        { 0x2fc5f4cf8f4cb112ULL, 0x110cb132c2ff630eULL },
747
        { 0xbbb77203731fdd56ULL, 0x154fdd7f73bf3bd1ULL },
748
        { 0x2aa54e844fe7d4acULL, 0x1aa3d4df50af0ac6ULL },
749
        { 0xdaa75112b1f0e4ebULL, 0x10a6650b926d66bbULL },
750
        { 0xd15125575e6d1e26ULL, 0x14cffe4e7708c06aULL },
751
        { 0x85a56ead360865b0ULL, 0x1a03fde214caf085ULL },
752
        { 0x7387652c41c53f8eULL, 0x10427ead4cfed653ULL },
753
        { 0x50693e7752368f71ULL, 0x14531e58a03e8be8ULL },
754
        { 0x64838e1526c4334eULL, 0x1967e5eec84e2ee2ULL },
755
        { 0x7ed238cd383aa011ULL, 0x0fe0efb53d30dd4dULL },
756
        { 0xde86c70086494815ULL, 0x13d92ba28c7d14a0ULL },
757
        { 0x162878c0a7db9a1aULL, 0x18cf768b2f9c59c9ULL },
758
        { 0xadd94b7868e94050ULL, 0x0f81aa16fdc1b81dULL },
759
        { 0x194f9e5683239064ULL, 0x1362149cbd322625ULL },
760
        { 0x5fa385ec23ec747eULL, 0x183a99c3ec7eafaeULL },
761
        { 0xf78c67672ce7919dULL, 0x1e494034e79e5b99ULL },
762
        { 0x3ab7c0a07c10bb02ULL, 0x12edc82110c2f940ULL },
763
        { 0x4965b0c89b14e9c3ULL, 0x17a93a2954f3b790ULL },
764
        { 0x5bbf1cfac1da2433ULL, 0x1d9388b3aa30a574ULL },
765
        { 0xb957721cb92856a0ULL, 0x127c35704a5e6768ULL },
766
        { 0xe7ad4ea3e7726c48ULL, 0x171b42cc5cf60142ULL },
767
        { 0xa198a24ce14f075aULL, 0x1ce2137f74338193ULL },
768
        { 0x44ff65700cd16498ULL, 0x120d4c2fa8a030fcULL },
769
        { 0x563f3ecc1005bdbeULL, 0x16909f3b92c83d3bULL },
770
        { 0x2bcf0e7f14072d2eULL, 0x1c34c70a777a4c8aULL },
771
        { 0x5b61690f6c847c3dULL, 0x11a0fc668aac6fd6ULL },
772
        { 0xf239c35347a59b4cULL, 0x16093b802d578bcbULL },
773
        { 0xeec83428198f021fULL, 0x1b8b8a6038ad6ebeULL },
774
        { 0x553d20990ff96153ULL, 0x1137367c236c6537ULL },
775
        { 0x2a8c68bf53f7b9a8ULL, 0x1585041b2c477e85ULL },
776
        { 0x752f82ef28f5a812ULL, 0x1ae64521f7595e26ULL },
777
        { 0x093db1d57999890bULL, 0x10cfeb353a97dad8ULL },
778
        { 0x0b8d1e4ad7ffeb4eULL, 0x1503e602893dd18eULL },
779
        { 0x8e7065dd8dffe622ULL, 0x1a44df832b8d45f1ULL },
780
        { 0xf9063faa78bfefd5ULL, 0x106b0bb1fb384bb6ULL },
781
        { 0xb747cf9516efebcaULL, 0x1485ce9e7a065ea4ULL },
782
        { 0xe519c37a5cabe6bdULL, 0x19a742461887f64dULL },
783
        { 0xaf301a2c79eb7036ULL, 0x1008896bcf54f9f0ULL },
784
        { 0xdafc20b798664c43ULL, 0x140aabc6c32a386cULL },
785
        { 0x11bb28e57e7fdf54ULL, 0x190d56b873f4c688ULL },
786
        { 0x0b14f98f6f0feb95ULL, 0x0fa856334878fc15ULL },
787
        { 0x4dda37f34ad3e67aULL, 0x13926bc01a973b1aULL },
788
        { 0xe150c5f01d88e019ULL, 0x187706b0213d09e0ULL },
789
        { 0x8cd27bb612758c0fULL, 0x0f4a642e14c6262cULL },
790
        { 0xb0071aa39712ef13ULL, 0x131cfd3999f7afb7ULL },
791
        { 0x9c08e14c7cd7aad8ULL, 0x17e43c8800759ba5ULL },
792
        { 0x030b199f9c0d958eULL, 0x1ddd4baa0093028fULL },
793
        { 0x61e6f003c1887d79ULL, 0x12aa4f4a405be199ULL },
794
        { 0xba60ac04b1ea9cd7ULL, 0x1754e31cd072d9ffULL },
795
        { 0xa8f8d705de65440dULL, 0x1d2a1be4048f907fULL },
796
        { 0xc99b8663aaff4a88ULL, 0x123a516e82d9ba4fULL },
797
        { 0xbc0267fc95bf1d2aULL, 0x16c8e5ca239028e3ULL },
798
        { 0xab0301fbbb2ee474ULL, 0x1c7b1f3cac74331cULL },
799
        { 0xeae1e13d54fd4ec9ULL, 0x11ccf385ebc89ff1ULL },
800
        { 0x659a598caa3ca27bULL, 0x1640306766bac7eeULL },
801
        { 0xff00efefd4cbcb1aULL, 0x1bd03c81406979e9ULL },
802
        { 0x3f6095f5e4ff5ef0ULL, 0x116225d0c841ec32ULL },
803
        { 0xcf38bb735e3f36acULL, 0x15baaf44fa52673eULL },
804
        { 0x8306ea5035cf0457ULL, 0x1b295b1638e7010eULL },
805
        { 0x11e4527221a162b6ULL, 0x10f9d8ede39060a9ULL },
806
        { 0x565d670eaa09bb64ULL, 0x15384f295c7478d3ULL },
807
        { 0x2bf4c0d2548c2a3dULL, 0x1a8662f3b3919708ULL },
808
        { 0x1b78f88374d79a66ULL, 0x1093fdd8503afe65ULL },
809
        { 0x625736a4520d8100ULL, 0x14b8fd4e6449bdfeULL },
810
        { 0xfaed044d6690e140ULL, 0x19e73ca1fd5c2d7dULL },
811
        { 0xbcd422b0601a8cc8ULL, 0x103085e53e599c6eULL },
812
        { 0x6c092b5c78212ffaULL, 0x143ca75e8df0038aULL },
813
        { 0x070b763396297bf8ULL, 0x194bd136316c046dULL },
814
        { 0x246729e03dd9ed7bULL, 0x0fcf62c1dee382c4ULL },
815
        { 0x2d80f4584d5068daULL, 0x13c33b72569c6375ULL },
816
        { 0x78e1316e60a48310ULL, 0x18b40a4eec437c52ULL },
817
    },
818
    .ge = {
819
        { 0x0000000000000001ULL, 0x2000000000000000ULL },
820
        { 0x999999999999999aULL, 0x1999999999999999ULL },
821
        { 0x47ae147ae147ae15ULL, 0x147ae147ae147ae1ULL },
822
        { 0x6c8b4395810624deULL, 0x10624dd2f1a9fbe7ULL },
823
        { 0x7a786c226809d496ULL, 0x1a36e2eb1c432ca5ULL },
824
        { 0x61f9f01b866e43abULL, 0x14f8b588e368f084ULL },
825
        { 0xb4c7f34938583622ULL, 0x10c6f7a0b5ed8d36ULL },
826
        { 0x87a6520ec08d236aULL, 0x1ad7f29abcaf4857ULL },
827
        { 0x9fb841a566d74f88ULL, 0x15798ee2308c39dfULL },
828
        { 0xe62d01511f12a607ULL, 0x112e0be826d694b2ULL },
829
        { 0xd6ae6881cb5109a4ULL, 0x1b7cdfd9d7bdbab7ULL },
830
        { 0xdef1ed34a2a73aeaULL, 0x15fd7fe17964955fULL },
831
        { 0x7f27f0f6e885c8bbULL, 0x119799812dea1119ULL },
832
        { 0x650cb4be40d60df8ULL, 0x1c25c268497681c2ULL },
833
        { 0xea70909833de7193ULL, 0x16849b86a12b9b01ULL },
834
        { 0x21f3a6e0297ec143ULL, 0x1203af9ee756159bULL },
835
        { 0x6985d7cd0f313537ULL, 0x1cd2b297d889bc2bULL },
836
        { 0x2137dfd73f5a90f9ULL, 0x170ef54646d49689ULL },
837
        { 0xe75fe645cc4873faULL, 0x12725dd1d243aba0ULL },
838
        { 0xa5663d3c7a0d865dULL, 0x1d83c94fb6d2ac34ULL },
839
        { 0x511e976394d79eb1ULL, 0x179ca10c9242235dULL },
840
        { 0xda7edf82dd794bc1ULL, 0x12e3b40a0e9b4f7dULL },
841
        { 0x2a6498d1625bac68ULL, 0x1e392010175ee596ULL },
842
        { 0xeeb6e0a781e2f053ULL, 0x182db34012b25144ULL },
843
        { 0x58924d52ce4f26a9ULL, 0x1357c299a88ea76aULL },
844
        { 0x27507bb7b07ea441ULL, 0x1ef2d0f5da7dd8aaULL },
845
        { 0x52a6c95fc0655034ULL, 0x18c240c4aecb13bbULL },
846
        { 0x0eebd44c99eaa690ULL, 0x13ce9a36f23c0fc9ULL },
847
        { 0xb17953adc3110a80ULL, 0x1fb0f6be50601941ULL },
848
        { 0xc12ddc8b02740867ULL, 0x195a5efea6b34767ULL },
849
        { 0x3424b06f3529a052ULL, 0x14484bfeebc29f86ULL },
850
        { 0x901d59f290ee19dbULL, 0x1039d66589687f9eULL },
851
        { 0x4cfbc31db4b0295fULL, 0x19f623d5a8a73297ULL },
852
        { 0x3d9635b15d59bab2ULL, 0x14c4e977ba1f5bacULL },
853
        { 0x97ab5e277de16228ULL, 0x109d8792fb4c4956ULL },
854
        { 0xf2abc9d8c9689d0dULL, 0x1a95a5b7f87a0ef0ULL },
855
        { 0x5bbca17a3aba173eULL, 0x154484932d2e725aULL },
856
        { 0xafca1ac82efb45cbULL, 0x11039d428a8b8eaeULL },
857
        { 0xb2dcf7a6b1920945ULL, 0x1b38fb9daa78e44aULL },
858
        { 0xf57d92ebc141a104ULL, 0x15c72fb1552d836eULL },
859
        { 0xc46475896767b403ULL, 0x116c262777579c58ULL },
860
        { 0x6d6d88dbd8a5ecd2ULL, 0x1be03d0bf225c6f4ULL },
861
        { 0x8abe071646eb23dbULL, 0x164cfda3281e38c3ULL },
862
        { 0x6efe6c11d255b649ULL, 0x11d7314f534b609cULL },
863
        { 0xb197134fb6ef8a0eULL, 0x1c8b821885456760ULL },
864
        { 0x27ac0f72f8bfa1a5ULL, 0x16d601ad376ab91aULL },
865
        { 0xb95672c260994e1eULL, 0x1244ce242c5560e1ULL },
866
        { 0xf5571e03cdc21695ULL, 0x1d3ae36d13bbce35ULL },
867
        { 0x2aac18030b01ababULL, 0x17624f8a762fd82bULL },
868
        { 0xbbbce0026f348956ULL, 0x12b50c6ec4f31355ULL },
869
        { 0x92c7ccd0b1eda889ULL, 0x1dee7a4ad4b81eefULL },
870
        { 0xdbd30a408e57ba07ULL, 0x17f1fb6f10934bf2ULL },
871
        { 0x7ca8d50071dfc806ULL, 0x1327fc58da0f6ff5ULL },
872
        { 0xfaa7bb33e9660cd6ULL, 0x1ea6608e29b24cbbULL },
873
        { 0x9552fc298784d711ULL, 0x18851a0b548ea3c9ULL },
874
        { 0xaaa8c9bad2d0ac0eULL, 0x139dae6f76d88307ULL },
875
        { 0xdddadc5e1e1aace3ULL, 0x1f62b0b257c0d1a5ULL },
876
        { 0x7e48b04b4b488a4fULL, 0x191bc08eac9a4151ULL },
877
        { 0xcb6d59d5d5d3a1d9ULL, 0x141633a556e1cddaULL },
878
        { 0x3c577b1177dc817bULL, 0x1011c2eaabe7d7e2ULL },
879
        { 0xc6f25e825960cf2aULL, 0x19b604aaaca62636ULL },
880
        { 0x6bf518684780a5bbULL, 0x14919d5556eb51c5ULL },
881
        { 0x232a79ed06008496ULL, 0x10747ddddf22a7d1ULL },
882
        { 0xd1dd8fe1a3340756ULL, 0x1a53fc9631d10c81ULL },
883
        { 0xa7e4731ae8f66c45ULL, 0x150ffd44f4a73d34ULL },
884
        { 0x531d28e253f8569eULL, 0x10d9976a5d52975dULL },
885
        { 0xeb61db03b98d5762ULL, 0x1af5bf109550f22eULL },
886
        { 0xbc4e48cfc7a445e8ULL, 0x159165a6ddda5b58ULL },
887
        { 0x6371d3d96c836b20ULL, 0x11411e1f17e1e2adULL },
888
        { 0x9f1c8628ad9f11cdULL, 0x1b9b6364f3030448ULL },
889
        { 0xe5b06b53be18db0bULL, 0x1615e91d8f359d06ULL },
890
        { 0xeaf3890fcb4715a2ULL, 0x11ab20e472914a6bULL },
891
        { 0x44b8db4c7871bc37ULL, 0x1c45016d841baa46ULL },
892
        { 0x03c715d6c6c1635fULL, 0x169d9abe03495505ULL },
893
        { 0x3638de456bcde919ULL, 0x1217aefe69077737ULL },
894
        { 0x56c163a2461641c1ULL, 0x1cf2b1970e725858ULL },
895
        { 0xdf011c81d1ab67ceULL, 0x17288e1271f51379ULL },
896
        { 0x7f3416ce4155eca5ULL, 0x1286d80ec190dc61ULL },
897
        { 0x6520247d3556476eULL, 0x1da48ce468e7c702ULL },
898
        { 0xea801d30f7783925ULL, 0x17b6d71d20b96c01ULL },
899
        { 0xbb99b0f3f92cfa84ULL, 0x12f8ac174d612334ULL },
900
        { 0x5f5c4e532847f739ULL, 0x1e5aacf215683854ULL },
901
        { 0x7f7d0b75b9d32c2eULL, 0x18488a5b44536043ULL },
902
        { 0x9930d5f7c7dc2358ULL, 0x136d3b7c36a919cfULL },
903
        { 0x8eb4898c72f9d226ULL, 0x1f152bf9f10e8fb2ULL },
904
        { 0x722a07a38f2e41b8ULL, 0x18ddbcc7f40ba628ULL },
905
        { 0xc1bb394fa5be9afaULL, 0x13e497065cd61e86ULL },
906
        { 0x9c5ec2190930f7f6ULL, 0x1fd424d6faf030d7ULL },
907
        { 0x49e56814075a5ff8ULL, 0x197683df2f268d79ULL },
908
        { 0x6e51201005e1e660ULL, 0x145ecfe5bf520ac7ULL },
909
        { 0xf1da800cd181851aULL, 0x104bd984990e6f05ULL },
910
        { 0x4fc400148268d4f5ULL, 0x1a12f5a0f4e3e4d6ULL },
911
        { 0xd96999aa01ed772bULL, 0x14dbf7b3f71cb711ULL },
912
        { 0xadee1488018ac5bcULL, 0x10aff95cc5b09274ULL },
913
        { 0x497ceda668de092cULL, 0x1ab328946f80ea54ULL },
914
        { 0x3aca57b853e4d424ULL, 0x155c2076bf9a5510ULL },
915
        { 0x623b7960431d7683ULL, 0x1116805effaeaa73ULL },
916
        { 0x9d2bf566d1c8bd9eULL, 0x1b5733cb32b110b8ULL },
917
        { 0x7dbcc452416d647fULL, 0x15df5ca28ef40d60ULL },
918
        { 0xcafd69db678ab6ccULL, 0x117f7d4ed8c33de6ULL },
919
        { 0xab2f0fc572778adfULL, 0x1bff2ee48e052fd7ULL },
920
        { 0x88f273045b92d580ULL, 0x1665bf1d3e6a8cacULL },
921
        { 0xd3f528d049424466ULL, 0x11eaff4a98553d56ULL },
922
        { 0xb988414d4203a0a3ULL, 0x1cab3210f3bb9557ULL },
923
        { 0x6139cdd76802e6e9ULL, 0x16ef5b40c2fc7779ULL },
924
        { 0xe761717920025254ULL, 0x125915cd68c9f92dULL },
925
        { 0xa568b58e999d5086ULL, 0x1d5b561574765b7cULL },
926
        { 0x5120913ee14aa6d2ULL, 0x177c44ddf6c515fdULL },
927
        { 0xa74d40ff1aa21f0eULL, 0x12c9d0b1923744caULL },
928
        { 0x0baece64f769cb4aULL, 0x1e0fb44f50586e11ULL },
929
        { 0x3c8bd850c5ee3c3bULL, 0x180c903f7379f1a7ULL },
930
        { 0xca0979da37f1c9c9ULL, 0x133d4032c2c7f485ULL },
931
        { 0xa9a8c2f6bfe942dbULL, 0x1ec866b79e0cba6fULL },
932
        { 0x2153cf2bccba9be3ULL, 0x18a0522c7e709526ULL },
933
        { 0x1aa9728970954982ULL, 0x13b374f06526ddb8ULL },
934
        { 0xf775840f1a88759dULL, 0x1f8587e7083e2f8cULL },
935
        { 0x5f9136727ba05e17ULL, 0x19379fec0698260aULL },
936
        { 0x1940f85b9619e4dfULL, 0x142c7ff0054684d5ULL },
937
        { 0xe100c6afab47ea4cULL, 0x1023998cd1053710ULL },
938
        { 0xce67a44c453fdd47ULL, 0x19d28f47b4d524e7ULL },
939
        { 0xd852e9d69dccb106ULL, 0x14a8729fc3ddb71fULL },
940
        { 0x79dbee454b0a2738ULL, 0x1086c219697e2c19ULL },
941
        { 0x295fe3a211a9d859ULL, 0x1a71368f0f30468fULL },
942
        { 0xbab31c81a7bb137aULL, 0x15275ed8d8f36ba5ULL },
943
        { 0x6228e39aec95a92fULL, 0x10ec4be0ad8f8951ULL },
944
        { 0x9d0e38f7e0ef7517ULL, 0x1b13ac9aaf4c0ee8ULL },
945
        { 0xb0d82d931a592a79ULL, 0x15a956e225d67253ULL },
946
        { 0x8d79be0f4847552eULL, 0x11544581b7dec1dcULL },
947
        { 0x158f967eda0bbb7cULL, 0x1bba08cf8c979c94ULL },
948
        { 0x77a611ff14d62f97ULL, 0x162e6d72d6dfb076ULL },
949
        { 0xf951a7ff43de8c79ULL, 0x11bebdf578b2f391ULL },
950
        { 0xc21c3ffed2fdad8eULL, 0x1c6463225ab7ec1cULL },
951
        { 0x01b0333242648ad8ULL, 0x16b6b5b5155ff017ULL },
952
        { 0x0159c28e9b83a246ULL, 0x122bc490dde659acULL },
953
        { 0xcef604175f3903a3ULL, 0x1d12d41afca3c2acULL },
954
        { 0x725e69ac4c2d9c83ULL, 0x17424348ca1c9bbdULL },
955
        { 0xf5185489d68ae39cULL, 0x129b69070816e2fdULL },
956
        { 0xee8d540fbdab05c6ULL, 0x1dc574d80cf16b2fULL },
957
        { 0xbed77672fe226b05ULL, 0x17d12a4670c1228cULL },
958
        { 0xff12c528cb4ebc04ULL, 0x130dbb6b8d674ed6ULL },
959
        { 0xcb513b74787df9a0ULL, 0x1e7c5f127bd87e24ULL },
960
        { 0x090dc929f9fe614dULL, 0x18637f41fcad31b7ULL },
961
        { 0xa0d7d42194cb810aULL, 0x1382cc34ca2427c5ULL },
962
        { 0x67bfb9cf5478ce77ULL, 0x1f37ad21436d0c6fULL },
963
        { 0x1fcc94a5dd2d71f9ULL, 0x18f9574dcf8a7059ULL },
964
        { 0x7fd6dd517dbdf4c7ULL, 0x13faac3e3fa1f37aULL },
965
        { 0xffdf17746497f706ULL, 0x0ffbbcfe994e5c61ULL },
966
        { 0x6631bf20a0f324d6ULL, 0x1992c7fdc216fa36ULL },
967
        { 0xb827cc1a1a5c1d78ULL, 0x14756ccb01abfb5eULL },
968
        { 0x935309ae7b7ce460ULL, 0x105df0a267bcc918ULL },
969
        { 0x1eeb42b0c594a099ULL, 0x1a2fe76a3f9474f4ULL },
970
        { 0xe58902270476e6e1ULL, 0x14f31f8832dd2a5cULL },
971
        { 0xb7a0ce859d2bebe7ULL, 0x10c27fa028b0eeb0ULL },
972
        { 0x59014a6f61dfdfd8ULL, 0x1ad0cc33744e4ab4ULL },
973
        { 0xe0cdd525e7e64cadULL, 0x1573d68f903ea229ULL },
974
        { 0x4d7177518651d6f1ULL, 0x11297872d9cbb4eeULL },
975
        { 0x7be8bee8d6e957e8ULL, 0x1b758d848fac54b0ULL },
976
        { 0xfcba3253df211320ULL, 0x15f7a46a0c89dd59ULL },
977
        { 0x63c8284318e74280ULL, 0x1192e9ee706e4aaeULL },
978
        { 0x060d0d3827d86a66ULL, 0x1c1e43171a4a1117ULL },
979
        { 0x6b3da42cecad21ebULL, 0x167e9c127b6e7412ULL },
980
        { 0x88fe1cf0bd574e56ULL, 0x11fee341fc585cdbULL },
981
        { 0x419694b462254a23ULL, 0x1ccb0536608d615fULL },
982
        { 0x67abaa29e81dd4e9ULL, 0x1708d0f84d3de77fULL },
983
        { 0xb95621bb2017dd87ULL, 0x126d73f9d764b932ULL },
984
        { 0xc223692b668c95a5ULL, 0x1d7becc2f23ac1eaULL },
985
        { 0xce82ba891ed6de1dULL, 0x179657025b6234bbULL },
986
        { 0xa53562074bdf1818ULL, 0x12deac01e2b4f6fcULL },
987
        { 0x3b889cd87964f359ULL, 0x1e3113363787f194ULL },
988
        { 0xfc6d4a46c783f5e1ULL, 0x18274291c6065adcULL },
989
        { 0x30576e9f06032b1aULL, 0x13529ba7d19eaf17ULL },
990
        { 0x1a257dcb3cd1de90ULL, 0x1eea92a61c311825ULL },
991
        { 0x481dfe3c30a7e540ULL, 0x18bba884e35a79b7ULL },
992
        { 0xd34b31c9c0865100ULL, 0x13c9539d82aec7c5ULL },
993
        { 0x5211e942cda3b4cdULL, 0x1fa885c8d117a609ULL },
994
        { 0x74db21023e1c90a4ULL, 0x19539e3a40dfb807ULL },
995
        { 0xf715b401cb4a0d50ULL, 0x1442e4fb67196005ULL },
996
        { 0xf8de299b09080aa7ULL, 0x103583fc527ab337ULL },
997
        { 0x8e304291a80cddd7ULL, 0x19ef3993b72ab859ULL },
998
        { 0x3e8d020e200a4b13ULL, 0x14bf6142f8eef9e1ULL },
999
        { 0x653d9b3e80083c0fULL, 0x10991a9bfa58c7e7ULL },
1000
        { 0x6ec8f864000d2ce4ULL, 0x1a8e90f9908e0ca5ULL },
1001
        { 0x8bd3f9e999a423eaULL, 0x153eda614071a3b7ULL },
1002
        { 0x3ca994bae1501cbbULL, 0x10ff151a99f482f9ULL },
1003
        { 0xc775bac49bb3612bULL, 0x1b31bb5dc320d18eULL },
1004
        { 0xd2c4956a16291a89ULL, 0x15c162b168e70e0bULL },
1005
        { 0xdbd0778811ba7ba1ULL, 0x11678227871f3e6fULL },
1006
        { 0x2c80bf401c5d929bULL, 0x1bd8d03f3e9863e6ULL },
1007
        { 0xbd33cc3349e47549ULL, 0x16470cff6546b651ULL },
1008
        { 0xca8fd68f6e505dd4ULL, 0x11d270cc51055ea7ULL },
1009
        { 0x4419574be3b3c953ULL, 0x1c83e7ad4e6efdd9ULL },
1010
        { 0x0347790982f63aa9ULL, 0x16cfec8aa52597e1ULL },
1011
        { 0xcf6c60d468c4fbbaULL, 0x123ff06eea847980ULL },
1012
        { 0xe57a34870e07f92aULL, 0x1d331a4b10d3f59aULL },
1013
        { 0x512e906c0b399422ULL, 0x175c1508da432ae2ULL },
1014
        { 0xda8ba6bcd5c7a9b5ULL, 0x12b010d3e1cf5581ULL },
1015
        { 0x90df712e22d90f87ULL, 0x1de6815302e5559cULL },
1016
        { 0xda4c5a8b4f140c6cULL, 0x17eb9aa8cf1dde16ULL },
1017
        { 0xaea37ba2a5a9a38aULL, 0x1322e220a5b17e78ULL },
1018
        { 0x7dd25f6aa2a905a9ULL, 0x1e9e369aa2b59727ULL },
1019
        { 0x97db7f888220d154ULL, 0x187e92154ef7ac1fULL },
1020
        { 0x797c6606ce80a777ULL, 0x139874ddd8c6234cULL },
1021
        { 0x8f2d700ae4010bf1ULL, 0x1f5a549627a36badULL },
1022
        { 0x0c2459a25000d65aULL, 0x191510781fb5efbeULL },
1023
        { 0x701d1481d99a4515ULL, 0x1410d9f9b2f7f2feULL },
1024
        { 0xc017439b147b6a77ULL, 0x100d7b2e28c65bfeULL },
1025
        { 0xccf205c4ed9243f2ULL, 0x19af2b7d0e0a2ccaULL },
1026
        { 0x0a5b37d0be0e9cc2ULL, 0x148c22ca71a1bd6fULL },
1027
        { 0x0848f973cb3ee3ceULL, 0x10701bd527b4978cULL },
1028
        { 0xda0e5bec78649fb0ULL, 0x1a4cf9550c5425acULL },
1029
        { 0x7b3eaff060507fc0ULL, 0x150a6110d6a9b7bdULL },
1030
        { 0x95cbbff380406633ULL, 0x10d51a73deee2c97ULL },
1031
        { 0xefac665266cd7052ULL, 0x1aee90b964b04758ULL },
1032
        { 0x2623850eb8a459dbULL, 0x158ba6fab6f36c47ULL },
1033
        { 0x1e82d0d893b6ae49ULL, 0x113c85955f29236cULL },
1034
        { 0xfd9e1af41f8ab075ULL, 0x1b9408eefea838acULL },
1035
        { 0x97b1af29b2d559f7ULL, 0x16100725988693bdULL },
1036
        { 0xac8e25baf5777b2cULL, 0x11a66c1e139edc97ULL },
1037
        { 0x7a7d092b2258c513ULL, 0x1c3d79c9b8fe2dbfULL },
1038
        { 0x61fda0ef4ead6a76ULL, 0x169794a160cb57ccULL },
1039
        { 0xe7fe1a590bbdeec5ULL, 0x1212dd4de7091309ULL },
1040
        { 0xa6635d5b45fcb13aULL, 0x1ceafbafd80e84dcULL },
1041
        { 0x851c4aaf6b308dc8ULL, 0x172262f3133ed0b0ULL },
1042
        { 0xd0e36ef2bc26d7d4ULL, 0x1281e8c275cbda26ULL },
1043
        { 0xb49f17eac6a48c86ULL, 0x1d9ca79d894629d7ULL },
1044
        { 0x2a18dfef0550706bULL, 0x17b08617a104ee46ULL },
1045
        { 0x54e0b3259dd9f389ULL, 0x12f39e794d9d8b6bULL },
1046
        { 0x87cdeb6f62f65274ULL, 0x1e5297287c2f4578ULL },
1047
        { 0xd30b22bf825ea85dULL, 0x18421286c9bf6ac6ULL },
1048
        { 0x0f3c1bcc684bb9e4ULL, 0x13680ed23aff889fULL },
1049
        { 0x18602c7a4079296dULL, 0x1f0ce4839198da98ULL },
1050
        { 0x46b356c833942124ULL, 0x18d71d360e13e213ULL },
1051
        { 0x388f78a029434db6ULL, 0x13df4a91a4dcb4dcULL },
1052
        { 0x2d3f93b35435d7c5ULL, 0x0fe5d54150b090b0ULL },
1053
        { 0x153285ebb9efbfa2ULL, 0x196fbb9bb44db44dULL },
1054
        { 0xaa8ed189618c994eULL, 0x145962e2f6a4903dULL },
1055
        { 0xeed8a7a11ad6e10cULL, 0x1047824f2bb6d9caULL },
1056
        { 0x7e27729b5e249b45ULL, 0x1a0c03b1df8af611ULL },
1057
        { 0xfe85f549181d4904ULL, 0x14d6695b193bf80dULL },
1058
        { 0xcb9e5dd4134aa0d0ULL, 0x10ab877c142ff9a4ULL },
1059
        { 0xdf63c9535211014dULL, 0x1aac0bf9b9e65c3aULL },
1060
        { 0x191ca10f74da6771ULL, 0x15566ffafb1eb02fULL },
1061
        { 0xadb080d92a4852c1ULL, 0x1111f32f2f4bc025ULL },
1062
        { 0x15e7348eaa0d5134ULL, 0x1b4feb7eb212cd09ULL },
1063
        { 0xab1f5d3eee710dc4ULL, 0x15d98932280f0a6dULL },
1064
        { 0xbc1917658b8da49dULL, 0x117ad428200c0857ULL },
1065
        { 0x2cf4f23c127c3a94ULL, 0x1bf7b9d9cce00d59ULL },
1066
        { 0xf0c3f4fcdb969543ULL, 0x165fc7e170b33de0ULL },
1067
        { 0x5a365d9716121103ULL, 0x11e6398126f5cb1aULL },
1068
        { 0x9056fc24f01ce804ULL, 0x1ca38f350b22de90ULL },
1069
        { 0xd9df301d8ce3ecd0ULL, 0x16e93f5da2824ba6ULL },
1070
        { 0xe17f59b13d8323daULL, 0x125432b14ecea2ebULL },
1071
        { 0x68cbc2b52f38395cULL, 0x1d53844ee47dd179ULL },
1072
        { 0x53d6355dbf602de3ULL, 0x177603725064a794ULL },
1073
        { 0xa9782ab165e68b1cULL, 0x12c4cf8ea6b6ec76ULL },
1074
        { 0x0f26aab56fd744faULL, 0x1e07b27dd78b13f1ULL },
1075
        { 0x3f52222abfdf6a62ULL, 0x18062864ac6f4327ULL },
1076
        { 0x65db4e88997f884eULL, 0x1338205089f29c1fULL },
1077
        { 0x6fc54a7428cc0d4aULL, 0x1ec033b40fea9365ULL },
1078
        { 0x596aa1f68709a43bULL, 0x1899c2f673220f84ULL },
1079
        { 0xadeee7f86c07b696ULL, 0x13ae3591f5b4d936ULL },
1080
        { 0x497e3ff3e00c5756ULL, 0x1f7d228322baf524ULL },
1081
        { 0xd464fff64cd6ac45ULL, 0x1930e868e89590e9ULL },
1082
        { 0x4383fff83d7889d1ULL, 0x14272053ed4473eeULL },
1083
        { 0xcf9cccc69793a174ULL, 0x101f4d0ff1038ff1ULL },
1084
        { 0x7f6147a425b90252ULL, 0x19cbae7fe805b31cULL },
1085
        { 0xcc4dd2e9b7c7350fULL, 0x14a2f1ffecd15c16ULL },
1086
        { 0x3d0b0f215fd290d9ULL, 0x10825b3323dab012ULL },
1087
        { 0x61ab4b689950e7c1ULL, 0x1a6a2b85062ab350ULL },
1088
        { 0x4e22a2ba1440b967ULL, 0x1521bc6a6b555c40ULL },
1089
        { 0x0b4ee894dd009453ULL, 0x10e7c9eebc4449cdULL },
1090
        { 0x1217da87c800ed51ULL, 0x1b0c764ac6d3a948ULL },
1091
        { 0xdb46486ca000bddaULL, 0x15a391d56bdc876cULL },
1092
        { 0x490506bd4ccd64afULL, 0x114fa7ddefe39f8aULL },
1093
        { 0xa8080ac87ae23ab1ULL, 0x1bb2a62fe638ff43ULL },
1094
        { 0x5339a239fbe82ef4ULL, 0x162884f31e93ff69ULL },
1095
        { 0x75c7b4fb2fecf25dULL, 0x11ba03f5b20fff87ULL },
1096
        { 0x22d92191e647ea2eULL, 0x1c5cd322b67fff3fULL },
1097
        { 0xb57a8141850654f2ULL, 0x16b0a8e891ffff65ULL },
1098
        { 0xc4620101373843f5ULL, 0x1226ed86db3332b7ULL },
1099
        { 0x3a366801f1f39feeULL, 0x1d0b15a491eb8459ULL },
1100
        { 0xfb5eb99b27f6198bULL, 0x173c115074bc69e0ULL },
1101
        { 0x2f7efae2865e7ad6ULL, 0x129674405d6387e7ULL },
1102
        { 0xe597f7d0d6fd9156ULL, 0x1dbd86cd6238d971ULL },
1103
        { 0x8479930d78cadaabULL, 0x17cad23de82d7ac1ULL },
1104
        { 0xd06142712d6f1556ULL, 0x1308a831868ac89aULL },
1105
        { 0x4d686a4eaf182222ULL, 0x1e74404f3daada91ULL },
1106
        { 0xa453883ef279b4e8ULL, 0x185d003f6488aedaULL },
1107
        { 0xe9dc6cff28615d87ULL, 0x137d99cc506d58aeULL },
1108
        { 0xa960ae650d6895a4ULL, 0x1f2f5c7a1a488de4ULL },
1109
        { 0xbab3beb73ded4483ULL, 0x18f2b061aea07183ULL },
1110
    },
1111
};
1112
1113
}