| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 #include "platform/assert.h" | |
| 6 #include "vm/bigint_operations.h" | |
| 7 #include "vm/object.h" | |
| 8 #include "vm/object_store.h" | |
| 9 #include "vm/unit_test.h" | |
| 10 | |
| 11 namespace dart { | |
| 12 | |
| 13 static uword ZoneAllocator(intptr_t size) { | |
| 14 Zone* zone = Isolate::Current()->current_zone(); | |
| 15 return zone->AllocUnsafe(size); | |
| 16 } | |
| 17 | |
| 18 | |
| 19 TEST_CASE(BigintSmi) { | |
| 20 { | |
| 21 const Smi& smi = Smi::Handle(Smi::New(5)); | |
| 22 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 23 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 24 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 25 EXPECT_EQ(5, smi_back.Value()); | |
| 26 } | |
| 27 | |
| 28 { | |
| 29 const Smi& smi = Smi::Handle(Smi::New(Smi::kMaxValue)); | |
| 30 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 31 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 32 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 33 EXPECT(Smi::kMaxValue == smi_back.Value()); | |
| 34 } | |
| 35 | |
| 36 { | |
| 37 const Smi& smi = Smi::Handle(Smi::New(Smi::kMinValue)); | |
| 38 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 39 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 40 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 41 EXPECT(bigint.IsNegative()); | |
| 42 EXPECT(Smi::kMinValue == smi_back.Value()); | |
| 43 } | |
| 44 | |
| 45 { | |
| 46 ASSERT(0xFFFFFFF < Smi::kMaxValue); | |
| 47 const Smi& smi = Smi::Handle(Smi::New(0xFFFFFFF)); | |
| 48 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 49 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 50 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 51 EXPECT(0xFFFFFFF == smi_back.Value()); | |
| 52 } | |
| 53 | |
| 54 { | |
| 55 ASSERT(0x10000000 < Smi::kMaxValue); | |
| 56 const Smi& smi = Smi::Handle(Smi::New(0x10000000)); | |
| 57 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 58 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 59 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 60 EXPECT(0x10000000 == smi_back.Value()); | |
| 61 } | |
| 62 } | |
| 63 | |
| 64 | |
| 65 TEST_CASE(BigintInt64) { | |
| 66 const int64_t kValue = 100000000; | |
| 67 const int64_t kValue64 = kValue * kValue; | |
| 68 Bigint& big = Bigint::Handle(BigintOperations::NewFromInt64(kValue)); | |
| 69 const Smi& smi = Smi::Handle(Smi::New(kValue)); | |
| 70 Bigint& big_test = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 71 EXPECT_EQ(0, BigintOperations::Compare(big, big_test)); | |
| 72 big = BigintOperations::NewFromInt64(kValue64); | |
| 73 big_test = BigintOperations::Multiply(big_test, big_test); | |
| 74 EXPECT_EQ(0, BigintOperations::Compare(big, big_test)); | |
| 75 big = BigintOperations::NewFromInt64(-kValue64); | |
| 76 big_test = BigintOperations::Subtract( | |
| 77 Bigint::Handle(BigintOperations::NewFromInt64(0)), big_test); | |
| 78 EXPECT_EQ(0, BigintOperations::Compare(big, big_test)); | |
| 79 | |
| 80 const Bigint& one = Bigint::Handle(BigintOperations::NewFromInt64(1)); | |
| 81 big = BigintOperations::NewFromInt64(kMinInt64); | |
| 82 EXPECT(BigintOperations::FitsIntoInt64(big)); | |
| 83 int64_t back = BigintOperations::ToInt64(big); | |
| 84 EXPECT_EQ(kMinInt64, back); | |
| 85 | |
| 86 big = BigintOperations::Subtract(big, one); | |
| 87 EXPECT(!BigintOperations::FitsIntoInt64(big)); | |
| 88 | |
| 89 big = BigintOperations::NewFromInt64(kMaxInt64); | |
| 90 EXPECT(BigintOperations::FitsIntoInt64(big)); | |
| 91 back = BigintOperations::ToInt64(big); | |
| 92 EXPECT_EQ(kMaxInt64, back); | |
| 93 | |
| 94 big = BigintOperations::Add(big, one); | |
| 95 EXPECT(!BigintOperations::FitsIntoInt64(big)); | |
| 96 } | |
| 97 | |
| 98 | |
| 99 TEST_CASE(BigintUint64) { | |
| 100 const Bigint& one = Bigint::Handle(BigintOperations::NewFromUint64(1)); | |
| 101 EXPECT(BigintOperations::FitsIntoInt64(one)); | |
| 102 EXPECT(BigintOperations::FitsIntoUint64(one)); | |
| 103 | |
| 104 Bigint& big = Bigint::Handle(BigintOperations::NewFromUint64(kMaxUint64)); | |
| 105 EXPECT(!BigintOperations::FitsIntoInt64(big)); | |
| 106 EXPECT(BigintOperations::FitsIntoUint64(big)); | |
| 107 | |
| 108 uint64_t back = BigintOperations::ToUint64(big); | |
| 109 EXPECT_EQ(kMaxUint64, back); | |
| 110 | |
| 111 big = BigintOperations::Add(big, one); | |
| 112 EXPECT(!BigintOperations::FitsIntoInt64(big)); | |
| 113 EXPECT(!BigintOperations::FitsIntoUint64(big)); | |
| 114 | |
| 115 big = BigintOperations::Subtract(big, one); | |
| 116 EXPECT(!BigintOperations::FitsIntoInt64(big)); | |
| 117 EXPECT(BigintOperations::FitsIntoUint64(big)); | |
| 118 | |
| 119 big = BigintOperations::ShiftRight(big, 1); | |
| 120 EXPECT(BigintOperations::FitsIntoInt64(big)); | |
| 121 EXPECT(BigintOperations::FitsIntoUint64(big)); | |
| 122 } | |
| 123 | |
| 124 | |
| 125 TEST_CASE(BigintDouble) { | |
| 126 Smi& smi = Smi::Handle(Smi::New(5)); | |
| 127 Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi)); | |
| 128 Double& dbl = Double::Handle(BigintOperations::ToDouble(bigint)); | |
| 129 EXPECT_EQ(5.0, dbl.value()); | |
| 130 | |
| 131 smi = Smi::New(0); | |
| 132 bigint = BigintOperations::NewFromSmi(smi); | |
| 133 dbl = BigintOperations::ToDouble(bigint); | |
| 134 EXPECT_EQ(0.0, dbl.value()); | |
| 135 double zero = dbl.value(); | |
| 136 | |
| 137 smi = Smi::New(-12345678); | |
| 138 bigint = BigintOperations::NewFromSmi(smi); | |
| 139 dbl = BigintOperations::ToDouble(bigint); | |
| 140 EXPECT_EQ(-1.2345678e+7, dbl.value()); | |
| 141 | |
| 142 bigint = BigintOperations::NewFromCString("1"); | |
| 143 dbl = BigintOperations::ToDouble(bigint); | |
| 144 EXPECT_EQ(1.0, dbl.value()); | |
| 145 | |
| 146 bigint = BigintOperations::NewFromCString("123456"); | |
| 147 dbl = BigintOperations::ToDouble(bigint); | |
| 148 EXPECT_EQ(123456.0, dbl.value()); | |
| 149 | |
| 150 bigint = BigintOperations::NewFromCString("123456789"); | |
| 151 dbl = BigintOperations::ToDouble(bigint); | |
| 152 EXPECT_EQ(123456789.0, dbl.value()); | |
| 153 | |
| 154 bigint = BigintOperations::NewFromCString("12345678901234567"); | |
| 155 dbl = BigintOperations::ToDouble(bigint); | |
| 156 EXPECT_EQ(12345678901234568.0, dbl.value()); | |
| 157 | |
| 158 bigint = BigintOperations::NewFromCString("98765432109876"); | |
| 159 dbl = BigintOperations::ToDouble(bigint); | |
| 160 EXPECT_EQ(9.8765432109876e+13, dbl.value()); | |
| 161 | |
| 162 bigint = BigintOperations::NewFromCString("0x17777777777778"); | |
| 163 dbl = BigintOperations::ToDouble(bigint); | |
| 164 EXPECT_EQ(6605279453476728.0, dbl.value()); | |
| 165 | |
| 166 bigint = BigintOperations::NewFromCString("0x37777777777778"); | |
| 167 dbl = BigintOperations::ToDouble(bigint); | |
| 168 EXPECT_EQ(15612478708217720.0, dbl.value()); | |
| 169 | |
| 170 bigint = BigintOperations::NewFromCString("0x177777777777781234567"); | |
| 171 dbl = BigintOperations::ToDouble(bigint); | |
| 172 EXPECT_EQ(1.7730912021014563e+24, dbl.value()); | |
| 173 | |
| 174 bigint = BigintOperations::NewFromCString("0x177777777777788000000"); | |
| 175 dbl = BigintOperations::ToDouble(bigint); | |
| 176 EXPECT_EQ(1.7730912021014563e+24, dbl.value()); | |
| 177 | |
| 178 bigint = BigintOperations::NewFromCString("0x177777777777788000001"); | |
| 179 dbl = BigintOperations::ToDouble(bigint); | |
| 180 EXPECT_EQ(1.7730912021014565e+24, dbl.value()); | |
| 181 | |
| 182 bigint = BigintOperations::NewFromCString("0x177777777777798000000"); | |
| 183 dbl = BigintOperations::ToDouble(bigint); | |
| 184 EXPECT_EQ(1.7730912021014568e+24, dbl.value()); | |
| 185 | |
| 186 bigint = BigintOperations::NewFromCString("0x177777777777798000001"); | |
| 187 dbl = BigintOperations::ToDouble(bigint); | |
| 188 EXPECT_EQ(1.7730912021014568e+24, dbl.value()); | |
| 189 | |
| 190 bigint = BigintOperations::NewFromCString("0x377777777777790000000"); | |
| 191 dbl = BigintOperations::ToDouble(bigint); | |
| 192 EXPECT_EQ(4.1909428413307146e+24, dbl.value()); | |
| 193 | |
| 194 bigint = BigintOperations::NewFromCString("0x377777777777790000001"); | |
| 195 dbl = BigintOperations::ToDouble(bigint); | |
| 196 EXPECT_EQ(4.190942841330715e+24, dbl.value()); | |
| 197 | |
| 198 bigint = BigintOperations::NewFromCString("0x377777777777730000000"); | |
| 199 dbl = BigintOperations::ToDouble(bigint); | |
| 200 EXPECT_EQ(4.1909428413307135e+24, dbl.value()); | |
| 201 | |
| 202 bigint = BigintOperations::NewFromCString("0x377777777777730000001"); | |
| 203 dbl = BigintOperations::ToDouble(bigint); | |
| 204 EXPECT_EQ(4.1909428413307135e+24, dbl.value()); | |
| 205 | |
| 206 // Reduced precision. | |
| 207 bigint = BigintOperations::NewFromCString( | |
| 208 "9876543210987654321098765432109876543210"); | |
| 209 dbl = BigintOperations::ToDouble(bigint); | |
| 210 EXPECT_EQ(9.8765432109876546e+39, dbl.value()); | |
| 211 | |
| 212 bigint = BigintOperations::NewFromCString( | |
| 213 "12345678901234567890123456789012345678901234567890" | |
| 214 "12345678901234567890123456789012345678901234567890" | |
| 215 "12345678901234567890123456789012345678901234567890" | |
| 216 "12345678901234567890123456789012345678901234567890" | |
| 217 "12345678901234567890123456789012345678901234567890" | |
| 218 "12345678901234567890123456789012345678901234567890" | |
| 219 "12345678901234567890123456789012345678901234567890" | |
| 220 "12345678901234567890123456789012345678901234567890" | |
| 221 "12345678901234567890123456789012345678901234567890" | |
| 222 "12345678901234567890123456789012345678901234567890"); | |
| 223 dbl = BigintOperations::ToDouble(bigint); | |
| 224 EXPECT_EQ(1.0/zero, dbl.value()); | |
| 225 | |
| 226 bigint = BigintOperations::NewFromCString( | |
| 227 "17976931348623157081452742373170435679807056752584" | |
| 228 "49965989174768031572607800285387605895586327668781" | |
| 229 "71540458953514382464234321326889464182768467546703" | |
| 230 "53751698604991057655128207624549009038932894407586" | |
| 231 "85084551339423045832369032229481658085593321233482" | |
| 232 "74797826204144723168738177180919299881250404026184" | |
| 233 "124858368"); | |
| 234 dbl = BigintOperations::ToDouble(bigint); | |
| 235 EXPECT_EQ(1.7976931348623157e308, dbl.value()); | |
| 236 | |
| 237 bigint = BigintOperations::NewFromCString( | |
| 238 "17976931348623159077293051907890247336179769789423" | |
| 239 "06572734300811577326758055009631327084773224075360" | |
| 240 "21120113879871393357658789768814416622492847430639" | |
| 241 "47412437776789342486548527630221960124609411945308" | |
| 242 "29520850057688381506823424628814739131105408272371" | |
| 243 "63350510684586298239947245938479716304835356329624" | |
| 244 "224137216"); | |
| 245 dbl = BigintOperations::ToDouble(bigint); | |
| 246 EXPECT_EQ(1.0/zero, dbl.value()); | |
| 247 | |
| 248 bigint = BigintOperations::NewFromCString( | |
| 249 "17976931348623158079372897140530341507993413271003" | |
| 250 "78269361737789804449682927647509466490179775872070" | |
| 251 "96330286416692887910946555547851940402630657488671" | |
| 252 "50582068190890200070838367627385484581771153176447" | |
| 253 "57302700698555713669596228429148198608349364752927" | |
| 254 "19074168444365510704342711559699508093042880177904" | |
| 255 "174497792"); | |
| 256 dbl = BigintOperations::ToDouble(bigint); | |
| 257 EXPECT_EQ(1.0/zero, dbl.value()); | |
| 258 | |
| 259 bigint = BigintOperations::NewFromCString( | |
| 260 "17976931348623158079372897140530341507993413271003" | |
| 261 "78269361737789804449682927647509466490179775872070" | |
| 262 "96330286416692887910946555547851940402630657488671" | |
| 263 "50582068190890200070838367627385484581771153176447" | |
| 264 "57302700698555713669596228429148198608349364752927" | |
| 265 "19074168444365510704342711559699508093042880177904" | |
| 266 "174497791"); | |
| 267 dbl = BigintOperations::ToDouble(bigint); | |
| 268 EXPECT_EQ(1.7976931348623157e308, dbl.value()); | |
| 269 | |
| 270 bigint = BigintOperations::NewFromCString("100000000000000000000000"); | |
| 271 dbl = BigintOperations::ToDouble(bigint); | |
| 272 EXPECT_EQ(1e+23, dbl.value()); | |
| 273 | |
| 274 bigint = BigintOperations::NewFromCString("100000000000000000000001"); | |
| 275 dbl = BigintOperations::ToDouble(bigint); | |
| 276 EXPECT_EQ(1.0000000000000001e+23, dbl.value()); | |
| 277 | |
| 278 // Same but shifted 64 bits to the left. | |
| 279 bigint = BigintOperations::NewFromCString( | |
| 280 "1844674407370955161600000000000000000000000"); | |
| 281 dbl = BigintOperations::ToDouble(bigint); | |
| 282 EXPECT_EQ(1.844674407370955e+42, dbl.value()); | |
| 283 | |
| 284 bigint = BigintOperations::NewFromCString( | |
| 285 "1844674407370955161600000000000000000000001"); | |
| 286 dbl = BigintOperations::ToDouble(bigint); | |
| 287 EXPECT_EQ(1.8446744073709553e+42, dbl.value()); | |
| 288 } | |
| 289 | |
| 290 | |
| 291 TEST_CASE(BigintHexStrings) { | |
| 292 { | |
| 293 const Bigint& bigint = Bigint::Handle( | |
| 294 BigintOperations::NewFromCString("0x0")); | |
| 295 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 296 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 297 EXPECT_EQ(0, smi.Value()); | |
| 298 } | |
| 299 | |
| 300 { | |
| 301 const Bigint& bigint = Bigint::Handle( | |
| 302 BigintOperations::NewFromCString("0x1")); | |
| 303 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 304 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 305 EXPECT_EQ(1, smi.Value()); | |
| 306 } | |
| 307 | |
| 308 { | |
| 309 const Bigint& bigint = Bigint::Handle( | |
| 310 BigintOperations::NewFromCString("0x123")); | |
| 311 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 312 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 313 EXPECT_EQ(0x123, smi.Value()); | |
| 314 } | |
| 315 | |
| 316 { | |
| 317 const Bigint& bigint = Bigint::Handle( | |
| 318 BigintOperations::NewFromCString("0x123")); | |
| 319 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 320 EXPECT_STREQ("0x123", str); | |
| 321 } | |
| 322 | |
| 323 { | |
| 324 const Bigint& bigint = Bigint::Handle( | |
| 325 BigintOperations::NewFromCString("0xaBcEf")); | |
| 326 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 327 EXPECT_STREQ("0xABCEF", str); | |
| 328 } | |
| 329 | |
| 330 { | |
| 331 const char* in = "0x123456789"; | |
| 332 const Bigint& bigint = Bigint::Handle( | |
| 333 BigintOperations::NewFromCString(in)); | |
| 334 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 335 EXPECT_STREQ(in, str); | |
| 336 } | |
| 337 | |
| 338 { | |
| 339 const char* in = "0xFFFFFFF"; | |
| 340 const Bigint& bigint = Bigint::Handle( | |
| 341 BigintOperations::NewFromCString(in)); | |
| 342 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 343 EXPECT_STREQ(in, str); | |
| 344 } | |
| 345 | |
| 346 { | |
| 347 const char* in = "0x10000000"; | |
| 348 const Bigint& bigint = Bigint::Handle( | |
| 349 BigintOperations::NewFromCString(in)); | |
| 350 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 351 EXPECT_STREQ(in, str); | |
| 352 } | |
| 353 | |
| 354 { | |
| 355 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 356 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 357 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 358 EXPECT_STREQ(in, str); | |
| 359 } | |
| 360 | |
| 361 { | |
| 362 const Bigint& bigint = Bigint::Handle( | |
| 363 BigintOperations::NewFromCString("-0x123")); | |
| 364 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 365 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 366 EXPECT_EQ(-0x123, smi.Value()); | |
| 367 } | |
| 368 | |
| 369 { | |
| 370 const Bigint& bigint = Bigint::Handle( | |
| 371 BigintOperations::NewFromCString("-0x123")); | |
| 372 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 373 EXPECT_STREQ("-0x123", str); | |
| 374 } | |
| 375 | |
| 376 { | |
| 377 const Bigint& bigint = Bigint::Handle( | |
| 378 BigintOperations::NewFromCString("-0xaBcEf")); | |
| 379 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 380 EXPECT_STREQ("-0xABCEF", str); | |
| 381 } | |
| 382 | |
| 383 { | |
| 384 const char* in = "-0x123456789"; | |
| 385 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 386 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 387 EXPECT_STREQ(in, str); | |
| 388 } | |
| 389 | |
| 390 { | |
| 391 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 392 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 393 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 394 EXPECT_STREQ(in, str); | |
| 395 } | |
| 396 | |
| 397 { | |
| 398 const Bigint& bigint = Bigint::Handle( | |
| 399 BigintOperations::NewFromCString("0x00000123")); | |
| 400 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 401 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 402 EXPECT_EQ(0x123, smi.Value()); | |
| 403 } | |
| 404 | |
| 405 { | |
| 406 const Bigint& bigint = Bigint::Handle( | |
| 407 BigintOperations::NewFromCString("0x000000123")); | |
| 408 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 409 EXPECT_STREQ("0x123", str); | |
| 410 } | |
| 411 | |
| 412 { | |
| 413 const Bigint& bigint = Bigint::Handle( | |
| 414 BigintOperations::NewFromCString("0x0000aBcEf")); | |
| 415 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 416 EXPECT_STREQ("0xABCEF", str); | |
| 417 } | |
| 418 | |
| 419 { | |
| 420 const char* in = "0x00000000000000000000000000000000000000000000123456789"; | |
| 421 const char* out = "0x123456789"; | |
| 422 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 423 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 424 EXPECT_STREQ(out, str); | |
| 425 } | |
| 426 | |
| 427 { | |
| 428 const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 429 const char* out = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 430 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 431 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 432 EXPECT_STREQ(out, str); | |
| 433 } | |
| 434 | |
| 435 { | |
| 436 const Bigint& bigint = Bigint::Handle( | |
| 437 BigintOperations::NewFromCString("-0x00000123")); | |
| 438 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 439 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 440 EXPECT_EQ(-0x123, smi.Value()); | |
| 441 } | |
| 442 | |
| 443 { | |
| 444 const Bigint& bigint = Bigint::Handle( | |
| 445 BigintOperations::NewFromCString("-0x00000123")); | |
| 446 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 447 EXPECT_STREQ("-0x123", str); | |
| 448 } | |
| 449 | |
| 450 { | |
| 451 const Bigint& bigint = Bigint::Handle( | |
| 452 BigintOperations::NewFromCString("-0x000aBcEf")); | |
| 453 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 454 EXPECT_STREQ("-0xABCEF", str); | |
| 455 } | |
| 456 | |
| 457 { | |
| 458 const char* in = "-0x00000000000000000000000000000000000000000000123456789"; | |
| 459 const char* out = "-0x123456789"; | |
| 460 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 461 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 462 EXPECT_STREQ(out, str); | |
| 463 } | |
| 464 | |
| 465 { | |
| 466 const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 467 const char* out = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 468 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 469 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 470 EXPECT_STREQ(out, str); | |
| 471 } | |
| 472 { | |
| 473 const char* test = "12345678901234567890"; | |
| 474 const char* out = "0xAB54A98CEB1F0AD2"; | |
| 475 const Bigint& bigint = Bigint::Handle( | |
| 476 BigintOperations::NewFromCString(test)); | |
| 477 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 478 EXPECT_STREQ(out, str); | |
| 479 } | |
| 480 { | |
| 481 const char* test = "-12345678901234567890"; | |
| 482 const char* out = "-0xAB54A98CEB1F0AD2"; | |
| 483 const Bigint& bigint = Bigint::Handle( | |
| 484 BigintOperations::NewFromCString(test)); | |
| 485 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 486 EXPECT_STREQ(out, str); | |
| 487 } | |
| 488 } | |
| 489 | |
| 490 | |
| 491 TEST_CASE(BigintDecStrings) { | |
| 492 { | |
| 493 const Bigint& bigint = Bigint::Handle( | |
| 494 BigintOperations::NewFromCString("0x0")); | |
| 495 const char* str = | |
| 496 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 497 EXPECT_STREQ("0", str); | |
| 498 } | |
| 499 | |
| 500 { | |
| 501 const Bigint& bigint = Bigint::Handle( | |
| 502 BigintOperations::NewFromCString("0x123")); | |
| 503 const char* str = | |
| 504 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 505 EXPECT_STREQ("291", str); | |
| 506 } | |
| 507 | |
| 508 { | |
| 509 const Bigint& bigint = Bigint::Handle( | |
| 510 BigintOperations::NewFromCString("0xaBcEf")); | |
| 511 const char* str = | |
| 512 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 513 EXPECT_STREQ("703727", str); | |
| 514 } | |
| 515 | |
| 516 { | |
| 517 const char* in = "0x123456789"; | |
| 518 const Bigint& bigint = Bigint::Handle( | |
| 519 BigintOperations::NewFromCString(in)); | |
| 520 const char* str = | |
| 521 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 522 EXPECT_STREQ("4886718345", str); | |
| 523 } | |
| 524 | |
| 525 { | |
| 526 const char* in = "0xFFFFFFF"; | |
| 527 const Bigint& bigint = Bigint::Handle( | |
| 528 BigintOperations::NewFromCString(in)); | |
| 529 const char* str = | |
| 530 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 531 EXPECT_STREQ("268435455", str); | |
| 532 } | |
| 533 | |
| 534 { | |
| 535 const char* in = "0x10000000"; | |
| 536 const Bigint& bigint = Bigint::Handle( | |
| 537 BigintOperations::NewFromCString(in)); | |
| 538 const char* str = | |
| 539 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 540 EXPECT_STREQ("268435456", str); | |
| 541 } | |
| 542 | |
| 543 { | |
| 544 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 545 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 546 const char* str = | |
| 547 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 548 EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960", | |
| 549 str); | |
| 550 } | |
| 551 | |
| 552 { | |
| 553 const Bigint& bigint = Bigint::Handle( | |
| 554 BigintOperations::NewFromCString("-0x123")); | |
| 555 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 556 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 557 EXPECT_EQ(-291, smi.Value()); | |
| 558 } | |
| 559 | |
| 560 { | |
| 561 const Bigint& bigint = Bigint::Handle( | |
| 562 BigintOperations::NewFromCString("-0x123")); | |
| 563 const char* str = | |
| 564 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 565 EXPECT_STREQ("-291", str); | |
| 566 } | |
| 567 | |
| 568 { | |
| 569 const Bigint& bigint = Bigint::Handle( | |
| 570 BigintOperations::NewFromCString("-0xaBcEf")); | |
| 571 const char* str = | |
| 572 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 573 EXPECT_STREQ("-703727", str); | |
| 574 } | |
| 575 | |
| 576 { | |
| 577 const char* in = "-0x123456789"; | |
| 578 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 579 const char* str = | |
| 580 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 581 EXPECT_STREQ("-4886718345", str); | |
| 582 } | |
| 583 | |
| 584 { | |
| 585 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 586 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in)); | |
| 587 const char* str = | |
| 588 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 589 EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960", | |
| 590 str); | |
| 591 } | |
| 592 | |
| 593 { | |
| 594 const Bigint& bigint = Bigint::Handle( | |
| 595 BigintOperations::NewFromCString("0x00000123")); | |
| 596 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 597 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 598 EXPECT_EQ(0x123, smi.Value()); | |
| 599 } | |
| 600 | |
| 601 { | |
| 602 const Bigint& bigint = Bigint::Handle( | |
| 603 BigintOperations::NewFromCString("0x000000123")); | |
| 604 const char* str = | |
| 605 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 606 EXPECT_STREQ("291", str); | |
| 607 } | |
| 608 | |
| 609 { | |
| 610 const Bigint& bigint = Bigint::Handle( | |
| 611 BigintOperations::NewFromCString("100000000000000000000000000000000")); | |
| 612 const char* str = | |
| 613 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator); | |
| 614 EXPECT_STREQ("100000000000000000000000000000000", str); | |
| 615 } | |
| 616 } | |
| 617 | |
| 618 | |
| 619 static void TestBigintCompare(const char* a, const char* b, int compare) { | |
| 620 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 621 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 622 int computed_compare = BigintOperations::Compare(bigint_a, bigint_b); | |
| 623 int inverted_compare = BigintOperations::Compare(bigint_b, bigint_a); | |
| 624 if (compare == 0) { | |
| 625 EXPECT(computed_compare == 0); | |
| 626 EXPECT(inverted_compare == 0); | |
| 627 } else if (compare < 0) { | |
| 628 ASSERT(computed_compare < 0); | |
| 629 EXPECT(computed_compare < 0); | |
| 630 EXPECT(inverted_compare > 0); | |
| 631 } else { | |
| 632 ASSERT(compare > 0); | |
| 633 EXPECT(computed_compare > 0); | |
| 634 EXPECT(inverted_compare < 0); | |
| 635 } | |
| 636 } | |
| 637 | |
| 638 | |
| 639 TEST_CASE(BigintCompare) { | |
| 640 TestBigintCompare("0x0", "0x0", 0); | |
| 641 TestBigintCompare("0x1", "0x1", 0); | |
| 642 TestBigintCompare("-0x1", "-0x1", 0); | |
| 643 TestBigintCompare("0x1234567", "0x1234567", 0); | |
| 644 TestBigintCompare("-0x1234567", "-0x1234567", 0); | |
| 645 TestBigintCompare("0x12345678", "0x12345678", 0); | |
| 646 TestBigintCompare("-0x12345678", "-0x12345678", 0); | |
| 647 TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0); | |
| 648 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0); | |
| 649 TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0); | |
| 650 TestBigintCompare("-0x123456789ABCDEF01", "-0x123456789ABCDEF01", 0); | |
| 651 TestBigintCompare("0x1", "0x0", 1); | |
| 652 TestBigintCompare("-0x1", "-0x2", 1); | |
| 653 TestBigintCompare("0x1234567", "0x1234566", 1); | |
| 654 TestBigintCompare("-0x1234567", "-0x1234568", 1); | |
| 655 TestBigintCompare("0x12345678", "0x12345677", 1); | |
| 656 TestBigintCompare("-0x12345678", "-0x12345679", 1); | |
| 657 TestBigintCompare("0x123456789ABCDEF1", "0x123456789ABCDEF0", 1); | |
| 658 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF1", 1); | |
| 659 TestBigintCompare("0x123456789ABCDEF02", "0x123456789ABCDEF01", 1); | |
| 660 TestBigintCompare("-0x123456789ABCDEF00", "-0x123456789ABCDEF01", 1); | |
| 661 TestBigintCompare("0x10000000", "0xFFFFFFF", 1); | |
| 662 TestBigintCompare("-0x10000000", "-0xFFFFFFF", -1); | |
| 663 TestBigintCompare("0x100000000", "0xFFFFFFFF", 1); | |
| 664 TestBigintCompare("-0x100000000", "-0xFFFFFFFF", -1); | |
| 665 TestBigintCompare("0x10000000000000000", "0xFFFFFFFFFFFFFFFF", 1); | |
| 666 TestBigintCompare("-0x10000000000000000", "-0xFFFFFFFFFFFFFFFF", -1); | |
| 667 TestBigintCompare("0x10000000000000000", "0x0", 1); | |
| 668 TestBigintCompare("-0x10000000000000000", "0x0", -1); | |
| 669 TestBigintCompare("-0x1234567", "0x1234566", -1); | |
| 670 TestBigintCompare("-0x1234567", "0x1234568", -1); | |
| 671 TestBigintCompare("-0x12345678", "0x12345677", -1); | |
| 672 TestBigintCompare("-0x12345678", "0x12345670", -1); | |
| 673 TestBigintCompare("-0x123456789ABCDEF1", "0x123456789ABCDEF0", -1); | |
| 674 TestBigintCompare("-0x123456789ABCDEF0", "0x123456789ABCDEF1", -1); | |
| 675 TestBigintCompare("-0x123456789ABCDEF02", "0x123456789ABCDEF01", -1); | |
| 676 TestBigintCompare("-0x123456789ABCDEF00", "0x123456789ABCDEF01", -1); | |
| 677 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1); | |
| 678 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1); | |
| 679 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); | |
| 680 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); | |
| 681 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); | |
| 682 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); | |
| 683 TestBigintCompare("-0x10000000000000000", "0x0", -1); | |
| 684 TestBigintCompare("-0x10000000000000000", "0x0", -1); | |
| 685 } | |
| 686 | |
| 687 | |
| 688 TEST_CASE(BigintDecimalStrings) { | |
| 689 { | |
| 690 const Bigint& bigint = Bigint::Handle( | |
| 691 BigintOperations::NewFromCString("0")); | |
| 692 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 693 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 694 EXPECT_EQ(0, smi.Value()); | |
| 695 } | |
| 696 | |
| 697 { | |
| 698 const Bigint& bigint = Bigint::Handle( | |
| 699 BigintOperations::NewFromCString("1")); | |
| 700 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 701 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 702 EXPECT_EQ(1, smi.Value()); | |
| 703 } | |
| 704 | |
| 705 { | |
| 706 const Bigint& bigint = Bigint::Handle( | |
| 707 BigintOperations::NewFromCString("703710")); | |
| 708 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 709 EXPECT_STREQ("0xABCDE", str); | |
| 710 } | |
| 711 | |
| 712 { | |
| 713 const Bigint& bigint = Bigint::Handle( | |
| 714 BigintOperations::NewFromCString("11259375")); | |
| 715 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 716 EXPECT_STREQ("0xABCDEF", str); | |
| 717 } | |
| 718 | |
| 719 { | |
| 720 const Bigint& bigint = | |
| 721 Bigint::Handle(BigintOperations::NewFromCString("1311768467463790320")); | |
| 722 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 723 EXPECT_STREQ("0x123456789ABCDEF0", str); | |
| 724 } | |
| 725 | |
| 726 { | |
| 727 const Bigint& bigint = Bigint::Handle( | |
| 728 BigintOperations::NewFromCString("-0")); | |
| 729 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 730 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 731 EXPECT_EQ(0, smi.Value()); | |
| 732 } | |
| 733 | |
| 734 { | |
| 735 const Bigint& bigint = Bigint::Handle( | |
| 736 BigintOperations::NewFromCString("-1")); | |
| 737 EXPECT(BigintOperations::FitsIntoSmi(bigint)); | |
| 738 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint)); | |
| 739 EXPECT_EQ(-1, smi.Value()); | |
| 740 } | |
| 741 | |
| 742 { | |
| 743 const Bigint& bigint = Bigint::Handle( | |
| 744 BigintOperations::NewFromCString("-703710")); | |
| 745 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 746 EXPECT_STREQ("-0xABCDE", str); | |
| 747 } | |
| 748 | |
| 749 { | |
| 750 const Bigint& bigint = Bigint::Handle( | |
| 751 BigintOperations::NewFromCString("-11259375")); | |
| 752 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 753 EXPECT_STREQ("-0xABCDEF", str); | |
| 754 } | |
| 755 | |
| 756 { | |
| 757 const Bigint& bigint = Bigint::Handle( | |
| 758 BigintOperations::NewFromCString("-1311768467463790320")); | |
| 759 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator); | |
| 760 EXPECT_STREQ("-0x123456789ABCDEF0", str); | |
| 761 } | |
| 762 } | |
| 763 | |
| 764 | |
| 765 static void TestBigintAddSubtract(const char* a, | |
| 766 const char* b, | |
| 767 const char* sum) { | |
| 768 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 769 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 770 const Bigint& bigint_sum = | |
| 771 Bigint::Handle(BigintOperations::NewFromCString(sum)); | |
| 772 const Bigint& computed_sum = | |
| 773 Bigint::Handle(BigintOperations::Add(bigint_a, bigint_b)); | |
| 774 const Bigint& computed_difference1 = | |
| 775 Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_a)); | |
| 776 const Bigint& computed_difference2 = | |
| 777 Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_b)); | |
| 778 const char* str_sum = BigintOperations::ToHexCString(computed_sum, | |
| 779 &ZoneAllocator); | |
| 780 EXPECT_STREQ(sum, str_sum); | |
| 781 const char* str_difference1 = | |
| 782 BigintOperations::ToHexCString(computed_difference1, &ZoneAllocator); | |
| 783 EXPECT_STREQ(b, str_difference1); | |
| 784 const char* str_difference2 = | |
| 785 BigintOperations::ToHexCString(computed_difference2, &ZoneAllocator); | |
| 786 EXPECT_STREQ(a, str_difference2); | |
| 787 } | |
| 788 | |
| 789 | |
| 790 TEST_CASE(BigintAddSubtract) { | |
| 791 const char* zero = "0x0"; | |
| 792 const char* one = "0x1"; | |
| 793 const char* minus_one = "-0x1"; | |
| 794 | |
| 795 TestBigintAddSubtract(zero, zero, zero); | |
| 796 TestBigintAddSubtract(zero, one, one); | |
| 797 TestBigintAddSubtract(one, zero, one); | |
| 798 TestBigintAddSubtract(one, one, "0x2"); | |
| 799 TestBigintAddSubtract(minus_one, minus_one, "-0x2"); | |
| 800 TestBigintAddSubtract("0x123", zero, "0x123"); | |
| 801 TestBigintAddSubtract(zero, "0x123", "0x123"); | |
| 802 TestBigintAddSubtract("0x123", one, "0x124"); | |
| 803 TestBigintAddSubtract(one, "0x123", "0x124"); | |
| 804 TestBigintAddSubtract("0xFFFFFFF", one, // 28 bit overflow. | |
| 805 "0x10000000"); | |
| 806 TestBigintAddSubtract("0xFFFFFFFF", one, // 32 bit overflow. | |
| 807 "0x100000000"); | |
| 808 TestBigintAddSubtract("0xFFFFFFFFFFFFFF", one, // 56 bit overflow. | |
| 809 "0x100000000000000"); | |
| 810 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFF", one, // 64 bit overflow. | |
| 811 "0x10000000000000000"); | |
| 812 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit. | |
| 813 one, | |
| 814 "0x100000000000000000000000000000000"); | |
| 815 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 816 one, | |
| 817 "0x10000000000000000000000000000000000000000000"); | |
| 818 TestBigintAddSubtract("0x8000000", // 28 bit overflow. | |
| 819 "0x8000000", | |
| 820 "0x10000000"); | |
| 821 TestBigintAddSubtract("0x80000000", // 32 bit overflow. | |
| 822 "0x80000000", | |
| 823 "0x100000000"); | |
| 824 TestBigintAddSubtract("0x80000000000000", // 56 bit overflow. | |
| 825 "0x80000000000000", | |
| 826 "0x100000000000000"); | |
| 827 TestBigintAddSubtract("0x8000000000000000", // 64 bit overflow. | |
| 828 "0x8000000000000000", | |
| 829 "0x10000000000000000"); | |
| 830 TestBigintAddSubtract("0x80000000000000000000000000000000", // 128 bit. | |
| 831 "0x80000000000000000000000000000000", | |
| 832 "0x100000000000000000000000000000000"); | |
| 833 TestBigintAddSubtract("0x8000000000000000000000000000000000000000000", | |
| 834 "0x8000000000000000000000000000000000000000000", | |
| 835 "0x10000000000000000000000000000000000000000000"); | |
| 836 | |
| 837 { | |
| 838 const char* a = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 839 const char* sum1 = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1"; | |
| 840 const char* times2 = "0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0"; | |
| 841 TestBigintAddSubtract(a, zero, a); | |
| 842 TestBigintAddSubtract(a, one, sum1); | |
| 843 TestBigintAddSubtract(a, a, times2); | |
| 844 } | |
| 845 | |
| 846 TestBigintAddSubtract("-0x123", minus_one, "-0x124"); | |
| 847 TestBigintAddSubtract(minus_one, "-0x123", "-0x124"); | |
| 848 TestBigintAddSubtract("-0xFFFFFFF", minus_one, // 28 bit overflow. | |
| 849 "-0x10000000"); | |
| 850 TestBigintAddSubtract("-0xFFFFFFFF", minus_one, // 32 bit overflow. | |
| 851 "-0x100000000"); | |
| 852 TestBigintAddSubtract("-0xFFFFFFFFFFFFFF", minus_one, // 56 bit overflow. | |
| 853 "-0x100000000000000"); | |
| 854 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFF", minus_one, // 64 bit overflow. | |
| 855 "-0x10000000000000000"); | |
| 856 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit. | |
| 857 minus_one, | |
| 858 "-0x100000000000000000000000000000000"); | |
| 859 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 860 minus_one, | |
| 861 "-0x10000000000000000000000000000000000000000000"); | |
| 862 TestBigintAddSubtract("-0x8000000", // 28 bit overflow. | |
| 863 "-0x8000000", | |
| 864 "-0x10000000"); | |
| 865 TestBigintAddSubtract("-0x80000000", // 32 bit overflow. | |
| 866 "-0x80000000", | |
| 867 "-0x100000000"); | |
| 868 TestBigintAddSubtract("-0x80000000000000", // 56 bit overflow. | |
| 869 "-0x80000000000000", | |
| 870 "-0x100000000000000"); | |
| 871 TestBigintAddSubtract("-0x8000000000000000", // 64 bit overflow. | |
| 872 "-0x8000000000000000", | |
| 873 "-0x10000000000000000"); | |
| 874 TestBigintAddSubtract("-0x80000000000000000000000000000000", // 128 bit. | |
| 875 "-0x80000000000000000000000000000000", | |
| 876 "-0x100000000000000000000000000000000"); | |
| 877 TestBigintAddSubtract("-0x8000000000000000000000000000000000000000000", | |
| 878 "-0x8000000000000000000000000000000000000000000", | |
| 879 "-0x10000000000000000000000000000000000000000000"); | |
| 880 | |
| 881 { | |
| 882 const char* a = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; | |
| 883 const char* sum1 = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1"; | |
| 884 const char* times2 = "-0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0"; | |
| 885 TestBigintAddSubtract(a, zero, a); | |
| 886 TestBigintAddSubtract(a, minus_one, sum1); | |
| 887 TestBigintAddSubtract(a, a, times2); | |
| 888 } | |
| 889 | |
| 890 TestBigintAddSubtract("0x10000000000000000000000000000000000000000000", | |
| 891 "0xFFFF", | |
| 892 "0x1000000000000000000000000000000000000000FFFF"); | |
| 893 TestBigintAddSubtract("0x10000000000000000000000000000000000000000000", | |
| 894 "0xFFFF00000000", | |
| 895 "0x10000000000000000000000000000000FFFF00000000"); | |
| 896 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 897 "0x100000000", | |
| 898 "0x1000000000000000000000000000000000000FFFFFFFF"); | |
| 899 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 900 "0x10000000000000000000", | |
| 901 "0x10000000000000000000000000FFFFFFFFFFFFFFFFFFF"); | |
| 902 | |
| 903 TestBigintAddSubtract("0xB", "-0x7", "0x4"); | |
| 904 TestBigintAddSubtract("-0xB", "-0x7", "-0x12"); | |
| 905 TestBigintAddSubtract("0xB", "0x7", "0x12"); | |
| 906 TestBigintAddSubtract("-0xB", "0x7", "-0x4"); | |
| 907 TestBigintAddSubtract("-0x7", "0xB", "0x4"); | |
| 908 TestBigintAddSubtract("-0x7", "-0xB", "-0x12"); | |
| 909 TestBigintAddSubtract("0x7", "0xB", "0x12"); | |
| 910 TestBigintAddSubtract("0x7", "-0xB", "-0x4"); | |
| 911 } | |
| 912 | |
| 913 | |
| 914 static void TestBigintShift(const char* a, int amount, const char* result) { | |
| 915 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 916 const Bigint& shifted = | |
| 917 Bigint::Handle(BigintOperations::ShiftLeft(bigint_a, amount)); | |
| 918 const char* str_shifted = BigintOperations::ToHexCString(shifted, | |
| 919 &ZoneAllocator); | |
| 920 EXPECT_STREQ(result, str_shifted); | |
| 921 const Bigint& back_shifted = | |
| 922 Bigint::Handle(BigintOperations::ShiftRight(shifted, amount)); | |
| 923 const char* str_back_shifted = BigintOperations::ToHexCString(back_shifted, | |
| 924 &ZoneAllocator); | |
| 925 EXPECT_STREQ(a, str_back_shifted); | |
| 926 } | |
| 927 | |
| 928 | |
| 929 TEST_CASE(BigintLeftShift) { | |
| 930 const char* zero = "0x0"; | |
| 931 const char* one = "0x1"; | |
| 932 const char* minus_one = "-0x1"; | |
| 933 | |
| 934 TestBigintShift(zero, 0, zero); | |
| 935 TestBigintShift(one, 0, one); | |
| 936 TestBigintShift("0x1234", 0, "0x1234"); | |
| 937 TestBigintShift(zero, 100000, zero); | |
| 938 TestBigintShift(one, 1, "0x2"); | |
| 939 TestBigintShift(one, 28, "0x10000000"); | |
| 940 TestBigintShift(one, 32, "0x100000000"); | |
| 941 TestBigintShift(one, 64, "0x10000000000000000"); | |
| 942 TestBigintShift("0x5", 28, "0x50000000"); | |
| 943 TestBigintShift("0x5", 32, "0x500000000"); | |
| 944 TestBigintShift("0x5", 56, "0x500000000000000"); | |
| 945 TestBigintShift("0x5", 64, "0x50000000000000000"); | |
| 946 TestBigintShift("0x5", 128, "0x500000000000000000000000000000000"); | |
| 947 TestBigintShift("0x5", 27, "0x28000000"); | |
| 948 TestBigintShift("0x5", 31, "0x280000000"); | |
| 949 TestBigintShift("0x5", 55, "0x280000000000000"); | |
| 950 TestBigintShift("0x5", 63, "0x28000000000000000"); | |
| 951 TestBigintShift("0x5", 127, "0x280000000000000000000000000000000"); | |
| 952 TestBigintShift("0x8000001", 1, "0x10000002"); | |
| 953 TestBigintShift("0x80000001", 1, "0x100000002"); | |
| 954 TestBigintShift("0x8000000000000001", 1, "0x10000000000000002"); | |
| 955 TestBigintShift("0x8000001", 29, "0x100000020000000"); | |
| 956 TestBigintShift("0x80000001", 33, "0x10000000200000000"); | |
| 957 TestBigintShift("0x8000000000000001", 65, | |
| 958 "0x100000000000000020000000000000000"); | |
| 959 TestBigintShift(minus_one, 0, minus_one); | |
| 960 TestBigintShift("-0x1234", 0, "-0x1234"); | |
| 961 TestBigintShift(minus_one, 1, "-0x2"); | |
| 962 TestBigintShift(minus_one, 28, "-0x10000000"); | |
| 963 TestBigintShift(minus_one, 32, "-0x100000000"); | |
| 964 TestBigintShift(minus_one, 64, "-0x10000000000000000"); | |
| 965 TestBigintShift("-0x5", 28, "-0x50000000"); | |
| 966 TestBigintShift("-0x5", 32, "-0x500000000"); | |
| 967 TestBigintShift("-0x5", 64, "-0x50000000000000000"); | |
| 968 TestBigintShift("-0x5", 27, "-0x28000000"); | |
| 969 TestBigintShift("-0x5", 31, "-0x280000000"); | |
| 970 TestBigintShift("-0x5", 63, "-0x28000000000000000"); | |
| 971 TestBigintShift("-0x8000001", 1, "-0x10000002"); | |
| 972 TestBigintShift("-0x80000001", 1, "-0x100000002"); | |
| 973 TestBigintShift("-0x8000000000000001", 1, "-0x10000000000000002"); | |
| 974 TestBigintShift("-0x8000001", 29, "-0x100000020000000"); | |
| 975 TestBigintShift("-0x80000001", 33, "-0x10000000200000000"); | |
| 976 TestBigintShift("-0x8000000000000001", 65, | |
| 977 "-0x100000000000000020000000000000000"); | |
| 978 } | |
| 979 | |
| 980 | |
| 981 static void TestBigintRightShift( | |
| 982 const char* a, int amount, const char* result) { | |
| 983 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 984 const Bigint& shifted = | |
| 985 Bigint::Handle(BigintOperations::ShiftRight(bigint_a, amount)); | |
| 986 const char* str_shifted = BigintOperations::ToHexCString(shifted, | |
| 987 &ZoneAllocator); | |
| 988 if (strcmp(result, str_shifted)) { | |
| 989 FAIL2("%s >> %d", a, amount); | |
| 990 } | |
| 991 EXPECT_STREQ(result, str_shifted); | |
| 992 } | |
| 993 | |
| 994 | |
| 995 TEST_CASE(BigintRightShift) { | |
| 996 const char* zero = "0x0"; | |
| 997 const char* one = "0x1"; | |
| 998 const char* minus_one = "-0x1"; | |
| 999 | |
| 1000 TestBigintRightShift(one, 1, zero); | |
| 1001 TestBigintRightShift(minus_one, 1, minus_one); | |
| 1002 TestBigintRightShift("-0x2", 1, minus_one); | |
| 1003 TestBigintRightShift("0x12345678", 29, zero); | |
| 1004 TestBigintRightShift("-0x12345678", 29, minus_one); | |
| 1005 TestBigintRightShift("-0x12345678", 100, minus_one); | |
| 1006 TestBigintRightShift("0x5", 1, "0x2"); | |
| 1007 TestBigintRightShift("0x5", 2, "0x1"); | |
| 1008 TestBigintRightShift("-0x5", 1, "-0x3"); | |
| 1009 TestBigintRightShift("-0x5", 2, "-0x2"); | |
| 1010 TestBigintRightShift("0x10000001", 28, one); | |
| 1011 TestBigintRightShift("0x100000001", 32, one); | |
| 1012 TestBigintRightShift("0x10000000000000001", 64, one); | |
| 1013 TestBigintRightShift("-0x10000001", 28, "-0x2"); | |
| 1014 TestBigintRightShift("-0x100000001", 32, "-0x2"); | |
| 1015 TestBigintRightShift("-0x10000000000000001", 64, "-0x2"); | |
| 1016 TestBigintRightShift("0x30000000", 29, one); | |
| 1017 TestBigintRightShift("0x300000000", 33, one); | |
| 1018 TestBigintRightShift("0x30000000000000000", 65, one); | |
| 1019 TestBigintRightShift("-0x30000000", 29, "-0x2"); | |
| 1020 TestBigintRightShift("-0x300000000", 33, "-0x2"); | |
| 1021 TestBigintRightShift("-0x30000000000000000", 65, "-0x2"); | |
| 1022 } | |
| 1023 | |
| 1024 | |
| 1025 static void TestBigintBitAnd(const char* a, const char* b, const char* result) { | |
| 1026 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 1027 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 1028 const Bigint& anded = | |
| 1029 Bigint::Handle(BigintOperations::BitAnd(bigint_a, bigint_b)); | |
| 1030 const char* str_anded = BigintOperations::ToHexCString(anded, &ZoneAllocator); | |
| 1031 EXPECT_STREQ(result, str_anded); | |
| 1032 const Bigint& anded2 = | |
| 1033 Bigint::Handle(BigintOperations::BitAnd(bigint_b, bigint_a)); | |
| 1034 const char* str_anded2 = BigintOperations::ToHexCString(anded2, | |
| 1035 &ZoneAllocator); | |
| 1036 EXPECT_STREQ(result, str_anded2); | |
| 1037 } | |
| 1038 | |
| 1039 | |
| 1040 TEST_CASE(BigintBitAnd) { | |
| 1041 const char* zero = "0x0"; | |
| 1042 const char* one = "0x1"; | |
| 1043 const char* minus_one = "-0x1"; | |
| 1044 | |
| 1045 TestBigintBitAnd(one, zero, zero); | |
| 1046 TestBigintBitAnd(one, one, one); | |
| 1047 TestBigintBitAnd(minus_one, zero, zero); | |
| 1048 TestBigintBitAnd(minus_one, one, one); | |
| 1049 TestBigintBitAnd(minus_one, minus_one, minus_one); | |
| 1050 TestBigintBitAnd("0x5", "0x3", one); | |
| 1051 TestBigintBitAnd("0x5", minus_one, "0x5"); | |
| 1052 TestBigintBitAnd("0x50000000", one, zero); | |
| 1053 TestBigintBitAnd("0x50000000", minus_one, "0x50000000"); | |
| 1054 TestBigintBitAnd("0x500000000", one, zero); | |
| 1055 TestBigintBitAnd("0x500000000", minus_one, "0x500000000"); | |
| 1056 TestBigintBitAnd("0x50000000000000000", one, zero); | |
| 1057 TestBigintBitAnd("0x50000000000000000", minus_one, "0x50000000000000000"); | |
| 1058 TestBigintBitAnd("-0x50000000", "-0x50000000", "-0x50000000"); | |
| 1059 TestBigintBitAnd("-0x500000000", "-0x500000000", "-0x500000000"); | |
| 1060 TestBigintBitAnd("-0x50000000000000000", | |
| 1061 "-0x50000000000000000", | |
| 1062 "-0x50000000000000000"); | |
| 1063 TestBigintBitAnd("0x1234567890ABCDEF012345678", | |
| 1064 "0x876543210FEDCBA0987654321", | |
| 1065 "0x224422000A9C9A0002244220"); | |
| 1066 TestBigintBitAnd("-0x1234567890ABCDEF012345678", | |
| 1067 "-0x876543210FEDCBA0987654321", | |
| 1068 "-0x977557799FEFCFEF997755778"); | |
| 1069 TestBigintBitAnd("0x1234567890ABCDEF012345678", | |
| 1070 "-0x876543210FEDCBA0987654321", | |
| 1071 "0x101014589002044F010101458"); | |
| 1072 TestBigintBitAnd("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1073 "-0x876543210FEDCBA0987654321", | |
| 1074 "0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCDF"); | |
| 1075 TestBigintBitAnd("0x12345678", "0xFFFFFFF", "0x2345678"); | |
| 1076 TestBigintBitAnd("0x123456789", "0xFFFFFFFF", "0x23456789"); | |
| 1077 TestBigintBitAnd("-0x10000000", "0xFFFFFFF", "0x0"); | |
| 1078 TestBigintBitAnd("-0x100000000", "0xFFFFFFFF", "0x0"); | |
| 1079 TestBigintBitAnd("-0x10000001", "0xFFFFFFF", "0xFFFFFFF"); | |
| 1080 TestBigintBitAnd("-0x100000001", "0xFFFFFFFF", "0xFFFFFFFF"); | |
| 1081 TestBigintBitAnd("-0x10000001", "0x3FFFFFFF", "0x2FFFFFFF"); | |
| 1082 TestBigintBitAnd("-0x100000001", "0x3FFFFFFFF", "0x2FFFFFFFF"); | |
| 1083 TestBigintBitAnd("-0x10000000000000001", | |
| 1084 "0x3FFFFFFFFFFFFFFFF", | |
| 1085 "0x2FFFFFFFFFFFFFFFF"); | |
| 1086 TestBigintBitAnd("-0x100000000000000", "0xFFFFFFFFFFFFFF", "0x0"); | |
| 1087 TestBigintBitAnd("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "0x0"); | |
| 1088 TestBigintBitAnd("-0x300000000000000", | |
| 1089 "0xFFFFFFFFFFFFFFF", | |
| 1090 "0xD00000000000000"); | |
| 1091 TestBigintBitAnd("-0x30000000000000000", | |
| 1092 "0xFFFFFFFFFFFFFFFFF", | |
| 1093 "0xD0000000000000000"); | |
| 1094 TestBigintBitAnd("-0x10000000", "-0x10000000", "-0x10000000"); | |
| 1095 TestBigintBitAnd("-0x100000000", "-0x100000000", "-0x100000000"); | |
| 1096 TestBigintBitAnd("-0x100000000000000", | |
| 1097 "-0x100000000000000", | |
| 1098 "-0x100000000000000"); | |
| 1099 TestBigintBitAnd("-0x10000000000000000", | |
| 1100 "-0x10000000000000000", | |
| 1101 "-0x10000000000000000"); | |
| 1102 TestBigintBitAnd("-0x3", "-0x2", "-0x4"); | |
| 1103 TestBigintBitAnd("-0x10000000", "-0x10000001", "-0x20000000"); | |
| 1104 TestBigintBitAnd("-0x100000000", "-0x100000001", "-0x200000000"); | |
| 1105 TestBigintBitAnd("-0x100000000000000", | |
| 1106 "-0x100000000000001", | |
| 1107 "-0x200000000000000"); | |
| 1108 TestBigintBitAnd("-0x10000000000000000", | |
| 1109 "-0x10000000000000001", | |
| 1110 "-0x20000000000000000"); | |
| 1111 TestBigintBitAnd("0x123456789ABCDEF01234567890", | |
| 1112 "0x3FFFFFFF", // Max Smi for 32 bits. | |
| 1113 "0x34567890"); | |
| 1114 TestBigintBitAnd("0x123456789ABCDEF01274567890", | |
| 1115 "0x3FFFFFFF", // Max Smi for 32 bits. | |
| 1116 "0x34567890"); | |
| 1117 TestBigintBitAnd("0x123456789ABCDEF01234567890", | |
| 1118 "0x40000000", // Max Smi for 32 bits + 1. | |
| 1119 "0x0"); | |
| 1120 TestBigintBitAnd("0x123456789ABCDEF01274567890", | |
| 1121 "0x40000000", // Max Smi for 32 bits + 1. | |
| 1122 "0x40000000"); | |
| 1123 TestBigintBitAnd("0x123456789ABCDEF01234567890", | |
| 1124 "0x3FFFFFFFFFFFFFFF", // Max Smi for 64 bits. | |
| 1125 "0x3CDEF01234567890"); | |
| 1126 TestBigintBitAnd("0x123456789ACCDEF01234567890", | |
| 1127 "0x4000000000000000", // Max Smi for 64 bits + 1. | |
| 1128 "0x4000000000000000"); | |
| 1129 TestBigintBitAnd("0x123456789ABCDEF01234567890", | |
| 1130 "0x4000000000000000", // Max Smi for 64 bits + 1. | |
| 1131 "0x0"); | |
| 1132 } | |
| 1133 | |
| 1134 | |
| 1135 static void TestBigintBitOr(const char* a, const char* b, const char* result) { | |
| 1136 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 1137 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 1138 const Bigint& ored = | |
| 1139 Bigint::Handle(BigintOperations::BitOr(bigint_a, bigint_b)); | |
| 1140 const char* str_ored = BigintOperations::ToHexCString(ored, &ZoneAllocator); | |
| 1141 EXPECT_STREQ(result, str_ored); | |
| 1142 const Bigint& ored2 = | |
| 1143 Bigint::Handle(BigintOperations::BitOr(bigint_b, bigint_a)); | |
| 1144 const char* str_ored2 = BigintOperations::ToHexCString(ored2, &ZoneAllocator); | |
| 1145 EXPECT_STREQ(result, str_ored2); | |
| 1146 } | |
| 1147 | |
| 1148 | |
| 1149 TEST_CASE(BigintBitOr) { | |
| 1150 const char* zero = "0x0"; | |
| 1151 const char* one = "0x1"; | |
| 1152 const char* minus_one = "-0x1"; | |
| 1153 | |
| 1154 TestBigintBitOr(one, zero, one); | |
| 1155 TestBigintBitOr(one, one, one); | |
| 1156 TestBigintBitOr(minus_one, zero, minus_one); | |
| 1157 TestBigintBitOr(minus_one, one, minus_one); | |
| 1158 TestBigintBitOr(minus_one, minus_one, minus_one); | |
| 1159 TestBigintBitOr("-0x3", one, "-0x3"); | |
| 1160 TestBigintBitOr("0x5", "0x3", "0x7"); | |
| 1161 TestBigintBitOr("0x5", minus_one, minus_one); | |
| 1162 TestBigintBitOr("0x5", zero, "0x5"); | |
| 1163 TestBigintBitOr("0x50000000", one, "0x50000001"); | |
| 1164 TestBigintBitOr("0x50000000", minus_one, minus_one); | |
| 1165 TestBigintBitOr("0x500000000", one, "0x500000001"); | |
| 1166 TestBigintBitOr("0x500000000", minus_one, minus_one); | |
| 1167 TestBigintBitOr("0x50000000000000000", one, "0x50000000000000001"); | |
| 1168 TestBigintBitOr("0x50000000000000000", minus_one, minus_one); | |
| 1169 TestBigintBitOr("-0x50000000", "-0x50000000", "-0x50000000"); | |
| 1170 TestBigintBitOr("-0x500000000", "-0x500000000", "-0x500000000"); | |
| 1171 TestBigintBitOr("-0x50000000000000000", | |
| 1172 "-0x50000000000000000", | |
| 1173 "-0x50000000000000000"); | |
| 1174 TestBigintBitOr("0x1234567890ABCDEF012345678", | |
| 1175 "0x876543210FEDCBA0987654321", | |
| 1176 "0x977557799FEFCFEF997755779"); | |
| 1177 TestBigintBitOr("-0x1234567890ABCDEF012345678", | |
| 1178 "-0x876543210FEDCBA0987654321", | |
| 1179 "-0x224422000A9C9A0002244221"); | |
| 1180 TestBigintBitOr("0x1234567890ABCDEF012345678", | |
| 1181 "-0x876543210FEDCBA0987654321", | |
| 1182 "-0x854101010F440200985410101"); | |
| 1183 TestBigintBitOr("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1184 "-0x876543210FEDCBA0987654321", | |
| 1185 "-0x1"); | |
| 1186 TestBigintBitOr("0x12345678", "0xFFFFFFF", "0x1FFFFFFF"); | |
| 1187 TestBigintBitOr("0x123456789", "0xFFFFFFFF", "0x1FFFFFFFF"); | |
| 1188 TestBigintBitOr("-0x10000000", "0xFFFFFFF", "-0x1"); | |
| 1189 TestBigintBitOr("-0x100000000", "0xFFFFFFFF", "-0x1"); | |
| 1190 TestBigintBitOr("-0x10000001", "0xFFFFFFF", "-0x10000001"); | |
| 1191 TestBigintBitOr("-0x100000001", "0xFFFFFFFF", "-0x100000001"); | |
| 1192 TestBigintBitOr("-0x10000001", "0x3FFFFFFF", "-0x1"); | |
| 1193 TestBigintBitOr("-0x100000001", "0x3FFFFFFFF", "-0x1"); | |
| 1194 TestBigintBitOr("-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "-0x1"); | |
| 1195 TestBigintBitOr("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1"); | |
| 1196 TestBigintBitOr("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1"); | |
| 1197 TestBigintBitOr("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "-0x1"); | |
| 1198 TestBigintBitOr("-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "-0x1"); | |
| 1199 TestBigintBitOr("-0x10000000", "-0x10000000", "-0x10000000"); | |
| 1200 TestBigintBitOr("-0x100000000", "-0x100000000", "-0x100000000"); | |
| 1201 TestBigintBitOr("-0x100000000000000", | |
| 1202 "-0x100000000000000", | |
| 1203 "-0x100000000000000"); | |
| 1204 TestBigintBitOr("-0x10000000000000000", | |
| 1205 "-0x10000000000000000", | |
| 1206 "-0x10000000000000000"); | |
| 1207 TestBigintBitOr("-0x10000000", "-0x10000001", "-0x1"); | |
| 1208 TestBigintBitOr("-0x100000000", "-0x100000001", "-0x1"); | |
| 1209 TestBigintBitOr("-0x100000000000000", "-0x100000000000001", "-0x1"); | |
| 1210 TestBigintBitOr("-0x10000000000000000", "-0x10000000000000001", "-0x1"); | |
| 1211 TestBigintBitOr("-0x10000000000000000", "-0x1", "-0x1"); | |
| 1212 } | |
| 1213 | |
| 1214 | |
| 1215 static void TestBigintBitXor(const char* a, const char* b, const char* result) { | |
| 1216 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 1217 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 1218 const Bigint& xored = | |
| 1219 Bigint::Handle(BigintOperations::BitXor(bigint_a, bigint_b)); | |
| 1220 const char* str_xored = BigintOperations::ToHexCString(xored, &ZoneAllocator); | |
| 1221 EXPECT_STREQ(result, str_xored); | |
| 1222 const Bigint& xored2 = | |
| 1223 Bigint::Handle(BigintOperations::BitXor(bigint_b, bigint_a)); | |
| 1224 const char* str_xored2 = BigintOperations::ToHexCString(xored2, | |
| 1225 &ZoneAllocator); | |
| 1226 EXPECT_STREQ(result, str_xored2); | |
| 1227 const Bigint& xored3 = | |
| 1228 Bigint::Handle(BigintOperations::BitXor(bigint_a, xored2)); | |
| 1229 const char* str_xored3 = BigintOperations::ToHexCString(xored3, | |
| 1230 &ZoneAllocator); | |
| 1231 EXPECT_STREQ(b, str_xored3); | |
| 1232 const Bigint& xored4 = | |
| 1233 Bigint::Handle(BigintOperations::BitXor(xored2, bigint_a)); | |
| 1234 const char* str_xored4 = BigintOperations::ToHexCString(xored4, | |
| 1235 &ZoneAllocator); | |
| 1236 EXPECT_STREQ(b, str_xored4); | |
| 1237 const Bigint& xored5 = | |
| 1238 Bigint::Handle(BigintOperations::BitXor(bigint_b, xored2)); | |
| 1239 const char* str_xored5 = BigintOperations::ToHexCString(xored5, | |
| 1240 &ZoneAllocator); | |
| 1241 EXPECT_STREQ(a, str_xored5); | |
| 1242 const Bigint& xored6 = | |
| 1243 Bigint::Handle(BigintOperations::BitXor(xored2, bigint_b)); | |
| 1244 const char* str_xored6 = BigintOperations::ToHexCString(xored6, | |
| 1245 &ZoneAllocator); | |
| 1246 EXPECT_STREQ(a, str_xored6); | |
| 1247 } | |
| 1248 | |
| 1249 | |
| 1250 TEST_CASE(BigintBitXor) { | |
| 1251 const char* zero = "0x0"; | |
| 1252 const char* one = "0x1"; | |
| 1253 const char* minus_one = "-0x1"; | |
| 1254 | |
| 1255 TestBigintBitXor(one, zero, one); | |
| 1256 TestBigintBitXor(one, one, zero); | |
| 1257 TestBigintBitXor(minus_one, zero, minus_one); | |
| 1258 TestBigintBitXor(minus_one, one, "-0x2"); | |
| 1259 TestBigintBitXor(minus_one, minus_one, zero); | |
| 1260 TestBigintBitXor("0x5", "0x3", "0x6"); | |
| 1261 TestBigintBitXor("0x5", minus_one, "-0x6"); | |
| 1262 TestBigintBitXor("0x5", zero, "0x5"); | |
| 1263 TestBigintBitXor(minus_one, "-0x8", "0x7"); | |
| 1264 TestBigintBitXor("0x50000000", one, "0x50000001"); | |
| 1265 TestBigintBitXor("0x50000000", minus_one, "-0x50000001"); | |
| 1266 TestBigintBitXor("0x500000000", one, "0x500000001"); | |
| 1267 TestBigintBitXor("0x500000000", minus_one, "-0x500000001"); | |
| 1268 TestBigintBitXor("0x50000000000000000", one, "0x50000000000000001"); | |
| 1269 TestBigintBitXor("0x50000000000000000", minus_one, "-0x50000000000000001"); | |
| 1270 TestBigintBitXor("-0x50000000", "-0x50000000", zero); | |
| 1271 TestBigintBitXor("-0x500000000", "-0x500000000", zero); | |
| 1272 TestBigintBitXor("-0x50000000000000000", "-0x50000000000000000", zero); | |
| 1273 TestBigintBitXor("0x1234567890ABCDEF012345678", | |
| 1274 "0x876543210FEDCBA0987654321", | |
| 1275 "0x955115599F46064F995511559"); | |
| 1276 TestBigintBitXor("-0x1234567890ABCDEF012345678", | |
| 1277 "-0x876543210FEDCBA0987654321", | |
| 1278 "0x955115599F46064F995511557"); | |
| 1279 TestBigintBitXor("0x1234567890ABCDEF012345678", | |
| 1280 "-0x876543210FEDCBA0987654321", | |
| 1281 "-0x955115599F46064F995511559"); | |
| 1282 TestBigintBitXor("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1283 "-0x876543210FEDCBA0987654321", | |
| 1284 "-0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCE0"); | |
| 1285 TestBigintBitXor("0x12345678", "0xFFFFFFF", "0x1DCBA987"); | |
| 1286 TestBigintBitXor("0x123456789", "0xFFFFFFFF", "0x1DCBA9876"); | |
| 1287 TestBigintBitXor("-0x10000000", "0xFFFFFFF", "-0x1"); | |
| 1288 TestBigintBitXor("-0x100000000", "0xFFFFFFFF", "-0x1"); | |
| 1289 TestBigintBitXor("-0x10000001", "0xFFFFFFF", "-0x20000000"); | |
| 1290 TestBigintBitXor("-0x100000001", "0xFFFFFFFF", "-0x200000000"); | |
| 1291 TestBigintBitXor("-0x10000001", "0x3FFFFFFF", "-0x30000000"); | |
| 1292 TestBigintBitXor("-0x100000001", "0x3FFFFFFFF", "-0x300000000"); | |
| 1293 TestBigintBitXor("-0x10000000000000001", | |
| 1294 "0x3FFFFFFFFFFFFFFFF", | |
| 1295 "-0x30000000000000000"); | |
| 1296 TestBigintBitXor("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1"); | |
| 1297 TestBigintBitXor("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1"); | |
| 1298 TestBigintBitXor("-0x300000000000000", | |
| 1299 "0xFFFFFFFFFFFFFFF", | |
| 1300 "-0xD00000000000001"); | |
| 1301 TestBigintBitXor("-0x30000000000000000", | |
| 1302 "0xFFFFFFFFFFFFFFFFF", | |
| 1303 "-0xD0000000000000001"); | |
| 1304 TestBigintBitXor("-0x10000000", "-0x10000000", zero); | |
| 1305 TestBigintBitXor("-0x100000000", "-0x100000000", zero); | |
| 1306 TestBigintBitXor("-0x100000000000000", "-0x100000000000000", zero); | |
| 1307 TestBigintBitXor("-0x10000000000000000", "-0x10000000000000000", zero); | |
| 1308 TestBigintBitXor("-0x10000000", "-0x10000001", "0x1FFFFFFF"); | |
| 1309 TestBigintBitXor("-0x100000000", "-0x100000001", "0x1FFFFFFFF"); | |
| 1310 TestBigintBitXor("-0x100000000000000", | |
| 1311 "-0x100000000000001", | |
| 1312 "0x1FFFFFFFFFFFFFF"); | |
| 1313 TestBigintBitXor("-0x10000000000000000", | |
| 1314 "-0x10000000000000001", | |
| 1315 "0x1FFFFFFFFFFFFFFFF"); | |
| 1316 } | |
| 1317 | |
| 1318 | |
| 1319 static void TestBigintBitNot(const char* a, const char* result) { | |
| 1320 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 1321 const Bigint& inverted = | |
| 1322 Bigint::Handle(BigintOperations::BitNot(bigint_a)); | |
| 1323 const char* str_inverted = BigintOperations::ToHexCString(inverted, | |
| 1324 &ZoneAllocator); | |
| 1325 EXPECT_STREQ(result, str_inverted); | |
| 1326 const Bigint& back = | |
| 1327 Bigint::Handle(BigintOperations::BitNot(inverted)); | |
| 1328 const char* str_back = BigintOperations::ToHexCString(back, &ZoneAllocator); | |
| 1329 EXPECT_STREQ(a, str_back); | |
| 1330 } | |
| 1331 | |
| 1332 | |
| 1333 TEST_CASE(BigintBitNot) { | |
| 1334 const char* zero = "0x0"; | |
| 1335 const char* one = "0x1"; | |
| 1336 const char* minus_one = "-0x1"; | |
| 1337 | |
| 1338 TestBigintBitNot(zero, minus_one); | |
| 1339 TestBigintBitNot(one, "-0x2"); | |
| 1340 TestBigintBitNot("0x5", "-0x6"); | |
| 1341 TestBigintBitNot("0x50000000", "-0x50000001"); | |
| 1342 TestBigintBitNot("0xFFFFFFF", "-0x10000000"); | |
| 1343 TestBigintBitNot("0xFFFFFFFF", "-0x100000000"); | |
| 1344 TestBigintBitNot("0xFFFFFFFFFFFFFF", "-0x100000000000000"); | |
| 1345 TestBigintBitNot("0xFFFFFFFFFFFFFFFF", "-0x10000000000000000"); | |
| 1346 TestBigintBitNot("0x1234567890ABCDEF012345678", | |
| 1347 "-0x1234567890ABCDEF012345679"); | |
| 1348 } | |
| 1349 | |
| 1350 | |
| 1351 static void TestBigintMultiplyDivide(const char* a, | |
| 1352 const char* b, | |
| 1353 const char* product) { | |
| 1354 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 1355 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 1356 const Bigint& computed_product = | |
| 1357 Bigint::Handle(BigintOperations::Multiply(bigint_a, bigint_b)); | |
| 1358 const char* str_product = BigintOperations::ToHexCString(computed_product, | |
| 1359 &ZoneAllocator); | |
| 1360 EXPECT_STREQ(product, str_product); | |
| 1361 const Bigint& computed_product2 = | |
| 1362 Bigint::Handle(BigintOperations::Multiply(bigint_b, bigint_a)); | |
| 1363 const char* str_product2 = BigintOperations::ToHexCString(computed_product2, | |
| 1364 &ZoneAllocator); | |
| 1365 EXPECT_STREQ(product, str_product2); | |
| 1366 | |
| 1367 const Bigint& bigint_product = | |
| 1368 Bigint::Handle(BigintOperations::NewFromCString(product)); | |
| 1369 if (!bigint_a.IsZero()) { | |
| 1370 const Bigint& computed_quotient1 = | |
| 1371 Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_a)); | |
| 1372 const char* str_quotient1 = | |
| 1373 BigintOperations::ToHexCString(computed_quotient1, &ZoneAllocator); | |
| 1374 EXPECT_STREQ(b, str_quotient1); | |
| 1375 } | |
| 1376 | |
| 1377 if (!bigint_b.IsZero()) { | |
| 1378 const Bigint& computed_quotient2 = | |
| 1379 Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_b)); | |
| 1380 const char* str_quotient2 = | |
| 1381 BigintOperations::ToHexCString(computed_quotient2, &ZoneAllocator); | |
| 1382 EXPECT_STREQ(a, str_quotient2); | |
| 1383 } | |
| 1384 } | |
| 1385 | |
| 1386 | |
| 1387 TEST_CASE(BigintMultiplyDivide) { | |
| 1388 const char* zero = "0x0"; | |
| 1389 const char* one = "0x1"; | |
| 1390 const char* minus_one = "-0x1"; | |
| 1391 | |
| 1392 TestBigintMultiplyDivide(zero, zero, zero); | |
| 1393 TestBigintMultiplyDivide(one, one, one); | |
| 1394 TestBigintMultiplyDivide(one, zero, zero); | |
| 1395 TestBigintMultiplyDivide(zero, one, zero); | |
| 1396 TestBigintMultiplyDivide(one, minus_one, minus_one); | |
| 1397 TestBigintMultiplyDivide(minus_one, minus_one, one); | |
| 1398 TestBigintMultiplyDivide("0x42", one, "0x42"); | |
| 1399 TestBigintMultiplyDivide("0x42", "0x2", "0x84"); | |
| 1400 TestBigintMultiplyDivide("0xFFFF", "0x2", "0x1FFFE"); | |
| 1401 TestBigintMultiplyDivide("0x3", "0x5", "0xF"); | |
| 1402 TestBigintMultiplyDivide("0xFFFFF", "0x5", "0x4FFFFB"); | |
| 1403 TestBigintMultiplyDivide("0xFFFFFFF", "0x5", "0x4FFFFFFB"); | |
| 1404 TestBigintMultiplyDivide("0xFFFFFFFF", "0x5", "0x4FFFFFFFB"); | |
| 1405 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x5", "0x4FFFFFFFFFFFFFFFB"); | |
| 1406 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x3039", | |
| 1407 "0x3038FFFFFFFFFFFFCFC7"); | |
| 1408 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", | |
| 1409 "0xFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1410 "0xFFFFFFFFFFFFFFFEFFFFFFFFFF0000000000000001"); | |
| 1411 TestBigintMultiplyDivide( | |
| 1412 "0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000", | |
| 1413 "0xFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000", | |
| 1414 "0xFFFFFFFFFFFFFFFEFFFFFFFFFF000000000000000100000000000000" | |
| 1415 "000000000000000000000000000000000000000000000000000000000000"); | |
| 1416 TestBigintMultiplyDivide("0x10000001", "0x5", "0x50000005"); | |
| 1417 TestBigintMultiplyDivide( | |
| 1418 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 1419 "01234567890ABCDEF01234567890ABCDEF", | |
| 1420 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 1421 "01234567890ABCDEF01234567890ABCDEF", | |
| 1422 "0x14B66DC328828BCA670CBE52943AA3894CCCE15C8F5ED1E55F" | |
| 1423 "328F6D3F579F992299850C4B5B95213EF3FB7B4E73B5F43D4299" | |
| 1424 "5B9F6FD5441C275F2FF89F86F28F47A94CA37481090DCCCDCA6475F09A2F2A521"); | |
| 1425 TestBigintMultiplyDivide( | |
| 1426 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 1427 "01234567890ABCDEF", | |
| 1428 "0x1234567890123456789012345678901234567890123456789012345678901234567890" | |
| 1429 "123456789012345678901234567890123456789012345678901234567890123456789012" | |
| 1430 "345678901234567890123456789012345678901234567890123456789012345678901234" | |
| 1431 "567890123456789012345678901234567890123456789012345678901234567890123456" | |
| 1432 "789012345678901234567890123456789012345678901234567890123456789012345678" | |
| 1433 "90123456789012345678901234567890", | |
| 1434 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2" | |
| 1435 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A" | |
| 1436 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F" | |
| 1437 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B" | |
| 1438 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57" | |
| 1439 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027" | |
| 1440 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70"); | |
| 1441 TestBigintMultiplyDivide( | |
| 1442 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1443 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1444 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1445 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1446 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1447 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1448 "FFFFFFFFFFFFFFFFF", | |
| 1449 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1450 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1451 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1452 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFF" | |
| 1453 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1454 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1455 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1456 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1457 "FFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000" | |
| 1458 "0000000000000000000000000000000000000000000000000000000000000000000001"); | |
| 1459 TestBigintMultiplyDivide( | |
| 1460 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1461 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1462 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1463 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1464 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1465 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1466 "FFFFFFFFFFFFFFFFF", | |
| 1467 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1468 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1469 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1470 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1471 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1472 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1473 "FFFFFFFFFFFFFFFFF", | |
| 1474 "0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1475 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1476 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1477 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1478 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1479 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1480 "FFFFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000" | |
| 1481 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1482 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1483 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1484 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1485 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1486 "0000000000000000000000000000001"); | |
| 1487 | |
| 1488 // A 256 28-bit digits number squared. | |
| 1489 TestBigintMultiplyDivide( | |
| 1490 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1491 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1492 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1493 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1494 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1495 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1496 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1497 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1498 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1499 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1500 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1501 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1502 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1503 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1504 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1505 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1506 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1507 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1508 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1509 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1510 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1511 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1512 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1513 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1514 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1515 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1516 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1517 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1518 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1519 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1520 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1521 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1522 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1523 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1524 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1525 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1526 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1527 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1528 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1529 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1530 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1531 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1532 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1533 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1534 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1535 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1536 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1537 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1538 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1539 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1540 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1541 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1542 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1543 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1544 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1545 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1546 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1547 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1548 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1549 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1550 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1551 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1552 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1553 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1554 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1555 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1556 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1557 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1558 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1559 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1560 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1561 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1562 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1563 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1564 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000" | |
| 1565 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1566 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1567 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1568 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1569 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1570 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1571 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1572 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1573 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1574 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1575 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1576 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1577 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1578 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1579 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1580 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1581 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1582 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1583 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1584 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1585 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1586 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1587 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1588 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 1589 "0000000000000000000000000000000000000000000000000000000001"); | |
| 1590 | |
| 1591 | |
| 1592 TestBigintMultiplyDivide( | |
| 1593 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1594 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1595 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1596 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1597 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1598 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1599 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1600 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1601 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1602 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1603 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1604 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1605 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1606 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1607 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1608 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1609 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1610 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1611 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1612 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1613 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1614 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1615 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1616 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1617 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1618 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1619 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1620 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1621 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1622 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1623 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1624 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1625 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1626 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1627 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1628 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1629 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1630 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1631 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1632 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1633 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1634 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1635 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1636 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1637 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1638 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1639 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1640 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1641 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1642 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1643 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1644 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1645 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1646 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1647 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1648 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1649 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1650 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1651 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1652 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1653 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1654 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1655 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1656 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1657 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1658 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1659 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1660 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1661 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1662 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1663 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1664 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1665 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1666 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1667 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1668 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1669 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1670 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1671 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1672 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1673 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1674 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1675 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1676 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1677 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1678 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1679 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1680 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1681 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1682 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1683 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1684 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1685 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1686 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1687 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1688 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1689 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1690 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1691 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1692 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1693 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1694 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1695 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1696 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1697 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1698 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1699 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1700 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1701 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1702 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1703 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1704 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1705 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1706 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1707 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1708 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1709 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1710 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1711 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1712 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1713 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1714 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1715 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1716 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1717 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1718 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1719 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1720 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1721 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1722 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1723 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1724 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1725 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1726 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1727 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1728 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1729 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1730 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1731 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1732 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1733 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1734 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1735 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1736 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1737 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1738 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1739 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1740 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1741 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1742 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1743 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1744 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1745 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1746 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1747 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1748 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1749 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1750 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1751 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1752 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1753 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1754 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1755 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1756 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1757 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1758 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1759 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1760 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1761 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1762 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1763 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1764 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1765 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1766 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1767 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1768 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1769 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1770 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1771 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1772 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1773 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1774 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1775 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1776 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1777 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1778 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1779 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1780 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1781 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1782 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1783 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1784 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1785 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1786 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1787 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1788 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1789 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1790 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1791 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1792 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1793 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1794 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1795 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1796 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1797 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1798 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1799 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1800 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1801 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1802 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1803 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1804 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1805 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1806 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1807 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1808 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1809 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1810 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1811 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1812 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1813 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1814 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1815 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1816 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1817 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1818 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1819 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1820 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1821 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1822 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1823 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1824 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1825 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1826 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1827 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1828 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1829 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1830 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1831 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1832 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1833 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1834 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1835 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1836 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1837 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1838 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1839 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1840 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1841 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1842 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1843 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1844 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1845 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1846 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1847 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1848 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1849 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1850 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1851 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1852 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1853 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1854 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1855 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1856 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1857 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1858 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1859 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1860 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1861 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1862 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1863 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1864 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1865 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1866 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | |
| 1867 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1868 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1869 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1870 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1871 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1872 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1873 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1874 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1875 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1876 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1877 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1878 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1879 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1880 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1881 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1882 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1883 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1884 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1885 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1886 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1887 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1888 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1889 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1890 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1891 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF" | |
| 1892 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1893 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1894 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1895 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1896 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1897 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1898 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1899 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1900 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1901 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1902 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1903 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1904 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1905 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1906 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1907 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1908 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1909 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1910 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1911 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1912 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1913 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1914 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1915 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1916 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1917 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1918 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1919 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1920 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1921 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1922 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1923 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1924 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1925 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1926 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1927 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1928 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1929 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1930 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1931 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1932 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1933 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1934 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1935 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1936 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1937 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1938 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1939 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1940 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1941 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1942 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1943 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1944 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1945 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1946 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1947 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1948 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1949 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1950 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1951 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1952 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1953 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1954 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1955 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1956 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1957 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1958 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1959 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1960 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1961 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1962 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1963 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1964 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1965 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1966 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1967 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1968 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1969 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1970 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1971 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1972 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1973 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1974 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1975 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1976 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1977 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1978 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1979 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1980 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1981 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1982 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1983 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1984 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1985 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1986 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1987 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1988 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1989 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1990 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1991 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1992 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1993 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1994 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1995 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1996 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1997 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1998 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 1999 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2000 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2001 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2002 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2003 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2004 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2005 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2006 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2007 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2008 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2009 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2010 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2011 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2012 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2013 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2014 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2015 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2016 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2017 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2018 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2019 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2020 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2021 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2022 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2023 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2024 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2025 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2026 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2027 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2028 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2029 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2030 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2031 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2032 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2033 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2034 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2035 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2036 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2037 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2038 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2039 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2040 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2041 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2042 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2043 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2044 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2045 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2046 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2047 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2048 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2049 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2050 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2051 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2052 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2053 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2054 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2055 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2056 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2057 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2058 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2059 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2060 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2061 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2062 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2063 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2064 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2065 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2066 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2067 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2068 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2069 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2070 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2071 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2072 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2073 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2074 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2075 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2076 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2077 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2078 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2079 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2080 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2081 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2082 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2083 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2084 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2085 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2086 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2087 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2088 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2089 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2090 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2091 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2092 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2093 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2094 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2095 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2096 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2097 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2098 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2099 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2100 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2101 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2102 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2103 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2104 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2105 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2106 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2107 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2108 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2109 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2110 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2111 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2112 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2113 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2114 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" | |
| 2115 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000" | |
| 2116 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2117 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2118 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2119 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2120 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2121 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2122 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2123 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2124 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2125 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2126 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2127 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2128 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2129 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2130 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2131 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2132 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2133 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2134 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2135 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2136 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2137 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2138 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2139 "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 2140 "0000000000000000000000000000000000000000000000000000000001"); | |
| 2141 } | |
| 2142 | |
| 2143 | |
| 2144 static void TestBigintDivideRemainder(const char* a, | |
| 2145 const char* b, | |
| 2146 const char* quotient, | |
| 2147 const char* remainder) { | |
| 2148 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a)); | |
| 2149 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b)); | |
| 2150 const Bigint& computed_quotient = | |
| 2151 Bigint::Handle(BigintOperations::Divide(bigint_a, bigint_b)); | |
| 2152 const Bigint& computed_remainder = | |
| 2153 Bigint::Handle(BigintOperations::Remainder(bigint_a, bigint_b)); | |
| 2154 const char* str_quotient = BigintOperations::ToHexCString(computed_quotient, | |
| 2155 &ZoneAllocator); | |
| 2156 const char* str_remainder = | |
| 2157 BigintOperations::ToHexCString(computed_remainder, &ZoneAllocator); | |
| 2158 EXPECT_STREQ(quotient, str_quotient); | |
| 2159 EXPECT_STREQ(remainder, str_remainder); | |
| 2160 } | |
| 2161 | |
| 2162 | |
| 2163 TEST_CASE(BigintDivideRemainder) { | |
| 2164 const char* zero = "0x0"; | |
| 2165 const char* one = "0x1"; | |
| 2166 const char* minus_one = "-0x1"; | |
| 2167 | |
| 2168 TestBigintDivideRemainder(one, one, one, zero); | |
| 2169 TestBigintDivideRemainder(zero, one, zero, zero); | |
| 2170 TestBigintDivideRemainder(minus_one, one, minus_one, zero); | |
| 2171 TestBigintDivideRemainder(one, "0x2", zero, one); | |
| 2172 TestBigintDivideRemainder(minus_one, "0x7", zero, minus_one); | |
| 2173 TestBigintDivideRemainder("0xB", "0x7", one, "0x4"); | |
| 2174 TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5"); | |
| 2175 TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5"); | |
| 2176 TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5"); | |
| 2177 TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5"); | |
| 2178 TestBigintDivideRemainder("0x7", "0x12345678", zero, "0x7"); | |
| 2179 TestBigintDivideRemainder("-0x7", "0x12345678", zero, "-0x7"); | |
| 2180 TestBigintDivideRemainder("-0x7", "-0x12345678", zero, "-0x7"); | |
| 2181 TestBigintDivideRemainder("0x7", "-0x12345678", zero, "0x7"); | |
| 2182 TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5"); | |
| 2183 TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5"); | |
| 2184 TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5"); | |
| 2185 TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5"); | |
| 2186 TestBigintDivideRemainder( | |
| 2187 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2" | |
| 2188 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A" | |
| 2189 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F" | |
| 2190 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B" | |
| 2191 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57" | |
| 2192 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027" | |
| 2193 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70", | |
| 2194 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 2195 "01234567890ABCDEF", | |
| 2196 "0x1234567890123456789012345678901234567890123456789012345678901234567890" | |
| 2197 "123456789012345678901234567890123456789012345678901234567890123456789012" | |
| 2198 "345678901234567890123456789012345678901234567890123456789012345678901234" | |
| 2199 "567890123456789012345678901234567890123456789012345678901234567890123456" | |
| 2200 "789012345678901234567890123456789012345678901234567890123456789012345678" | |
| 2201 "90123456789012345678901234567890", | |
| 2202 zero); | |
| 2203 TestBigintDivideRemainder( | |
| 2204 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2" | |
| 2205 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A" | |
| 2206 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F" | |
| 2207 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B" | |
| 2208 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57" | |
| 2209 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027" | |
| 2210 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE71", | |
| 2211 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 2212 "01234567890ABCDEF", | |
| 2213 "0x1234567890123456789012345678901234567890123456789012345678901234567890" | |
| 2214 "123456789012345678901234567890123456789012345678901234567890123456789012" | |
| 2215 "345678901234567890123456789012345678901234567890123456789012345678901234" | |
| 2216 "567890123456789012345678901234567890123456789012345678901234567890123456" | |
| 2217 "789012345678901234567890123456789012345678901234567890123456789012345678" | |
| 2218 "90123456789012345678901234567890", | |
| 2219 one); | |
| 2220 TestBigintDivideRemainder( | |
| 2221 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2" | |
| 2222 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A" | |
| 2223 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F" | |
| 2224 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B" | |
| 2225 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57" | |
| 2226 "0F4A8F0B570F4A8F0B570F4A8F0B5710591E051CF233A56DEA99087BDC08417F08B6758E" | |
| 2227 "E5EA90FCF7B39165D365D139DC60403E8743421AC5E", | |
| 2228 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 2229 "01234567890ABCDEF", | |
| 2230 "0x1234567890123456789012345678901234567890123456789012345678901234567890" | |
| 2231 "123456789012345678901234567890123456789012345678901234567890123456789012" | |
| 2232 "345678901234567890123456789012345678901234567890123456789012345678901234" | |
| 2233 "567890123456789012345678901234567890123456789012345678901234567890123456" | |
| 2234 "789012345678901234567890123456789012345678901234567890123456789012345678" | |
| 2235 "90123456789012345678901234567890", | |
| 2236 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF" | |
| 2237 "01234567890ABCDEE"); | |
| 2238 } | |
| 2239 | |
| 2240 } // namespace dart | |
| OLD | NEW |