Skip to content
block_sizes.hpp 58.8 KiB
Newer Older
 * Copyright (c) 2016-2017, Luca Fulchir<luca@fulchir.it>, All rights reserved.
 *
 * This file is part of "libRaptorQ".
 *
 * libRaptorQ is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * libRaptorQ is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * and a copy of the GNU Lesser General Public License
 * along with libRaptorQ.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once
// check the full list with RFC6330
#ifdef __cplusplus
#include <cstddef>
#include <cstdint>
#include <array>
#else
#include <stddef.h>
#include <stdint.h>
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513

typedef enum {
    RQ_Block_10 = 10,
    RQ_Block_12 = 12,
    RQ_Block_18 = 18,
    RQ_Block_20 = 20,
    RQ_Block_26 = 26,
    RQ_Block_30 = 30,
    RQ_Block_32 = 32,
    RQ_Block_36 = 36,
    RQ_Block_42 = 42,
    RQ_Block_46 = 46,
    RQ_Block_48 = 48,
    RQ_Block_49 = 49,
    RQ_Block_55 = 55,
    RQ_Block_60 = 60,
    RQ_Block_62 = 62,
    RQ_Block_69 = 69,
    RQ_Block_75 = 75,
    RQ_Block_84 = 84,
    RQ_Block_88 = 88,
    RQ_Block_91 = 91,
    RQ_Block_95 = 95,
    RQ_Block_97 = 97,
    RQ_Block_101 = 101,
    RQ_Block_114 = 114,
    RQ_Block_119 = 119,
    RQ_Block_125 = 125,
    RQ_Block_127 = 127,
    RQ_Block_138 = 138,
    RQ_Block_140 = 140,
    RQ_Block_149 = 149,
    RQ_Block_153 = 153,
    RQ_Block_160 = 160,
    RQ_Block_166 = 166,
    RQ_Block_168 = 168,
    RQ_Block_179 = 179,
    RQ_Block_181 = 181,
    RQ_Block_185 = 185,
    RQ_Block_187 = 187,
    RQ_Block_200 = 200,
    RQ_Block_213 = 213,
    RQ_Block_217 = 217,
    RQ_Block_225 = 225,
    RQ_Block_236 = 236,
    RQ_Block_242 = 242,
    RQ_Block_248 = 248,
    RQ_Block_257 = 257,
    RQ_Block_263 = 263,
    RQ_Block_269 = 269,
    RQ_Block_280 = 280,
    RQ_Block_295 = 295,
    RQ_Block_301 = 301,
    RQ_Block_305 = 305,
    RQ_Block_324 = 324,
    RQ_Block_337 = 337,
    RQ_Block_341 = 341,
    RQ_Block_347 = 347,
    RQ_Block_355 = 355,
    RQ_Block_362 = 362,
    RQ_Block_368 = 368,
    RQ_Block_372 = 372,
    RQ_Block_380 = 380,
    RQ_Block_385 = 385,
    RQ_Block_393 = 393,
    RQ_Block_405 = 405,
    RQ_Block_418 = 418,
    RQ_Block_428 = 428,
    RQ_Block_434 = 434,
    RQ_Block_447 = 447,
    RQ_Block_453 = 453,
    RQ_Block_466 = 466,
    RQ_Block_478 = 478,
    RQ_Block_486 = 486,
    RQ_Block_491 = 491,
    RQ_Block_497 = 497,
    RQ_Block_511 = 511,
    RQ_Block_526 = 526,
    RQ_Block_532 = 532,
    RQ_Block_542 = 542,
    RQ_Block_549 = 549,
    RQ_Block_557 = 557,
    RQ_Block_563 = 563,
    RQ_Block_573 = 573,
    RQ_Block_580 = 580,
    RQ_Block_588 = 588,
    RQ_Block_594 = 594,
    RQ_Block_600 = 600,
    RQ_Block_606 = 606,
    RQ_Block_619 = 619,
    RQ_Block_633 = 633,
    RQ_Block_640 = 640,
    RQ_Block_648 = 648,
    RQ_Block_666 = 666,
    RQ_Block_675 = 675,
    RQ_Block_685 = 685,
    RQ_Block_693 = 693,
    RQ_Block_703 = 703,
    RQ_Block_718 = 718,
    RQ_Block_728 = 728,
    RQ_Block_736 = 736,
    RQ_Block_747 = 747,
    RQ_Block_759 = 759,
    RQ_Block_778 = 778,
    RQ_Block_792 = 792,
    RQ_Block_802 = 802,
    RQ_Block_811 = 811,
    RQ_Block_821 = 821,
    RQ_Block_835 = 835,
    RQ_Block_845 = 845,
    RQ_Block_860 = 860,
    RQ_Block_870 = 870,
    RQ_Block_891 = 891,
    RQ_Block_903 = 903,
    RQ_Block_913 = 913,
    RQ_Block_926 = 926,
    RQ_Block_938 = 938,
    RQ_Block_950 = 950,
    RQ_Block_963 = 963,
    RQ_Block_977 = 977,
    RQ_Block_989 = 989,
    RQ_Block_1002 = 1002,
    RQ_Block_1020 = 1020,
    RQ_Block_1032 = 1032,
    RQ_Block_1050 = 1050,
    RQ_Block_1074 = 1074,
    RQ_Block_1085 = 1085,
    RQ_Block_1099 = 1099,
    RQ_Block_1111 = 1111,
    RQ_Block_1136 = 1136,
    RQ_Block_1152 = 1152,
    RQ_Block_1169 = 1169,
    RQ_Block_1183 = 1183,
    RQ_Block_1205 = 1205,
    RQ_Block_1220 = 1220,
    RQ_Block_1236 = 1236,
    RQ_Block_1255 = 1255,
    RQ_Block_1269 = 1269,
    RQ_Block_1285 = 1285,
    RQ_Block_1306 = 1306,
    RQ_Block_1347 = 1347,
    RQ_Block_1361 = 1361,
    RQ_Block_1389 = 1389,
    RQ_Block_1404 = 1404,
    RQ_Block_1420 = 1420,
    RQ_Block_1436 = 1436,
    RQ_Block_1461 = 1461,
    RQ_Block_1477 = 1477,
    RQ_Block_1502 = 1502,
    RQ_Block_1522 = 1522,
    RQ_Block_1539 = 1539,
    RQ_Block_1561 = 1561,
    RQ_Block_1579 = 1579,
    RQ_Block_1600 = 1600,
    RQ_Block_1616 = 1616,
    RQ_Block_1649 = 1649,
    RQ_Block_1673 = 1673,
    RQ_Block_1698 = 1698,
    RQ_Block_1716 = 1716,
    RQ_Block_1734 = 1734,
    RQ_Block_1759 = 1759,
    RQ_Block_1777 = 1777,
    RQ_Block_1800 = 1800,
    RQ_Block_1824 = 1824,
    RQ_Block_1844 = 1844,
    RQ_Block_1863 = 1863,
    RQ_Block_1887 = 1887,
    RQ_Block_1906 = 1906,
    RQ_Block_1926 = 1926,
    RQ_Block_1954 = 1954,
    RQ_Block_1979 = 1979,
    RQ_Block_2005 = 2005,
    RQ_Block_2040 = 2040,
    RQ_Block_2070 = 2070,
    RQ_Block_2103 = 2103,
    RQ_Block_2125 = 2125,
    RQ_Block_2152 = 2152,
    RQ_Block_2195 = 2195,
    RQ_Block_2217 = 2217,
    RQ_Block_2247 = 2247,
    RQ_Block_2278 = 2278,
    RQ_Block_2315 = 2315,
    RQ_Block_2339 = 2339,
    RQ_Block_2367 = 2367,
    RQ_Block_2392 = 2392,
    RQ_Block_2416 = 2416,
    RQ_Block_2447 = 2447,
    RQ_Block_2473 = 2473,
    RQ_Block_2502 = 2502,
    RQ_Block_2528 = 2528,
    RQ_Block_2565 = 2565,
    RQ_Block_2601 = 2601,
    RQ_Block_2640 = 2640,
    RQ_Block_2668 = 2668,
    RQ_Block_2701 = 2701,
    RQ_Block_2737 = 2737,
    RQ_Block_2772 = 2772,
    RQ_Block_2802 = 2802,
    RQ_Block_2831 = 2831,
    RQ_Block_2875 = 2875,
    RQ_Block_2906 = 2906,
    RQ_Block_2938 = 2938,
    RQ_Block_2979 = 2979,
    RQ_Block_3015 = 3015,
    RQ_Block_3056 = 3056,
    RQ_Block_3101 = 3101,
    RQ_Block_3151 = 3151,
    RQ_Block_3186 = 3186,
    RQ_Block_3224 = 3224,
    RQ_Block_3265 = 3265,
    RQ_Block_3299 = 3299,
    RQ_Block_3344 = 3344,
    RQ_Block_3387 = 3387,
    RQ_Block_3423 = 3423,
    RQ_Block_3466 = 3466,
    RQ_Block_3502 = 3502,
    RQ_Block_3539 = 3539,
    RQ_Block_3579 = 3579,
    RQ_Block_3616 = 3616,
    RQ_Block_3658 = 3658,
    RQ_Block_3697 = 3697,
    RQ_Block_3751 = 3751,
    RQ_Block_3792 = 3792,
    RQ_Block_3840 = 3840,
    RQ_Block_3883 = 3883,
    RQ_Block_3924 = 3924,
    RQ_Block_3970 = 3970,
    RQ_Block_4015 = 4015,
    RQ_Block_4069 = 4069,
    RQ_Block_4112 = 4112,
    RQ_Block_4165 = 4165,
    RQ_Block_4207 = 4207,
    RQ_Block_4252 = 4252,
    RQ_Block_4318 = 4318,
    RQ_Block_4365 = 4365,
    RQ_Block_4418 = 4418,
    RQ_Block_4468 = 4468,
    RQ_Block_4513 = 4513,
    RQ_Block_4567 = 4567,
    RQ_Block_4626 = 4626,
    RQ_Block_4681 = 4681,
    RQ_Block_4731 = 4731,
    RQ_Block_4780 = 4780,
    RQ_Block_4838 = 4838,
    RQ_Block_4901 = 4901,
    RQ_Block_4954 = 4954,
    RQ_Block_5008 = 5008,
    RQ_Block_5063 = 5063,
    RQ_Block_5116 = 5116,
    RQ_Block_5172 = 5172,
    RQ_Block_5225 = 5225,
    RQ_Block_5279 = 5279,
    RQ_Block_5334 = 5334,
    RQ_Block_5391 = 5391,
    RQ_Block_5449 = 5449,
    RQ_Block_5506 = 5506,
    RQ_Block_5566 = 5566,
    RQ_Block_5637 = 5637,
    RQ_Block_5694 = 5694,
    RQ_Block_5763 = 5763,
    RQ_Block_5823 = 5823,
    RQ_Block_5896 = 5896,
    RQ_Block_5975 = 5975,
    RQ_Block_6039 = 6039,
    RQ_Block_6102 = 6102,
    RQ_Block_6169 = 6169,
    RQ_Block_6233 = 6233,
    RQ_Block_6296 = 6296,
    RQ_Block_6363 = 6363,
    RQ_Block_6427 = 6427,
    RQ_Block_6518 = 6518,
    RQ_Block_6589 = 6589,
    RQ_Block_6655 = 6655,
    RQ_Block_6730 = 6730,
    RQ_Block_6799 = 6799,
    RQ_Block_6878 = 6878,
    RQ_Block_6956 = 6956,
    RQ_Block_7033 = 7033,
    RQ_Block_7108 = 7108,
    RQ_Block_7185 = 7185,
    RQ_Block_7281 = 7281,
    RQ_Block_7360 = 7360,
    RQ_Block_7445 = 7445,
    RQ_Block_7520 = 7520,
    RQ_Block_7596 = 7596,
    RQ_Block_7675 = 7675,
    RQ_Block_7770 = 7770,
    RQ_Block_7855 = 7855,
    RQ_Block_7935 = 7935,
    RQ_Block_8030 = 8030,
    RQ_Block_8111 = 8111,
    RQ_Block_8194 = 8194,
    RQ_Block_8290 = 8290,
    RQ_Block_8377 = 8377,
    RQ_Block_8474 = 8474,
    RQ_Block_8559 = 8559,
    RQ_Block_8654 = 8654,
    RQ_Block_8744 = 8744,
    RQ_Block_8837 = 8837,
    RQ_Block_8928 = 8928,
    RQ_Block_9019 = 9019,
    RQ_Block_9111 = 9111,
    RQ_Block_9206 = 9206,
    RQ_Block_9303 = 9303,
    RQ_Block_9400 = 9400,
    RQ_Block_9497 = 9497,
    RQ_Block_9601 = 9601,
    RQ_Block_9708 = 9708,
    RQ_Block_9813 = 9813,
    RQ_Block_9916 = 9916,
    RQ_Block_10017 = 10017,
    RQ_Block_10120 = 10120,
    RQ_Block_10241 = 10241,
    RQ_Block_10351 = 10351,
    RQ_Block_10458 = 10458,
    RQ_Block_10567 = 10567,
    RQ_Block_10676 = 10676,
    RQ_Block_10787 = 10787,
    RQ_Block_10899 = 10899,
    RQ_Block_11015 = 11015,
    RQ_Block_11130 = 11130,
    RQ_Block_11245 = 11245,
    RQ_Block_11358 = 11358,
    RQ_Block_11475 = 11475,
    RQ_Block_11590 = 11590,
    RQ_Block_11711 = 11711,
    RQ_Block_11829 = 11829,
    RQ_Block_11956 = 11956,
    RQ_Block_12087 = 12087,
    RQ_Block_12208 = 12208,
    RQ_Block_12333 = 12333,
    RQ_Block_12460 = 12460,
    RQ_Block_12593 = 12593,
    RQ_Block_12726 = 12726,
    RQ_Block_12857 = 12857,
    RQ_Block_13002 = 13002,
    RQ_Block_13143 = 13143,
    RQ_Block_13284 = 13284,
    RQ_Block_13417 = 13417,
    RQ_Block_13558 = 13558,
    RQ_Block_13695 = 13695,
    RQ_Block_13833 = 13833,
    RQ_Block_13974 = 13974,
    RQ_Block_14115 = 14115,
    RQ_Block_14272 = 14272,
    RQ_Block_14415 = 14415,
    RQ_Block_14560 = 14560,
    RQ_Block_14713 = 14713,
    RQ_Block_14862 = 14862,
    RQ_Block_15011 = 15011,
    RQ_Block_15170 = 15170,
    RQ_Block_15325 = 15325,
    RQ_Block_15496 = 15496,
    RQ_Block_15651 = 15651,
    RQ_Block_15808 = 15808,
    RQ_Block_15977 = 15977,
    RQ_Block_16161 = 16161,
    RQ_Block_16336 = 16336,
    RQ_Block_16505 = 16505,
    RQ_Block_16674 = 16674,
    RQ_Block_16851 = 16851,
    RQ_Block_17024 = 17024,
    RQ_Block_17195 = 17195,
    RQ_Block_17376 = 17376,
    RQ_Block_17559 = 17559,
    RQ_Block_17742 = 17742,
    RQ_Block_17929 = 17929,
    RQ_Block_18116 = 18116,
    RQ_Block_18309 = 18309,
    RQ_Block_18503 = 18503,
    RQ_Block_18694 = 18694,
    RQ_Block_18909 = 18909,
    RQ_Block_19126 = 19126,
    RQ_Block_19325 = 19325,
    RQ_Block_19539 = 19539,
    RQ_Block_19740 = 19740,
    RQ_Block_19939 = 19939,
    RQ_Block_20152 = 20152,
    RQ_Block_20355 = 20355,
    RQ_Block_20564 = 20564,
    RQ_Block_20778 = 20778,
    RQ_Block_20988 = 20988,
    RQ_Block_21199 = 21199,
    RQ_Block_21412 = 21412,
    RQ_Block_21629 = 21629,
    RQ_Block_21852 = 21852,
    RQ_Block_22073 = 22073,
    RQ_Block_22301 = 22301,
    RQ_Block_22536 = 22536,
    RQ_Block_22779 = 22779,
    RQ_Block_23010 = 23010,
    RQ_Block_23252 = 23252,
    RQ_Block_23491 = 23491,
    RQ_Block_23730 = 23730,
    RQ_Block_23971 = 23971,
    RQ_Block_24215 = 24215,
    RQ_Block_24476 = 24476,
    RQ_Block_24721 = 24721,
    RQ_Block_24976 = 24976,
    RQ_Block_25230 = 25230,
    RQ_Block_25493 = 25493,
    RQ_Block_25756 = 25756,
    RQ_Block_26022 = 26022,
    RQ_Block_26291 = 26291,
    RQ_Block_26566 = 26566,
    RQ_Block_26838 = 26838,
    RQ_Block_27111 = 27111,
    RQ_Block_27392 = 27392,
    RQ_Block_27682 = 27682,
    RQ_Block_27959 = 27959,
    RQ_Block_28248 = 28248,
    RQ_Block_28548 = 28548,
    RQ_Block_28845 = 28845,
    RQ_Block_29138 = 29138,
    RQ_Block_29434 = 29434,
    RQ_Block_29731 = 29731,
    RQ_Block_30037 = 30037,
    RQ_Block_30346 = 30346,
    RQ_Block_30654 = 30654,
    RQ_Block_30974 = 30974,
    RQ_Block_31285 = 31285,
    RQ_Block_31605 = 31605,
    RQ_Block_31948 = 31948,
    RQ_Block_32272 = 32272,
    RQ_Block_32601 = 32601,
    RQ_Block_32932 = 32932,
    RQ_Block_33282 = 33282,
    RQ_Block_33623 = 33623,
    RQ_Block_33961 = 33961,
    RQ_Block_34302 = 34302,
    RQ_Block_34654 = 34654,
    RQ_Block_35031 = 35031,
    RQ_Block_35395 = 35395,
    RQ_Block_35750 = 35750,
    RQ_Block_36112 = 36112,
    RQ_Block_36479 = 36479,
    RQ_Block_36849 = 36849,
    RQ_Block_37227 = 37227,
    RQ_Block_37606 = 37606,
    RQ_Block_37992 = 37992,
    RQ_Block_38385 = 38385,
    RQ_Block_38787 = 38787,
    RQ_Block_39176 = 39176,
    RQ_Block_39576 = 39576,
    RQ_Block_39980 = 39980,
    RQ_Block_40398 = 40398,
    RQ_Block_40816 = 40816,
    RQ_Block_41226 = 41226,
    RQ_Block_41641 = 41641,
    RQ_Block_42067 = 42067,
    RQ_Block_42490 = 42490,
    RQ_Block_42916 = 42916,
    RQ_Block_43388 = 43388,
    RQ_Block_43840 = 43840,
    RQ_Block_44279 = 44279,
    RQ_Block_44729 = 44729,
    RQ_Block_45183 = 45183,
    RQ_Block_45638 = 45638,
    RQ_Block_46104 = 46104,
    RQ_Block_46574 = 46574,
    RQ_Block_47047 = 47047,
    RQ_Block_47523 = 47523,
    RQ_Block_48007 = 48007,
    RQ_Block_48489 = 48489,
    RQ_Block_48976 = 48976,
    RQ_Block_49470 = 49470,
    RQ_Block_49978 = 49978,
    RQ_Block_50511 = 50511,
    RQ_Block_51017 = 51017,
    RQ_Block_51530 = 51530,
    RQ_Block_52062 = 52062,
    RQ_Block_52586 = 52586,
    RQ_Block_53114 = 53114,
    RQ_Block_53650 = 53650,
    RQ_Block_54188 = 54188,
    RQ_Block_54735 = 54735,
    RQ_Block_55289 = 55289,
    RQ_Block_55843 = 55843,
    RQ_Block_56403 = 56403
} RaptorQ_Block_Size;

