// File: /workspace/github_cpp_makefile_star2_O3/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 $0x2d8, %rsp            # imm = 0x2D8
movq %rdx, %r12
movq %rsi, %r13
movq %rdi, %r15
callq 0x27ac
leaq 0xe0(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0x2a96
leaq 0x30(%rsp), %rsi
movq %r13, %rdi
callq 0x2fc6
testb %al, %al
je 0x3711
movb $0x1, %bl
jmp 0x3749
leaq 0xc0(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0x70(%rsp), %rdi
callq 0x2a96
leaq 0x70(%rsp), %r14
movq %r12, %rdi
movq %r14, %rsi
callq 0x2fc6
movl %eax, %ebx
movq (%r14), %rdi
testq %rdi, %rdi
je 0x3749
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3758
callq 0x20b0
testb %bl, %bl
jne 0x3ac6
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
callq 0x2c0c
leaq 0xe0(%rsp), %rsi
movq $0x7fffffff, (%rsi)     # imm = 0x7FFFFFFF
leaq 0x70(%rsp), %rdi
callq 0x2a96
leaq 0x30(%rsp), %rdi
leaq 0x70(%rsp), %r14
movq %r14, %rsi
callq 0x2e9c
movl %eax, %ebx
movq (%r14), %rdi
testq %rdi, %rdi
je 0x37a7
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x37b6
callq 0x20b0
testb %bl, %bl
je 0x3807
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
callq 0x2c0c
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rcx
cmpq %rcx, %rdi
jae 0x38b2
movslq 0x5907(%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 0x37eb
jmp 0x38b4
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0x2c0c
leaq 0xe0(%rsp), %rsi
movq $0x7fffffff, (%rsi)     # imm = 0x7FFFFFFF
leaq 0x70(%rsp), %rdi
callq 0x2a96
leaq 0x30(%rsp), %rdi
leaq 0x70(%rsp), %r14
movq %r14, %rsi
callq 0x2e9c
movl %eax, %ebx
movq (%r14), %rdi
testq %rdi, %rdi
je 0x384e
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x385d
callq 0x20b0
testb %bl, %bl
je 0x38ef
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0x2c0c
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rcx
cmpq %rcx, %rdi
jae 0x3a69
movslq 0x585c(%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 0x3896
jmp 0x3a6b
xorl %eax, %eax
movq %rax, %rbx
negq %rbx
cmpb $0x0, 0x48(%rsp)
cmoveq %rax, %rbx
testq %rdi, %rdi
je 0x38cd
callq 0x20b0
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x4542
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x5412
jmp 0x3aa1
movq %r13, %rdi
movq %r12, %rsi
callq 0x2f6a
movq %r13, %rcx
testb %al, %al
jne 0x3915
movq %r13, %rdi
movq %r12, %rsi
callq 0x2fc6
testb %al, %al
movq %r12, %rcx
cmovneq %r13, %rcx
movq 0x8(%rcx), %rbx
subq (%rcx), %rbx
leaq 0x30(%rsp), %rdi
movq %r15, 0x8(%rsp)
callq 0x27ac
leaq 0x70(%rsp), %rdi
callq 0x27ac
leaq 0xe0(%rsp), %rdi
callq 0x27ac
leaq 0xc0(%rsp), %rdi
callq 0x27ac
leaq 0x158(%rsp), %rdi
callq 0x27ac
leaq 0x138(%rsp), %rdi
callq 0x27ac
leaq 0x108(%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, 0xb8(%rsp)
movslq %ebx, %rbx
cmpq %rbx, %rcx
jbe 0x3adb
leaq (%rax,%rbx,4), %rsi
leaq 0x10(%rsp), %rdi
leaq 0x98(%rsp), %rcx
callq 0x5570
movq 0x30(%rsp), %rdi
movaps 0x10(%rsp), %xmm0
movaps %xmm0, 0x30(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x40(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
testq %rdi, %rdi
je 0x39fc
callq 0x20b0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x39fc
callq 0x20b0
movq (%r13), %rsi
leaq (%rsi,%rbx,4), %rdx
leaq 0x10(%rsp), %rdi
leaq 0x98(%rsp), %rcx
callq 0x5570
movq 0x70(%rsp), %rdi
movaps 0x10(%rsp), %xmm0
movaps %xmm0, 0x70(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x80(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
testq %rdi, %rdi
je 0x3afe
callq 0x20b0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3afe
callq 0x20b0
jmp 0x3afe
xorl %eax, %eax
movq %rax, %rbx
negq %rbx
cmpb $0x0, 0x48(%rsp)
cmoveq %rax, %rbx
testq %rdi, %rdi
je 0x3a84
callq 0x20b0
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x4542
leaq 0x30(%rsp), %rsi
movq %r15, %rdi
callq 0x5412
movb 0x48(%rsp), %al
movb %al, 0x18(%r15)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3ab8
callq 0x20b0
movb 0x18(%r13), %al
cmpb 0x18(%r12), %al
setne 0x18(%r15)
movq %r15, %rax
addq $0x2d8, %rsp            # imm = 0x2D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0x2ad0
leaq 0x70(%rsp), %rdi
movq %r13, %rsi
callq 0x5412
movq (%r12), %rax
movq 0x8(%r12), %rdx
movq %rdx, %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbx, %rcx
jbe 0x3be4
leaq (%rax,%rbx,4), %rsi
leaq 0x10(%rsp), %rdi
leaq 0x98(%rsp), %rcx
callq 0x5570
movq 0xe0(%rsp), %rdi
movaps 0x10(%rsp), %xmm0
movaps %xmm0, 0xe0(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0xf0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
testq %rdi, %rdi
je 0x3b7c
callq 0x20b0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7c
callq 0x20b0
movq (%r12), %rsi
leaq (%rsi,%rbx,4), %rdx
leaq 0x10(%rsp), %rdi
leaq 0x98(%rsp), %rcx
callq 0x5570
movq 0xc0(%rsp), %rdi
movaps 0x10(%rsp), %xmm0
movaps %xmm0, 0xc0(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0xd0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
testq %rdi, %rdi
je 0x3c0d
callq 0x20b0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3c0d
callq 0x20b0
jmp 0x3c0d
leaq 0x10(%rsp), %rsi
movq $0x0, (%rsi)
leaq 0xe0(%rsp), %rdi
callq 0x2ad0
leaq 0xc0(%rsp), %rdi
movq %r12, %rsi
callq 0x5412
movq 0x78(%rsp), %rdx
cmpl $0x0, -0x4(%rdx)
jne 0x3c56
leaq -0x4(%rdx), %rdi
movq %rdx, %rax
subq 0x70(%rsp), %rax
cmpq $0x5, %rax
jb 0x3c56
leaq 0x4(%rdi), %rsi
cmpq %rdx, %rsi
je 0x3c40
subq %rsi, %rdx
callq 0x2140
movq 0x78(%rsp), %rdx
leaq -0x4(%rdx), %rax
movq %rax, 0x78(%rsp)
leaq -0x8(%rdx), %rdi
cmpl $0x0, -0x8(%rdx)
movq %rax, %rdx
je 0x3c1c
movq 0xc8(%rsp), %rdx
cmpl $0x0, -0x4(%rdx)
jne 0x3cab
leaq -0x4(%rdx), %rdi
movq %rdx, %rax
subq 0xc0(%rsp), %rax
cmpq $0x5, %rax
jb 0x3cab
leaq 0x4(%rdi), %rsi
cmpq %rdx, %rsi
je 0x3c92
subq %rsi, %rdx
callq 0x2140
movq 0xc8(%rsp), %rdx
leaq -0x4(%rdx), %rax
movq %rax, 0xc8(%rsp)
leaq -0x8(%rdx), %rdi
cmpl $0x0, -0x8(%rdx)
movq %rax, %rdx
je 0x3c68
leaq 0x2b8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x2806
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x2b8(%rsp), %rdx
callq 0x36c4
leaq 0x108(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x5412
movb 0x28(%rsp), %al
movb %al, 0x120(%rsp)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3d03
callq 0x20b0
movq 0x2b8(%rsp), %rdi
testq %rdi, %rdi
je 0x3d15
callq 0x20b0
leaq 0x298(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x2806
leaq 0x10(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0x298(%rsp), %rdx
callq 0x36c4
leaq 0x158(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x5412
movb 0x28(%rsp), %al
movb %al, 0x170(%rsp)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3d6d
callq 0x20b0
movq 0x298(%rsp), %rdi
testq %rdi, %rdi
je 0x3d7f
callq 0x20b0
leaq 0x10(%rsp), %rdi
callq 0x27ac
leaq 0x98(%rsp), %rdi
callq 0x27ac
leaq 0x178(%rsp), %rdi
callq 0x27ac
leaq 0x278(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x2806
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x3046
leaq 0x10(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x5412
movb 0x68(%rsp), %al
movb %al, 0x28(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x3df2
callq 0x20b0
movq 0x278(%rsp), %rdi
testq %rdi, %rdi
je 0x3e04
callq 0x20b0
leaq 0x258(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x2806
leaq 0x50(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
leaq 0x258(%rsp), %rdx
callq 0x3046
leaq 0x98(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x5412
movb 0x68(%rsp), %al
movb %al, 0xb0(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x3e5f
callq 0x20b0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x3e71
callq 0x20b0
leaq 0x238(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x2806
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x238(%rsp), %rdx
callq 0x36c4
leaq 0x178(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x5412
movb 0x68(%rsp), %al
movb %al, 0x190(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x3ec9
callq 0x20b0
movq 0x238(%rsp), %rdi
testq %rdi, %rdi
je 0x3edb
callq 0x20b0
leaq 0x1f8(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x2806
leaq 0x218(%rsp), %rdi
leaq 0x178(%rsp), %rsi
leaq 0x1f8(%rsp), %rdx
callq 0x3320
leaq 0x1d8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x2806
leaq 0x50(%rsp), %rdi
leaq 0x218(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x3320
leaq 0x138(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x5412
movb 0x68(%rsp), %al
movb %al, 0x150(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x3f68
callq 0x20b0
movq 0x1d8(%rsp), %rdi
testq %rdi, %rdi
je 0x3f7a
callq 0x20b0
movq 0x218(%rsp), %rdi
testq %rdi, %rdi
je 0x3f8c
callq 0x20b0
movq 0x1f8(%rsp), %rdi
testq %rdi, %rdi
je 0x3f9e
callq 0x20b0
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x3fb0
callq 0x20b0
movq %r13, 0x128(%rsp)
movq %r12, 0x130(%rsp)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x3fd2
callq 0x20b0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x3fe1
callq 0x20b0
cmpl $0x0, 0xb8(%rsp)
jle 0x4131
movq 0xb8(%rsp), %rax
leal (%rax,%rax), %r15d
cmpl $0x2, %r15d
movl $0x1, %ebx
cmovll %ebx, %r15d
negl %r15d
leaq 0x10(%rsp), %r12
leaq 0x108(%rsp), %rbp
leaq 0x138(%rsp), %r14
movq %r14, %r13
movq $0x0, 0x98(%rsp)
movq %r12, %rdi
leaq 0x98(%rsp), %rsi
callq 0x2a96
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2fc6
movl %eax, %r14d
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x405c
callq 0x20b0
testb %r14b, %r14b
movq %r13, %r14
jne 0x409b
movslq 0x507d(%rip), %rdx      # 0x90e8
movq %r12, %rdi
movq %rbp, %rsi
callq 0x4542
movq %rbp, %rdi
movq %r12, %rsi
callq 0x5412
movb 0x28(%rsp), %al
movb %al, 0x120(%rsp)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x409b
callq 0x20b0
cmpl 0xb8(%rsp), %ebx
jg 0x411c
movq $0x0, 0x98(%rsp)
movq %r12, %rdi
leaq 0x98(%rsp), %rsi
callq 0x2a96
movq %r14, %rdi
movq %r12, %rsi
callq 0x2fc6
movl %eax, %r14d
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x40dd
callq 0x20b0
testb %r14b, %r14b
movq %r13, %r14
jne 0x411c
movslq 0x4ffc(%rip), %rdx      # 0x90e8
movq %r12, %rdi
movq %r14, %rsi
callq 0x4542
movq %r14, %rdi
movq %r12, %rsi
callq 0x5412
movb 0x28(%rsp), %al
movb %al, 0x150(%rsp)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x411c
callq 0x20b0
leal (%r15,%rbx), %eax
incl %eax
movl %ebx, %ecx
incl %ecx
movl %ecx, %ebx
cmpl $0x1, %eax
jne 0x4020
leaq 0x1b8(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x2806
leaq 0x98(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
movq 0x8(%rsp), %r15
callq 0x3046
movq 0x130(%rsp), %r12
movq 0x128(%rsp), %r13
leaq 0x198(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x2806
leaq 0x10(%rsp), %rdi
leaq 0x98(%rsp), %rsi
leaq 0x198(%rsp), %rdx
callq 0x3046
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x5412
movb 0x28(%rsp), %al
movb %al, 0x18(%r15)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x41cb
callq 0x20b0
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x41dd
callq 0x20b0
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x41ef
callq 0x20b0
movq 0x1b8(%rsp), %rdi
testq %rdi, %rdi
je 0x4201
callq 0x20b0
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x4213
callq 0x20b0
movq 0x138(%rsp), %rdi
testq %rdi, %rdi
je 0x4225
callq 0x20b0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x4237
callq 0x20b0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x4249
callq 0x20b0
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x425b
callq 0x20b0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x3aa9
callq 0x20b0
jmp 0x3aa9
jmp 0x44ad
jmp 0x44ad
jmp 0x44ad
jmp 0x44ad
jmp 0x44ad
jmp 0x44ad
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x42a8
callq 0x20b0
jmp 0x42a8
movq %rax, %r14
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x42bf
callq 0x20b0
jmp 0x42bf
movq %rax, %r14
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x42d6
callq 0x20b0
jmp 0x42d6
movq %rax, %r14
movq 0x1b8(%rsp), %rdi
jmp 0x44a1
jmp 0x44ad
movq %rax, %r14
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x42ff
callq 0x20b0
jmp 0x42ff
movq %rax, %r14
movq 0x1d8(%rsp), %rdi
testq %rdi, %rdi
je 0x4316
callq 0x20b0
jmp 0x4316
movq %rax, %r14
movq 0x218(%rsp), %rdi
testq %rdi, %rdi
je 0x432d
callq 0x20b0
jmp 0x432d
movq %rax, %r14
movq 0x1f8(%rsp), %rdi
jmp 0x439e
jmp 0x43aa
movq %rax, %r14
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x4350
callq 0x20b0
jmp 0x4350
movq %rax, %r14
movq 0x238(%rsp), %rdi
jmp 0x439e
jmp 0x43aa
movq %rax, %r14
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x4373
callq 0x20b0
jmp 0x4373
movq %rax, %r14
movq 0x258(%rsp), %rdi
jmp 0x439e
jmp 0x43aa
movq %rax, %r14
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x4396
callq 0x20b0
jmp 0x4396
movq %rax, %r14
movq 0x278(%rsp), %rdi
testq %rdi, %rdi
je 0x43ad
callq 0x20b0
jmp 0x43ad
movq %rax, %r14
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x43bf
callq 0x20b0
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x449c
callq 0x20b0
jmp 0x449c
movq %rax, %r14
jmp 0x43bf
jmp 0x4499
jmp 0x44ad
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4400
callq 0x20b0
jmp 0x4400
movq %rax, %r14
movq 0x298(%rsp), %rdi
jmp 0x44a1
jmp 0x44ad
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4429
callq 0x20b0
jmp 0x4429
movq %rax, %r14
movq 0x2b8(%rsp), %rdi
jmp 0x44a1
jmp 0x44ad
jmp 0x44ad
movq %rax, %r14
jmp 0x44c2
movq %rax, %r14
jmp 0x44d4
movq %rax, %r14
jmp 0x44e6
movq %rax, %r14
jmp 0x44f8
jmp 0x4477
movq %rax, %r14
jmp 0x450a
jmp 0x4488
jmp 0x447c
jmp 0x448d
jmp 0x4488
jmp 0x4477
jmp 0x4488
jmp 0x4477
jmp 0x4488
jmp 0x4488
jmp 0x4477
jmp 0x4488
movq %r15, 0x8(%rsp)
movq %rax, %r14
jmp 0x4519
jmp 0x4499
jmp 0x44ad
movq %r15, 0x8(%rsp)
movq %rax, %r14
jmp 0x4528
jmp 0x44ad
jmp 0x44ad
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x44b0
callq 0x20b0
jmp 0x44b0
movq %rax, %r14
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x44c2
callq 0x20b0
movq 0x138(%rsp), %rdi
testq %rdi, %rdi
je 0x44d4
callq 0x20b0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x44e6
callq 0x20b0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x44f8
callq 0x20b0
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x450a
callq 0x20b0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x4519
callq 0x20b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x4528
callq 0x20b0
movq 0x8(%rsp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x453a
callq 0x20b0
movq %r14, %rdi
callq 0x2180