// File: Laakeri[P]maxpre/src/cardinalityconstraint.cpp
// Function: maxPreprocessor::CardinalityConstraint::HMerge(std::vector<int, std::allocator<int>> const&, std::vector<int, std::allocator<int>> const&, maxPreprocessor::CardinalityConstraint::Formula&, bool, bool)
vector<int> CardinalityConstraint::HMerge(const vector<int>& A, const vector<int>& B, Formula& F, bool d1, bool d2) {
	// use the bit reversal trick to do HMerge without recursion
	assert(A.size() == B.size());
	int n = A.size();
	vector<int> c(2*n);
	for (int i = 0; i < n; i++) {
		c[2*i] = F.freeVar++;
		c[2*i+1] = F.freeVar++;
		if (d1) {
			F.clauses.push_back({-A[i], -B[i], c[2*i+1]});
			F.clauses.push_back({-A[i], c[2*i]});
			F.clauses.push_back({-B[i], c[2*i]});
		}
		if (d2) {
			F.clauses.push_back({A[i], B[i], -c[2*i]});
			F.clauses.push_back({A[i], -c[2*i+1]});
			F.clauses.push_back({B[i], -c[2*i+1]});
		}
	}
	for (int i = 0; i < n; i++) {
		int u = 0;
		for (int j = 1; j < n; j *= 2) {
			u *= 2;
			if (i & j) u++;
		}
		if (i < u) {
			swap(c[2*i], c[2*u]);
			swap(c[2*i+1], c[2*u+1]);
		}
	}
	for (int le = 4; le <= 2*n; le *= 2) {
		for (int i = 0; i < 2*n; i+=le) {
			for (int j = 0; j+1 < le/2; j++) {
				if (d1) {
					F.clauses.push_back({-c[i+j+1], -c[i+j+le/2], F.freeVar+2*j+1});
					F.clauses.push_back({-c[i+j+1], F.freeVar+2*j});
					F.clauses.push_back({-c[i+j+le/2], F.freeVar+2*j});
				}
				if (d2) {
					F.clauses.push_back({c[i+j+1], c[i+j+le/2], -(F.freeVar+2*j)});
					F.clauses.push_back({c[i+j+1], -(F.freeVar+2*j+1)});
					F.clauses.push_back({c[i+j+le/2], -(F.freeVar+2*j+1)});
				}
			}
			for (int j = 1; j+1 < le; j++) c[i+j] = F.freeVar++;
		}
	}
	return c;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x430, %rsp            # imm = 0x430
movl %r9d, %eax
movq %rcx, -0x330(%rbp)
movq %rdx, %rcx
movq -0x330(%rbp), %rdx
movq %rcx, -0x328(%rbp)
movq %rsi, %rcx
movq -0x328(%rbp), %rsi
movq %rcx, -0x320(%rbp)
movq %rdi, %r9
movq -0x320(%rbp), %rdi
movq %r9, -0x318(%rbp)
movb %al, %cl
movq %r9, %rax
movq %rax, -0x310(%rbp)
movb 0x10(%rbp), %al
movq %r9, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
andb $0x1, %cl
movb %cl, -0x29(%rbp)
andb $0x1, %al
movb %al, -0x2a(%rbp)
movq -0x18(%rbp), %rdi
callq 0xf940
movq %rax, -0x308(%rbp)
movq -0x20(%rbp), %rdi
callq 0xf940
movq %rax, %rcx
movq -0x308(%rbp), %rax
cmpq %rcx, %rax
jne 0x7b7a0
jmp 0x7b7bf
leaq 0xc9f8(%rip), %rdi      # 0x8819f
leaq 0xc90e(%rip), %rsi      # 0x880bc
movl $0x19, %edx
leaq 0xc9fa(%rip), %rcx      # 0x881b4
callq 0x4260
movq -0x18(%rbp), %rdi
callq 0xf940
movl %eax, -0x30(%rbp)
movb $0x0, -0x31(%rbp)
movl -0x30(%rbp), %eax
addl %eax, %eax
cltq
movq %rax, -0x340(%rbp)
leaq -0x32(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0xa710
movq -0x318(%rbp), %rdi
movq -0x340(%rbp), %rsi
movq -0x338(%rbp), %rdx
callq 0xa730
jmp 0x7b809
leaq -0x32(%rbp), %rdi
callq 0xa7a0
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7be7f
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x348(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x48(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x348(%rbp), %ecx
movq -0x318(%rbp), %rdi
movl %ecx, (%rax)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x344(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x48(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x344(%rbp), %ecx
movl %ecx, (%rax)
testb $0x1, -0x29(%rbp)
je 0x7bb70
movq -0x28(%rbp), %rax
movq %rax, -0x358(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movl (%rax), %eax
negl %eax
movl %eax, -0x7c(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0x78(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x74(%rbp)
leaq -0x7c(%rbp), %rax
movq %rax, -0x70(%rbp)
movq $0x3, -0x68(%rbp)
leaq -0x7d(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0xa710
movq -0x350(%rbp), %rcx
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
leaq -0x60(%rbp), %rdi
callq 0x3c9b0
jmp 0x7b91a
movq -0x358(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3e200
jmp 0x7b92c
leaq -0x60(%rbp), %rdi
callq 0xab00
leaq -0x7d(%rbp), %rdi
callq 0xa7a0
movq -0x28(%rbp), %rax
movq %rax, -0x368(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0xb0(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0xac(%rbp)
leaq -0xb0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq $0x2, -0xa0(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0xa710
movq -0x360(%rbp), %rcx
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
leaq -0x98(%rbp), %rdi
callq 0x3c9b0
jmp 0x7b9cb
movq -0x368(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x3e200
jmp 0x7b9e0
leaq -0x98(%rbp), %rdi
callq 0xab00
leaq -0xb1(%rbp), %rdi
callq 0xa7a0
movq -0x28(%rbp), %rax
movq %rax, -0x378(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0xe8(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0xe4(%rbp)
leaq -0xe8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x2, -0xd8(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0xa710
movq -0x370(%rbp), %rcx
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x3c9b0
jmp 0x7ba85
movq -0x378(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x3e200
jmp 0x7ba9a
leaq -0xd0(%rbp), %rdi
callq 0xab00
leaq -0xe9(%rbp), %rdi
callq 0xa7a0
jmp 0x7bb70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x32(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7baf4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xab00
leaq -0x7d(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7bb28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0xab00
leaq -0xb1(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7bb5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0xab00
leaq -0xe9(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
testb $0x1, -0x2a(%rbp)
je 0x7be6f
movq -0x28(%rbp), %rax
movq %rax, -0x388(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movl (%rax), %eax
movl %eax, -0x124(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x120(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x11c(%rbp)
leaq -0x124(%rbp), %rax
movq %rax, -0x118(%rbp)
movq $0x3, -0x110(%rbp)
leaq -0x125(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0xa710
movq -0x380(%rbp), %rcx
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x108(%rbp), %rdi
callq 0x3c9b0
jmp 0x7bc1c
movq -0x388(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3e200
jmp 0x7bc31
leaq -0x108(%rbp), %rdi
callq 0xab00
leaq -0x125(%rbp), %rdi
callq 0xa7a0
movq -0x28(%rbp), %rax
movq %rax, -0x398(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x158(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x154(%rbp)
leaq -0x158(%rbp), %rax
movq %rax, -0x150(%rbp)
movq $0x2, -0x148(%rbp)
leaq -0x159(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0xa710
movq -0x390(%rbp), %rcx
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
leaq -0x140(%rbp), %rdi
callq 0x3c9b0
jmp 0x7bcda
movq -0x398(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x3e200
jmp 0x7bcef
leaq -0x140(%rbp), %rdi
callq 0xab00
leaq -0x159(%rbp), %rdi
callq 0xa7a0
movq -0x28(%rbp), %rax
movq %rax, -0x3a8(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x190(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x18c(%rbp)
leaq -0x190(%rbp), %rax
movq %rax, -0x188(%rbp)
movq $0x2, -0x180(%rbp)
leaq -0x191(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0xa710
movq -0x3a0(%rbp), %rcx
movq -0x188(%rbp), %rsi
movq -0x180(%rbp), %rdx
leaq -0x178(%rbp), %rdi
callq 0x3c9b0
jmp 0x7bd98
movq -0x3a8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3e200
jmp 0x7bdad
leaq -0x178(%rbp), %rdi
callq 0xab00
leaq -0x191(%rbp), %rdi
callq 0xa7a0
jmp 0x7be6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7bdf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xab00
leaq -0x125(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7be27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x140(%rbp), %rdi
callq 0xab00
leaq -0x159(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7be5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x178(%rbp), %rdi
callq 0xab00
leaq -0x191(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
jmp 0x7be71
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x7b819
movl $0x0, -0x198(%rbp)
movl -0x198(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7bfad
movl $0x0, -0x19c(%rbp)
movl $0x1, -0x1a0(%rbp)
movl -0x1a0(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7bef7
movl -0x19c(%rbp), %eax
shll %eax
movl %eax, -0x19c(%rbp)
movl -0x198(%rbp), %eax
andl -0x1a0(%rbp), %eax
cmpl $0x0, %eax
je 0x7bee5
movl -0x19c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x19c(%rbp)
jmp 0x7bee7
movl -0x1a0(%rbp), %eax
shll %eax
movl %eax, -0x1a0(%rbp)
jmp 0x7beac
movl -0x198(%rbp), %eax
cmpl -0x19c(%rbp), %eax
jge 0x7bf97
movq -0x318(%rbp), %rdi
movl -0x198(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movq %rax, -0x3b8(%rbp)
movl -0x19c(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x3b8(%rbp), %rdi
movq %rax, %rsi
callq 0x3d2c0
movq -0x318(%rbp), %rdi
movl -0x198(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movq %rax, -0x3b0(%rbp)
movl -0x19c(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x3b0(%rbp), %rdi
movq %rax, %rsi
callq 0x3d2c0
jmp 0x7bf99
movl -0x198(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x198(%rbp)
jmp 0x7be89
movl $0x4, -0x1a4(%rbp)
movl -0x1a4(%rbp), %eax
movl -0x30(%rbp), %ecx
shll %ecx
cmpl %ecx, %eax
jg 0x7c785
movl $0x0, -0x1a8(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x30(%rbp), %ecx
shll %ecx
cmpl %ecx, %eax
jge 0x7c770
movl $0x0, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3bc(%rbp)
movl -0x1a4(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x3bc(%rbp), %eax
cmpl %ecx, %eax
jge 0x7c6f5
testb $0x1, -0x29(%rbp)
je 0x7c380
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movl -0x1a8(%rbp), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0x1e4(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x1ac(%rbp), %ecx
addl %ecx, %eax
movl -0x1a4(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x1e0(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx,2), %eax
movl %eax, -0x1dc(%rbp)
leaq -0x1e4(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq $0x3, -0x1d0(%rbp)
leaq -0x1e5(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0xa710
movq -0x3c8(%rbp), %rcx
movq -0x1d8(%rbp), %rsi
movq -0x1d0(%rbp), %rdx
leaq -0x1c8(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c102
movq -0x3d0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3e200
jmp 0x7c117
leaq -0x1c8(%rbp), %rdi
callq 0xab00
leaq -0x1e5(%rbp), %rdi
callq 0xa7a0
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movl -0x1a8(%rbp), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x218(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
movl %eax, -0x214(%rbp)
leaq -0x218(%rbp), %rax
movq %rax, -0x210(%rbp)
movq $0x2, -0x208(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0xa710
movq -0x3d8(%rbp), %rcx
movq -0x210(%rbp), %rsi
movq -0x208(%rbp), %rdx
leaq -0x200(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c1d0
movq -0x3e0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x3e200
jmp 0x7c1e5
leaq -0x200(%rbp), %rdi
callq 0xab00
leaq -0x219(%rbp), %rdi
callq 0xa7a0
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x3f0(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x1ac(%rbp), %ecx
addl %ecx, %eax
movl -0x1a4(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x250(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
movl %eax, -0x24c(%rbp)
leaq -0x250(%rbp), %rax
movq %rax, -0x248(%rbp)
movq $0x2, -0x240(%rbp)
leaq -0x251(%rbp), %rdi
movq %rdi, -0x3e8(%rbp)
callq 0xa710
movq -0x3e8(%rbp), %rcx
movq -0x248(%rbp), %rsi
movq -0x240(%rbp), %rdx
leaq -0x238(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c2a9
movq -0x3f0(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x3e200
jmp 0x7c2be
leaq -0x238(%rbp), %rdi
callq 0xab00
leaq -0x251(%rbp), %rdi
callq 0xa7a0
jmp 0x7c380
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c301
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0xab00
leaq -0x1e5(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c338
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x200(%rbp), %rdi
callq 0xab00
leaq -0x219(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c36f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x238(%rbp), %rdi
callq 0xab00
leaq -0x251(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
testb $0x1, -0x2a(%rbp)
je 0x7c6df
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x400(%rbp)
movl -0x1a8(%rbp), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x28c(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x1ac(%rbp), %ecx
addl %ecx, %eax
movl -0x1a4(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x288(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
negl %eax
movl %eax, -0x284(%rbp)
leaq -0x28c(%rbp), %rax
movq %rax, -0x280(%rbp)
movq $0x3, -0x278(%rbp)
leaq -0x28d(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0xa710
movq -0x3f8(%rbp), %rcx
movq -0x280(%rbp), %rsi
movq -0x278(%rbp), %rdx
leaq -0x270(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c461
movq -0x400(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x3e200
jmp 0x7c476
leaq -0x270(%rbp), %rdi
callq 0xab00
leaq -0x28d(%rbp), %rdi
callq 0xa7a0
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x410(%rbp)
movl -0x1a8(%rbp), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x2c0(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
notl %eax
movl %eax, -0x2bc(%rbp)
leaq -0x2c0(%rbp), %rax
movq %rax, -0x2b8(%rbp)
movq $0x2, -0x2b0(%rbp)
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0xa710
movq -0x408(%rbp), %rcx
movq -0x2b8(%rbp), %rsi
movq -0x2b0(%rbp), %rdx
leaq -0x2a8(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c52f
movq -0x410(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x3e200
jmp 0x7c544
leaq -0x2a8(%rbp), %rdi
callq 0xab00
leaq -0x2c1(%rbp), %rdi
callq 0xa7a0
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x420(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x1ac(%rbp), %ecx
addl %ecx, %eax
movl -0x1a4(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x2f8(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1ac(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
notl %eax
movl %eax, -0x2f4(%rbp)
leaq -0x2f8(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movq $0x2, -0x2e8(%rbp)
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0xa710
movq -0x418(%rbp), %rcx
movq -0x2f0(%rbp), %rsi
movq -0x2e8(%rbp), %rdx
leaq -0x2e0(%rbp), %rdi
callq 0x3c9b0
jmp 0x7c608
movq -0x420(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x3e200
jmp 0x7c61d
leaq -0x2e0(%rbp), %rdi
callq 0xab00
leaq -0x2f9(%rbp), %rdi
callq 0xa7a0
jmp 0x7c6df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c660
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x270(%rbp), %rdi
callq 0xab00
leaq -0x28d(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c697
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0xab00
leaq -0x2c1(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7c6ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0xab00
leaq -0x2f9(%rbp), %rdi
callq 0xa7a0
jmp 0x7c7ab
jmp 0x7c6e1
movl -0x1ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1ac(%rbp)
jmp 0x7bff1
movl $0x1, -0x300(%rbp)
movl -0x300(%rbp), %eax
addl $0x1, %eax
cmpl -0x1a4(%rbp), %eax
jge 0x7c757
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x424(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x1a8(%rbp), %eax
addl -0x300(%rbp), %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x424(%rbp), %ecx
movl %ecx, (%rax)
movl -0x300(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x300(%rbp)
jmp 0x7c6ff
jmp 0x7c759
movl -0x1a4(%rbp), %eax
addl -0x1a8(%rbp), %eax
movl %eax, -0x1a8(%rbp)
jmp 0x7bfd4
jmp 0x7c772
movl -0x1a4(%rbp), %eax
shll %eax
movl %eax, -0x1a4(%rbp)
jmp 0x7bfb7
movb $0x1, -0x31(%rbp)
testb $0x1, -0x31(%rbp)
jne 0x7c79b
movq -0x318(%rbp), %rdi
callq 0xab00
movq -0x310(%rbp), %rax
addq $0x430, %rsp            # imm = 0x430
popq %rbp
retq
movq -0x318(%rbp), %rdi
callq 0xab00
movq -0x40(%rbp), %rdi
callq 0x4610