// File: martinferianc[P]CPUSimulator-EIE2/src/mips_cpu_execute.cpp
// Function: mips_execute_I_X(mips_cpu_impl*, mips_mem_provider*, unsigned int const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, unsigned int&, unsigned int&)
mips_error mips_execute_I_X(mips_cpu_h state, mips_mem_h mem, const uint32_t* instruction_data, const string& op, string& instruction, uint32_t& pcN, uint32_t& pc){
	stringstream ss;
	mips_error err = mips_ExceptionInvalidInstruction;

	uint32_t* source2 = new uint32_t;
	uint32_t* source1 = new uint32_t;
	uint32_t destination = instruction_data[2];
	int32_t imm_signed =  int32_t(int16_t(instruction_data[3]));
	uint32_t imm_unsigned = uint32_t(instruction_data[3]);


	err = mips_cpu_get_register(state, (unsigned)instruction_data[1], source1);
	if (err==mips_Success)
	err = mips_cpu_get_register(state, (unsigned)instruction_data[2], source2);
	if (err!=mips_Success)
	return mips_ExceptionAccessViolation;

	if (op.compare("ADDIU")==0)
		err = mips_cpu_set_register(state, destination, *source1 + imm_signed);

	if (op.compare("ADDI")==0){
		if (!addition_overflow(imm_signed,*source1))
			err = mips_cpu_set_register(state, destination, *source1 + imm_signed);
		else
			err = mips_ExceptionArithmeticOverflow;
	}
	if (op.compare("ORI")==0)
	err = mips_cpu_set_register(state, destination, imm_unsigned | *source1);

	if (op.compare("XORI")==0)
	err = mips_cpu_set_register(state, destination, uint32_t(*source1 ^ imm_unsigned));

	if (op.compare("ANDI")==0)
		err = mips_cpu_set_register(state, destination, imm_unsigned & *source1);

	if (op.compare("SLTIU")==0)
	err = mips_cpu_set_register(state, destination, int(uint32_t(*source1) < uint32_t(imm_signed)));

	if (op.compare("SLTI")==0)
	err = mips_cpu_set_register(state, destination, int((int32_t(*source1) < imm_signed)));

	if (op.compare("BEQ")==0){
		if (*source1 == *source2){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}
	if (op.compare("BNE")==0){
		if (*source1 != *source2){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}
	if (op.compare("BGEZ")==0){
		if (int32_t(*source1) >= 0){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}

	if (op.compare("BLEZ")==0){
		if (int32_t(*source1) <= 0){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}

	if (op.compare("BGTZ")==0){
		if (int32_t(*source1) > 0){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}

	if (op.compare("BLTZ")==0){
		if (int32_t(*source1) < 0){
			pc = pcN;
			pcN = int32_t(pcN) + (imm_signed << 2);
			err = mips_ExceptionBreak;
		} else {
			err = mips_Success;
		}
	}

	if (op.compare("BLTZAL")==0){
		if (instruction_data[1]==31) {
			err = mips_ErrorInvalidArgument;
		} else {
			if (int32_t(*source1) < 0){
				mips_cpu_set_register(state, 31, pc + 8);
				pc = pcN;
				pcN = int32_t(pcN) + (imm_signed << 2);
				err = mips_ExceptionBreak;
			} else {
				err = mips_Success;
			}
		}
	}
	if (op.compare("BGEZAL")==0){
		if (instruction_data[1]==31) {
			err = mips_ErrorInvalidArgument;
		} else {
			if (int32_t(*source1) >= 0){
				mips_cpu_set_register(state, 31, pc + 8);
				pc = pcN;
				pcN = int32_t(pcN) + (imm_signed << 2);
				err = mips_ExceptionBreak;
			} else {
				err = mips_Success;
			}
		}
	}

	if (op.compare("LW")==0){
		if ((imm_signed + *source1)%4!=0) {
			err = mips_ExceptionInvalidAlignment;
		} else {
			uint8_t dataOut[4];
			err = mips_mem_read(mem, imm_signed + *source1, 4, dataOut);
			uint32_t mem_value =  dataOut[3] | (uint32_t(dataOut[2]) << 8) | (uint32_t(dataOut[1]) << 16) | (uint32_t(dataOut[0]) << 24);
			err = mips_cpu_set_register(state, destination, mem_value);
		}
	}

	if (op.compare("LBU")==0){
		uint8_t dataOut;
		err = mips_mem_read(mem, imm_signed + *source1, 1, (uint8_t*)&dataOut);
		uint32_t mem_value = uint32_t(dataOut);
		err = mips_cpu_set_register(state, destination, mem_value);
	}

	if (op.compare("LB")==0){
		uint8_t dataOut;
		err= mips_mem_read(mem, imm_signed + *source1, 1, (uint8_t*)&dataOut);
		int32_t mem_value = int8_t(dataOut);
		err = mips_cpu_set_register(state, destination, mem_value);
	}

	if (op.compare("LHU")==0){
		if ((imm_signed + *source1)%2!=0) {
			err = mips_ExceptionInvalidAlignment;
		} else {
			uint16_t dataOut;
			err = mips_mem_read(mem, imm_signed + *source1, 2, (uint8_t*)&dataOut);
			uint32_t mem_value = uint32_t(endian16(dataOut));
			err = mips_cpu_set_register(state, destination, mem_value);
		}
	}

	if (op.compare("LH")==0){
		if ((imm_signed + *source1)%2!=0) {
			err = mips_ExceptionInvalidAlignment;
		} else {
			uint16_t dataOut;
			err = mips_mem_read(mem, imm_signed + *source1, 2, (uint8_t*)&dataOut);
			int32_t mem_value = int32_t(int16_t(endian16(dataOut)));
			err = mips_cpu_set_register(state, destination, mem_value);
		}
	}

	if (op.compare("SW")==0){
		if ((imm_signed + *source1)%4!=0) {
			err = mips_ExceptionInvalidAlignment;
		} else {
			uint32_t value = uint32_t(endian32(*source2));
			err = mips_mem_write(mem, imm_signed + *source1 ,4, (uint8_t*)&value);
		}
	}


	if (op.compare("SB")==0){
		uint8_t mem_value = *source2 & 0xFF;
		err = mips_mem_write(mem, imm_signed + *source1 ,1, (uint8_t*)&mem_value);
	}

	if (op.compare("SH")==0){
		if ((imm_signed + *source1)%2!=0) {
			err = mips_ExceptionInvalidAlignment;
		} else {
			uint16_t mem_value = endian16(uint16_t(*source2 & 0x0000FFFF));
			uint16_t value = uint16_t(mem_value);
			err = mips_mem_write(mem, imm_signed + *source1 ,2, (uint8_t*)&value);
		}
	}

	if (op.compare("LUI")==0)
		err = mips_cpu_set_register(state, destination, imm_signed << 16);

	if (op.compare("LWL")==0){
		uint32_t address = imm_signed + *source1;
		uint8_t length = 4 - int(address % 4);
		uint8_t dataOut[4];
		mips_error err= mips_mem_read(mem, address - int(address % 4), 4, dataOut);
		uint32_t mem_value = uint32_t(dataOut[3]) | (uint32_t(dataOut[2]) << 8) | (uint32_t(dataOut[1]) << 16) | (uint32_t(dataOut[0]) << 24);
		mem_value = uint32_t(mem_value) << (4-length)*8;
		*source2 = *source2 & (uint32_t(0xFFFFFFFF) >> length*8);
		*source2 = (uint32_t(mem_value)) | uint32_t(*source2);
		err = mips_cpu_set_register(state, destination, *source2);
	}

	if (op.compare("LWR")==0){
		uint32_t address = imm_signed + *source1;
		uint8_t length = int(address % 4) + 1;
		uint8_t dataOut[4];
		mips_error err= mips_mem_read(mem, address - int(address % 4), 4, dataOut);
		uint32_t mem_value = uint32_t(dataOut[3]) | (uint32_t(dataOut[2]) << 8) | (uint32_t(dataOut[1]) << 16) | (uint32_t(dataOut[0]) << 24);
		mem_value = uint32_t(mem_value) >> (4-length)*8;
		*source2 = *source2 & (uint32_t(0xFFFFFFFF) << length*8);
		*source2 = (uint32_t(mem_value)) | uint32_t(*source2);
		err = mips_cpu_set_register(state, destination, *source2);
	}

	//COUT OUTPUT
	if ((err==mips_Success) || (err==mips_ExceptionBreak)) {
		if ((op.compare("SB")==0) || (op.compare("SW")==0) || (op.compare("LBU")==0) || (op.compare("LW")==0)
		|| (op.compare("SH")==0) || (op.compare("LH")==0) || (op.compare("LHU")==0) || (op.compare("LB")==0))
		ss <<op<<" R["<<instruction_data[2]<<"],"<<" #"<<instruction_data[3]<<", R["<<instruction_data[1]<<"] ";

		if ((op.compare("BGEZ")==0) || (op.compare("BGEZAL")==0) || (op.compare("BGTZ")==0) || (op.compare("BLEZ")==0) ||
		(op.compare("BLTZAL")==0))
		ss <<op<<" R["<<instruction_data[1]<<"],"<<" #"<<instruction_data[3];

		if((op.compare("LUI")==0))
		ss <<op<<" R["<<instruction_data[2]<<"],"<<" #"<<instruction_data[3];

		if ((op.compare("BEQ")==0) || (op.compare("BNE")==0))
		ss <<op<<" R["<<instruction_data[1]<<"] , R["<<instruction_data[2]<<"], "<<"#"<<instruction_data[3];

		if (ss.str().empty())
		ss <<op<<" R["<<instruction_data[2]<<"] , R["<<instruction_data[1]<<"], "<<"#"<<instruction_data[3];
		instruction = ss.str();
	} else {
		instruction = "Invalid instruction format";
	}

	delete source1;
	return err;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x440, %rsp            # imm = 0x440
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x31b0
movl $0x2005, -0x1c4(%rbp)   # imm = 0x2005
movl $0x4, %edi
callq 0x3270
movq %rax, -0x2a0(%rbp)
jmp 0xcee0
movq -0x2a0(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movl $0x4, %edi
callq 0x3270
movq %rax, -0x2a8(%rbp)
jmp 0xcf01
movq -0x2a8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x20(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x1ec(%rbp)
movq -0x20(%rbp), %rax
movswl 0xc(%rax), %eax
movl %eax, -0x1f0(%rbp)
movq -0x20(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x1f4(%rbp)
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq -0x1e8(%rbp), %rdx
callq 0x7c70
movl %eax, -0x2ac(%rbp)
jmp 0xcf56
movl -0x2ac(%rbp), %eax
movl %eax, -0x1c4(%rbp)
cmpl $0x0, -0x1c4(%rbp)
jne 0xcfbb
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
movq -0x1d0(%rbp), %rdx
callq 0x7c70
movl %eax, -0x2b0(%rbp)
jmp 0xcf8a
movl -0x2b0(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xcfbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1d8(%rbp)
movl %eax, -0x1dc(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x31d0
jmp 0xe2e4
cmpl $0x0, -0x1c4(%rbp)
je 0xcfda
movl $0x2004, -0x4(%rbp)     # imm = 0x2004
movl $0x1, -0x1f8(%rbp)
jmp 0xe2cc
movq -0x28(%rbp), %rdi
leaq 0x5584(%rip), %rsi      # 0x12569
callq 0x30d0
cmpl $0x0, %eax
jne 0xd023
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %edx
movl -0x1f0(%rbp), %eax
addl %eax, %edx
callq 0x7cc0
movl %eax, -0x2b4(%rbp)
jmp 0xd017
movl -0x2b4(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x5518(%rip), %rsi      # 0x12546
callq 0x30d0
cmpl $0x0, %eax
jne 0xd0a2
movl -0x1f0(%rbp), %edi
movq -0x1e8(%rbp), %rax
movl (%rax), %esi
callq 0xe590
movb %al, -0x2b5(%rbp)
jmp 0xd054
movb -0x2b5(%rbp), %al
testb $0x1, %al
jne 0xd096
jmp 0xd060
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %edx
movl -0x1f0(%rbp), %eax
addl %eax, %edx
callq 0x7cc0
movl %eax, -0x2bc(%rbp)
jmp 0xd088
movl -0x2bc(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xd0a0
movl $0x2006, -0x1c4(%rbp)   # imm = 0x2006
jmp 0xd0a2
movq -0x28(%rbp), %rdi
leaq 0x5993(%rip), %rsi      # 0x12a40
callq 0x30d0
cmpl $0x0, %eax
jne 0xd0eb
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x1f4(%rbp), %edx
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
orl %eax, %edx
callq 0x7cc0
movl %eax, -0x2c0(%rbp)
jmp 0xd0df
movl -0x2c0(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x5949(%rip), %rsi      # 0x12a3f
callq 0x30d0
cmpl $0x0, %eax
jne 0xd134
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %edx
movl -0x1f4(%rbp), %eax
xorl %eax, %edx
callq 0x7cc0
movl %eax, -0x2c4(%rbp)
jmp 0xd128
movl -0x2c4(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x5485(%rip), %rsi      # 0x125c4
callq 0x30d0
cmpl $0x0, %eax
jne 0xd17d
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x1f4(%rbp), %edx
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
andl %eax, %edx
callq 0x7cc0
movl %eax, -0x2c8(%rbp)
jmp 0xd171
movl -0x2c8(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x57a9(%rip), %rsi      # 0x12931
callq 0x30d0
cmpl $0x0, %eax
jne 0xd1cc
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
movl -0x1f0(%rbp), %ecx
subl %ecx, %eax
setb %al
movzbl %al, %edx
callq 0x7cc0
movl %eax, -0x2cc(%rbp)
jmp 0xd1c0
movl -0x2cc(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x5731(%rip), %rsi      # 0x12908
callq 0x30d0
cmpl $0x0, %eax
jne 0xd21b
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
movl -0x1f0(%rbp), %ecx
subl %ecx, %eax
setl %al
movzbl %al, %edx
callq 0x7cc0
movl %eax, -0x2d0(%rbp)
jmp 0xd20f
movl -0x2d0(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x53b9(%rip), %rsi      # 0x125df
callq 0x30d0
cmpl $0x0, %eax
jne 0xd27f
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
movq -0x1d0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xd273
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd27d
movl $0x0, -0x1c4(%rbp)
jmp 0xd27f
movq -0x28(%rbp), %rdi
leaq 0x5460(%rip), %rsi      # 0x126ea
callq 0x30d0
cmpl $0x0, %eax
jne 0xd2e3
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
movq -0x1d0(%rbp), %rcx
cmpl (%rcx), %eax
je 0xd2d7
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd2e1
movl $0x0, -0x1c4(%rbp)
jmp 0xd2e3
movq -0x28(%rbp), %rdi
leaq 0x5305(%rip), %rsi      # 0x125f3
callq 0x30d0
cmpl $0x0, %eax
jne 0xd33f
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jl 0xd333
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd33d
movl $0x0, -0x1c4(%rbp)
jmp 0xd33f
movq -0x28(%rbp), %rdi
leaq 0x532f(%rip), %rsi      # 0x12679
callq 0x30d0
cmpl $0x0, %eax
jne 0xd39b
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jg 0xd38f
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd399
movl $0x0, -0x1c4(%rbp)
jmp 0xd39b
movq -0x28(%rbp), %rdi
leaq 0x52b2(%rip), %rsi      # 0x12658
callq 0x30d0
cmpl $0x0, %eax
jne 0xd3f7
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jle 0xd3eb
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd3f5
movl $0x0, -0x1c4(%rbp)
jmp 0xd3f7
movq -0x28(%rbp), %rdi
leaq 0x52a1(%rip), %rsi      # 0x126a3
callq 0x30d0
cmpl $0x0, %eax
jne 0xd453
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jge 0xd447
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd451
movl $0x0, -0x1c4(%rbp)
jmp 0xd453
movq -0x28(%rbp), %rdi
leaq 0x5263(%rip), %rsi      # 0x126c1
callq 0x30d0
cmpl $0x0, %eax
jne 0xd4e0
movq -0x20(%rbp), %rax
cmpl $0x1f, 0x4(%rax)
jne 0xd47e
movl $0x1001, -0x1c4(%rbp)   # imm = 0x1001
jmp 0xd4de
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jge 0xd4d2
movq -0x10(%rbp), %rdi
movq 0x10(%rbp), %rax
movl (%rax), %edx
addl $0x8, %edx
movl $0x1f, %esi
callq 0x7cc0
jmp 0xd4a3
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd4dc
movl $0x0, -0x1c4(%rbp)
jmp 0xd4de
jmp 0xd4e0
movq -0x28(%rbp), %rdi
leaq 0x5135(%rip), %rsi      # 0x12620
callq 0x30d0
cmpl $0x0, %eax
jne 0xd56d
movq -0x20(%rbp), %rax
cmpl $0x1f, 0x4(%rax)
jne 0xd50b
movl $0x1001, -0x1c4(%rbp)   # imm = 0x1001
jmp 0xd56b
movq -0x1e8(%rbp), %rax
cmpl $0x0, (%rax)
jl 0xd55f
movq -0x10(%rbp), %rdi
movq 0x10(%rbp), %rax
movl (%rax), %edx
addl $0x8, %edx
movl $0x1f, %esi
callq 0x7cc0
jmp 0xd530
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movl (%rax), %ecx
movl -0x1f0(%rbp), %eax
shll $0x2, %eax
addl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jmp 0xd569
movl $0x0, -0x1c4(%rbp)
jmp 0xd56b
jmp 0xd56d
movq -0x28(%rbp), %rdi
leaq 0x525b(%rip), %rsi      # 0x127d3
callq 0x30d0
cmpl $0x0, %eax
jne 0xd61c
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
addl (%rcx), %eax
andl $0x3, %eax
cmpl $0x0, %eax
je 0xd5a9
movl $0x2003, -0x1c4(%rbp)   # imm = 0x2003
jmp 0xd61a
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x4, %edx
leaq -0x1fc(%rbp), %rcx
callq 0x7980
movl %eax, -0x2d4(%rbp)
jmp 0xd5d7
movl -0x2d4(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movl -0x1fc(%rbp), %eax
bswapl %eax
movl %eax, -0x200(%rbp)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x200(%rbp), %edx
callq 0x7cc0
movl %eax, -0x2d8(%rbp)
jmp 0xd60e
movl -0x2d8(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xd61c
movq -0x28(%rbp), %rdi
leaq 0x514e(%rip), %rsi      # 0x12775
callq 0x30d0
cmpl $0x0, %eax
jne 0xd6a1
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x1, %edx
leaq -0x201(%rbp), %rcx
callq 0x7980
movl %eax, -0x2dc(%rbp)
jmp 0xd65f
movl -0x2dc(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movzbl -0x201(%rbp), %eax
movl %eax, -0x208(%rbp)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x208(%rbp), %edx
callq 0x7cc0
movl %eax, -0x2e0(%rbp)
jmp 0xd695
movl -0x2e0(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x50bc(%rip), %rsi      # 0x12768
callq 0x30d0
cmpl $0x0, %eax
jne 0xd726
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x1, %edx
leaq -0x209(%rbp), %rcx
callq 0x7980
movl %eax, -0x2e4(%rbp)
jmp 0xd6e4
movl -0x2e4(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movsbl -0x209(%rbp), %eax
movl %eax, -0x210(%rbp)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x210(%rbp), %edx
callq 0x7cc0
movl %eax, -0x2e8(%rbp)
jmp 0xd71a
movl -0x2e8(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x506d(%rip), %rsi      # 0x1279e
callq 0x30d0
cmpl $0x0, %eax
jne 0xd7ef
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
addl (%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xd765
movl $0x2003, -0x1c4(%rbp)   # imm = 0x2003
jmp 0xd7ed
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x2, %edx
leaq -0x212(%rbp), %rcx
callq 0x7980
movl %eax, -0x2ec(%rbp)
jmp 0xd793
movl -0x2ec(%rbp), %eax
movl %eax, -0x1c4(%rbp)
leaq -0x212(%rbp), %rdi
callq 0xe660
movw %ax, -0x2ee(%rbp)
jmp 0xd7b4
movw -0x2ee(%rbp), %ax
movzwl %ax, %eax
movl %eax, -0x218(%rbp)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x218(%rbp), %edx
callq 0x7cc0
movl %eax, -0x2f4(%rbp)
jmp 0xd7e1
movl -0x2f4(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xd7ef
movq -0x28(%rbp), %rdi
leaq 0x4f92(%rip), %rsi      # 0x1278c
callq 0x30d0
cmpl $0x0, %eax
jne 0xd8b6
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
addl (%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xd82e
movl $0x2003, -0x1c4(%rbp)   # imm = 0x2003
jmp 0xd8b4
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x2, %edx
leaq -0x21a(%rbp), %rcx
callq 0x7980
movl %eax, -0x2f8(%rbp)
jmp 0xd85c
movl -0x2f8(%rbp), %eax
movl %eax, -0x1c4(%rbp)
leaq -0x21a(%rbp), %rdi
callq 0xe660
movw %ax, -0x2fa(%rbp)
jmp 0xd87d
movw -0x2fa(%rbp), %ax
cwtl
movl %eax, -0x220(%rbp)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x220(%rbp), %edx
callq 0x7cc0
movl %eax, -0x300(%rbp)
jmp 0xd8a8
movl -0x300(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xd8b6
movq -0x28(%rbp), %rdi
leaq 0x5157(%rip), %rsi      # 0x12a18
callq 0x30d0
cmpl $0x0, %eax
jne 0xd94a
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
addl (%rcx), %eax
andl $0x3, %eax
cmpl $0x0, %eax
je 0xd8ee
movl $0x2003, -0x1c4(%rbp)   # imm = 0x2003
jmp 0xd948
movq -0x1d0(%rbp), %rdi
callq 0xe610
movl %eax, -0x304(%rbp)
jmp 0xd902
movl -0x304(%rbp), %eax
movl %eax, -0x224(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x4, %edx
leaq -0x224(%rbp), %rcx
callq 0x7ad0
movl %eax, -0x308(%rbp)
jmp 0xd93c
movl -0x308(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xd94a
movq -0x28(%rbp), %rdi
leaq 0x4f3c(%rip), %rsi      # 0x12891
callq 0x30d0
cmpl $0x0, %eax
jne 0xd9a8
movq -0x1d0(%rbp), %rax
movb (%rax), %al
movb %al, -0x225(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x1, %edx
leaq -0x225(%rbp), %rcx
callq 0x7ad0
movl %eax, -0x30c(%rbp)
jmp 0xd99c
movl -0x30c(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x4eec(%rip), %rsi      # 0x1289f
callq 0x30d0
cmpl $0x0, %eax
jne 0xda62
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
addl (%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xd9e4
movl $0x2003, -0x1c4(%rbp)   # imm = 0x2003
jmp 0xda60
movq -0x1d0(%rbp), %rax
movw (%rax), %ax
movw %ax, -0x22a(%rbp)
leaq -0x22a(%rbp), %rdi
callq 0xe660
movw %ax, -0x30e(%rbp)
jmp 0xda0a
movw -0x30e(%rbp), %ax
movw %ax, -0x228(%rbp)
movw -0x228(%rbp), %ax
movw %ax, -0x22c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movq -0x1e8(%rbp), %rax
movl (%rax), %eax
addl %eax, %esi
movl $0x2, %edx
leaq -0x22c(%rbp), %rcx
callq 0x7ad0
movl %eax, -0x314(%rbp)
jmp 0xda54
movl -0x314(%rbp), %eax
movl %eax, -0x1c4(%rbp)
jmp 0xda62
movq -0x28(%rbp), %rdi
leaq 0x4d4d(%rip), %rsi      # 0x127ba
callq 0x30d0
cmpl $0x0, %eax
jne 0xdaa3
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movl -0x1f0(%rbp), %edx
shll $0x10, %edx
callq 0x7cc0
movl %eax, -0x318(%rbp)
jmp 0xda97
movl -0x318(%rbp), %eax
movl %eax, -0x1c4(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x4d32(%rip), %rsi      # 0x127e0
callq 0x30d0
cmpl $0x0, %eax
jne 0xdba6
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x230(%rbp)
movb -0x230(%rbp), %cl
andb $0x3, %cl
movb $0x4, %al
subb %cl, %al
movb %al, -0x231(%rbp)
movq -0x18(%rbp), %rdi
movl -0x230(%rbp), %esi
andl $-0x4, %esi
movl $0x4, %edx
leaq -0x235(%rbp), %rcx
callq 0x7980
movl %eax, -0x31c(%rbp)
jmp 0xdb0c
movl -0x31c(%rbp), %eax
movl %eax, -0x23c(%rbp)
movl -0x235(%rbp), %eax
bswapl %eax
movl %eax, -0x240(%rbp)
movl -0x240(%rbp), %eax
movb -0x231(%rbp), %dl
movb $0x4, %cl
subb %dl, %cl
shlb $0x3, %cl
shll %cl, %eax
movl %eax, -0x240(%rbp)
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
movb -0x231(%rbp), %cl
shlb $0x3, %cl
movb %cl, -0x321(%rbp)
shll %cl, %edx
movb -0x321(%rbp), %cl
shrl %cl, %edx
movl %edx, %ecx
movl %ecx, (%rax)
movl -0x240(%rbp), %ecx
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
orl %edx, %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
callq 0x7cc0
movl %eax, -0x320(%rbp)
jmp 0xdb9a
movl -0x320(%rbp), %eax
movl %eax, -0x23c(%rbp)
movq -0x28(%rbp), %rdi
leaq 0x4c42(%rip), %rsi      # 0x127f3
callq 0x30d0
cmpl $0x0, %eax
jne 0xdca6
movl -0x1f0(%rbp), %eax
movq -0x1e8(%rbp), %rcx
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x244(%rbp)
movb -0x244(%rbp), %al
andb $0x3, %al
incb %al
movb %al, -0x245(%rbp)
movq -0x18(%rbp), %rdi
movl -0x244(%rbp), %esi
andl $-0x4, %esi
movl $0x4, %edx
leaq -0x249(%rbp), %rcx
callq 0x7980
movl %eax, -0x328(%rbp)
jmp 0xdc0c
movl -0x328(%rbp), %eax
movl %eax, -0x250(%rbp)
movl -0x249(%rbp), %eax
bswapl %eax
movl %eax, -0x254(%rbp)
movl -0x254(%rbp), %eax
movb -0x245(%rbp), %dl
movb $0x4, %cl
subb %dl, %cl
shlb $0x3, %cl
shrl %cl, %eax
movl %eax, -0x254(%rbp)
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
movb -0x245(%rbp), %cl
shlb $0x3, %cl
movb %cl, -0x32d(%rbp)
shrl %cl, %edx
movb -0x32d(%rbp), %cl
shll %cl, %edx
movl %edx, %ecx
movl %ecx, (%rax)
movl -0x254(%rbp), %ecx
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
orl %edx, %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rdi
movl -0x1ec(%rbp), %esi
movq -0x1d0(%rbp), %rax
movl (%rax), %edx
callq 0x7cc0
movl %eax, -0x32c(%rbp)
jmp 0xdc9a
movl -0x32c(%rbp), %eax
movl %eax, -0x250(%rbp)
cmpl $0x0, -0x1c4(%rbp)
je 0xdcbf
cmpl $0x2000, -0x1c4(%rbp)   # imm = 0x2000
jne 0xe280
movq -0x28(%rbp), %rdi
leaq 0x4bc7(%rip), %rsi      # 0x12891
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4d35(%rip), %rsi      # 0x12a18
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4a79(%rip), %rsi      # 0x12775
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4ac2(%rip), %rsi      # 0x127d3
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4b79(%rip), %rsi      # 0x1289f
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4a51(%rip), %rsi      # 0x1278c
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4a4e(%rip), %rsi      # 0x1279e
callq 0x30d0
cmpl $0x0, %eax
je 0xdd73
movq -0x28(%rbp), %rdi
leaq 0x4a03(%rip), %rsi      # 0x12768
callq 0x30d0
cmpl $0x0, %eax
jne 0xde67
leaq -0x1b0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3240
movq %rax, -0x338(%rbp)
jmp 0xdd8c
movq -0x338(%rbp), %rdi
leaq 0x4f09(%rip), %rsi      # 0x12ca3
callq 0x3260
movq %rax, -0x340(%rbp)
jmp 0xdda8
movq -0x340(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x3390
movq %rax, -0x348(%rbp)
jmp 0xddc4
movq -0x348(%rbp), %rdi
leaq 0x4eee(%rip), %rsi      # 0x12cc0
callq 0x3260
movq %rax, -0x350(%rbp)
jmp 0xdde0
movq -0x350(%rbp), %rdi
leaq 0x4ebb(%rip), %rsi      # 0x12ca9
callq 0x3260
movq %rax, -0x358(%rbp)
jmp 0xddfc
movq -0x358(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x3390
movq %rax, -0x360(%rbp)
jmp 0xde18
movq -0x360(%rbp), %rdi
leaq 0x4e7c(%rip), %rsi      # 0x12ca2
callq 0x3260
movq %rax, -0x368(%rbp)
jmp 0xde34
movq -0x368(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x3390
movq %rax, -0x370(%rbp)
jmp 0xde50
movq -0x370(%rbp), %rdi
leaq 0x4e65(%rip), %rsi      # 0x12cc3
callq 0x3260
jmp 0xde65
jmp 0xde67
movq -0x28(%rbp), %rdi
leaq 0x4781(%rip), %rsi      # 0x125f3
callq 0x30d0
cmpl $0x0, %eax
je 0xded4
movq -0x28(%rbp), %rdi
leaq 0x4799(%rip), %rsi      # 0x12620
callq 0x30d0
cmpl $0x0, %eax
je 0xded4
movq -0x28(%rbp), %rdi
leaq 0x47bc(%rip), %rsi      # 0x12658
callq 0x30d0
cmpl $0x0, %eax
je 0xded4
movq -0x28(%rbp), %rdi
leaq 0x47c8(%rip), %rsi      # 0x12679
callq 0x30d0
cmpl $0x0, %eax
je 0xded4
movq -0x28(%rbp), %rdi
leaq 0x47fb(%rip), %rsi      # 0x126c1
callq 0x30d0
cmpl $0x0, %eax
jne 0xdf74
leaq -0x1b0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3240
movq %rax, -0x378(%rbp)
jmp 0xdeed
movq -0x378(%rbp), %rdi
leaq 0x4da8(%rip), %rsi      # 0x12ca3
callq 0x3260
movq %rax, -0x380(%rbp)
jmp 0xdf09
movq -0x380(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x3390
movq %rax, -0x388(%rbp)
jmp 0xdf25
movq -0x388(%rbp), %rdi
leaq 0x4d8d(%rip), %rsi      # 0x12cc0
callq 0x3260
movq %rax, -0x390(%rbp)
jmp 0xdf41
movq -0x390(%rbp), %rdi
leaq 0x4d5a(%rip), %rsi      # 0x12ca9
callq 0x3260
movq %rax, -0x398(%rbp)
jmp 0xdf5d
movq -0x398(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x3390
jmp 0xdf72
jmp 0xdf74
movq -0x28(%rbp), %rdi
leaq 0x483b(%rip), %rsi      # 0x127ba
callq 0x30d0
cmpl $0x0, %eax
jne 0xe02d
leaq -0x1b0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3240
movq %rax, -0x3a0(%rbp)
jmp 0xdfa6
movq -0x3a0(%rbp), %rdi
leaq 0x4cef(%rip), %rsi      # 0x12ca3
callq 0x3260
movq %rax, -0x3a8(%rbp)
jmp 0xdfc2
movq -0x3a8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x3390
movq %rax, -0x3b0(%rbp)
jmp 0xdfde
movq -0x3b0(%rbp), %rdi
leaq 0x4cd4(%rip), %rsi      # 0x12cc0
callq 0x3260
movq %rax, -0x3b8(%rbp)
jmp 0xdffa
movq -0x3b8(%rbp), %rdi
leaq 0x4ca1(%rip), %rsi      # 0x12ca9
callq 0x3260
movq %rax, -0x3c0(%rbp)
jmp 0xe016
movq -0x3c0(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x3390
jmp 0xe02b
jmp 0xe02d
movq -0x28(%rbp), %rdi
leaq 0x45a7(%rip), %rsi      # 0x125df
callq 0x30d0
cmpl $0x0, %eax
je 0xe05b
movq -0x28(%rbp), %rdi
leaq 0x469d(%rip), %rsi      # 0x126ea
callq 0x30d0
cmpl $0x0, %eax
jne 0xe133
leaq -0x1b0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3240
movq %rax, -0x3c8(%rbp)
jmp 0xe074
movq -0x3c8(%rbp), %rdi
leaq 0x4c21(%rip), %rsi      # 0x12ca3
callq 0x3260
movq %rax, -0x3d0(%rbp)
jmp 0xe090
movq -0x3d0(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x3390
movq %rax, -0x3d8(%rbp)
jmp 0xe0ac
movq -0x3d8(%rbp), %rdi
leaq 0x4be6(%rip), %rsi      # 0x12ca0
callq 0x3260
movq %rax, -0x3e0(%rbp)
jmp 0xe0c8
movq -0x3e0(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x3390
movq %rax, -0x3e8(%rbp)
jmp 0xe0e4
movq -0x3e8(%rbp), %rdi
leaq 0x4bd4(%rip), %rsi      # 0x12cc6
callq 0x3260
movq %rax, -0x3f0(%rbp)
jmp 0xe100
movq -0x3f0(%rbp), %rdi
leaq 0x4b9c(%rip), %rsi      # 0x12caa
callq 0x3260
movq %rax, -0x3f8(%rbp)
jmp 0xe11c
movq -0x3f8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x3390
jmp 0xe131
jmp 0xe133
leaq -0x278(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x3250
jmp 0xe148
leaq -0x278(%rbp), %rdi
callq 0x3420
movb %al, -0x3f9(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x3170
movb -0x3f9(%rbp), %al
testb $0x1, %al
jne 0xe175
jmp 0xe24d
leaq -0x1b0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3240
movq %rax, -0x408(%rbp)
jmp 0xe18e
movq -0x408(%rbp), %rdi
leaq 0x4b07(%rip), %rsi      # 0x12ca3
callq 0x3260
movq %rax, -0x410(%rbp)
jmp 0xe1aa
movq -0x410(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x3390
movq %rax, -0x418(%rbp)
jmp 0xe1c6
movq -0x418(%rbp), %rdi
leaq 0x4acc(%rip), %rsi      # 0x12ca0
callq 0x3260
movq %rax, -0x420(%rbp)
jmp 0xe1e2
movq -0x420(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x3390
movq %rax, -0x428(%rbp)
jmp 0xe1fe
movq -0x428(%rbp), %rdi
leaq 0x4aba(%rip), %rsi      # 0x12cc6
callq 0x3260
movq %rax, -0x430(%rbp)
jmp 0xe21a
movq -0x430(%rbp), %rdi
leaq 0x4a82(%rip), %rsi      # 0x12caa
callq 0x3260
movq %rax, -0x438(%rbp)
jmp 0xe236
movq -0x438(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0xc(%rax), %esi
callq 0x3390
jmp 0xe24b
jmp 0xe24d
leaq -0x298(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x3250
jmp 0xe262
movq -0x30(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x3330
leaq -0x298(%rbp), %rdi
callq 0x3170
jmp 0xe294
movq -0x30(%rbp), %rdi
leaq 0x49f5(%rip), %rsi      # 0x12c80
callq 0x33a0
jmp 0xe292
jmp 0xe294
movq -0x1e8(%rbp), %rax
movq %rax, -0x440(%rbp)
cmpq $0x0, %rax
je 0xe2b9
movq -0x440(%rbp), %rdi
movl $0x4, %esi
callq 0x3280
movl -0x1c4(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x1f8(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x31d0
movl -0x4(%rbp), %eax
addq $0x440, %rsp            # imm = 0x440
popq %rbp
retq
movq -0x1d8(%rbp), %rdi
callq 0x3440