diff --git "a/fp12/convert.py" "b/fp12/convert.py" new file mode 100644--- /dev/null +++ "b/fp12/convert.py" @@ -0,0 +1,541 @@ +import torch + +# 0000_1111_1111 +FP12_MAX = 0.5 * (1+0.5+0.25+0.125+0.0625+0.03125) + +# 0000_0000_0000 +FP12_MIN = 2 ** (-15) + + +def to_fp12(data: torch.Tensor): + data = data.to(dtype=torch.float16) + + assert (data.abs() <= FP12_MAX).all().item(), f'max value = {data.abs().max().item()}' + + # fp16: sEEE_EEff_ffff_ffff + # + # fp12 type-a: sEEE_ffff_ffff + # where EEE != 000 + # mantissa = E-12 = -5..-11 + # fp12 type-b: s000_ffff_f0GG + # mantissa = G-15 = -12..-15 + # fp12 type-c: s000_ffff_f1HH + # mantissa = H-4 = -1..-4 + # + # * significant bits + # 0000_0000 = 1 + 0 + # 1000_0000 = 1 + 0.5 + # 0100_0000 = 1 + 0.25 + # 0010_0000 = 1 + 0.125 + # 0001_0000 = 1 + 0.0625 + # 0000_1000 = 1 + 0.03125 + # 0000_0100 = 1 + 0.015625 + # 0000_0010 = 1 + 0.0078125 + # 0000_0001 = 1 + 0.00390625 + # + + idata = data.view(dtype=torch.int16).view(size=(-1,)) + #assert idata.numel() % 2 == 0 + + mask_s = 0b1000_0000_0000_0000 + mask_e = 0b0111_1100_0000_0000 + mask_f = 0b0000_0011_1111_1111 + + # sign + s = ((idata & mask_s) >> 12).to(dtype=torch.uint8) & 0b1000 + + # exponential + e = ((idata & mask_e) >> 10) - 15 + e = e.clamp(-15, -1) + + E_mask = torch.logical_and(-11 <= e, e <= -5) + + E = (e + 12).to(dtype=torch.int8).view(dtype=torch.uint8) + E[~E_mask] = 0 + E += s + + E[::2] <<= 4 + E[::2] += E[1::2] + E = E[::2] + + # significants + f = idata & mask_f + F = (f >> 2).to(dtype=torch.uint8) + + ## significants of type-b + G_mask = e < -11 + Ge = (e + 15).to(dtype=torch.int8).view(dtype=torch.uint8) + Ge = Ge.clamp(0, 3) + F[G_mask] = (F[G_mask] & 0b1111_1000) + Ge[G_mask] + + ## significants of type-c + H_mask = -5 < e + He = (e + 4).to(dtype=torch.int8).view(dtype=torch.uint8) + He = He.clamp(0, 3) + F[H_mask] = (F[H_mask] & 0b1111_1000) + He[H_mask] + 0b100 + + return E, F + + +def fp12_to_fp16_2(exp: torch.Tensor, frac: torch.Tensor): + assert exp.dtype == torch.uint8 + assert frac.dtype == torch.uint8 + assert exp.ndim == 1 + assert frac.ndim == 1 + assert exp.size(0) * 2 == frac.size(0) + + FP16 = torch.zeros(frac.shape, dtype=torch.int16, device=frac.device) + + exp = exp[..., None].expand(size=(-1,2)).contiguous().view((-1,)) + exp[::2] >>= 4 + exp[1::2] &= 0b0000_1111 + + # sign + FP16[:] = exp & 0b0000_1000 + FP16 <<= 12 + + # exponential + exp_e = (exp & 0b0111).to(dtype=torch.int16) + exp_gh = ((frac >> 5) & 0b11).to(dtype=torch.int16) + + E_mask = exp_e != 0 + G_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 0) + H_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 1) + + # EEE | EEE+3 | << 10 | e | + # --- | ----- | ------------------- | ------ | + # 001 | 0100 | s001_0000_0000_0000 | 00100 = 4 -> -11 + + # GG | << 10 | e | + # ---| ------------------- | ------ | + # 00 | s000_0000_0000_0000 | 00000 = 0 -> -15 + # 01 | s000_0100_0000_0000 | 00001 = 1 -> -14 + # 10 | s000_1000_0000_0000 | 00010 = 2 -> -13 + # 11 | s000_1100_0000_0000 | 00011 = 3 -> -12 + + # HH | HH+11 | << 10 | e | + # ---| ---- | ------------------- | ------ | + # 00 | 1011 | s010_1100_0000_0000 | 01011 = 11 -> -4 + # 01 | 1100 | s011_0000_0000_0000 | 01100 = 12 -> -3 + # 10 | 1101 | s011_0100_0000_0000 | 01101 = 13 -> -2 + # 11 | 1110 | s011_1000_0000_0000 | 01110 = 14 -> -1 + + FP16 += ( + ## type-a + E_mask * (exp_e + 3) + + # ^ EEE - 12 = -15 + a <=> a = EEE + 3 + ## type-b + G_mask * exp_gh + + # ^ GG - 15 = -15 + a <=> a = GG + ## type-c + H_mask * (exp_gh + 11) + # ^ HH - 4 = -15 + a <=> a = HH + 11 + ) << 10 + + # significants + FP16 += ( + ## type-a + E_mask * frac + + ## type-b and type-c + (G_mask + H_mask) * (frac << 3) + ).to(dtype=torch.int16) << 2 # TODO pad random value? + + return FP16.view(dtype=torch.float16) + + +# s_eee_fff (fp12) -> S_EEEEE (fp16) +#EXP_MAP = torch.tensor([ +# # -15 -14 -13 -12 -4 -3 -2 -1 +# # 0_000_000 0_000_001 0_000_010 0_000_011 0_000_100 0_000_101 0_000_110 0_000_111 +# 0b0_00000, 0b0_00001, 0b0_00010, 0b0_00011, 0b0_01011, 0b0_01100, 0b0_01101, 0b0_01110, +# +# # -11 +# # 0_001_000 0_001_001 0_001_010 0_001_011 0_001_100 0_001_101 0_001_110 0_001_111 +# 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, +# +# # -10 +# # 0_010_000 0_010_001 0_010_010 0_010_011 0_010_100 0_010_101 0_010_110 0_010_111 +# 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, +# +# # -9 +# # 0_011_000 0_011_001 0_011_010 0_011_011 0_011_100 0_011_101 0_011_110 0_011_111 +# 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, +# +# # -8 +# # 0_100_000 0_100_001 0_100_010 0_100_011 0_100_100 0_100_101 0_100_110 0_100_111 +# 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, +# +# # -7 +# # 0_101_000 0_101_001 0_101_010 0_101_011 0_101_100 0_101_101 0_101_110 0_101_111 +# 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, +# +# # -6 +# # 0_110_000 0_110_001 0_110_010 0_110_011 0_110_100 0_110_101 0_110_110 0_110_111 +# 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, +# +# # -5 +# # 0_111_000 0_111_001 0_111_010 0_111_011 0_111_100 0_111_101 0_111_110 0_111_111 +# 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, +# +# # -15 -14 -13 -12 -4 -3 -2 -1 +# # 1_000_000 1_000_001 1_000_010 1_000_011 1_000_100 1_000_101 1_000_110 1_000_111 +# 0b1_00000, 0b1_00001, 0b1_00010, 0b1_00011, 0b1_01011, 0b1_01100, 0b1_01101, 0b1_01110, +# +# # -11 +# # 1_001_000 1_001_001 1_001_010 1_001_011 1_001_100 1_001_101 1_001_110 1_001_111 +# 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, +# +# # -10 +# # 1_010_000 1_010_001 1_010_010 1_010_011 1_010_100 1_010_101 1_010_110 1_010_111 +# 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, +# +# # -9 +# # 1_011_000 1_011_001 1_011_010 1_011_011 1_011_100 1_011_101 1_011_110 1_011_111 +# 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, +# +# # -8 +# # 1_100_000 1_100_001 1_100_010 1_100_011 1_100_100 1_100_101 1_100_110 1_100_111 +# 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, +# +# # -7 +# # 1_101_000 1_101_001 1_101_010 1_101_011 1_101_100 1_101_101 1_101_110 1_101_111 +# 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, +# +# # -6 +# # 1_110_000 1_110_001 1_110_010 1_110_011 1_110_100 1_110_101 1_110_110 1_110_111 +# 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, +# +# # -5 +# # 1_111_000 1_111_001 1_111_010 1_111_011 1_111_100 1_111_101 1_111_110 1_111_111 +# 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, +#], dtype=torch.int16) << 10 + +EXP_MASK = torch.tensor([ + 0b1111_0000, + 0b0000_1111 +], dtype=torch.uint8) + +#def fp12_to_fp16_1(exp: torch.Tensor, frac: torch.Tensor): +# global EXP_MAP, EXP_MASK +# +# assert exp.dtype == torch.uint8 +# assert frac.dtype == torch.uint8 +# assert exp.ndim == 1 +# assert frac.ndim == 1 +# assert exp.size(0) * 2 == frac.size(0) +# +# if EXP_MAP.device != exp.device: +# EXP_MAP = EXP_MAP.to(exp.device) +# if EXP_MASK.device != exp.device: +# EXP_MASK = EXP_MASK.to(exp.device) +# +# exp = exp.repeat_interleave(2).view((-1,2)) +# exp.bitwise_and_(EXP_MASK) +# exp[..., 0] >>= 1 +# exp[..., 1] <<= 3 +# exp = exp.view((-1,)) +# # 0111_1000 0111_1000 +# +# E_mask = torch.logical_and(exp != 0, exp != 0b0100_0000).to(dtype=torch.int16) +# +# # take upper 6-bits from bitmap +# exp = torch.take(EXP_MAP, (exp + (frac & 0b0000_0111)).long()) +# +# f_mask = (0b0000_0111 * E_mask) + 0b1111_1000 +# frac = frac.to(dtype=torch.int16) +# frac.bitwise_and_(f_mask) +# frac.bitwise_left_shift_(2) +# +# FP16 = exp.add_(frac) +# +# return FP16.view(dtype=torch.float16) + +FP12_TO_FP16 = torch.tensor([ + 0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000, + 0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000, + 0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000, + 0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000, + 0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000, + 0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000, + 0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000, + 0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000, + 0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000, + 0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000, + 0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000, + 0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000, + 0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000, + 0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000, + 0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000, + 0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000, + 0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100, + 0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100, + 0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100, + 0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100, + 0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100, + 0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100, + 0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100, + 0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100, + 0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100, + 0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100, + 0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100, + 0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100, + 0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100, + 0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100, + 0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100, + 0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100, + 0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100, + 0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100, + 0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100, + 0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100, + 0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100, + 0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100, + 0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100, + 0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100, + 0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100, + 0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100, + 0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100, + 0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100, + 0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100, + 0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100, + 0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100, + 0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100, + 0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100, + 0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100, + 0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100, + 0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100, + 0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100, + 0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100, + 0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100, + 0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100, + 0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100, + 0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100, + 0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100, + 0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100, + 0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100, + 0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100, + 0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100, + 0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100, + 0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100, + 0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100, + 0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100, + 0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100, + 0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100, + 0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100, + 0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100, + 0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100, + 0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100, + 0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100, + 0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100, + 0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100, + 0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100, + 0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100, + 0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100, + 0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100, + 0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100, + 0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100, + 0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100, + 0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100, + 0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100, + 0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100, + 0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100, + 0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100, + 0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100, + 0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100, + 0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100, + 0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100, + 0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100, + 0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100, + 0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100, + 0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100, + 0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100, + 0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100, + 0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100, + 0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100, + 0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100, + 0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100, + 0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100, + 0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100, + 0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100, + 0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100, + 0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100, + 0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100, + 0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100, + 0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100, + 0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100, + 0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100, + 0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100, + 0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100, + 0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100, + 0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100, + 0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100, + 0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100, + 0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100, + 0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100, + 0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100, + 0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100, + 0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100, + 0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100, + 0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100, + 0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100, + 0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100, + 0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100, + 0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000, + 0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000, + 0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000, + 0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000, + 0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000, + 0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000, + 0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000, + 0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000, + 0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000, + 0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000, + 0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000, + 0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000, + 0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000, + 0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000, + 0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000, + 0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000, + 0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100, + 0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100, + 0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100, + 0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100, + 0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100, + 0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100, + 0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100, + 0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100, + 0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100, + 0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100, + 0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100, + 0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100, + 0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100, + 0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100, + 0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100, + 0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100, + 0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100, + 0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100, + 0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100, + 0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100, + 0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100, + 0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100, + 0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100, + 0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100, + 0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100, + 0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100, + 0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100, + 0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100, + 0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100, + 0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100, + 0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100, + 0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100, + 0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100, + 0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100, + 0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100, + 0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100, + 0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100, + 0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100, + 0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100, + 0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100, + 0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100, + 0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100, + 0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100, + 0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100, + 0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100, + 0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100, + 0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100, + 0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100, + 0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100, + 0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100, + 0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100, + 0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100, + 0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100, + 0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100, + 0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100, + 0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100, + 0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100, + 0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100, + 0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100, + 0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100, + 0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100, + 0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100, + 0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100, + 0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100, + 0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100, + 0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100, + 0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100, + 0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100, + 0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100, + 0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100, + 0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100, + 0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100, + 0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100, + 0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100, + 0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100, + 0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100, + 0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100, + 0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100, + 0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100, + 0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100, + 0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100, + 0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100, + 0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100, + 0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100, + 0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100, + 0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100, + 0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100, + 0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100, + 0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100, + 0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100, + 0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100, + 0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100, + 0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100, + 0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100, + 0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100, + 0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100, + 0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100, + 0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100, + 0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100, + 0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100, + 0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100, + 0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100, + 0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100, + 0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100, + 0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100, + 0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100, + 0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100, + 0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100, + 0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100, + 0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100, + 0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100, + 0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100, +], dtype=torch.int16) +# torch does not have torch.uint16 (x_x) +FP12_TO_FP16 = FP12_TO_FP16.view((2,-1)) +FP12_TO_FP16[1,:].bitwise_or_(0x8000) +FP12_TO_FP16 = FP12_TO_FP16.view((-1,)) + +def fp12_to_fp16(exp: torch.Tensor, frac: torch.Tensor): + global FP12_TO_FP16, EXP_MASK + + assert exp.dtype == torch.uint8 + assert frac.dtype == torch.uint8 + assert exp.ndim == 1 + assert frac.ndim == 1 + assert exp.size(0) * 2 == frac.size(0) + + if FP12_TO_FP16.device != exp.device: + FP12_TO_FP16 = FP12_TO_FP16.to(exp.device) + if EXP_MASK.device != exp.device: + EXP_MASK = EXP_MASK.to(exp.device) + + exp = exp.repeat_interleave(2).view((-1,2)) + exp.bitwise_and_(EXP_MASK) + + indices = exp.to(dtype=torch.int16) + indices[..., 0] <<= 4 # 1111_0000 => 1111_0000_0000 + indices[..., 1] <<= 8 # 0000_1111 => 1111_0000_0000 + + indices = indices.view((-1,)) + indices.add_(frac) + + FP16 = torch.take(FP12_TO_FP16, indices.long()) + return FP16.view(dtype=torch.float16)