// File: yanlinlin82[P]icpp/icpp.cpp
// Function: run(int, char const**)
int run(int argc, const char** argv)
{
	// vm register
	int ax = 0, ip = 0, sp = MEM_SIZE, bp = MEM_SIZE;

	// load code & data
	log<1>("Loading program\n  data: %zd word(s)\n  code: %zd word(s)\n\n",
			data_sec.size(), code_sec.size());

	size_t loaded = 0;
	for (size_t i = 0; i < data_sec.size(); ++i) {
		m[loaded++] = data_sec[i];
	}
	int code_loading_position = loaded;
	for (size_t i = 0; i < code_sec.size(); ++i) {
		m[loaded++] = code_sec[i];
	}

	// find start entry
	auto it = override_functions.find("main");
	if (it == override_functions.end() || it->second.empty()) {
		err("main() not defined!\n");
		return -1;
	}
	if (it->second.size() > 1) {
		err("duplcated definition of main()!\n");
		return -1;
	}
	auto it2 = symbols.find(*(it->second.begin()));
	ip = code_loading_position + get<1>(it2->second);

	// prepare argc & argv
	sp -= argc + 1;
	int argv_copy = sp;
	for (int i = 0; i < argc; ++i) {
		size_t len = strlen(argv[i]);
		size_t size = (len + sizeof(int)) / sizeof(int);
		m[sp - 1] = 0;
		sp -= size;
		m[argv_copy + i] = sp;
		memcpy(&m[sp], argv[i], len);
	}
	m[argv_copy + argc] = 0;
	if (verbose >= 3) {
		log("[DEBUG] prepare argc & argv:\n");
		for (int i = sp; i < MEM_SIZE; i += 4) {
			log("[DEBUG] %08X:  ", i);
			for (int j = 0; j < 4; ++j) {
				if (i + j < MEM_SIZE) {
					const unsigned char* p = reinterpret_cast<const unsigned char*>(&m[i + j]);
					log("%02X %02X %02X %02X  ", *p, *(p+1), *(p+2), *(p+3));
				} else {
					log("%*s", 13, "");
				}
			}
			for (int j = 0; j < 4 && i + j < MEM_SIZE; ++j) {
				const char* p = reinterpret_cast<const char*>(&m[i + j]);
				for (int k = 0; k < 4; ++k) {
					char c = *(p+k);
					log("%c", (c >= 0x20 && c <= 0x7E) ? c : '.');
				}
			}
			log("\n");
		}
		log("[DEBUG] argv_copy = 0x%08X\n\n", argv_copy);
	}

	// prepare stack for main()
	bp = sp - 1;
	m[--sp] = bp;
	m[--sp] = EXIT; int exit_addr = sp;
	m[--sp] = argc;
	m[--sp] = argv_copy;
	m[--sp] = exit_addr;
	if (verbose >= 3) {
		log("[DEBUG] stack for main():\n");
		log("[DEBUG] stack: m[sp]... = [ %08X, %08X, %08X, %08X, %08X ]\n", m[sp], m[sp+1], m[sp+2], m[sp+3], m[sp+4]);
		log("[DEBUG] ax = %08X, ip = %08X, bp = %08X, sp = %08X\n\n", ax, ip, bp, sp);
	}

	log<1>("System Information:\n"
			"  sizeof(int) = %zd\n"
			"  sizeof(void*) = %zd\n"
			"\n", sizeof(int), sizeof(void*));

	size_t cycle = 0;
	for (;;) {
		++cycle;
		if (verbose >= 1) {
			log("%zd:\t", cycle);
			print_code(m, ip, code_loading_position);
			if (verbose >= 2) {
				print_vm_env(ax, ip, sp, bp);
			}
		}
		size_t i = m[ip++];

		if      (i == EXIT) { break;                } // exit the program
		else if (i == PUSH) { m[--sp] = ax;         } // push ax to stack
		else if (i == POP ) { ax = m[sp++];         } // pop ax from stack
		else if (i == ADJ ) { sp -= m[ip++];        } // adjust stack pointer

		else if (i == MOV ) { ax = m[ip++];         } // move immediate to ax
		else if (i == LEA ) { ax = m[ip++];         } // load address to ax
		else if (i == GET ) { ax = m[m[ip++]];      } // get memory to ax
		else if (i == PUT ) { m[m[ip++]] = ax;      } // put ax to memory
		else if (i == LLEA) { ax = bp + m[ip++];    } // load local address to ax
		else if (i == LGET) { ax = m[bp + m[ip++]]; } // get local to ax
		else if (i == LPUT) { m[bp + m[ip++]] = ax; } // put ax to local

		else if (i == SGET) { ax = m[m[sp++]];      } // get [stack] to ax
		else if (i == SPUT) { m[m[sp++]] = ax;      } // put ax to [stack]

		else if (i == ADD ) { ax = m[sp++] + ax;    } // stack (top) + ax, and pop out
		else if (i == SUB ) { ax = m[sp++] - ax;    } // stack (top) - ax, and pop out
		else if (i == MUL ) { ax = m[sp++] * ax;    } // stack (top) * ax, and pop out
		else if (i == DIV ) { ax = m[sp++] / ax;    } // stack (top) / ax, and pop out
		else if (i == MOD ) { ax = m[sp++] % ax;    } // stack (top) % ax, and pop out
		else if (i == NEG ) { ax = -ax;             }
		else if (i == INC ) { ++ax;                 }
		else if (i == DEC ) { --ax;                 }

		else if (i == SHL ) { ax = m[sp++] >> ax;   } // stack (top) >> ax, and pop out
		else if (i == SHR ) { ax = m[sp++] << ax;   } // stack (top) << ax, and pop out
		else if (i == AND ) { ax = m[sp++] & ax;    } // stack (top) & ax, and pop out
		else if (i == OR  ) { ax = m[sp++] | ax;    } // stack (top) | ax, and pop out
		else if (i == NOT ) { ax = ~ax;             }

		else if (i == EQ  ) { ax = m[sp++] == ax;   } // stack (top) == ax, and pop out
		else if (i == NE  ) { ax = m[sp++] != ax;   } // stack (top) != ax, and pop out
		else if (i == GE  ) { ax = m[sp++] >= ax;   } // stack (top) >= ax, and pop out
		else if (i == GT  ) { ax = m[sp++] >  ax;   } // stack (top) >  ax, and pop out
		else if (i == LE  ) { ax = m[sp++] <= ax;   } // stack (top) <= ax, and pop out
		else if (i == LT  ) { ax = m[sp++] <  ax;   } // stack (top) <  ax, and pop out
		else if (i == LAND) { ax = m[sp++] && ax;   } // stack (top) && ax, and pop out
		else if (i == LOR ) { ax = m[sp++] || ax;   } // stack (top) || ax, and pop out
		else if (i == LNOT) { ax = !ax;             }

		else if (i == ENTER) { m[--sp] = bp; bp = sp; sp -= m[ip++];   } // enter stack frame
		else if (i == LEAVE) { sp = bp; bp = m[sp++];                  } // leave stack frame
		else if (i == CALL ) { int n = m[ip++]; m[--sp] = ip; ip += n; } // call subroutine
		else if (i == RET  ) { int n = m[ip]; ip = m[sp++]; sp += n;   } // exit subroutine
		else if (i == JMP  ) { int n = m[ip++]; ip += n;               } // goto
		else if (i == JZ   ) { int n = m[ip++]; if (!ax) ip += n;      } // goto if !ax
		else if (i == JNZ  ) { int n = m[ip++]; if (ax) ip += n;       } // goto if ax

		else { warn("unknown instruction: '%zd'\n", i); }

		if (ip && ip < static_cast<int>(code_loading_position + external_code_size)) {
			auto it = code_symbol_dict.find(ip - code_loading_position);
			if (it != code_symbol_dict.end()) {
				ax = call_ext(it->second, sp);
			}
		}
	}
	log<0>(COLOR_YELLOW "Total: %zd cycle(s), return %d\n" COLOR_NORMAL, cycle, ax);
	return ax;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movl $0x0, -0x18(%rbp)
movl $0x100000, -0x1c(%rbp)  # imm = 0x100000
movl $0x100000, -0x20(%rbp)  # imm = 0x100000
leaq 0x38dfb(%rip), %rdi     # 0x50570
callq 0x19990
movq %rax, -0x128(%rbp)
leaq 0x38dd0(%rip), %rdi     # 0x50558
callq 0x19990
movq -0x128(%rbp), %rsi
movq %rax, %rdx
leaq 0x20a7f(%rip), %rdi     # 0x3821d
movb $0x0, %al
callq 0x1c8a0
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq 0x38da9(%rip), %rdi     # 0x50570
callq 0x19990
movq %rax, %rcx
movq -0x130(%rbp), %rax
cmpq %rcx, %rax
jae 0x17824
movq -0x30(%rbp), %rsi
leaq 0x38d8a(%rip), %rdi     # 0x50570
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x134(%rbp)
movq -0x28(%rbp), %rsi
movq %rsi, %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
leaq 0x38c97(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x134(%rbp), %ecx
movl %ecx, (%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x177b5
movq -0x28(%rbp), %rax
movl %eax, -0x34(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq 0x38d13(%rip), %rdi     # 0x50558
callq 0x19990
movq %rax, %rcx
movq -0x140(%rbp), %rax
cmpq %rcx, %rax
jae 0x178a2
movq -0x40(%rbp), %rsi
leaq 0x38cf4(%rip), %rdi     # 0x50558
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x144(%rbp)
movq -0x28(%rbp), %rsi
movq %rsi, %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
leaq 0x38c19(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x144(%rbp), %ecx
movl %ecx, (%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x17833
leaq -0x69(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x3470
movq -0x150(%rbp), %rdx
leaq 0x20997(%rip), %rsi     # 0x38257
leaq -0x68(%rbp), %rdi
callq 0x199b0
jmp 0x178cb
leaq 0x38dbe(%rip), %rdi     # 0x50690
leaq -0x68(%rbp), %rsi
callq 0x1ace0
movq %rax, -0x158(%rbp)
jmp 0x178e4
movq -0x158(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x34d8
leaq -0x69(%rbp), %rdi
callq 0x32b0
leaq 0x38d88(%rip), %rdi     # 0x50690
callq 0x1ad40
movq %rax, -0x88(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1ad10
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x159(%rbp)
jne 0x1794e
leaq -0x48(%rbp), %rdi
callq 0x1adb0
movq %rax, %rdi
addq $0x20, %rdi
callq 0x1b2b0
movb %al, -0x159(%rbp)
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x1795a
jmp 0x179a5
leaq 0x208fb(%rip), %rdi     # 0x3825c
movb $0x0, %al
callq 0x1a780
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x18a5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x17997
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x34d8
leaq -0x69(%rbp), %rdi
callq 0x32b0
jmp 0x18a6a
leaq -0x48(%rbp), %rdi
callq 0x1adb0
movq %rax, %rdi
addq $0x20, %rdi
callq 0x1b2d0
cmpq $0x1, %rax
jbe 0x179da
leaq 0x208aa(%rip), %rdi     # 0x38271
movb $0x0, %al
callq 0x1a780
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x18a5e
leaq -0x48(%rbp), %rdi
callq 0x1adb0
movq %rax, %rdi
addq $0x20, %rdi
callq 0x1ade0
movq %rax, -0x98(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x1af00
movq %rax, %rsi
leaq 0x38bdc(%rip), %rdi     # 0x505e8
callq 0x1af30
movq %rax, -0x90(%rbp)
movslq -0x34(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x1afc0
movq %rax, %rdi
addq $0x20, %rdi
callq 0x1c940
movq %rax, %rcx
movq -0x168(%rbp), %rax
addq (%rcx), %rax
movl %eax, -0x18(%rbp)
movl -0x8(%rbp), %ecx
addl $0x1, %ecx
movl -0x1c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl $0x0, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x17b46
movq -0x10(%rbp), %rax
movslq -0xa0(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3130
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
addq $0x4, %rax
shrq $0x2, %rax
movq %rax, -0xb0(%rbp)
movl -0x1c(%rbp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x389e4(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl $0x0, (%rax)
movq -0xb0(%rbp), %rcx
movslq -0x1c(%rbp), %rax
subq %rcx, %rax
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x16c(%rbp)
movl -0x9c(%rbp), %eax
addl -0xa0(%rbp), %eax
movslq %eax, %rsi
leaq 0x389a9(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x16c(%rbp), %ecx
movl %ecx, (%rax)
movslq -0x1c(%rbp), %rsi
leaq 0x38991(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rdi
movq -0x10(%rbp), %rax
movslq -0xa0(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movq -0xa8(%rbp), %rdx
callq 0x3210
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x17a6c
movl -0x9c(%rbp), %eax
addl -0x8(%rbp), %eax
movslq %eax, %rsi
leaq 0x38947(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl $0x0, (%rax)
cmpl $0x3, 0x38cbd(%rip)     # 0x50828
jl 0x17d98
leaq 0x2071a(%rip), %rdi     # 0x38292
movb $0x0, %al
callq 0x19420
movl -0x1c(%rbp), %eax
movl %eax, -0xb4(%rbp)
cmpl $0x100000, -0xb4(%rbp)  # imm = 0x100000
jge 0x17d84
movl -0xb4(%rbp), %esi
leaq 0x2070b(%rip), %rdi     # 0x382b0
movb $0x0, %al
callq 0x19420
movl $0x0, -0xb8(%rbp)
cmpl $0x4, -0xb8(%rbp)
jge 0x17c64
movl -0xb4(%rbp), %eax
addl -0xb8(%rbp), %eax
cmpl $0x100000, %eax         # imm = 0x100000
jge 0x17c34
movl -0xb4(%rbp), %eax
addl -0xb8(%rbp), %eax
movslq %eax, %rsi
leaq 0x388b4(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
movzbl (%rax), %esi
movq -0xc0(%rbp), %rax
movzbl 0x1(%rax), %edx
movq -0xc0(%rbp), %rax
movzbl 0x2(%rax), %ecx
movq -0xc0(%rbp), %rax
movzbl 0x3(%rax), %r8d
leaq 0x20695(%rip), %rdi     # 0x382c0
movb $0x0, %al
callq 0x19420
jmp 0x17c4e
leaq 0x20417(%rip), %rdi     # 0x38052
movl $0xd, %esi
leaq 0x2077d(%rip), %rdx     # 0x383c4
movb $0x0, %al
callq 0x19420
jmp 0x17c50
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x17bb6
movl $0x0, -0xc4(%rbp)
xorl %eax, %eax
cmpl $0x4, -0xc4(%rbp)
movb %al, -0x16d(%rbp)
jge 0x17c99
movl -0xb4(%rbp), %eax
addl -0xc4(%rbp), %eax
cmpl $0x100000, %eax         # imm = 0x100000
setl %al
movb %al, -0x16d(%rbp)
movb -0x16d(%rbp), %al
testb $0x1, %al
jne 0x17ca8
jmp 0x17d62
movl -0xb4(%rbp), %eax
addl -0xc4(%rbp), %eax
movslq %eax, %rsi
leaq 0x387e2(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, -0xd0(%rbp)
movl $0x0, -0xd4(%rbp)
cmpl $0x4, -0xd4(%rbp)
jge 0x17d4c
movq -0xd0(%rbp), %rax
movslq -0xd4(%rbp), %rcx
movb (%rax,%rcx), %al
movb %al, -0xd5(%rbp)
movsbl -0xd5(%rbp), %eax
cmpl $0x20, %eax
jl 0x17d1a
movsbl -0xd5(%rbp), %eax
cmpl $0x7e, %eax
jg 0x17d1a
movb -0xd5(%rbp), %al
movb %al, -0x16e(%rbp)
jmp 0x17d24
movb $0x2e, %al
movb %al, -0x16e(%rbp)
jmp 0x17d24
movb -0x16e(%rbp), %al
movsbl %al, %esi
leaq 0x1f485(%rip), %rdi     # 0x371b9
movb $0x0, %al
callq 0x19420
movl -0xd4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd4(%rbp)
jmp 0x17cd4
jmp 0x17d4e
movl -0xc4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc4(%rbp)
jmp 0x17c6e
leaq 0x204ec(%rip), %rdi     # 0x38255
movb $0x0, %al
callq 0x19420
movl -0xb4(%rbp), %eax
addl $0x4, %eax
movl %eax, -0xb4(%rbp)
jmp 0x17b88
movl -0x9c(%rbp), %esi
leaq 0x20545(%rip), %rdi     # 0x382d6
movb $0x0, %al
callq 0x19420
movl -0x1c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x180(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x386e3(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x180(%rbp), %ecx
movl %ecx, (%rax)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x386c3(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl $0x0, (%rax)
movl -0x1c(%rbp), %eax
movl %eax, -0xdc(%rbp)
movl -0x8(%rbp), %eax
movl %eax, -0x17c(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38693(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x17c(%rbp), %ecx
movl %ecx, (%rax)
movl -0x9c(%rbp), %eax
movl %eax, -0x178(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38667(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x178(%rbp), %ecx
movl %ecx, (%rax)
movl -0xdc(%rbp), %eax
movl %eax, -0x174(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x3863b(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x174(%rbp), %ecx
movl %ecx, (%rax)
cmpl $0x3, 0x389af(%rip)     # 0x50828
jl 0x17f56
leaq 0x2046d(%rip), %rdi     # 0x382f3
movb $0x0, %al
callq 0x19420
movslq -0x1c(%rbp), %rsi
leaq 0x38608(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x190(%rbp)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
leaq 0x385eb(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x18c(%rbp)
movl -0x1c(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
leaq 0x385ce(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x188(%rbp)
movl -0x1c(%rbp), %eax
addl $0x3, %eax
movslq %eax, %rsi
leaq 0x385b1(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x184(%rbp)
movl -0x1c(%rbp), %eax
addl $0x4, %eax
movslq %eax, %rsi
leaq 0x38594(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x190(%rbp), %esi
movl -0x18c(%rbp), %edx
movl -0x188(%rbp), %ecx
movl -0x184(%rbp), %r8d
movl (%rax), %r9d
leaq 0x203da(%rip), %rdi     # 0x3830e
movb $0x0, %al
callq 0x19420
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x20(%rbp), %ecx
movl -0x1c(%rbp), %r8d
leaq 0x203fb(%rip), %rdi     # 0x3834a
movb $0x0, %al
callq 0x19420
leaq 0x20422(%rip), %rdi     # 0x3837f
movl $0x4, %esi
movl $0x8, %edx
movb $0x0, %al
callq 0x1c8a0
movq $0x0, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe8(%rbp)
cmpl $0x1, 0x38896(%rip)     # 0x50828
jl 0x17fd9
movq -0xe8(%rbp), %rsi
leaq 0x2041d(%rip), %rdi     # 0x383bf
movb $0x0, %al
callq 0x19420
movslq -0x18(%rbp), %rsi
movslq -0x34(%rbp), %rdx
leaq 0x384e8(%rip), %rdi     # 0x504a0
callq 0x5530
cmpl $0x2, 0x38864(%rip)     # 0x50828
jl 0x17fd7
movl -0x14(%rbp), %edi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x20(%rbp), %ecx
callq 0x16c90
jmp 0x17fd9
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x384b2(%rip), %rdi     # 0x504a0
callq 0x19cf0
movslq (%rax), %rax
movq %rax, -0xf0(%rbp)
cmpq $0x0, -0xf0(%rbp)
jne 0x1800c
jmp 0x18a40
cmpq $0x1, -0xf0(%rbp)
jne 0x18044
movl -0x14(%rbp), %eax
movl %eax, -0x194(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x3846e(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x194(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x189a8
cmpq $0x2, -0xf0(%rbp)
jne 0x18072
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x3843d(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x189a6
cmpq $0x3, -0xf0(%rbp)
jne 0x180a5
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x3840f(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %ecx
movl -0x1c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x189a4
cmpq $0x4, -0xf0(%rbp)
jne 0x180d3
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x383dc(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x189a2
cmpq $0x5, -0xf0(%rbp)
jne 0x18101
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x383ae(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x189a0
cmpq $0x6, -0xf0(%rbp)
jne 0x1813e
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x38380(%rip), %rdi     # 0x504a0
callq 0x19cf0
movslq (%rax), %rsi
leaq 0x38371(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1899e
cmpq $0x7, -0xf0(%rbp)
jne 0x18187
movl -0x14(%rbp), %eax
movl %eax, -0x198(%rbp)
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x3833a(%rip), %rdi     # 0x504a0
callq 0x19cf0
movslq (%rax), %rsi
leaq 0x3832b(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x198(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x1899c
cmpq $0x8, -0xf0(%rbp)
jne 0x181c7
movl -0x20(%rbp), %eax
movl %eax, -0x19c(%rbp)
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x382f1(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rcx
movl -0x19c(%rbp), %eax
addl (%rcx), %eax
movl %eax, -0x14(%rbp)
jmp 0x1899a
cmpq $0x9, -0xf0(%rbp)
jne 0x18218
movl -0x20(%rbp), %eax
movl %eax, -0x1a0(%rbp)
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x382b1(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rcx
movl -0x1a0(%rbp), %eax
addl (%rcx), %eax
movslq %eax, %rsi
leaq 0x38297(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x18998
cmpq $0xa, -0xf0(%rbp)
jne 0x18275
movl -0x14(%rbp), %eax
movl %eax, -0x1a4(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x1a8(%rbp)
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x38257(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rcx
movl -0x1a8(%rbp), %eax
addl (%rcx), %eax
movslq %eax, %rsi
leaq 0x3823d(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x1a4(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x18996
cmpq $0xb, -0xf0(%rbp)
jne 0x182b2
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x3820c(%rip), %rdi     # 0x504a0
callq 0x19cf0
movslq (%rax), %rsi
leaq 0x381fd(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x18994
cmpq $0xc, -0xf0(%rbp)
jne 0x182fb
movl -0x14(%rbp), %eax
movl %eax, -0x1ac(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x381c6(%rip), %rdi     # 0x504a0
callq 0x19cf0
movslq (%rax), %rsi
leaq 0x381b7(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x1ac(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x18992
cmpq $0xd, -0xf0(%rbp)
jne 0x1832c
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38186(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x18990
cmpq $0xe, -0xf0(%rbp)
jne 0x1835d
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38155(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
subl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x1898e
cmpq $0xf, -0xf0(%rbp)
jne 0x1838f
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38124(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
imull -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x1898c
cmpq $0x10, -0xf0(%rbp)
jne 0x183c1
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x380f2(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cltd
idivl -0x14(%rbp)
movl %eax, -0x14(%rbp)
jmp 0x1898a
cmpq $0x11, -0xf0(%rbp)
jne 0x183f3
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x380c0(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cltd
idivl -0x14(%rbp)
movl %edx, -0x14(%rbp)
jmp 0x18988
cmpq $0x12, -0xf0(%rbp)
jne 0x1840a
xorl %eax, %eax
subl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x18986
cmpq $0x13, -0xf0(%rbp)
jne 0x18422
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x18984
cmpq $0x14, -0xf0(%rbp)
jne 0x1843a
movl -0x14(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x18982
cmpq $0x15, -0xf0(%rbp)
jne 0x1846d
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38047(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl -0x14(%rbp), %ecx
sarl %cl, %eax
movl %eax, -0x14(%rbp)
jmp 0x18980
cmpq $0x16, -0xf0(%rbp)
jne 0x184a0
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x38014(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl -0x14(%rbp), %ecx
shll %cl, %eax
movl %eax, -0x14(%rbp)
jmp 0x1897e
cmpq $0x17, -0xf0(%rbp)
jne 0x184d1
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37fe1(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
andl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x1897c
cmpq $0x18, -0xf0(%rbp)
jne 0x18502
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37fb0(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
orl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x1897a
cmpq $0x19, -0xf0(%rbp)
jne 0x1851a
movl -0x14(%rbp), %eax
xorl $-0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x18978
cmpq $0x1a, -0xf0(%rbp)
jne 0x18553
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37f67(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18976
cmpq $0x1b, -0xf0(%rbp)
jne 0x1858c
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37f2e(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18974
cmpq $0x1c, -0xf0(%rbp)
jne 0x185c5
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37ef5(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18972
cmpq $0x1d, -0xf0(%rbp)
jne 0x185fe
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37ebc(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
setg %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18970
cmpq $0x1e, -0xf0(%rbp)
jne 0x18637
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37e83(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
setle %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x1896e
cmpq $0x1f, -0xf0(%rbp)
jne 0x18670
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37e4a(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
setl %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x1896c
cmpq $0x20, -0xf0(%rbp)
jne 0x186c4
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37e11(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x0, (%rcx)
movb %al, -0x1ad(%rbp)
je 0x186b1
cmpl $0x0, -0x14(%rbp)
setne %al
movb %al, -0x1ad(%rbp)
movb -0x1ad(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x1896a
cmpq $0x21, -0xf0(%rbp)
jne 0x18718
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37dbd(%rip), %rdi     # 0x504a0
callq 0x19cf0
movq %rax, %rcx
movb $0x1, %al
cmpl $0x0, (%rcx)
movb %al, -0x1ae(%rbp)
jne 0x18705
cmpl $0x0, -0x14(%rbp)
setne %al
movb %al, -0x1ae(%rbp)
movb -0x1ae(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18968
cmpq $0x22, -0xf0(%rbp)
jne 0x18738
cmpl $0x0, -0x14(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x14(%rbp)
jmp 0x18966
cmpq $0x23, -0xf0(%rbp)
jne 0x1879a
movl -0x20(%rbp), %eax
movl %eax, -0x1b4(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37d42(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x1b4(%rbp), %ecx
movl %ecx, (%rax)
movl -0x1c(%rbp), %eax
movl %eax, -0x20(%rbp)
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x37d1a(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %ecx
movl -0x1c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
jmp 0x18964
cmpq $0x24, -0xf0(%rbp)
jne 0x187ce
movl -0x20(%rbp), %eax
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37ce1(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x20(%rbp)
jmp 0x18962
cmpq $0x25, -0xf0(%rbp)
jne 0x18834
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x37cb3(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0xf4(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x1b8(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37c8a(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl -0x1b8(%rbp), %ecx
movl %ecx, (%rax)
movl -0xf4(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
jmp 0x18960
cmpq $0x26, -0xf0(%rbp)
jne 0x18886
movslq -0x18(%rbp), %rsi
leaq 0x37c57(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0xf8(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movslq %eax, %rsi
leaq 0x37c35(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x18(%rbp)
movl -0xf8(%rbp), %eax
addl -0x1c(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x1895e
cmpq $0x27, -0xf0(%rbp)
jne 0x188c3
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x37bfb(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
jmp 0x1895c
cmpq $0x28, -0xf0(%rbp)
jne 0x18903
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x37bbe(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x100(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x18901
movl -0x100(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
jmp 0x1895a
cmpq $0x29, -0xf0(%rbp)
jne 0x18943
movl -0x18(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x18(%rbp)
movslq %eax, %rsi
leaq 0x37b7e(%rip), %rdi     # 0x504a0
callq 0x19cf0
movl (%rax), %eax
movl %eax, -0x104(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x18941
movl -0x104(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x18(%rbp)
jmp 0x18958
movq -0xf0(%rbp), %rsi
leaq 0x1fa74(%rip), %rdi     # 0x383c5
movb $0x0, %al
callq 0x1c960
jmp 0x1895a
jmp 0x1895c
jmp 0x1895e
jmp 0x18960
jmp 0x18962
jmp 0x18964
jmp 0x18966
jmp 0x18968
jmp 0x1896a
jmp 0x1896c
jmp 0x1896e
jmp 0x18970
jmp 0x18972
jmp 0x18974
jmp 0x18976
jmp 0x18978
jmp 0x1897a
jmp 0x1897c
jmp 0x1897e
jmp 0x18980
jmp 0x18982
jmp 0x18984
jmp 0x18986
jmp 0x18988
jmp 0x1898a
jmp 0x1898c
jmp 0x1898e
jmp 0x18990
jmp 0x18992
jmp 0x18994
jmp 0x18996
jmp 0x18998
jmp 0x1899a
jmp 0x1899c
jmp 0x1899e
jmp 0x189a0
jmp 0x189a2
jmp 0x189a4
jmp 0x189a6
jmp 0x189a8
jmp 0x189aa
cmpl $0x0, -0x18(%rbp)
je 0x18a3b
movl -0x18(%rbp), %eax
movslq -0x34(%rbp), %rcx
addq 0x37bce(%rip), %rcx     # 0x50590
cmpl %ecx, %eax
jge 0x18a3b
movl -0x18(%rbp), %eax
subl -0x34(%rbp), %eax
cltq
movq %rax, -0x118(%rbp)
leaq 0x37c7c(%rip), %rdi     # 0x50658
leaq -0x118(%rbp), %rsi
callq 0x1a1e0
movq %rax, -0x110(%rbp)
leaq 0x37c62(%rip), %rdi     # 0x50658
callq 0x1a240
movq %rax, -0x120(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x1a210
testb $0x1, %al
jne 0x18a1b
jmp 0x18a39
leaq -0x110(%rbp), %rdi
callq 0x1a270
movq %rax, %rdi
addq $0x8, %rdi
movl -0x1c(%rbp), %esi
callq 0x16f90
movl %eax, -0x14(%rbp)
jmp 0x18a3b
jmp 0x17f79
movq -0xe8(%rbp), %rsi
movl -0x14(%rbp), %edx
leaq 0x1f990(%rip), %rdi     # 0x383e1
movb $0x0, %al
callq 0x19420
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x3460
nopw %cs:(%rax,%rax)