// File: BenLangmead[P]bowtie/./multikey_qsort.h
// Function: void mkeyQSortSufDcU8<S2bDnaString, S2bDnaString>(S2bDnaString const&, S2bDnaString const&, unsigned long, unsigned long*, unsigned long, DifferenceCoverSample<S2bDnaString> const&, int, unsigned long, unsigned long, unsigned long, bool)
void mkeyQSortSufDcU8(const T1& host1,
                      const T2& host,
                      size_t hlen,
                      TIndexOffU* s,
                      size_t slen,
                      const DifferenceCoverSample<T1>& dc,
                      int hi,
                      size_t begin,
                      size_t end,
                      size_t depth,
                      bool sanityCheck = false)
{
	// Helper for making the recursive call; sanity-checks arguments to
	// make sure that the problem actually got smaller.
	#define MQS_RECURSE_SUF_DC_U8(nbegin, nend, ndepth) { \
		assert(nbegin > begin || nend < end || ndepth > depth); \
		mkeyQSortSufDcU8(host1, host, hlen, s, slen, dc, hi, nbegin, nend, ndepth, sanityCheck); \
	}
	assert_leq(begin, slen);
	assert_leq(end, slen);
	size_t n = end - begin;
	if(n <= 1) return; // 1-element list already sorted
	if(depth > dc.v()) {
		// Quicksort the remaining suffixes using difference cover
		// for constant-time comparisons; this is O(k*log(k)) where
		// k=(end-begin)
		qsortSufDcU8<T1,T2>(host1, host, hlen, s, slen, dc, begin, end, sanityCheck);
		if(sanityCheck) {
			sanityCheckOrderedSufs(host1, hlen, s, slen, OFF_MASK, begin, end);
		}
		return;
	}
	if(n <= BUCKET_SORT_CUTOFF) {
		// Bucket sort remaining items
		bucketSortSufDcU8(host1, host, hlen, s, slen, dc,
		                  (uint8_t)hi, begin, end, depth, sanityCheck);
		if(sanityCheck) {
			sanityCheckOrderedSufs(host1, hlen, s, slen, OFF_MASK, begin, end);
		}
		return;
	}
	size_t a, b, c, d, r;
	CHOOSE_AND_SWAP_PIVOT(SWAP1, CHAR_AT_SUF_U8); // choose pivot, swap to begin
	int v = CHAR_AT_SUF_U8(begin, depth); // v <- pivot value
	#ifndef NDEBUG
	{
		bool stillInBounds = false;
		for(size_t i = begin; i < end; i++) {
			if(depth < (hlen-s[i])) {
				stillInBounds = true;
				break;
			} else { /* already fell off this suffix */ }
		}
		assert(stillInBounds); // >=1 suffix must still be in bounds
	}
	#endif
	a = b = begin;
	c = d = end-1;
	while(true) {
		// Invariant: everything before a is = pivot, everything
		// between a and b is <
		int bc = 0; // shouldn't have to init but gcc on Mac complains
		while(b <= c && v >= (bc = CHAR_AT_SUF_U8(b, depth))) {
			if(v == bc) {
				SWAP(s, a, b); a++;
			}
			b++;
		}
		// Invariant: everything after d is = pivot, everything
		// between c and d is >
		int cc = 0; // shouldn't have to init but gcc on Mac complains
		//bool hiLatch = true;
		while(b <= c && v <= (cc = CHAR_AT_SUF_U8(c, depth))) {
			if(v == cc) {
				SWAP(s, c, d); d--;
			}
			//else if(hiLatch && cc == hi) { }
			c--;
		}
		if(b > c) break;
		SWAP(s, b, c);
		b++;
		c--;
	}
	assert(a > begin || c < end-1);                      // there was at least one =s
	assert_lt(d-c, n); // they can't all have been > pivot
	assert_lt(b-a, n); // they can't all have been < pivot
	r = min(a-begin, b-a); VECSWAP(s, begin, b-r,   r);  // swap left = to center
	r = min(d-c, end-d-1); VECSWAP(s, b,     end-r, r);  // swap right = to center
	r = b-a; // r <- # of <'s
	if(r > 0) {
		MQS_RECURSE_SUF_DC_U8(begin, begin + r, depth); // recurse on <'s
	}
	// Do not recurse on ='s if the pivot was the off-the-end value;
	// they're already fully sorted
	if(v != hi) {
		MQS_RECURSE_SUF_DC_U8(begin + r, begin + r + (a-begin) + (end-d-1), depth+1); // recurse on ='s
	}
	r = d-c; // r <- # of >'s excluding those exhausted
	if(r > 0 && v < hi-1) {
		MQS_RECURSE_SUF_DC_U8(end-r, end, depth); // recurse on >'s
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0xf0, %rsp
movb 0x30(%rbp), %al
movq 0x28(%rbp), %r10
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movl 0x10(%rbp), %r10d
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movq %rcx, -0x30(%rbp)
movq %r8, -0x38(%rbp)
movq %r9, -0x40(%rbp)
andb $0x1, %al
movb %al, -0x41(%rbp)
movq 0x18(%rbp), %rax
cmpq -0x38(%rbp), %rax
jbe 0x30cb1
movq 0x193bd(%rip), %rdi     # 0x49fc0
leaq 0xe599(%rip), %rsi      # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xe595(%rip), %rsi      # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x10978(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x19331(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x19365(%rip), %rdi     # 0x49fc0
leaq 0x112cc(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xfb19(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x472, %esi            # imm = 0x472
callq 0x5750
movq %rax, %rdi
movq 0x192f3(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf9d1(%rip), %rdi      # 0x4066a
leaq 0x1128e(%rip), %rsi     # 0x41f2e
movl $0x472, %edx            # imm = 0x472
leaq 0x112d4(%rip), %rcx     # 0x41f80
callq 0x51e0
movq 0x20(%rbp), %rax
cmpq -0x38(%rbp), %rax
jbe 0x30d74
movq 0x192fa(%rip), %rdi     # 0x49fc0
leaq 0xe4d6(%rip), %rsi      # 0x3f1a3
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xe4d2(%rip), %rsi      # 0x3f1ba
callq 0x5360
movq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x108b5(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x1926e(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x192a2(%rip), %rdi     # 0x49fc0
leaq 0x11209(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xfa56(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x473, %esi            # imm = 0x473
callq 0x5750
movq %rax, %rdi
movq 0x19230(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf90e(%rip), %rdi      # 0x4066a
leaq 0x111cb(%rip), %rsi     # 0x41f2e
movl $0x473, %edx            # imm = 0x473
leaq 0x11211(%rip), %rcx     # 0x41f80
callq 0x51e0
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x1, -0x50(%rbp)
ja 0x30d8c
jmp 0x3246d
movq 0x28(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x40(%rbp), %rdi
callq 0x33470
movl %eax, %ecx
movq -0xb8(%rbp), %rax
movl %ecx, %ecx
cmpq %rcx, %rax
jbe 0x30e1d
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %r10
movb -0x41(%rbp), %al
andb $0x1, %al
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movzbl %al, %eax
movl %eax, 0x10(%rsp)
callq 0x33490
testb $0x1, -0x41(%rbp)
je 0x30e18
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq $-0x1, %r8
movq %rax, (%rsp)
callq 0x32480
jmp 0x3246d
cmpq $0x400000, -0x50(%rbp)  # imm = 0x400000
ja 0x30eb0
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %eax
movb %al, %r14b
movq 0x18(%rbp), %rbx
movq 0x20(%rbp), %r11
movq 0x28(%rbp), %r10
movb -0x41(%rbp), %al
andb $0x1, %al
movzbl %r14b, %r14d
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x146b0
testb $0x1, -0x41(%rbp)
je 0x30eab
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq $-0x1, %r8
movq %rax, (%rsp)
callq 0x32480
jmp 0x3246d
movq 0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
cmpq $0x5, -0x50(%rbp)
jb 0x3137e
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x1, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x1, %eax
je 0x30f15
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x1, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x2, %eax
jne 0x30f26
movq 0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x3104d
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x2, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x1, %eax
je 0x30f78
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x2, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x2, %eax
jne 0x30f89
movq 0x18(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x58(%rbp)
jmp 0x3104b
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x3, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x1, %eax
je 0x30fdb
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x3, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x2, %eax
jne 0x30fe9
movq 0x18(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x58(%rbp)
jmp 0x31049
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x4, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x1, %eax
je 0x3103b
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
addq $0x4, %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
cmpl $0x2, %eax
jne 0x31047
movq 0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x58(%rbp)
jmp 0x31049
jmp 0x3104b
jmp 0x3104d
movq -0x58(%rbp), %rax
cmpq 0x18(%rbp), %rax
je 0x3137c
movq 0x18(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x3111e
movq 0x18f50(%rip), %rdi     # 0x49fc0
leaq 0xe18e(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xe18a(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x1050b(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18ec4(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18ef8(%rip), %rdi     # 0x49fc0
leaq 0x10e5f(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf6ac(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x48a, %esi            # imm = 0x48A
callq 0x5750
movq %rax, %rdi
movq 0x18e86(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf564(%rip), %rdi      # 0x4066a
leaq 0x10e21(%rip), %rsi     # 0x41f2e
movl $0x48a, %edx            # imm = 0x48A
leaq 0x10e67(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x58(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x311e1
movq 0x18e8d(%rip), %rdi     # 0x49fc0
leaq 0xe0cb(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x58(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xe0c7(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x10448(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18e01(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18e35(%rip), %rdi     # 0x49fc0
leaq 0x10d9c(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf5e9(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x48a, %esi            # imm = 0x48A
callq 0x5750
movq %rax, %rdi
movq 0x18dc3(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf4a1(%rip), %rdi      # 0x4066a
leaq 0x10d5e(%rip), %rsi     # 0x41f2e
movl $0x48a, %edx            # imm = 0x48A
leaq 0x10da4(%rip), %rcx     # 0x41f80
callq 0x51e0
movq 0x18(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x312a4
movq 0x18dca(%rip), %rdi     # 0x49fc0
leaq 0xe04a(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xe045(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x10385(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18d3e(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18d72(%rip), %rdi     # 0x49fc0
leaq 0x10cd9(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf526(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x48a, %esi            # imm = 0x48A
callq 0x5750
movq %rax, %rdi
movq 0x18d00(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf3de(%rip), %rdi      # 0x4066a
leaq 0x10c9b(%rip), %rsi     # 0x41f2e
movl $0x48a, %edx            # imm = 0x48A
leaq 0x10ce1(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x58(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x31367
movq 0x18d07(%rip), %rdi     # 0x49fc0
leaq 0xdf87(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x58(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xdf82(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x102c2(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18c7b(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18caf(%rip), %rdi     # 0x49fc0
leaq 0x10c16(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf463(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x48a, %esi            # imm = 0x48A
callq 0x5750
movq %rax, %rdi
movq 0x18c3d(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf31b(%rip), %rdi      # 0x4066a
leaq 0x10bd8(%rip), %rsi     # 0x41f2e
movl $0x48a, %edx            # imm = 0x48A
leaq 0x10c1e(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq 0x18(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0x15610
jmp 0x3137e
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
movl %eax, -0x7c(%rbp)
movb $0x0, -0x7d(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq 0x20(%rbp), %rax
jae 0x313f7
movq 0x28(%rbp), %rax
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %rdx
movq -0x88(%rbp), %rsi
subq (%rdx,%rsi,8), %rcx
cmpq %rcx, %rax
jae 0x313df
movb $0x1, -0x7d(%rbp)
jmp 0x313f7
jmp 0x313e1
jmp 0x313e3
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x313b0
testb $0x1, -0x7d(%rbp)
je 0x313ff
jmp 0x3141e
leaq 0x10c33(%rip), %rdi     # 0x42039
leaq 0x10b21(%rip), %rsi     # 0x41f2e
movl $0x495, %edx            # imm = 0x495
leaq 0x10b67(%rip), %rcx     # 0x41f80
callq 0x51e0
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq %rax, -0x58(%rbp)
movq 0x20(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x70(%rbp)
movq %rax, -0x68(%rbp)
movl $0x0, -0x8c(%rbp)
movq -0x60(%rbp), %rcx
xorl %eax, %eax
cmpq -0x68(%rbp), %rcx
movb %al, -0xb9(%rbp)
ja 0x31498
movl -0x7c(%rbp), %eax
movl %eax, -0xc0(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x60(%rbp), %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
movl %eax, %ecx
movl -0xc0(%rbp), %eax
movl %ecx, -0x8c(%rbp)
cmpl %ecx, %eax
setge %al
movb %al, -0xb9(%rbp)
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0x314a7
jmp 0x317f4
movl -0x7c(%rbp), %eax
cmpl -0x8c(%rbp), %eax
jne 0x317e3
movq -0x58(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x31579
movq 0x18af5(%rip), %rdi     # 0x49fc0
leaq 0xdd33(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x58(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xdd2f(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0x100b0(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18a69(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18a9d(%rip), %rdi     # 0x49fc0
leaq 0x10a04(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf251(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4a0, %esi            # imm = 0x4A0
callq 0x5750
movq %rax, %rdi
movq 0x18a2b(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf109(%rip), %rdi      # 0x4066a
leaq 0x109c6(%rip), %rsi     # 0x41f2e
movl $0x4a0, %edx            # imm = 0x4A0
leaq 0x10a0c(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x60(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x3163c
movq 0x18a32(%rip), %rdi     # 0x49fc0
leaq 0xdc70(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xdc6c(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xffed(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x189a6(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x189da(%rip), %rdi     # 0x49fc0
leaq 0x10941(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf18e(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4a0, %esi            # imm = 0x4A0
callq 0x5750
movq %rax, %rdi
movq 0x18968(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xf046(%rip), %rdi      # 0x4066a
leaq 0x10903(%rip), %rsi     # 0x41f2e
movl $0x4a0, %edx            # imm = 0x4A0
leaq 0x10949(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x58(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x316ff
movq 0x1896f(%rip), %rdi     # 0x49fc0
leaq 0xdbef(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x58(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xdbea(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xff2a(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x188e3(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18917(%rip), %rdi     # 0x49fc0
leaq 0x1087e(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf0cb(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4a0, %esi            # imm = 0x4A0
callq 0x5750
movq %rax, %rdi
movq 0x188a5(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xef83(%rip), %rdi      # 0x4066a
leaq 0x10840(%rip), %rsi     # 0x41f2e
movl $0x4a0, %edx            # imm = 0x4A0
leaq 0x10886(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x60(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x317c2
movq 0x188ac(%rip), %rdi     # 0x49fc0
leaq 0xdb2c(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xdb27(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xfe67(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18820(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18854(%rip), %rdi     # 0x49fc0
leaq 0x107bb(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xf008(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4a0, %esi            # imm = 0x4A0
callq 0x5750
movq %rax, %rdi
movq 0x187e2(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xeec0(%rip), %rdi      # 0x4066a
leaq 0x1077d(%rip), %rsi     # 0x41f2e
movl $0x4a0, %edx            # imm = 0x4A0
leaq 0x107c3(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0x60(%rbp), %rcx
callq 0x15610
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x31444
movl $0x0, -0x90(%rbp)
movq -0x60(%rbp), %rcx
xorl %eax, %eax
cmpq -0x68(%rbp), %rcx
movb %al, -0xc1(%rbp)
ja 0x31852
movl -0x7c(%rbp), %eax
movl %eax, -0xc8(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x68(%rbp), %rcx
movq 0x28(%rbp), %r8
movl 0x10(%rbp), %eax
movzbl %al, %r9d
callq 0x155a0
movl %eax, %ecx
movl -0xc8(%rbp), %eax
movl %ecx, -0x90(%rbp)
cmpl %ecx, %eax
setle %al
movb %al, -0xc1(%rbp)
movb -0xc1(%rbp), %al
testb $0x1, %al
jne 0x31861
jmp 0x31bae
movl -0x7c(%rbp), %eax
cmpl -0x90(%rbp), %eax
jne 0x31b9d
movq -0x68(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x31933
movq 0x1873b(%rip), %rdi     # 0x49fc0
leaq 0xd979(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd975(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xfcf6(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x186af(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x186e3(%rip), %rdi     # 0x49fc0
leaq 0x1064a(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xee97(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4aa, %esi            # imm = 0x4AA
callq 0x5750
movq %rax, %rdi
movq 0x18671(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xed4f(%rip), %rdi      # 0x4066a
leaq 0x1060c(%rip), %rsi     # 0x41f2e
movl $0x4aa, %edx            # imm = 0x4AA
leaq 0x10652(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x70(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x319f6
movq 0x18678(%rip), %rdi     # 0x49fc0
leaq 0xd8b6(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd8b2(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xfc33(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x185ec(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18620(%rip), %rdi     # 0x49fc0
leaq 0x10587(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xedd4(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4aa, %esi            # imm = 0x4AA
callq 0x5750
movq %rax, %rdi
movq 0x185ae(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xec8c(%rip), %rdi      # 0x4066a
leaq 0x10549(%rip), %rsi     # 0x41f2e
movl $0x4aa, %edx            # imm = 0x4AA
leaq 0x1058f(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x68(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x31ab9
movq 0x185b5(%rip), %rdi     # 0x49fc0
leaq 0xd835(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd830(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xfb70(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18529(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x1855d(%rip), %rdi     # 0x49fc0
leaq 0x104c4(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xed11(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4aa, %esi            # imm = 0x4AA
callq 0x5750
movq %rax, %rdi
movq 0x184eb(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xebc9(%rip), %rdi      # 0x4066a
leaq 0x10486(%rip), %rsi     # 0x41f2e
movl $0x4aa, %edx            # imm = 0x4AA
leaq 0x104cc(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x70(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x31b7c
movq 0x184f2(%rip), %rdi     # 0x49fc0
leaq 0xd772(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd76d(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xfaad(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18466(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x1849a(%rip), %rdi     # 0x49fc0
leaq 0x10401(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xec4e(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4aa, %esi            # imm = 0x4AA
callq 0x5750
movq %rax, %rdi
movq 0x18428(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xeb06(%rip), %rdi      # 0x4066a
leaq 0x103c3(%rip), %rsi     # 0x41f2e
movl $0x4aa, %edx            # imm = 0x4AA
leaq 0x10409(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq -0x70(%rbp), %rcx
callq 0x15610
movq -0x70(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x70(%rbp)
movq -0x68(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x317fe
movq -0x60(%rbp), %rax
cmpq -0x68(%rbp), %rax
jbe 0x31bbd
jmp 0x31efb
movq -0x60(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x31c80
movq 0x183ee(%rip), %rdi     # 0x49fc0
leaq 0xd62c(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd628(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf9a9(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18362(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18396(%rip), %rdi     # 0x49fc0
leaq 0x102fd(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xeb4a(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x5750
movq %rax, %rdi
movq 0x18324(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xea02(%rip), %rdi      # 0x4066a
leaq 0x102bf(%rip), %rsi     # 0x41f2e
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x10305(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x68(%rbp), %rax
cmpq 0x18(%rbp), %rax
jae 0x31d43
movq 0x1832b(%rip), %rdi     # 0x49fc0
leaq 0xd569(%rip), %rsi      # 0x3f205
callq 0x5360
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd565(%rip), %rsi      # 0x3f21c
callq 0x5360
movq %rax, %rdi
movq 0x18(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf8e6(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x1829f(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x182d3(%rip), %rdi     # 0x49fc0
leaq 0x1023a(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xea87(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x5750
movq %rax, %rdi
movq 0x18261(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xe93f(%rip), %rdi      # 0x4066a
leaq 0x101fc(%rip), %rsi     # 0x41f2e
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x10242(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x60(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x31e06
movq 0x18268(%rip), %rdi     # 0x49fc0
leaq 0xd4e8(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd4e3(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf823(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x181dc(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x18210(%rip), %rdi     # 0x49fc0
leaq 0x10177(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xe9c4(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x5750
movq %rax, %rdi
movq 0x1819e(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xe87c(%rip), %rdi      # 0x4066a
leaq 0x10139(%rip), %rsi     # 0x41f2e
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x1017f(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x68(%rbp), %rax
cmpq 0x20(%rbp), %rax
jb 0x31ec9
movq 0x181a5(%rip), %rdi     # 0x49fc0
leaq 0xd425(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd420(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq 0x20(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf760(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x18119(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x1814d(%rip), %rdi     # 0x49fc0
leaq 0x100b4(%rip), %rsi     # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xe901(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x5750
movq %rax, %rdi
movq 0x180db(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xe7b9(%rip), %rdi      # 0x4066a
leaq 0x10076(%rip), %rsi     # 0x41f2e
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x100bc(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq -0x68(%rbp), %rcx
callq 0x15610
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x3143a
movq -0x58(%rbp), %rcx
movb $0x1, %al
cmpq 0x18(%rbp), %rcx
movb %al, -0xc9(%rbp)
ja 0x31f25
movq -0x68(%rbp), %rax
movq 0x20(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
setb %al
movb %al, -0xc9(%rbp)
movb -0xc9(%rbp), %al
testb $0x1, %al
jne 0x31f31
jmp 0x31f33
jmp 0x31f52
leaq 0x1010d(%rip), %rdi     # 0x42047
leaq 0xffed(%rip), %rsi      # 0x41f2e
movl $0x4b4, %edx            # imm = 0x4B4
leaq 0x10033(%rip), %rcx     # 0x41f80
callq 0x51e0
movq -0x70(%rbp), %rax
subq -0x68(%rbp), %rax
cmpq -0x50(%rbp), %rax
jb 0x3201d
movq 0x18055(%rip), %rdi     # 0x49fc0
leaq 0xd2d5(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x70(%rbp), %rsi
subq -0x68(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd2cc(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq -0x50(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf60c(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x17fc5(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x17ff9(%rip), %rdi     # 0x49fc0
leaq 0xff60(%rip), %rsi      # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xe7ad(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b5, %esi            # imm = 0x4B5
callq 0x5750
movq %rax, %rdi
movq 0x17f87(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xe665(%rip), %rdi      # 0x4066a
leaq 0xff22(%rip), %rsi      # 0x41f2e
movl $0x4b5, %edx            # imm = 0x4B5
leaq 0xff68(%rip), %rcx      # 0x41f80
callq 0x51e0
movq -0x60(%rbp), %rax
subq -0x58(%rbp), %rax
cmpq -0x50(%rbp), %rax
jb 0x320e8
movq 0x17f8a(%rip), %rdi     # 0x49fc0
leaq 0xd20a(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, %rdi
movq -0x60(%rbp), %rsi
subq -0x58(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xd201(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movq -0x50(%rbp), %rsi
callq 0x50c0
movq %rax, %rdi
leaq 0xf541(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0x17efa(%rip), %rsi     # 0x49f80
callq 0x53c0
movq 0x17f2e(%rip), %rdi     # 0x49fc0
leaq 0xfe95(%rip), %rsi      # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0xe6e2(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x4b6, %esi            # imm = 0x4B6
callq 0x5750
movq %rax, %rdi
movq 0x17ebc(%rip), %rsi     # 0x49f80
callq 0x53c0
leaq 0xe59a(%rip), %rdi      # 0x4066a
leaq 0xfe57(%rip), %rsi      # 0x41f2e
movl $0x4b6, %edx            # imm = 0x4B6
leaq 0xfe9d(%rip), %rcx      # 0x41f80
callq 0x51e0
movq -0x58(%rbp), %rax
subq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x60(%rbp), %rax
subq -0x58(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x1b390
movq (%rax), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x32150
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq 0x18(%rbp), %rdx
movq -0x60(%rbp), %rcx
subq -0x78(%rbp), %rcx
movq -0x78(%rbp), %r8
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq %rax, (%rsp)
callq 0x157f0
movq -0x70(%rbp), %rax
subq -0x68(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x20(%rbp), %rax
subq -0x70(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xb0(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1b390
movq (%rax), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x321bc
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq 0x20(%rbp), %rcx
subq -0x78(%rbp), %rcx
movq -0x78(%rbp), %r8
movq 0x18(%rbp), %r9
movq 0x20(%rbp), %rax
movq %rax, (%rsp)
callq 0x157f0
movq -0x60(%rbp), %rax
subq -0x58(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x32289
movq 0x18(%rbp), %rcx
movb $0x1, %al
cmpq 0x18(%rbp), %rcx
movb %al, -0xca(%rbp)
ja 0x3220c
movq 0x18(%rbp), %rcx
addq -0x78(%rbp), %rcx
movb $0x1, %al
cmpq 0x20(%rbp), %rcx
movb %al, -0xca(%rbp)
jb 0x3220c
movq 0x28(%rbp), %rax
cmpq 0x28(%rbp), %rax
seta %al
movb %al, -0xca(%rbp)
movb -0xca(%rbp), %al
testb $0x1, %al
jne 0x32218
jmp 0x3221a
jmp 0x32239
leaq 0xfe3d(%rip), %rdi      # 0x4205e
leaq 0xfd06(%rip), %rsi      # 0x41f2e
movl $0x4bb, %edx            # imm = 0x4BB
leaq 0xfd4c(%rip), %rcx      # 0x41f80
callq 0x51e0
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %r14d
movq 0x18(%rbp), %rbx
movq 0x18(%rbp), %r11
addq -0x78(%rbp), %r11
movq 0x28(%rbp), %r10
movb -0x41(%rbp), %al
andb $0x1, %al
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x30bb0
movl -0x7c(%rbp), %eax
cmpl 0x10(%rbp), %eax
je 0x3238f
movq 0x18(%rbp), %rcx
addq -0x78(%rbp), %rcx
movb $0x1, %al
cmpq 0x18(%rbp), %rcx
movb %al, -0xcb(%rbp)
ja 0x322f0
movq 0x18(%rbp), %rcx
addq -0x78(%rbp), %rcx
movq -0x58(%rbp), %rax
subq 0x18(%rbp), %rax
addq %rax, %rcx
movq 0x20(%rbp), %rax
subq -0x70(%rbp), %rax
subq $0x1, %rax
addq %rax, %rcx
movb $0x1, %al
cmpq 0x20(%rbp), %rcx
movb %al, -0xcb(%rbp)
jb 0x322f0
movq 0x28(%rbp), %rax
addq $0x1, %rax
cmpq 0x28(%rbp), %rax
seta %al
movb %al, -0xcb(%rbp)
movb -0xcb(%rbp), %al
testb $0x1, %al
jne 0x322fc
jmp 0x322fe
jmp 0x3231d
leaq 0xfd8b(%rip), %rdi      # 0x42090
leaq 0xfc22(%rip), %rsi      # 0x41f2e
movl $0x4c0, %edx            # imm = 0x4C0
leaq 0xfc68(%rip), %rcx      # 0x41f80
callq 0x51e0
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %r14d
movq 0x18(%rbp), %rbx
addq -0x78(%rbp), %rbx
movq 0x18(%rbp), %r11
addq -0x78(%rbp), %r11
movq -0x58(%rbp), %rax
subq 0x18(%rbp), %rax
addq %rax, %r11
movq 0x20(%rbp), %rax
subq -0x70(%rbp), %rax
subq $0x1, %rax
addq %rax, %r11
movq 0x28(%rbp), %r10
addq $0x1, %r10
movb -0x41(%rbp), %al
andb $0x1, %al
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x30bb0
movq -0x70(%rbp), %rax
subq -0x68(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
jbe 0x3246d
movl -0x7c(%rbp), %eax
movl 0x10(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x3246d
movq 0x20(%rbp), %rcx
subq -0x78(%rbp), %rcx
movb $0x1, %al
cmpq 0x18(%rbp), %rcx
movb %al, -0xcc(%rbp)
ja 0x323f0
movq 0x20(%rbp), %rcx
movb $0x1, %al
cmpq 0x20(%rbp), %rcx
movb %al, -0xcc(%rbp)
jb 0x323f0
movq 0x28(%rbp), %rax
cmpq 0x28(%rbp), %rax
seta %al
movb %al, -0xcc(%rbp)
movb -0xcc(%rbp), %al
testb $0x1, %al
jne 0x323fc
jmp 0x323fe
jmp 0x3241d
leaq 0xfcdb(%rip), %rdi      # 0x420e0
leaq 0xfb22(%rip), %rsi      # 0x41f2e
movl $0x4c4, %edx            # imm = 0x4C4
leaq 0xfb68(%rip), %rcx      # 0x41f80
callq 0x51e0
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %r14d
movq 0x20(%rbp), %rbx
subq -0x78(%rbp), %rbx
movq 0x20(%rbp), %r11
movq 0x28(%rbp), %r10
movb -0x41(%rbp), %al
andb $0x1, %al
movl %r14d, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movzbl %al, %eax
movl %eax, 0x20(%rsp)
callq 0x30bb0
addq $0xf0, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nopl (%rax)