// I really do not like this code duplication, but sometimes code duplication
// is better than trying to reference C++ code.
// NOTE: ENUM in C is strictly defined as integer.
// in C++ we force the uint16_t as a limit. duplicate it all. SHIT.
static const uint16_t RQ_blocks_size = 477;
static const RaptorQ_Block_Size RQ_blocks[477] = {
    RQ_Block_10,   RQ_Block_12,   RQ_Block_18,   RQ_Block_20,   RQ_Block_26,
    RQ_Block_30,   RQ_Block_32,   RQ_Block_36,   RQ_Block_42,   RQ_Block_46,
    RQ_Block_48,   RQ_Block_49,   RQ_Block_55,   RQ_Block_60,   RQ_Block_62,
    RQ_Block_69,   RQ_Block_75,   RQ_Block_84,   RQ_Block_88,   RQ_Block_91,
    RQ_Block_95,   RQ_Block_97,   RQ_Block_101,  RQ_Block_114,  RQ_Block_119,
    RQ_Block_125,  RQ_Block_127,  RQ_Block_138,  RQ_Block_140,  RQ_Block_149,
    RQ_Block_153,  RQ_Block_160,  RQ_Block_166,  RQ_Block_168,  RQ_Block_179,
    RQ_Block_181,  RQ_Block_185,  RQ_Block_187,  RQ_Block_200,  RQ_Block_213,
    RQ_Block_217,  RQ_Block_225,  RQ_Block_236,  RQ_Block_242,  RQ_Block_248,
    RQ_Block_257,  RQ_Block_263,  RQ_Block_269,  RQ_Block_280,  RQ_Block_295,
    RQ_Block_301,  RQ_Block_305,  RQ_Block_324,  RQ_Block_337,  RQ_Block_341,
    RQ_Block_347,  RQ_Block_355,  RQ_Block_362,  RQ_Block_368,  RQ_Block_372,
    RQ_Block_380,  RQ_Block_385,  RQ_Block_393,  RQ_Block_405,  RQ_Block_418,
    RQ_Block_428,  RQ_Block_434,  RQ_Block_447,  RQ_Block_453,  RQ_Block_466,
    RQ_Block_478,  RQ_Block_486,  RQ_Block_491,  RQ_Block_497,  RQ_Block_511,
    RQ_Block_526,  RQ_Block_532,  RQ_Block_542,  RQ_Block_549,  RQ_Block_557,
    RQ_Block_563,  RQ_Block_573,  RQ_Block_580,  RQ_Block_588,  RQ_Block_594,
    RQ_Block_600,  RQ_Block_606,  RQ_Block_619,  RQ_Block_633,  RQ_Block_640,
    RQ_Block_648,  RQ_Block_666,  RQ_Block_675,  RQ_Block_685,  RQ_Block_693,
    RQ_Block_703,  RQ_Block_718,  RQ_Block_728,  RQ_Block_736,  RQ_Block_747,
    RQ_Block_759,  RQ_Block_778,  RQ_Block_792,  RQ_Block_802,  RQ_Block_811,
    RQ_Block_821,  RQ_Block_835,  RQ_Block_845,  RQ_Block_860,  RQ_Block_870,
    RQ_Block_891,  RQ_Block_903,  RQ_Block_913,  RQ_Block_926,  RQ_Block_938,
    RQ_Block_950,  RQ_Block_963,  RQ_Block_977,  RQ_Block_989,  RQ_Block_1002,
    RQ_Block_1020, RQ_Block_1032, RQ_Block_1050, RQ_Block_1074, RQ_Block_1085,
    RQ_Block_1099, RQ_Block_1111, RQ_Block_1136, RQ_Block_1152, RQ_Block_1169,
    RQ_Block_1183, RQ_Block_1205, RQ_Block_1220, RQ_Block_1236, RQ_Block_1255,
    RQ_Block_1269, RQ_Block_1285, RQ_Block_1306, RQ_Block_1347, RQ_Block_1361,
    RQ_Block_1389, RQ_Block_1404, RQ_Block_1420, RQ_Block_1436, RQ_Block_1461,
    RQ_Block_1477, RQ_Block_1502, RQ_Block_1522, RQ_Block_1539, RQ_Block_1561,
    RQ_Block_1579, RQ_Block_1600, RQ_Block_1616, RQ_Block_1649, RQ_Block_1673,
    RQ_Block_1698, RQ_Block_1716, RQ_Block_1734, RQ_Block_1759, RQ_Block_1777,
    RQ_Block_1800, RQ_Block_1824, RQ_Block_1844, RQ_Block_1863, RQ_Block_1887,
    RQ_Block_1906, RQ_Block_1926, RQ_Block_1954, RQ_Block_1979, RQ_Block_2005,
    RQ_Block_2040, RQ_Block_2070, RQ_Block_2103, RQ_Block_2125, RQ_Block_2152,
    RQ_Block_2195, RQ_Block_2217, RQ_Block_2247, RQ_Block_2278, RQ_Block_2315,
    RQ_Block_2339, RQ_Block_2367, RQ_Block_2392, RQ_Block_2416, RQ_Block_2447,
    RQ_Block_2473, RQ_Block_2502, RQ_Block_2528, RQ_Block_2565, RQ_Block_2601,
    RQ_Block_2640, RQ_Block_2668, RQ_Block_2701, RQ_Block_2737, RQ_Block_2772,
    RQ_Block_2802, RQ_Block_2831, RQ_Block_2875, RQ_Block_2906, RQ_Block_2938,
    RQ_Block_2979, RQ_Block_3015, RQ_Block_3056, RQ_Block_3101, RQ_Block_3151,
    RQ_Block_3186, RQ_Block_3224, RQ_Block_3265, RQ_Block_3299, RQ_Block_3344,
    RQ_Block_3387, RQ_Block_3423, RQ_Block_3466, RQ_Block_3502, RQ_Block_3539,
    RQ_Block_3579, RQ_Block_3616, RQ_Block_3658, RQ_Block_3697, RQ_Block_3751,
    RQ_Block_3792, RQ_Block_3840, RQ_Block_3883, RQ_Block_3924, RQ_Block_3970,
    RQ_Block_4015, RQ_Block_4069, RQ_Block_4112, RQ_Block_4165, RQ_Block_4207,
    RQ_Block_4252, RQ_Block_4318, RQ_Block_4365, RQ_Block_4418, RQ_Block_4468,
    RQ_Block_4513, RQ_Block_4567, RQ_Block_4626, RQ_Block_4681, RQ_Block_4731,
    RQ_Block_4780, RQ_Block_4838, RQ_Block_4901, RQ_Block_4954, RQ_Block_5008,
    RQ_Block_5063, RQ_Block_5116, RQ_Block_5172, RQ_Block_5225, RQ_Block_5279,
    RQ_Block_5334, RQ_Block_5391, RQ_Block_5449, RQ_Block_5506, RQ_Block_5566,
    RQ_Block_5637, RQ_Block_5694, RQ_Block_5763, RQ_Block_5823, RQ_Block_5896,
    RQ_Block_5975, RQ_Block_6039, RQ_Block_6102, RQ_Block_6169, RQ_Block_6233,
    RQ_Block_6296, RQ_Block_6363, RQ_Block_6427, RQ_Block_6518, RQ_Block_6589,
    RQ_Block_6655, RQ_Block_6730, RQ_Block_6799, RQ_Block_6878, RQ_Block_6956,
    RQ_Block_7033, RQ_Block_7108, RQ_Block_7185, RQ_Block_7281, RQ_Block_7360,
    RQ_Block_7445, RQ_Block_7520, RQ_Block_7596, RQ_Block_7675, RQ_Block_7770,
    RQ_Block_7855, RQ_Block_7935, RQ_Block_8030, RQ_Block_8111, RQ_Block_8194,
    RQ_Block_8290, RQ_Block_8377, RQ_Block_8474, RQ_Block_8559, RQ_Block_8654,
    RQ_Block_8744, RQ_Block_8837, RQ_Block_8928, RQ_Block_9019, RQ_Block_9111,
    RQ_Block_9206, RQ_Block_9303, RQ_Block_9400, RQ_Block_9497, RQ_Block_9601,
    RQ_Block_9708, RQ_Block_9813, RQ_Block_9916, RQ_Block_10017,RQ_Block_10120,
    RQ_Block_10241,RQ_Block_10351,RQ_Block_10458,RQ_Block_10567,RQ_Block_10676,
    RQ_Block_10787,RQ_Block_10899,RQ_Block_11015,RQ_Block_11130,RQ_Block_11245,
    RQ_Block_11358,RQ_Block_11475,RQ_Block_11590,RQ_Block_11711,RQ_Block_11829,
    RQ_Block_11956,RQ_Block_12087,RQ_Block_12208,RQ_Block_12333,RQ_Block_12460,
    RQ_Block_12593,RQ_Block_12726,RQ_Block_12857,RQ_Block_13002,RQ_Block_13143,
    RQ_Block_13284,RQ_Block_13417,RQ_Block_13558,RQ_Block_13695,RQ_Block_13833,
    RQ_Block_13974,RQ_Block_14115,RQ_Block_14272,RQ_Block_14415,RQ_Block_14560,
    RQ_Block_14713,RQ_Block_14862,RQ_Block_15011,RQ_Block_15170,RQ_Block_15325,
    RQ_Block_15496,RQ_Block_15651,RQ_Block_15808,RQ_Block_15977,RQ_Block_16161,
    RQ_Block_16336,RQ_Block_16505,RQ_Block_16674,RQ_Block_16851,RQ_Block_17024,
    RQ_Block_17195,RQ_Block_17376,RQ_Block_17559,RQ_Block_17742,RQ_Block_17929,
    RQ_Block_18116,RQ_Block_18309,RQ_Block_18503,RQ_Block_18694,RQ_Block_18909,
    RQ_Block_19126,RQ_Block_19325,RQ_Block_19539,RQ_Block_19740,RQ_Block_19939,
    RQ_Block_20152,RQ_Block_20355,RQ_Block_20564,RQ_Block_20778,RQ_Block_20988,
    RQ_Block_21199,RQ_Block_21412,RQ_Block_21629,RQ_Block_21852,RQ_Block_22073,
    RQ_Block_22301,RQ_Block_22536,RQ_Block_22779,RQ_Block_23010,RQ_Block_23252,
    RQ_Block_23491,RQ_Block_23730,RQ_Block_23971,RQ_Block_24215,RQ_Block_24476,
    RQ_Block_24721,RQ_Block_24976,RQ_Block_25230,RQ_Block_25493,RQ_Block_25756,
    RQ_Block_26022,RQ_Block_26291,RQ_Block_26566,RQ_Block_26838,RQ_Block_27111,
    RQ_Block_27392,RQ_Block_27682,RQ_Block_27959,RQ_Block_28248,RQ_Block_28548,
    RQ_Block_28845,RQ_Block_29138,RQ_Block_29434,RQ_Block_29731,RQ_Block_30037,
    RQ_Block_30346,RQ_Block_30654,RQ_Block_30974,RQ_Block_31285,RQ_Block_31605,
    RQ_Block_31948,RQ_Block_32272,RQ_Block_32601,RQ_Block_32932,RQ_Block_33282,
    RQ_Block_33623,RQ_Block_33961,RQ_Block_34302,RQ_Block_34654,RQ_Block_35031,
    RQ_Block_35395,RQ_Block_35750,RQ_Block_36112,RQ_Block_36479,RQ_Block_36849,
    RQ_Block_37227,RQ_Block_37606,RQ_Block_37992,RQ_Block_38385,RQ_Block_38787,
    RQ_Block_39176,RQ_Block_39576,RQ_Block_39980,RQ_Block_40398,RQ_Block_40816,
    RQ_Block_41226,RQ_Block_41641,RQ_Block_42067,RQ_Block_42490,RQ_Block_42916,
    RQ_Block_43388,RQ_Block_43840,RQ_Block_44279,RQ_Block_44729,RQ_Block_45183,
    RQ_Block_45638,RQ_Block_46104,RQ_Block_46574,RQ_Block_47047,RQ_Block_47523,
    RQ_Block_48007,RQ_Block_48489,RQ_Block_48976,RQ_Block_49470,RQ_Block_49978,
    RQ_Block_50511,RQ_Block_51017,RQ_Block_51530,RQ_Block_52062,RQ_Block_52586,
    RQ_Block_53114,RQ_Block_53650,RQ_Block_54188,RQ_Block_54735,RQ_Block_55289,
    RQ_Block_55843,RQ_Block_56403
    };


