// File: /workspace/github_cpp_makefile_star2_O1/aadityanaik[P]LongNums/src/longnums.cpp
// Function: LongNumber::operator*(LongNumber)
LongNumber LongNumber::operator*(LongNumber X) {
	LongNumber answer;

	if((*this) == 0 || X == 0) {
		return answer;
	}

	if(this->absolute() < std::numeric_limits<int>::max()){
		long int multiplier = this->absolute().toLong();
		answer = X * multiplier;
	} else if(X.absolute() < std::numeric_limits<int>::max()) {
		long int multiplier = X.absolute().toLong();
		answer = (*this) * multiplier;
	} else {
		//determine the value of the position to split the numbers
		//(*this) will be split into x1, x2 and X will be split into y1 and y2
		//z2 = x1y1, z0 = x2y2 and z1 = x1y2 + x2y1 = (x1 + x2) (y1 + y2) - z2 - z0
		//to be returned: z2 * b^2 + z1 * b + z0 where b is BASE ^ midpos

		//determining midpos
		int midpos, numZero;
		if((*this) >= X) {
			midpos = this->digits.size() / 2;
			//numZero = this->digits.size() - midpos;
			numZero = midpos;
		} else {
			midpos = X.digits.size() / 2;
			//numZero = X.digits.size() - midpos;
			numZero = midpos;
		}

		//declaring x1, x2, y1, y2 using vector constructor
		LongNumber x1, x2, y1, y2, z0, z1, z2;
		if(this->digits.size() <= numZero) {
			x1 = 0;
			x2.digits = this->digits;
		} else {
			x1.digits = std::vector<int>(this->digits.begin() + numZero, this->digits.end());
			x2.digits = std::vector<int>(this->digits.begin(), this->digits.begin() + numZero);
		}

		if(X.digits.size() <= numZero) {
			y1 = 0;
			y2.digits = X.digits;
		} else {
			y1.digits = std::vector<int>(X.digits.begin() + numZero, X.digits.end());
			y2.digits = std::vector<int>(X.digits.begin(), X.digits.begin() + numZero);
		}

		//removing trailing zeroes from x2 and y2
		while(*(x2.digits.end() - 1) == 0 && x2.digits.size() > 1) {
			x2.digits.erase(x2.digits.end() - 1);
		}

		while(*(y2.digits.end() - 1) == 0 && y2.digits.size() > 1) {
			y2.digits.erase(y2.digits.end() - 1);
		}

		//to find z2
		z2 = x1 * y1;

		//to find z0
		z0 = x2 * y2;

		//to find z1
		{
			LongNumber sumX, sumY, prodSums;
			sumX = x1 + x2;
			sumY = y1 + y2;
			prodSums = sumX * sumY;

			z1 = prodSums - z2 - z0;
		}		

		//get the answer
		//first append twice the number of zeros of numZeros to z2 and numZeros to z1
		for(int i = 1; i <= 2 * numZero; i++) {
			if(z2 != 0) {
				z2 = z2 * BASE;
			}

			if(i <= numZero && z1 != 0) {
				z1 = z1 * BASE;
			}
		}
		answer = z2 + z1 + z0;
	}

	answer.negative = negative ^ X.negative;

	return answer;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rdx, %r12
movq %rsi, %r13
movq %rdi, %r15
callq 0x27ac
leaq 0x80(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0x2b68
leaq 0x30(%rsp), %rsi
movq %r13, %rdi
callq 0x3098
movl %eax, %ebp
movb $0x1, %bl
testb %al, %al
jne 0x3827
leaq 0xc0(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0x2d8(%rsp), %rdi
callq 0x2b68
leaq 0x2d8(%rsp), %rsi
movq %r12, %rdi
callq 0x3098
movl %eax, %ebx
testb %bpl, %bpl
jne 0x383e
movq 0x2d8(%rsp), %rdi
testq %rdi, %rdi
je 0x383e
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x384d
callq 0x20b0
testb %bl, %bl
jne 0x3bde
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
callq 0x2cde
leaq 0xc0(%rsp), %rsi
movq $0x7fffffff, (%rsi)     # imm = 0x7FFFFFFF
leaq 0x80(%rsp), %rdi
callq 0x2b68
leaq 0x30(%rsp), %rdi
leaq 0x80(%rsp), %r14
movq %r14, %rsi
callq 0x2f6e
movl %eax, %ebx
movq (%r14), %rdi
testq %rdi, %rdi
je 0x38a2
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x38b1
callq 0x20b0
testb %bl, %bl
je 0x3902
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
callq 0x2cde
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rcx
cmpq %rcx, %rdi
jae 0x39b3
movslq 0x580c(%rip), %rdx      # 0x90e8
movl $0x1, %esi
xorl %eax, %eax
movq %rdi, %r8
movslq (%r8), %r9
imulq %rsi, %r9
addq %r9, %rax
imulq %rdx, %rsi
addq $0x4, %r8
cmpq %rcx, %r8
jb 0x38e6
jmp 0x39b5
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0x2cde
leaq 0xc0(%rsp), %rsi
movq $0x7fffffff, (%rsi)     # imm = 0x7FFFFFFF
leaq 0x80(%rsp), %rdi
callq 0x2b68
leaq 0x30(%rsp), %rdi
leaq 0x80(%rsp), %r14
movq %r14, %rsi
callq 0x2f6e
movl %eax, %ebx
movq (%r14), %rdi
testq %rdi, %rdi
je 0x394f
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x395e
callq 0x20b0
testb %bl, %bl
je 0x39f0
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0x2cde
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rcx
cmpq %rcx, %rdi
jae 0x3b81
movslq 0x575b(%rip), %rdx      # 0x90e8
movl $0x1, %esi
xorl %eax, %eax
movq %rdi, %r8
movslq (%r8), %r9
imulq %rsi, %r9
addq %r9, %rax
imulq %rdx, %rsi
addq $0x4, %r8
cmpq %rcx, %r8
jb 0x3997
jmp 0x3b83
xorl %eax, %eax
movq %rax, %rbx
negq %rbx
cmpb $0x0, 0x48(%rsp)
cmoveq %rax, %rbx
testq %rdi, %rdi
je 0x39ce
callq 0x20b0
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x4668
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x551e
jmp 0x3bb9
movq %r13, %rdi
movq %r12, %rsi
callq 0x303c
movq %r13, %rcx
testb %al, %al
jne 0x3a16
movq %r13, %rdi
movq %r12, %rsi
callq 0x3098
testb %al, %al
movq %r12, %rcx
cmovneq %r13, %rcx
movq 0x8(%rcx), %rbx
subq (%rcx), %rbx
leaq 0x30(%rsp), %rdi
movq %r15, 0x28(%rsp)
callq 0x27ac
leaq 0x80(%rsp), %rdi
callq 0x27ac
leaq 0xc0(%rsp), %rdi
callq 0x27ac
leaq 0xa0(%rsp), %rdi
callq 0x27ac
leaq 0x178(%rsp), %rdi
callq 0x27ac
leaq 0x158(%rsp), %rdi
callq 0x27ac
leaq 0x128(%rsp), %rdi
callq 0x27ac
sarq $0x2, %rbx
shrq %rbx
movq (%r13), %rax
movq 0x8(%r13), %rdx
movq %rdx, %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movq %rbx, 0x58(%rsp)
movslq %ebx, %rbx
cmpq %rbx, %rcx
jbe 0x3bf3
leaq (%rax,%rbx,4), %rsi
movq %rsp, %rdi
leaq 0x108(%rsp), %rcx
callq 0x566e
movq 0x30(%rsp), %rdi
movaps (%rsp), %xmm0
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movups 0x38(%rsp), %xmm1
movaps %xmm0, 0x30(%rsp)
movq %rax, 0x40(%rsp)
movups %xmm1, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3af8
callq 0x20b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3b06
callq 0x20b0
movq (%r13), %rsi
leaq (%rsi,%rbx,4), %rdx
movq %rsp, %rdi
leaq 0x108(%rsp), %rcx
callq 0x566e
movq 0x80(%rsp), %rdi
movaps (%rsp), %xmm0
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movups 0x88(%rsp), %xmm1
movaps %xmm0, 0x80(%rsp)
movq %rax, 0x90(%rsp)
movups %xmm1, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3b6a
callq 0x20b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3c17
callq 0x20b0
jmp 0x3c17
xorl %eax, %eax
movq %rax, %rbx
negq %rbx
cmpb $0x0, 0x48(%rsp)
cmoveq %rax, %rbx
testq %rdi, %rdi
je 0x3b9c
callq 0x20b0
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x4668
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x551e
movb 0x48(%rsp), %al
movb %al, 0x18(%r15)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3bd0
callq 0x20b0
movb 0x18(%r13), %al
cmpb 0x18(%r12), %al
setne 0x18(%r15)
movq %r15, %rax
addq $0x2f8, %rsp            # imm = 0x2F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rsp, %rsi
movq $0x0, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0x2ba2
leaq 0x80(%rsp), %rdi
movq %r13, %rsi
callq 0x551e
movq (%r12), %rax
movq 0x8(%r12), %rdx
movq %rdx, %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbx, %rcx
jbe 0x3d15
leaq (%rax,%rbx,4), %rsi
movq %rsp, %rdi
leaq 0x108(%rsp), %rcx
callq 0x566e
movq 0xc0(%rsp), %rdi
movaps (%rsp), %xmm0
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movups 0xc8(%rsp), %xmm1
movaps %xmm0, 0xc0(%rsp)
movq %rax, 0xd0(%rsp)
movups %xmm1, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3c93
callq 0x20b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3ca1
callq 0x20b0
movq (%r12), %rsi
leaq (%rsi,%rbx,4), %rdx
movq %rsp, %rdi
leaq 0x108(%rsp), %rcx
callq 0x566e
movq 0xa0(%rsp), %rdi
movaps (%rsp), %xmm0
movq 0x10(%rsp), %rax
movq %rdi, (%rsp)
movups 0xa8(%rsp), %xmm1
movaps %xmm0, 0xa0(%rsp)
movq %rax, 0xb0(%rsp)
movups %xmm1, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3d05
callq 0x20b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3d3c
callq 0x20b0
jmp 0x3d3c
movq %rsp, %rsi
movq $0x0, (%rsi)
leaq 0xc0(%rsp), %rdi
callq 0x2ba2
leaq 0xa0(%rsp), %rdi
movq %r12, %rsi
callq 0x551e
movq 0x88(%rsp), %rdx
cmpl $0x0, -0x4(%rdx)
jne 0x3d8e
leaq -0x4(%rdx), %rdi
movq %rdx, %rax
subq 0x80(%rsp), %rax
cmpq $0x5, %rax
jb 0x3d8e
leaq 0x4(%rdi), %rsi
cmpq %rdx, %rsi
je 0x3d70
subq %rsi, %rdx
callq 0x2140
movq 0x88(%rsp), %rax
leaq -0x4(%rax), %rdx
movq %rdx, 0x88(%rsp)
leaq -0x8(%rax), %rdi
cmpl $0x0, -0x8(%rax)
je 0x3d4e
movq 0xa8(%rsp), %rdx
cmpl $0x0, -0x4(%rdx)
jne 0x3de0
leaq -0x4(%rdx), %rdi
movq %rdx, %rax
subq 0xa0(%rsp), %rax
cmpq $0x5, %rax
jb 0x3de0
leaq 0x4(%rdi), %rsi
cmpq %rdx, %rsi
je 0x3dc2
subq %rsi, %rdx
callq 0x2140
movq 0xa8(%rsp), %rax
leaq -0x4(%rax), %rdx
movq %rdx, 0xa8(%rsp)
leaq -0x8(%rax), %rdi
cmpl $0x0, -0x8(%rax)
je 0x3da0
leaq 0x2b8(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x2822
movq %rsp, %rdi
leaq 0x30(%rsp), %rsi
leaq 0x2b8(%rsp), %rdx
callq 0x37ac
leaq 0x128(%rsp), %rdi
movq %rsp, %rsi
callq 0x551e
movb 0x18(%rsp), %al
movb %al, 0x140(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3e33
callq 0x20b0
movq 0x2b8(%rsp), %rdi
testq %rdi, %rdi
je 0x3e45
callq 0x20b0
leaq 0x298(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x2822
movq %rsp, %rdi
leaq 0x80(%rsp), %rsi
leaq 0x298(%rsp), %rdx
callq 0x37ac
leaq 0x178(%rsp), %rdi
movq %rsp, %rsi
callq 0x551e
movb 0x18(%rsp), %al
movb %al, 0x190(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3e9b
callq 0x20b0
movq 0x298(%rsp), %rdi
testq %rdi, %rdi
je 0x3ead
callq 0x20b0
movq %rsp, %rdi
callq 0x27ac
leaq 0x108(%rsp), %rdi
callq 0x27ac
leaq 0xe8(%rsp), %rdi
callq 0x27ac
leaq 0x278(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x2822
leaq 0x60(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x3118
movq %rsp, %rdi
leaq 0x60(%rsp), %rsi
callq 0x551e
movb 0x78(%rsp), %al
movb %al, 0x18(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3f1f
callq 0x20b0
movq 0x278(%rsp), %rdi
testq %rdi, %rdi
je 0x3f31
callq 0x20b0
leaq 0x258(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x2822
leaq 0x60(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0x258(%rsp), %rdx
callq 0x3118
leaq 0x108(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x551e
movb 0x78(%rsp), %al
movb %al, 0x120(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3f8c
callq 0x20b0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x3f9e
callq 0x20b0
leaq 0x238(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x2822
leaq 0x60(%rsp), %rdi
movq %rsp, %rsi
leaq 0x238(%rsp), %rdx
callq 0x37ac
leaq 0xe8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x551e
movb 0x78(%rsp), %al
movb %al, 0x100(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3ff4
callq 0x20b0
movq 0x238(%rsp), %rdi
testq %rdi, %rdi
je 0x4006
callq 0x20b0
leaq 0x1f8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x2822
leaq 0x218(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0x1f8(%rsp), %rdx
callq 0x3402
leaq 0x1d8(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0x2822
leaq 0x60(%rsp), %rdi
leaq 0x218(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x3402
leaq 0x158(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x551e
movb 0x78(%rsp), %al
movb %al, 0x170(%rsp)
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x4093
callq 0x20b0
movq 0x1d8(%rsp), %rdi
testq %rdi, %rdi
je 0x40a5
callq 0x20b0
movq 0x218(%rsp), %rdi
testq %rdi, %rdi
je 0x40b7
callq 0x20b0
movq 0x1f8(%rsp), %rdi
testq %rdi, %rdi
je 0x40c9
callq 0x20b0
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x40db
callq 0x20b0
movq %r13, 0x148(%rsp)
movq %r12, 0x150(%rsp)
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x40fd
callq 0x20b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x410b
callq 0x20b0
cmpl $0x0, 0x58(%rsp)
jle 0x425a
movq 0x58(%rsp), %rax
leal (%rax,%rax), %r13d
cmpl $0x2, %r13d
movl $0x1, %r14d
cmovll %r14d, %r13d
negl %r13d
movq %rsp, %r12
leaq 0x128(%rsp), %rbp
leaq 0x158(%rsp), %rbx
movq $0x0, 0xe8(%rsp)
movq %r12, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x2b68
movq %rbp, %rdi
movq %r12, %rsi
callq 0x3098
movl %eax, %r15d
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x417b
callq 0x20b0
testb %r15b, %r15b
jne 0x41b6
movslq 0x4f61(%rip), %rdx      # 0x90e8
movq %r12, %rdi
movq %rbp, %rsi
callq 0x4668
movq %rbp, %rdi
movq %r12, %rsi
callq 0x551e
movb 0x18(%rsp), %al
movb %al, 0x140(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x41b6
callq 0x20b0
cmpl 0x58(%rsp), %r14d
leaq 0x108(%rsp), %rdi
jle 0x41ca
xorl %r15d, %r15d
jmp 0x41ef
movq $0x0, (%rsp)
movq %r12, %rsi
movq %rdi, %r15
callq 0x2b68
movq %rbx, %rdi
movq %r15, %rsi
callq 0x3098
movl %eax, %r15d
xorb $0x1, %r15b
cmpl 0x58(%rsp), %r14d
jg 0x4208
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x4208
callq 0x20b0
testb %r15b, %r15b
je 0x4243
movslq 0x4ed4(%rip), %rdx      # 0x90e8
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4668
movq %rbx, %rdi
movq %r12, %rsi
callq 0x551e
movb 0x18(%rsp), %al
movb %al, 0x170(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x4243
callq 0x20b0
leal (%r14,%r13), %eax
incl %eax
movl %r14d, %ecx
incl %ecx
movl %ecx, %r14d
cmpl $0x1, %eax
jne 0x4143
leaq 0x1b8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x2822
leaq 0xe8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
movq 0x28(%rsp), %r15
callq 0x3118
movq 0x150(%rsp), %r12
movq 0x148(%rsp), %r13
leaq 0x198(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0x2822
movq %rsp, %rdi
leaq 0xe8(%rsp), %rsi
leaq 0x198(%rsp), %rdx
callq 0x3118
movq %rsp, %rsi
movq %r15, %rdi
callq 0x551e
movb 0x18(%rsp), %al
movb %al, 0x18(%r15)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x42ef
callq 0x20b0
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x4301
callq 0x20b0
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x4313
callq 0x20b0
movq 0x1b8(%rsp), %rdi
testq %rdi, %rdi
je 0x4325
callq 0x20b0
movq 0x128(%rsp), %rdi
testq %rdi, %rdi
je 0x4337
callq 0x20b0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x4349
callq 0x20b0
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x435b
callq 0x20b0
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x436d
callq 0x20b0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x437f
callq 0x20b0
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x3bc1
callq 0x20b0
jmp 0x3bc1
jmp 0x45d0
jmp 0x45d0
jmp 0x45d0
jmp 0x45d0
jmp 0x45d0
jmp 0x45d0
movq %rax, %r14
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x43ce
callq 0x20b0
jmp 0x43ce
movq %rax, %r14
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x43e5
callq 0x20b0
jmp 0x43e5
movq %rax, %r14
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x43fc
callq 0x20b0
jmp 0x43fc
movq %rax, %r14
movq 0x1b8(%rsp), %rdi
jmp 0x45c4
jmp 0x45d0
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x4425
callq 0x20b0
jmp 0x4425
movq %rax, %r14
movq 0x1d8(%rsp), %rdi
testq %rdi, %rdi
je 0x443c
callq 0x20b0
jmp 0x443c
movq %rax, %r14
movq 0x218(%rsp), %rdi
testq %rdi, %rdi
je 0x4453
callq 0x20b0
jmp 0x4453
movq %rax, %r14
movq 0x1f8(%rsp), %rdi
jmp 0x44c4
jmp 0x44d0
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x4476
callq 0x20b0
jmp 0x4476
movq %rax, %r14
movq 0x238(%rsp), %rdi
jmp 0x44c4
jmp 0x44d0
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x4499
callq 0x20b0
jmp 0x4499
movq %rax, %r14
movq 0x258(%rsp), %rdi
jmp 0x44c4
jmp 0x44d0
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x44bc
callq 0x20b0
jmp 0x44bc
movq %rax, %r14
movq 0x278(%rsp), %rdi
testq %rdi, %rdi
je 0x44d3
callq 0x20b0
jmp 0x44d3
movq %rax, %r14
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x44e5
callq 0x20b0
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x45c0
callq 0x20b0
jmp 0x45c0
movq %rax, %r14
jmp 0x44e5
jmp 0x45bd
jmp 0x45d0
movq %rax, %r14
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x4525
callq 0x20b0
jmp 0x4525
movq %rax, %r14
movq 0x298(%rsp), %rdi
jmp 0x45c4
jmp 0x45d0
movq %rax, %r14
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x454d
callq 0x20b0
jmp 0x454d
movq %rax, %r14
movq 0x2b8(%rsp), %rdi
jmp 0x45c4
jmp 0x45d0
jmp 0x45d0
movq %rax, %r14
jmp 0x45e5
movq %rax, %r14
jmp 0x45f7
movq %rax, %r14
jmp 0x4609
movq %rax, %r14
jmp 0x461b
jmp 0x459b
movq %rax, %r14
jmp 0x462d
jmp 0x45a8
jmp 0x45a0
jmp 0x45ad
jmp 0x45a8
jmp 0x459b
jmp 0x45a8
jmp 0x459b
jmp 0x45a8
jmp 0x45a8
jmp 0x459b
jmp 0x45a8
movq %r15, 0x28(%rsp)
movq %rax, %r14
jmp 0x463f
movq %r15, 0x28(%rsp)
movq %rax, %r14
jmp 0x464e
jmp 0x45bd
jmp 0x45d0
jmp 0x45d0
jmp 0x45d0
movq %rax, %r14
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x45d3
callq 0x20b0
jmp 0x45d3
movq %rax, %r14
movq 0x128(%rsp), %rdi
testq %rdi, %rdi
je 0x45e5
callq 0x20b0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x45f7
callq 0x20b0
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x4609
callq 0x20b0
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x461b
callq 0x20b0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x462d
callq 0x20b0
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x463f
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x464e
callq 0x20b0
movq 0x28(%rsp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x4660
callq 0x20b0
movq %r14, %rdi
callq 0x2180