Original description:
Clam really enjoys writing in C, but he realizes that he’ll have to learn another language eventually. After all, he’s grown pretty rusty after only programming in C for a >year. So, he decided to write a program to create some ASCII art from user input. He also provided a sample output!
Solution description:
Even though this is a high level rev challenge, this can be forward-engineered.
After superficially inspecting the code, you see that it simply iterates over the input once and uses some collect-mechanism.
IDA Pro can decompile the rust-code to quite readable C-code with Rust-calls, but the fastcall-calling conventions that uses registers instead of the stack for passing arguments makes it harder to read.
When starting with some input like actf{x*26} and flipping single x’es to y around, you find that flipping single input-characters flips single output-characters.
Futher inspection of the output also shows, that’s it only consists of @ABCDEFGHIJKLMNO, which is 0x40-0x47, so we can replace these chars with regular 0-9A-F hex. This output is produced by some for d in data: 1<<5(+d&7)
code.
Then we can convert this hex to bits, and we find out, that flipping 1 bit in the input flips some bit in the output. Testing the program with only \0 inputs confirms this behaviour, as \0*32 is all-zero.
After generating this mapping, we iterate over the given solution output and set the bits in our input-vector. As some inputs did not work, the mapping-vector is only 222 instead of (32 x 7 bit, as only plain ascii < 0x80 is allowed) 224, so we can have 2 bit errors which we have to manually correct.
Solution code
import subprocess
target_output = """CCHJEHMK
CFKJCEOL
FOJLMOJJ
BDN@H@BA
ODMJHFCJ
MOOKMOOO
OOAOFOGI
@@@@@@@@"""
target_output = target_output.split("\n")
repl = {a: b for a, b in zip(list("@ABCDEFGHIJKLMNO"), list("0123456789ABCDEF"))} # the encoding from the program is just weird hex
replace = lambda data: ["".join([repl[c] for c in line]) for line in data] # replace weird encoding with regular hex
output_to_bin = lambda data: bin(int(data, 16))[2::].zfill(256) # format the 32-byte output-hex ot a 256 long bin with leading zeros
def call_replace(data, surround=True):
""" call process with params and get outputs in normalized form"""
process = subprocess.Popen("./just_rust", stdout=subprocess.PIPE, stdin=subprocess.PIPE)
if surround:
data = b"actf{"+data+b"}\n"
process.stdin.write(data)
process.stdin.flush()
# read the relevant output lines
output = process.stdout.read().decode().split("\n")[1:9]
# sometimes we get errors for invalid inputs
if len(output) == 8: output = replace(output)
return output
# create mapping for each input-output-bit
out_in = {}
for i in range(32): # bytepos
for j in range(7): # bitpos, only to 7 as the 8th bit makes problems
instr = bytearray(b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n") # 32 x NULL byte input
instr[i] = 1<<j
output = call_replace(instr, surround=False)
if len(output)==8: # for errorcases
output = "".join(output)
input_pos = i*8+j
output_bin = output_to_bin(output) # cut 0b
output_pos = output_bin.find("1")
out_in[output_pos] = input_pos
# get the target input and set bits
target_output = replace(target_output)
target_output = output_to_bin("".join(target_output))
target_input = ["0"]*256
for pos, bit in enumerate(target_output):
if pos in out_in:
target_input[out_in[pos]] = bit
target_input = "".join(target_input[::-1])
print(int(target_input, 2).to_bytes(32, "little").decode())
# Output: Actf{b1gg3r_4nd_b4dd3r_l4ngu4g3]
# as it has to start with actf and end with }, we replace this by hand.
# this is caused by some unknown bits
Initial exploration code to visualize behaviour
# Old unused code for experimenting
print("Testing with all-zero-byte-input and setting position N to 1")
for i in range(32):
instr = bytearray(b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n")
instr[i] = 1
output = call_replace(instr, surround=False)
print(hex(i), output)
print("Testing with all-zero-byte-input and setting pos0 to N")
for i in range(128):
if i == ord('\n'):
continue
instr = bytearray(b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n")
instr[1] = i
output = call_replace(instr, surround=False)
print(hex(i), output)
ss = ("x"*26)
s = ss.encode("UTF-8")
print("Setting char i to +1 in actf{"+ss+"}")
for i in range(26):
instr = bytearray(s)
instr[i] = 0
output = call_replace(instr)
print(hex(i), output)
print("Setting char i to letter in actf{"+ss+"}")
for i in range(0x80):
if i in [10]:
continue
instr = bytearray(s)
instr[0] = i
output = call_replace(instr)
print(hex(i), output)
Outputs of the lower part of the exploration code
Testing with all-zero-byte-input and setting position N to 1
0x0 ['10000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1 ['01000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x2 ['00100000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x3 ['00010000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x4 ['00001000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x5 ['00000100', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x6 ['00000010', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x7 ['00000001', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x8 ['20000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x9 ['02000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xa ['00200000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xb ['00020000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xc ['00002000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xd ['00000200', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xe ['00000020', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0xf ['00000002', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x10 ['40000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x11 ['04000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x12 ['00400000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x13 ['00040000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x14 ['00004000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x15 ['00000400', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x16 ['00000040', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x17 ['00000004', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x18 ['80000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x19 ['08000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1a ['00800000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1b ['00080000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1c ['00008000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1d ['00000800', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1e ['00000080', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1f ['00000008', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
Testing with all-zero-byte-input and setting pos0 to N
0x0 ['00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x1 ['01000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x2 ['00000000', '00100000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x3 ['01000000', '00100000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x4 ['00000000', '00000000', '00010000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x5 ['01000000', '00000000', '00010000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x6 ['00000000', '00100000', '00010000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x7 ['01000000', '00100000', '00010000', '00000000', '00000000', '00000000', '00000000', '00000000']
0x8 ['00000000', '00000000', '00000000', '00001000', '00000000', '00000000', '00000000', '00000000']
0x9 ['01000000', '00000000', '00000000', '00001000', '00000000', '00000000', '00000000', '00000000']
0xb ['01000000', '00100000', '00000000', '00001000', '00000000', '00000000', '00000000', '00000000']
0xc ['00000000', '00000000', '00010000', '00001000', '00000000', '00000000', '00000000', '00000000']
0xd ['01000000', '00000000', '00010000', '00001000', '00000000', '00000000', '00000000', '00000000']
0xe ['00000000', '00100000', '00010000', '00001000', '00000000', '00000000', '00000000', '00000000']
0xf ['01000000', '00100000', '00010000', '00001000', '00000000', '00000000', '00000000', '00000000']
0x10 ['00000000', '00000000', '00000000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x11 ['01000000', '00000000', '00000000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x12 ['00000000', '00100000', '00000000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x13 ['01000000', '00100000', '00000000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x14 ['00000000', '00000000', '00010000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x15 ['01000000', '00000000', '00010000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x16 ['00000000', '00100000', '00010000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x17 ['01000000', '00100000', '00010000', '00000000', '00000100', '00000000', '00000000', '00000000']
0x18 ['00000000', '00000000', '00000000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x19 ['01000000', '00000000', '00000000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1a ['00000000', '00100000', '00000000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1b ['01000000', '00100000', '00000000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1c ['00000000', '00000000', '00010000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1d ['01000000', '00000000', '00010000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1e ['00000000', '00100000', '00010000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x1f ['01000000', '00100000', '00010000', '00001000', '00000100', '00000000', '00000000', '00000000']
0x20 ['00000000', '00000000', '00000000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x21 ['01000000', '00000000', '00000000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x22 ['00000000', '00100000', '00000000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x23 ['01000000', '00100000', '00000000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x24 ['00000000', '00000000', '00010000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x25 ['01000000', '00000000', '00010000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x26 ['00000000', '00100000', '00010000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x27 ['01000000', '00100000', '00010000', '00000000', '00000000', '00000010', '00000000', '00000000']
0x28 ['00000000', '00000000', '00000000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x29 ['01000000', '00000000', '00000000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2a ['00000000', '00100000', '00000000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2b ['01000000', '00100000', '00000000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2c ['00000000', '00000000', '00010000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2d ['01000000', '00000000', '00010000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2e ['00000000', '00100000', '00010000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x2f ['01000000', '00100000', '00010000', '00001000', '00000000', '00000010', '00000000', '00000000']
0x30 ['00000000', '00000000', '00000000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x31 ['01000000', '00000000', '00000000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x32 ['00000000', '00100000', '00000000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x33 ['01000000', '00100000', '00000000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x34 ['00000000', '00000000', '00010000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x35 ['01000000', '00000000', '00010000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x36 ['00000000', '00100000', '00010000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x37 ['01000000', '00100000', '00010000', '00000000', '00000100', '00000010', '00000000', '00000000']
0x38 ['00000000', '00000000', '00000000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x39 ['01000000', '00000000', '00000000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3a ['00000000', '00100000', '00000000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3b ['01000000', '00100000', '00000000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3c ['00000000', '00000000', '00010000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3d ['01000000', '00000000', '00010000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3e ['00000000', '00100000', '00010000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x3f ['01000000', '00100000', '00010000', '00001000', '00000100', '00000010', '00000000', '00000000']
0x40 ['00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x41 ['01000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x42 ['00000000', '00100000', '00000000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x43 ['01000000', '00100000', '00000000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x44 ['00000000', '00000000', '00010000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x45 ['01000000', '00000000', '00010000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x46 ['00000000', '00100000', '00010000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x47 ['01000000', '00100000', '00010000', '00000000', '00000000', '00000000', '00000001', '00000000']
0x48 ['00000000', '00000000', '00000000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x49 ['01000000', '00000000', '00000000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4a ['00000000', '00100000', '00000000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4b ['01000000', '00100000', '00000000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4c ['00000000', '00000000', '00010000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4d ['01000000', '00000000', '00010000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4e ['00000000', '00100000', '00010000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x4f ['01000000', '00100000', '00010000', '00001000', '00000000', '00000000', '00000001', '00000000']
0x50 ['00000000', '00000000', '00000000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x51 ['01000000', '00000000', '00000000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x52 ['00000000', '00100000', '00000000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x53 ['01000000', '00100000', '00000000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x54 ['00000000', '00000000', '00010000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x55 ['01000000', '00000000', '00010000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x56 ['00000000', '00100000', '00010000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x57 ['01000000', '00100000', '00010000', '00000000', '00000100', '00000000', '00000001', '00000000']
0x58 ['00000000', '00000000', '00000000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x59 ['01000000', '00000000', '00000000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5a ['00000000', '00100000', '00000000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5b ['01000000', '00100000', '00000000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5c ['00000000', '00000000', '00010000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5d ['01000000', '00000000', '00010000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5e ['00000000', '00100000', '00010000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x5f ['01000000', '00100000', '00010000', '00001000', '00000100', '00000000', '00000001', '00000000']
0x60 ['00000000', '00000000', '00000000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x61 ['01000000', '00000000', '00000000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x62 ['00000000', '00100000', '00000000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x63 ['01000000', '00100000', '00000000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x64 ['00000000', '00000000', '00010000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x65 ['01000000', '00000000', '00010000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x66 ['00000000', '00100000', '00010000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x67 ['01000000', '00100000', '00010000', '00000000', '00000000', '00000010', '00000001', '00000000']
0x68 ['00000000', '00000000', '00000000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x69 ['01000000', '00000000', '00000000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6a ['00000000', '00100000', '00000000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6b ['01000000', '00100000', '00000000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6c ['00000000', '00000000', '00010000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6d ['01000000', '00000000', '00010000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6e ['00000000', '00100000', '00010000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x6f ['01000000', '00100000', '00010000', '00001000', '00000000', '00000010', '00000001', '00000000']
0x70 ['00000000', '00000000', '00000000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x71 ['01000000', '00000000', '00000000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x72 ['00000000', '00100000', '00000000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x73 ['01000000', '00100000', '00000000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x74 ['00000000', '00000000', '00010000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x75 ['01000000', '00000000', '00010000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x76 ['00000000', '00100000', '00010000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x77 ['01000000', '00100000', '00010000', '00000000', '00000100', '00000010', '00000001', '00000000']
0x78 ['00000000', '00000000', '00000000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x79 ['01000000', '00000000', '00000000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7a ['00000000', '00100000', '00000000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7b ['01000000', '00100000', '00000000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7c ['00000000', '00000000', '00010000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7d ['01000000', '00000000', '00010000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7e ['00000000', '00100000', '00010000', '00001000', '00000100', '00000010', '00000001', '00000000']
0x7f ['01000000', '00100000', '00010000', '00001000', '00000100', '00000010', '00000001', '00000000']
Setting char i to +1 in actf{xxxxxxxxxxxxxxxxxxxxxxxxxx}
0x0 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1 ['11001008', '00101100', '08001100', 'FEFEEEEF', 'FFEFEEFE', 'FFFEFFFF', 'FFFFEFFF', '00000000']
0x2 ['11001008', '00101100', '08001100', 'FFEEEEEF', 'FFFEEEFE', 'FFFFEFFF', 'FFFFFEFF', '00000000']
0x3 ['11001008', '00101100', '08001100', 'FFFCEEEF', 'FFFFCEFE', 'FFFFFDFF', 'FFFFFFDF', '00000000']
0x4 ['11001008', '00101100', '08001100', 'FFFECEEF', 'FFFFECFE', 'FFFFFFDF', 'FFFFFFFD', '00000000']
0x5 ['11001008', '00101100', '08001100', 'FFFEECEF', 'FFFFEEDE', 'FFFFFFFD', 'DFFFFFFF', '00000000']
0x6 ['11001008', '00101100', '08001100', 'FFFEEECF', 'FFFFEEFC', 'DFFFFFFF', 'FDFFFFFF', '00000000']
0x7 ['11001008', '00101100', '08001100', 'FFFEEEED', 'DFFFEEFE', 'FDFFFFFF', 'FFDFFFFF', '00000000']
0x8 ['11001008', '00101100', '08001100', 'DFFEEEEF', 'FDFFEEFE', 'FFDFFFFF', 'FFFDFFFF', '00000000']
0x9 ['11001008', '00101100', '08001100', 'FDFEEEEF', 'FFDFEEFE', 'FFFDFFFF', 'FFFFDFFF', '00000000']
0xa ['11001008', '00101100', '08001100', 'FFDEEEEF', 'FFFDEEFE', 'FFFFDFFF', 'FFFFFDFF', '00000000']
0xb ['11001008', '00101100', '08001100', 'FFFAEEEF', 'FFFFAEFE', 'FFFFFBFF', 'FFFFFFBF', '00000000']
0xc ['11001008', '00101100', '08001100', 'FFFEAEEF', 'FFFFEAFE', 'FFFFFFBF', 'FFFFFFFB', '00000000']
0xd ['11001008', '00101100', '08001100', 'FFFEEAEF', 'FFFFEEBE', 'FFFFFFFB', 'BFFFFFFF', '00000000']
0xe ['11001008', '00101100', '08001100', 'FFFEEEAF', 'FFFFEEFA', 'BFFFFFFF', 'FBFFFFFF', '00000000']
0xf ['11001008', '00101100', '08001100', 'FFFEEEEB', 'BFFFEEFE', 'FBFFFFFF', 'FFBFFFFF', '00000000']
0x10 ['11001008', '00101100', '08001100', 'BFFEEEEF', 'FBFFEEFE', 'FFBFFFFF', 'FFFBFFFF', '00000000']
0x11 ['11001008', '00101100', '08001100', 'FBFEEEEF', 'FFBFEEFE', 'FFFBFFFF', 'FFFFBFFF', '00000000']
0x12 ['11001008', '00101100', '08001100', 'FFBEEEEF', 'FFFBEEFE', 'FFFFBFFF', 'FFFFFBFF', '00000000']
0x13 ['11001008', '00101100', '08001100', 'FFF6EEEF', 'FFFF6EFE', 'FFFFF7FF', 'FFFFFF7F', '00000000']
0x14 ['11001008', '00101100', '08001100', 'FFFE6EEF', 'FFFFE6FE', 'FFFFFF7F', 'FFFFFFF7', '00000000']
0x15 ['11001008', '00101100', '08001100', 'FFFEE6EF', 'FFFFEE7E', 'FFFFFFF7', '7FFFFFFF', '00000000']
0x16 ['11001008', '00101100', '08001100', 'FFFEEE6F', 'FFFFEEF6', '7FFFFFFF', 'F7FFFFFF', '00000000']
0x17 ['11001008', '00101100', '08001100', 'FFFEEEE7', '7FFFEEFE', 'F7FFFFFF', 'FF7FFFFF', '00000000']
0x18 ['11001008', '00101100', '08001100', '7FFEEEEF', 'F7FFEEFE', 'FF7FFFFF', 'FFF7FFFF', '00000000']
0x19 ['11001008', '00101100', '08001100', 'F7FEEEEF', 'FF7FEEFE', 'FFF7FFFF', 'FFFF7FFF', '00000000']
Setting char i to letter in actf{xxxxxxxxxxxxxxxxxxxxxxxxxx}
0x0 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x2 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x3 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x4 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x5 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x6 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x7 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x8 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x9 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0xb ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0xc ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0xd ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0xe ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0xf ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x10 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x11 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x12 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x13 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x14 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x15 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x16 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x17 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x18 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x19 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x1f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFEFFFF', '00000000']
0x20 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x21 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x22 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x23 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x24 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x25 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x26 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x27 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x28 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x29 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x2f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x30 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x31 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x32 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x33 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x34 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x35 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x36 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x37 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x38 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x39 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x3f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFEFFFF', '00000000']
0x40 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x41 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x42 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x43 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x44 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x45 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x46 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x47 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x48 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x49 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x4f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x50 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x51 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x52 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x53 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x54 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x55 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x56 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x57 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x58 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x59 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x5f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFEFFFFF', 'FFFFFFFF', '00000000']
0x60 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x61 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x62 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x63 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x64 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x65 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x66 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x67 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x68 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x69 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x6f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FEFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x70 ['11001008', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x71 ['11001108', '00101100', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x72 ['11001008', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x73 ['11001108', '00101110', '08001100', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x74 ['11001008', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x75 ['11001108', '00101100', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x76 ['11001008', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x77 ['11001108', '00101110', '08001101', 'EFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x78 ['11001008', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x79 ['11001108', '00101100', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7a ['11001008', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7b ['11001108', '00101110', '08001100', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7c ['11001008', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7d ['11001108', '00101100', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7e ['11001008', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']
0x7f ['11001108', '00101110', '08001101', 'FFFEEEEF', 'FFFFEEFE', 'FFFFFFFF', 'FFFFFFFF', '00000000']