#if defined(__cplusplus)&& ( __cplusplus >= 201103L || _MSC_VER > 1900 )

namespace RaptorQ__v1 {

enum class Block_Size : uint16_t {
    Block_10  =RQ_Block_10,  Block_12  =RQ_Block_12,   Block_18  =RQ_Block_18,
    Block_20  =RQ_Block_20,  Block_26  =RQ_Block_26,   Block_30  =RQ_Block_30,
    Block_32  =RQ_Block_32,  Block_36  =RQ_Block_36,   Block_42  =RQ_Block_42,
    Block_46  =RQ_Block_46,  Block_48  =RQ_Block_48,   Block_49  =RQ_Block_49,
    Block_55  =RQ_Block_55,  Block_60  =RQ_Block_60,   Block_62  =RQ_Block_62,
    Block_69  =RQ_Block_69,  Block_75  =RQ_Block_75,   Block_84  =RQ_Block_84,
    Block_88  =RQ_Block_88,  Block_91  =RQ_Block_91,   Block_95  =RQ_Block_95,
    Block_97  =RQ_Block_97,  Block_101 =RQ_Block_101, Block_114 =RQ_Block_114,
    Block_119 =RQ_Block_119, Block_125 =RQ_Block_125, Block_127 =RQ_Block_127,
    Block_138 =RQ_Block_138, Block_140 =RQ_Block_140, Block_149 =RQ_Block_149,
    Block_153 =RQ_Block_153, Block_160 =RQ_Block_160, Block_166 =RQ_Block_166,
    Block_168 =RQ_Block_168, Block_179 =RQ_Block_179, Block_181 =RQ_Block_181,
    Block_185 =RQ_Block_185, Block_187 =RQ_Block_187, Block_200 =RQ_Block_200,
    Block_213 =RQ_Block_213, Block_217 =RQ_Block_217, Block_225 =RQ_Block_225,
    Block_236 =RQ_Block_236, Block_242 =RQ_Block_242, Block_248 =RQ_Block_248,
    Block_257 =RQ_Block_257, Block_263 =RQ_Block_263, Block_269 =RQ_Block_269,
    Block_280 =RQ_Block_280, Block_295 =RQ_Block_295, Block_301 =RQ_Block_301,
    Block_305 =RQ_Block_305, Block_324 =RQ_Block_324, Block_337 =RQ_Block_337,
    Block_341 =RQ_Block_341, Block_347 =RQ_Block_347, Block_355 =RQ_Block_355,
    Block_362 =RQ_Block_362, Block_368 =RQ_Block_368, Block_372 =RQ_Block_372,
    Block_380 =RQ_Block_380, Block_385 =RQ_Block_385, Block_393 =RQ_Block_393,
    Block_405 =RQ_Block_405, Block_418 =RQ_Block_418, Block_428 =RQ_Block_428,
    Block_434 =RQ_Block_434, Block_447 =RQ_Block_447, Block_453 =RQ_Block_453,
    Block_466 =RQ_Block_466, Block_478 =RQ_Block_478, Block_486 =RQ_Block_486,
    Block_491 =RQ_Block_491, Block_497 =RQ_Block_497, Block_511 =RQ_Block_511,
    Block_526 =RQ_Block_526, Block_532 =RQ_Block_532, Block_542 =RQ_Block_542,
    Block_549 =RQ_Block_549, Block_557 =RQ_Block_557, Block_563 =RQ_Block_563,
    Block_573 =RQ_Block_573, Block_580 =RQ_Block_580, Block_588 =RQ_Block_588,
    Block_594 =RQ_Block_594, Block_600 =RQ_Block_600, Block_606 =RQ_Block_606,
    Block_619 =RQ_Block_619, Block_633 =RQ_Block_633, Block_640 =RQ_Block_640,
    Block_648 =RQ_Block_648, Block_666 =RQ_Block_666, Block_675 =RQ_Block_675,
    Block_685 =RQ_Block_685, Block_693 =RQ_Block_693, Block_703 =RQ_Block_703,
    Block_718 =RQ_Block_718, Block_728 =RQ_Block_728, Block_736 =RQ_Block_736,
    Block_747 =RQ_Block_747, Block_759 =RQ_Block_759, Block_778 =RQ_Block_778,
    Block_792 =RQ_Block_792, Block_802 =RQ_Block_802, Block_811 =RQ_Block_811,
    Block_821 =RQ_Block_821, Block_835 =RQ_Block_835, Block_845 =RQ_Block_845,
    Block_860 =RQ_Block_860, Block_870 =RQ_Block_870, Block_891 =RQ_Block_891,
    Block_903 =RQ_Block_903, Block_913 =RQ_Block_913, Block_926 =RQ_Block_926,
    Block_938 =RQ_Block_938, Block_950 =RQ_Block_950, Block_963 =RQ_Block_963,
    Block_977 =RQ_Block_977, Block_989 =RQ_Block_989, Block_1002=RQ_Block_1002,
    Block_1020=RQ_Block_1020,Block_1032=RQ_Block_1032,Block_1050=RQ_Block_1050,
    Block_1074=RQ_Block_1074,Block_1085=RQ_Block_1085,Block_1099=RQ_Block_1099,
    Block_1111=RQ_Block_1111,Block_1136=RQ_Block_1136,Block_1152=RQ_Block_1152,
    Block_1169=RQ_Block_1169,Block_1183=RQ_Block_1183,Block_1205=RQ_Block_1205,
    Block_1220=RQ_Block_1220,Block_1236=RQ_Block_1236,Block_1255=RQ_Block_1255,
    Block_1269=RQ_Block_1269,Block_1285=RQ_Block_1285,Block_1306=RQ_Block_1306,
    Block_1347=RQ_Block_1347,Block_1361=RQ_Block_1361,Block_1389=RQ_Block_1389,
    Block_1404=RQ_Block_1404,Block_1420=RQ_Block_1420,Block_1436=RQ_Block_1436,
    Block_1461=RQ_Block_1461,Block_1477=RQ_Block_1477,Block_1502=RQ_Block_1502,
    Block_1522=RQ_Block_1522,Block_1539=RQ_Block_1539,Block_1561=RQ_Block_1561,
    Block_1579=RQ_Block_1579,Block_1600=RQ_Block_1600,Block_1616=RQ_Block_1616,
    Block_1649=RQ_Block_1649,Block_1673=RQ_Block_1673,Block_1698=RQ_Block_1698,
    Block_1716=RQ_Block_1716,Block_1734=RQ_Block_1734,Block_1759=RQ_Block_1759,
    Block_1777=RQ_Block_1777,Block_1800=RQ_Block_1800,Block_1824=RQ_Block_1824,
    Block_1844=RQ_Block_1844,Block_1863=RQ_Block_1863,Block_1887=RQ_Block_1887,
    Block_1906=RQ_Block_1906,Block_1926=RQ_Block_1926,Block_1954=RQ_Block_1954,
    Block_1979=RQ_Block_1979,Block_2005=RQ_Block_2005,Block_2040=RQ_Block_2040,
    Block_2070=RQ_Block_2070,Block_2103=RQ_Block_2103,Block_2125=RQ_Block_2125,
    Block_2152=RQ_Block_2152,Block_2195=RQ_Block_2195,Block_2217=RQ_Block_2217,
    Block_2247=RQ_Block_2247,Block_2278=RQ_Block_2278,Block_2315=RQ_Block_2315,
    Block_2339=RQ_Block_2339,Block_2367=RQ_Block_2367,Block_2392=RQ_Block_2392,
    Block_2416=RQ_Block_2416,Block_2447=RQ_Block_2447,Block_2473=RQ_Block_2473,
    Block_2502=RQ_Block_2502,Block_2528=RQ_Block_2528,Block_2565=RQ_Block_2565,
    Block_2601=RQ_Block_2601,Block_2640=RQ_Block_2640,Block_2668=RQ_Block_2668,
    Block_2701=RQ_Block_2701,Block_2737=RQ_Block_2737,Block_2772=RQ_Block_2772,
    Block_2802=RQ_Block_2802,Block_2831=RQ_Block_2831,Block_2875=RQ_Block_2875,
    Block_2906=RQ_Block_2906,Block_2938=RQ_Block_2938,Block_2979=RQ_Block_2979,
    Block_3015=RQ_Block_3015,Block_3056=RQ_Block_3056,Block_3101=RQ_Block_3101,
    Block_3151=RQ_Block_3151,Block_3186=RQ_Block_3186,Block_3224=RQ_Block_3224,
    Block_3265=RQ_Block_3265,Block_3299=RQ_Block_3299,Block_3344=RQ_Block_3344,
    Block_3387=RQ_Block_3387,Block_3423=RQ_Block_3423,Block_3466=RQ_Block_3466,
    Block_3502=RQ_Block_3502,Block_3539=RQ_Block_3539,Block_3579=RQ_Block_3579,
    Block_3616=RQ_Block_3616,Block_3658=RQ_Block_3658,Block_3697=RQ_Block_3697,
    Block_3751=RQ_Block_3751,Block_3792=RQ_Block_3792,Block_3840=RQ_Block_3840,
    Block_3883=RQ_Block_3883,Block_3924=RQ_Block_3924,Block_3970=RQ_Block_3970,
    Block_4015=RQ_Block_4015,Block_4069=RQ_Block_4069,Block_4112=RQ_Block_4112,
    Block_4165=RQ_Block_4165,Block_4207=RQ_Block_4207,Block_4252=RQ_Block_4252,
    Block_4318=RQ_Block_4318,Block_4365=RQ_Block_4365,Block_4418=RQ_Block_4418,
    Block_4468=RQ_Block_4468,Block_4513=RQ_Block_4513,Block_4567=RQ_Block_4567,
    Block_4626=RQ_Block_4626,Block_4681=RQ_Block_4681,Block_4731=RQ_Block_4731,
    Block_4780=RQ_Block_4780,Block_4838=RQ_Block_4838,Block_4901=RQ_Block_4901,
    Block_4954=RQ_Block_4954,Block_5008=RQ_Block_5008,Block_5063=RQ_Block_5063,
    Block_5116=RQ_Block_5116,Block_5172=RQ_Block_5172,Block_5225=RQ_Block_5225,
    Block_5279=RQ_Block_5279,Block_5334=RQ_Block_5334,Block_5391=RQ_Block_5391,
    Block_5449=RQ_Block_5449,Block_5506=RQ_Block_5506,Block_5566=RQ_Block_5566,
    Block_5637=RQ_Block_5637,Block_5694=RQ_Block_5694,Block_5763=RQ_Block_5763,
    Block_5823=RQ_Block_5823,Block_5896=RQ_Block_5896,Block_5975=RQ_Block_5975,
    Block_6039=RQ_Block_6039,Block_6102=RQ_Block_6102,Block_6169=RQ_Block_6169,
    Block_6233=RQ_Block_6233,Block_6296=RQ_Block_6296,Block_6363=RQ_Block_6363,
    Block_6427=RQ_Block_6427,Block_6518=RQ_Block_6518,Block_6589=RQ_Block_6589,
    Block_6655=RQ_Block_6655,Block_6730=RQ_Block_6730,Block_6799=RQ_Block_6799,
    Block_6878=RQ_Block_6878,Block_6956=RQ_Block_6956,Block_7033=RQ_Block_7033,
    Block_7108=RQ_Block_7108,Block_7185=RQ_Block_7185,Block_7281=RQ_Block_7281,
    Block_7360=RQ_Block_7360,Block_7445=RQ_Block_7445,Block_7520=RQ_Block_7520,
    Block_7596=RQ_Block_7596,Block_7675=RQ_Block_7675,Block_7770=RQ_Block_7770,
    Block_7855=RQ_Block_7855,Block_7935=RQ_Block_7935,Block_8030=RQ_Block_8030,
    Block_8111=RQ_Block_8111,Block_8194=RQ_Block_8194,Block_8290=RQ_Block_8290,
    Block_8377=RQ_Block_8377,Block_8474=RQ_Block_8474,Block_8559=RQ_Block_8559,
    Block_8654=RQ_Block_8654,Block_8744=RQ_Block_8744,Block_8837=RQ_Block_8837,
    Block_8928=RQ_Block_8928,Block_9019=RQ_Block_9019,Block_9111=RQ_Block_9111,
    Block_9206=RQ_Block_9206,Block_9303=RQ_Block_9303,Block_9400=RQ_Block_9400,
    Block_9497=RQ_Block_9497,Block_9601=RQ_Block_9601,Block_9708=RQ_Block_9708,
    Block_9813=RQ_Block_9813,Block_9916=RQ_Block_9916,
    Block_10017 = RQ_Block_10017, Block_10120 = RQ_Block_10120,
    Block_10241 = RQ_Block_10241, Block_10351 = RQ_Block_10351,
    Block_10458 = RQ_Block_10458, Block_10567 = RQ_Block_10567,
    Block_10676 = RQ_Block_10676, Block_10787 = RQ_Block_10787,
    Block_10899 = RQ_Block_10899, Block_11015 = RQ_Block_11015,
    Block_11130 = RQ_Block_11130, Block_11245 = RQ_Block_11245,
    Block_11358 = RQ_Block_11358, Block_11475 = RQ_Block_11475,
    Block_11590 = RQ_Block_11590, Block_11711 = RQ_Block_11711,
    Block_11829 = RQ_Block_11829, Block_11956 = RQ_Block_11956,
    Block_12087 = RQ_Block_12087, Block_12208 = RQ_Block_12208,
    Block_12333 = RQ_Block_12333, Block_12460 = RQ_Block_12460,
    Block_12593 = RQ_Block_12593, Block_12726 = RQ_Block_12726,
    Block_12857 = RQ_Block_12857, Block_13002 = RQ_Block_13002,
    Block_13143 = RQ_Block_13143, Block_13284 = RQ_Block_13284,
    Block_13417 = RQ_Block_13417, Block_13558 = RQ_Block_13558,
    Block_13695 = RQ_Block_13695, Block_13833 = RQ_Block_13833,
    Block_13974 = RQ_Block_13974, Block_14115 = RQ_Block_14115,
    Block_14272 = RQ_Block_14272, Block_14415 = RQ_Block_14415,
    Block_14560 = RQ_Block_14560, Block_14713 = RQ_Block_14713,
    Block_14862 = RQ_Block_14862, Block_15011 = RQ_Block_15011,
    Block_15170 = RQ_Block_15170, Block_15325 = RQ_Block_15325,
    Block_15496 = RQ_Block_15496, Block_15651 = RQ_Block_15651,
    Block_15808 = RQ_Block_15808, Block_15977 = RQ_Block_15977,
    Block_16161 = RQ_Block_16161, Block_16336 = RQ_Block_16336,
    Block_16505 = RQ_Block_16505, Block_16674 = RQ_Block_16674,
    Block_16851 = RQ_Block_16851, Block_17024 = RQ_Block_17024,
    Block_17195 = RQ_Block_17195, Block_17376 = RQ_Block_17376,
    Block_17559 = RQ_Block_17559, Block_17742 = RQ_Block_17742,
    Block_17929 = RQ_Block_17929, Block_18116 = RQ_Block_18116,
    Block_18309 = RQ_Block_18309, Block_18503 = RQ_Block_18503,
    Block_18694 = RQ_Block_18694, Block_18909 = RQ_Block_18909,
    Block_19126 = RQ_Block_19126, Block_19325 = RQ_Block_19325,
    Block_19539 = RQ_Block_19539, Block_19740 = RQ_Block_19740,
    Block_19939 = RQ_Block_19939, Block_20152 = RQ_Block_20152,
    Block_20355 = RQ_Block_20355, Block_20564 = RQ_Block_20564,
    Block_20778 = RQ_Block_20778, Block_20988 = RQ_Block_20988,
    Block_21199 = RQ_Block_21199, Block_21412 = RQ_Block_21412,
    Block_21629 = RQ_Block_21629, Block_21852 = RQ_Block_21852,
    Block_22073 = RQ_Block_22073, Block_22301 = RQ_Block_22301,
    Block_22536 = RQ_Block_22536, Block_22779 = RQ_Block_22779,
    Block_23010 = RQ_Block_23010, Block_23252 = RQ_Block_23252,
    Block_23491 = RQ_Block_23491, Block_23730 = RQ_Block_23730,
    Block_23971 = RQ_Block_23971, Block_24215 = RQ_Block_24215,
    Block_24476 = RQ_Block_24476, Block_24721 = RQ_Block_24721,
    Block_24976 = RQ_Block_24976, Block_25230 = RQ_Block_25230,
    Block_25493 = RQ_Block_25493, Block_25756 = RQ_Block_25756,
    Block_26022 = RQ_Block_26022, Block_26291 = RQ_Block_26291,
    Block_26566 = RQ_Block_26566, Block_26838 = RQ_Block_26838,
    Block_27111 = RQ_Block_27111, Block_27392 = RQ_Block_27392,
    Block_27682 = RQ_Block_27682, Block_27959 = RQ_Block_27959,
    Block_28248 = RQ_Block_28248, Block_28548 = RQ_Block_28548,
    Block_28845 = RQ_Block_28845, Block_29138 = RQ_Block_29138,
    Block_29434 = RQ_Block_29434, Block_29731 = RQ_Block_29731,
    Block_30037 = RQ_Block_30037, Block_30346 = RQ_Block_30346,
    Block_30654 = RQ_Block_30654, Block_30974 = RQ_Block_30974,
    Block_31285 = RQ_Block_31285, Block_31605 = RQ_Block_31605,
    Block_31948 = RQ_Block_31948, Block_32272 = RQ_Block_32272,
    Block_32601 = RQ_Block_32601, Block_32932 = RQ_Block_32932,
    Block_33282 = RQ_Block_33282, Block_33623 = RQ_Block_33623,
    Block_33961 = RQ_Block_33961, Block_34302 = RQ_Block_34302,
    Block_34654 = RQ_Block_34654, Block_35031 = RQ_Block_35031,
    Block_35395 = RQ_Block_35395, Block_35750 = RQ_Block_35750,
    Block_36112 = RQ_Block_36112, Block_36479 = RQ_Block_36479,
    Block_36849 = RQ_Block_36849, Block_37227 = RQ_Block_37227,
    Block_37606 = RQ_Block_37606, Block_37992 = RQ_Block_37992,
    Block_38385 = RQ_Block_38385, Block_38787 = RQ_Block_38787,
    Block_39176 = RQ_Block_39176, Block_39576 = RQ_Block_39576,
    Block_39980 = RQ_Block_39980, Block_40398 = RQ_Block_40398,
    Block_40816 = RQ_Block_40816, Block_41226 = RQ_Block_41226,
    Block_41641 = RQ_Block_41641, Block_42067 = RQ_Block_42067,
    Block_42490 = RQ_Block_42490, Block_42916 = RQ_Block_42916,
    Block_43388 = RQ_Block_43388, Block_43840 = RQ_Block_43840,
    Block_44279 = RQ_Block_44279, Block_44729 = RQ_Block_44729,
    Block_45183 = RQ_Block_45183, Block_45638 = RQ_Block_45638,
    Block_46104 = RQ_Block_46104, Block_46574 = RQ_Block_46574,
    Block_47047 = RQ_Block_47047, Block_47523 = RQ_Block_47523,
    Block_48007 = RQ_Block_48007, Block_48489 = RQ_Block_48489,
    Block_48976 = RQ_Block_48976, Block_49470 = RQ_Block_49470,
    Block_49978 = RQ_Block_49978, Block_50511 = RQ_Block_50511,
    Block_51017 = RQ_Block_51017, Block_51530 = RQ_Block_51530,
    Block_52062 = RQ_Block_52062, Block_52586 = RQ_Block_52586,
    Block_53114 = RQ_Block_53114, Block_53650 = RQ_Block_53650,
    Block_54188 = RQ_Block_54188, Block_54735 = RQ_Block_54735,
    Block_55289 = RQ_Block_55289, Block_55843 = RQ_Block_55843,
    Block_56403 = RQ_Block_56403
};

#ifdef USING_CLANG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmissing-braces"
#pragma clang diagnostic ignored "-Wglobal-constructors"
#pragma clang diagnostic ignored "-Wexit-time-destructors"
#endif  //using_clang
namespace Impl {
static const std::array<uint16_t, RQ_blocks_size> K_padded = {{
    static_cast<uint16_t>(Block_Size::Block_10),
    static_cast<uint16_t>(Block_Size::Block_12),
    static_cast<uint16_t>(Block_Size::Block_18),
    static_cast<uint16_t>(Block_Size::Block_20),
    static_cast<uint16_t>(Block_Size::Block_26),
    static_cast<uint16_t>(Block_Size::Block_30),
    static_cast<uint16_t>(Block_Size::Block_32),
    static_cast<uint16_t>(Block_Size::Block_36),
    static_cast<uint16_t>(Block_Size::Block_42),
    static_cast<uint16_t>(Block_Size::Block_46),
    static_cast<uint16_t>(Block_Size::Block_48),
    static_cast<uint16_t>(Block_Size::Block_49),
    static_cast<uint16_t>(Block_Size::Block_55),
    static_cast<uint16_t>(Block_Size::Block_60),
    static_cast<uint16_t>(Block_Size::Block_62),
    static_cast<uint16_t>(Block_Size::Block_69),
    static_cast<uint16_t>(Block_Size::Block_75),
    static_cast<uint16_t>(Block_Size::Block_84),
    static_cast<uint16_t>(Block_Size::Block_88),
    static_cast<uint16_t>(Block_Size::Block_91),
    static_cast<uint16_t>(Block_Size::Block_95),
    static_cast<uint16_t>(Block_Size::Block_97),
    static_cast<uint16_t>(Block_Size::Block_101),
    static_cast<uint16_t>(Block_Size::Block_114),
    static_cast<uint16_t>(Block_Size::Block_119),
    static_cast<uint16_t>(Block_Size::Block_125),
    static_cast<uint16_t>(Block_Size::Block_127),
    static_cast<uint16_t>(Block_Size::Block_138),
    static_cast<uint16_t>(Block_Size::Block_140),
    static_cast<uint16_t>(Block_Size::Block_149),
    static_cast<uint16_t>(Block_Size::Block_153),
    static_cast<uint16_t>(Block_Size::Block_160),
    static_cast<uint16_t>(Block_Size::Block_166),
    static_cast<uint16_t>(Block_Size::Block_168),
    static_cast<uint16_t>(Block_Size::Block_179),
    static_cast<uint16_t>(Block_Size::Block_181),
    static_cast<uint16_t>(Block_Size::Block_185),
    static_cast<uint16_t>(Block_Size::Block_187),
    static_cast<uint16_t>(Block_Size::Block_200),
    static_cast<uint16_t>(Block_Size::Block_213),
    static_cast<uint16_t>(Block_Size::Block_217),
    static_cast<uint16_t>(Block_Size::Block_225),
    static_cast<uint16_t>(Block_Size::Block_236),
    static_cast<uint16_t>(Block_Size::Block_242),
    static_cast<uint16_t>(Block_Size::Block_248),
    static_cast<uint16_t>(Block_Size::Block_257),
    static_cast<uint16_t>(Block_Size::Block_263),
    static_cast<uint16_t>(Block_Size::Block_269),
    static_cast<uint16_t>(Block_Size::Block_280),
    static_cast<uint16_t>(Block_Size::Block_295),
    static_cast<uint16_t>(Block_Size::Block_301),
    static_cast<uint16_t>(Block_Size::Block_305),
    static_cast<uint16_t>(Block_Size::Block_324),
    static_cast<uint16_t>(Block_Size::Block_337),
    static_cast<uint16_t>(Block_Size::Block_341),
    static_cast<uint16_t>(Block_Size::Block_347),
    static_cast<uint16_t>(Block_Size::Block_355),
    static_cast<uint16_t>(Block_Size::Block_362),
    static_cast<uint16_t>(Block_Size::Block_368),
    static_cast<uint16_t>(Block_Size::Block_372),
    static_cast<uint16_t>(Block_Size::Block_380),
    static_cast<uint16_t>(Block_Size::Block_385),
    static_cast<uint16_t>(Block_Size::Block_393),
    static_cast<uint16_t>(Block_Size::Block_405),
    static_cast<uint16_t>(Block_Size::Block_418),
    static_cast<uint16_t>(Block_Size::Block_428),
    static_cast<uint16_t>(Block_Size::Block_434),
    static_cast<uint16_t>(Block_Size::Block_447),
    static_cast<uint16_t>(Block_Size::Block_453),
    static_cast<uint16_t>(Block_Size::Block_466),
    static_cast<uint16_t>(Block_Size::Block_478),
    static_cast<uint16_t>(Block_Size::Block_486),
    static_cast<uint16_t>(Block_Size::Block_491),
    static_cast<uint16_t>(Block_Size::Block_497),
    static_cast<uint16_t>(Block_Size::Block_511),
    static_cast<uint16_t>(Block_Size::Block_526),
    static_cast<uint16_t>(Block_Size::Block_532),
    static_cast<uint16_t>(Block_Size::Block_542),
    static_cast<uint16_t>(Block_Size::Block_549),
    static_cast<uint16_t>(Block_Size::Block_557),
    static_cast<uint16_t>(Block_Size::Block_563),
    static_cast<uint16_t>(Block_Size::Block_573),
    static_cast<uint16_t>(Block_Size::Block_580),
    static_cast<uint16_t>(Block_Size::Block_588),
    static_cast<uint16_t>(Block_Size::Block_594),
    static_cast<uint16_t>(Block_Size::Block_600),
    static_cast<uint16_t>(Block_Size::Block_606),
    static_cast<uint16_t>(Block_Size::Block_619),
    static_cast<uint16_t>(Block_Size::Block_633),
    static_cast<uint16_t>(Block_Size::Block_640),
    static_cast<uint16_t>(Block_Size::Block_648),
    static_cast<uint16_t>(Block_Size::Block_666),
    static_cast<uint16_t>(Block_Size::Block_675),
    static_cast<uint16_t>(Block_Size::Block_685),
    static_cast<uint16_t>(Block_Size::Block_693),
    static_cast<uint16_t>(Block_Size::Block_703),
    static_cast<uint16_t>(Block_Size::Block_718),
    static_cast<uint16_t>(Block_Size::Block_728),
    static_cast<uint16_t>(Block_Size::Block_736),
    static_cast<uint16_t>(Block_Size::Block_747),
    static_cast<uint16_t>(Block_Size::Block_759),
    static_cast<uint16_t>(Block_Size::Block_778),
    static_cast<uint16_t>(Block_Size::Block_792),
    static_cast<uint16_t>(Block_Size::Block_802),
    static_cast<uint16_t>(Block_Size::Block_811),
    static_cast<uint16_t>(Block_Size::Block_821),
    static_cast<uint16_t>(Block_Size::Block_835),
    static_cast<uint16_t>(Block_Size::Block_845),
    static_cast<uint16_t>(Block_Size::Block_860),
    static_cast<uint16_t>(Block_Size::Block_870),
    static_cast<uint16_t>(Block_Size::Block_891),
    static_cast<uint16_t>(Block_Size::Block_903),
    static_cast<uint16_t>(Block_Size::Block_913),
    static_cast<uint16_t>(Block_Size::Block_926),
    static_cast<uint16_t>(Block_Size::Block_938),
    static_cast<uint16_t>(Block_Size::Block_950),
    static_cast<uint16_t>(Block_Size::Block_963),
    static_cast<uint16_t>(Block_Size::Block_977),
    static_cast<uint16_t>(Block_Size::Block_989),
    static_cast<uint16_t>(Block_Size::Block_1002),
    static_cast<uint16_t>(Block_Size::Block_1020),
    static_cast<uint16_t>(Block_Size::Block_1032),
    static_cast<uint16_t>(Block_Size::Block_1050),
    static_cast<uint16_t>(Block_Size::Block_1074),
    static_cast<uint16_t>(Block_Size::Block_1085),
    static_cast<uint16_t>(Block_Size::Block_1099),
    static_cast<uint16_t>(Block_Size::Block_1111),
    static_cast<uint16_t>(Block_Size::Block_1136),
    static_cast<uint16_t>(Block_Size::Block_1152),
    static_cast<uint16_t>(Block_Size::Block_1169),
    static_cast<uint16_t>(Block_Size::Block_1183),
    static_cast<uint16_t>(Block_Size::Block_1205),
    static_cast<uint16_t>(Block_Size::Block_1220),
    static_cast<uint16_t>(Block_Size::Block_1236),
    static_cast<uint16_t>(Block_Size::Block_1255),
    static_cast<uint16_t>(Block_Size::Block_1269),
    static_cast<uint16_t>(Block_Size::Block_1285),
    static_cast<uint16_t>(Block_Size::Block_1306),
    static_cast<uint16_t>(Block_Size::Block_1347),
    static_cast<uint16_t>(Block_Size::Block_1361),
    static_cast<uint16_t>(Block_Size::Block_1389),
    static_cast<uint16_t>(Block_Size::Block_1404),
    static_cast<uint16_t>(Block_Size::Block_1420),
    static_cast<uint16_t>(Block_Size::Block_1436),
    static_cast<uint16_t>(Block_Size::Block_1461),
    static_cast<uint16_t>(Block_Size::Block_1477),
    static_cast<uint16_t>(Block_Size::Block_1502),
    static_cast<uint16_t>(Block_Size::Block_1522),
    static_cast<uint16_t>(Block_Size::Block_1539),
    static_cast<uint16_t>(Block_Size::Block_1561),
    static_cast<uint16_t>(Block_Size::Block_1579),
    static_cast<uint16_t>(Block_Size::Block_1600),
    static_cast<uint16_t>(Block_Size::Block_1616),
    static_cast<uint16_t>(Block_Size::Block_1649),
    static_cast<uint16_t>(Block_Size::Block_1673),
    static_cast<uint16_t>(Block_Size::Block_1698),
    static_cast<uint16_t>(Block_Size::Block_1716),
    static_cast<uint16_t>(Block_Size::Block_1734),
    static_cast<uint16_t>(Block_Size::Block_1759),
    static_cast<uint16_t>(Block_Size::Block_1777),
    static_cast<uint16_t>(Block_Size::Block_1800),
    static_cast<uint16_t>(Block_Size::Block_1824),
    static_cast<uint16_t>(Block_Size::Block_1844),
    static_cast<uint16_t>(Block_Size::Block_1863),
    static_cast<uint16_t>(Block_Size::Block_1887),
    static_cast<uint16_t>(Block_Size::Block_1906),
    static_cast<uint16_t>(Block_Size::Block_1926),
    static_cast<uint16_t>(Block_Size::Block_1954),
    static_cast<uint16_t>(Block_Size::Block_1979),
    static_cast<uint16_t>(Block_Size::Block_2005),
    static_cast<uint16_t>(Block_Size::Block_2040),
    static_cast<uint16_t>(Block_Size::Block_2070),
    static_cast<uint16_t>(Block_Size::Block_2103),
    static_cast<uint16_t>(Block_Size::Block_2125),
    static_cast<uint16_t>(Block_Size::Block_2152),
    static_cast<uint16_t>(Block_Size::Block_2195),
    static_cast<uint16_t>(Block_Size::Block_2217),
    static_cast<uint16_t>(Block_Size::Block_2247),
    static_cast<uint16_t>(Block_Size::Block_2278),
    static_cast<uint16_t>(Block_Size::Block_2315),
    static_cast<uint16_t>(Block_Size::Block_2339),