// File: /workspace/github_c_makefile_star2_O0/ToniWestbrook[P]paladin/bwt.c
// Function: bwt_smem1a
int bwt_smem1a(const bwt_t *bwt, int len, const uint8_t *q, int x, int min_intv, uint64_t max_intv, bwtintv_v *mem, bwtintv_v *tmpvec[2])
{
	int i, j, c, ret;
	bwtintv_t ik, ok[VALUE_DOMAIN];
	bwtintv_v a[2], *prev, *curr, *swap;

	mem->n = 0;
	if (q[x] >= VALUE_DEFINED) return x + 1;
	//if (q[x] > 3) return x + 1;
	if (min_intv < 1) min_intv = 1; // the interval size should be at least 1
	kv_init(a[0]); kv_init(a[1]);
	prev = tmpvec && tmpvec[0]? tmpvec[0] : &a[0]; // use the temporary vector if provided
	curr = tmpvec && tmpvec[1]? tmpvec[1] : &a[1];

	bwt_set_intv(bwt, q[x], ik); // the initial interval of a single base

	ik.info = x + 1;

	for (i = x + 1, curr->n = 0; i < len; ++i) { // forward search
		if (ik.x[2] < max_intv) { // an interval small enough
			kv_push(bwtintv_t, *curr, ik);
			break;
		} else if (q[i] < VALUE_DEFINED) { // an amino acid
			c = VALUE_DEFINED - 1 - q[i]; // complement of q[i]
			bwt_extend(bwt, &ik, ok, 0);

			if (ok[c].x[2] != ik.x[2]) { // change of the interval size
				kv_push(bwtintv_t, *curr, ik);
				if (ok[c].x[2] < min_intv) break; // the interval size is too small to be extended further
			}
			ik = ok[c]; ik.info = i + 1;
		} else { // an ambiguous base
			kv_push(bwtintv_t, *curr, ik);
			break; // always terminate extension at an ambiguous base; in this case, i<len always stands
		}
	}

	if (i == len) kv_push(bwtintv_t, *curr, ik); // push the last interval if we reach the end
	bwt_reverse_intvs(curr); // s.t. smaller intervals (i.e. longer matches) visited first
	ret = curr->a[0].info; // this will be the returned value
	swap = curr; curr = prev; prev = swap;

	for (i = x - 1; i >= -1; --i) { // backward search for MEMs
		c = i < 0? -1 : q[i] < VALUE_DEFINED? q[i] : -1; // c==-1 if i<0 or q[i] is an ambiguous base
		//c = i < 0? -1 : q[i] < 4? q[i] : -1; // c==-1 if i<0 or q[i] is an ambiguous base
		for (j = 0, curr->n = 0; j < prev->n; ++j) {
			bwtintv_t *p = &prev->a[j];
			if (c >= 0 && ik.x[2] >= max_intv) bwt_extend(bwt, p, ok, 1);
			if (c < 0 || ik.x[2] < max_intv || ok[c].x[2] < min_intv) { // keep the hit if reaching the beginning or an ambiguous base or the intv is small enough
				if (curr->n == 0) { // test curr->n>0 to make sure there are no longer matches
					if (mem->n == 0 || i + 1 < mem->a[mem->n-1].info>>32) { // skip contained matches
						ik = *p; ik.info |= (uint64_t)(i + 1)<<32;
						kv_push(bwtintv_t, *mem, ik);
					}
				} // otherwise the match is contained in another longer match
			} else if (curr->n == 0 || ok[c].x[2] != curr->a[curr->n-1].x[2]) {
				ok[c].info = p->info;
				kv_push(bwtintv_t, *curr, ok[c]);
			}
		}
		if (curr->n == 0) break;
		swap = curr; curr = prev; prev = swap;
	}

	bwt_reverse_intvs(mem); // s.t. sorted by the start coordinate

	if (tmpvec == 0 || tmpvec[0] == 0) free(a[0].a);
	if (tmpvec == 0 || tmpvec[1] == 0) free(a[1].a);
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x500, %rsp            # imm = 0x500
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movl %r8d, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq 0x10(%rbp), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movslq -0x24(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x16, %eax
jl 0x14bc3
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x15698
cmpl $0x1, -0x28(%rbp)
jge 0x14bd0
movl $0x1, -0x28(%rbp)
movq $0x0, -0x488(%rbp)
movq $0x0, -0x490(%rbp)
movq $0x0, -0x480(%rbp)
movq $0x0, -0x470(%rbp)
movq $0x0, -0x478(%rbp)
movq $0x0, -0x468(%rbp)
cmpq $0x0, 0x18(%rbp)
je 0x14c33
movq 0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x14c33
movq 0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x4b8(%rbp)
jmp 0x14c41
leaq -0x490(%rbp), %rax
movq %rax, -0x4b8(%rbp)
movq -0x4b8(%rbp), %rax
movq %rax, -0x498(%rbp)
cmpq $0x0, 0x18(%rbp)
je 0x14c72
movq 0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x14c72
movq 0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4c0(%rbp)
jmp 0x14c84
leaq -0x490(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x4c0(%rbp)
movq -0x4c0(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq -0x24(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movq 0x8(%rax,%rcx,8), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq -0x24(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq 0x8(%rax,%rcx,8), %rax
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rdx
movslq -0x24(%rbp), %rsi
movzbl (%rdx,%rsi), %edx
movslq %edx, %rdx
subq 0x8(%rcx,%rdx,8), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq -0x24(%rbp), %rdx
movzbl (%rcx,%rdx), %edx
movl $0x15, %ecx
subl %edx, %ecx
movslq %ecx, %rcx
movq 0x8(%rax,%rcx,8), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
movq $0x0, -0x48(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
cltq
movq %rax, -0x48(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movq -0x4a0(%rbp), %rax
movq $0x0, (%rax)
movl -0x34(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x150ec
movq -0x50(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x14e41
jmp 0x14d57
movq -0x4a0(%rbp), %rax
movq (%rax), %rax
movq -0x4a0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x14df7
movq -0x4a0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x14d97
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4c8(%rbp)
jmp 0x14da5
movl $0x2, %eax
movq %rax, -0x4c8(%rbp)
jmp 0x14da5
movq -0x4c8(%rbp), %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x2526d(%rip), %rdx     # 0x3a045
movl $0x15d, %ecx            # imm = 0x15D
leaq 0x25267(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x150ec
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x16, %eax
jge 0x14ff1
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movzbl (%rax,%rcx), %ecx
movl $0x15, %eax
subl %ecx, %eax
movl %eax, -0x3c(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x460(%rbp), %rdx
leaq -0x60(%rbp), %rsi
xorl %ecx, %ecx
callq 0x14930
movslq -0x3c(%rbp), %rcx
leaq -0x460(%rbp), %rax
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
cmpq -0x50(%rbp), %rax
je 0x14faf
jmp 0x14ea4
movq -0x4a0(%rbp), %rax
movq (%rax), %rax
movq -0x4a0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x14f44
movq -0x4a0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x14ee4
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4d0(%rbp)
jmp 0x14ef2
movl $0x2, %eax
movq %rax, -0x4d0(%rbp)
jmp 0x14ef2
movq -0x4d0(%rbp), %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x25120(%rip), %rdx     # 0x3a045
movl $0x164, %ecx            # imm = 0x164
leaq 0x2511a(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
movslq -0x3c(%rbp), %rcx
leaq -0x460(%rbp), %rax
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
movslq -0x28(%rbp), %rcx
cmpq %rcx, %rax
jae 0x14fad
jmp 0x150ec
jmp 0x14faf
movslq -0x3c(%rbp), %rcx
leaq -0x460(%rbp), %rax
shlq $0x5, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x50(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
cltq
movq %rax, -0x48(%rbp)
jmp 0x150da
jmp 0x14ff3
movq -0x4a0(%rbp), %rax
movq (%rax), %rax
movq -0x4a0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x15093
movq -0x4a0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x15033
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4d8(%rbp)
jmp 0x15041
movl $0x2, %eax
movq %rax, -0x4d8(%rbp)
jmp 0x15041
movq -0x4d8(%rbp), %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x24fd1(%rip), %rdx     # 0x3a045
movl $0x169, %ecx            # imm = 0x169
leaq 0x24fcb(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x150ec
jmp 0x150dc
jmp 0x150de
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x14d3b
movl -0x34(%rbp), %eax
cmpl -0x14(%rbp), %eax
jne 0x151e1
jmp 0x150fa
movq -0x4a0(%rbp), %rax
movq (%rax), %rax
movq -0x4a0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x1519a
movq -0x4a0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x1513a
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4e0(%rbp)
jmp 0x15148
movl $0x2, %eax
movq %rax, -0x4e0(%rbp)
jmp 0x15148
movq -0x4e0(%rbp), %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x24eca(%rip), %rdx     # 0x3a045
movl $0x16e, %ecx            # imm = 0x16E
leaq 0x24ec4(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x151e1
movq -0x4a0(%rbp), %rdi
callq 0x156b0
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x18(%rax), %rax
movl %eax, -0x40(%rbp)
movq -0x4a0(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x498(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x4a8(%rbp), %rax
movq %rax, -0x498(%rbp)
movl -0x24(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x34(%rbp)
cmpl $-0x1, -0x34(%rbp)
jl 0x1564e
cmpl $0x0, -0x34(%rbp)
jge 0x1524f
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x4e4(%rbp)
jmp 0x1528d
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x16, %eax
jge 0x15274
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x4e8(%rbp)
jmp 0x15281
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x4e8(%rbp)
jmp 0x15281
movl -0x4e8(%rbp), %eax
movl %eax, -0x4e4(%rbp)
movl -0x4e4(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl $0x0, -0x38(%rbp)
movq -0x4a0(%rbp), %rax
movq $0x0, (%rax)
movslq -0x38(%rbp), %rax
movq -0x498(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x15607
movq -0x498(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x38(%rbp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, -0x4b0(%rbp)
cmpl $0x0, -0x3c(%rbp)
jl 0x15308
movq -0x50(%rbp), %rax
cmpq -0x30(%rbp), %rax
jb 0x15308
movq -0x10(%rbp), %rdi
movq -0x4b0(%rbp), %rsi
leaq -0x460(%rbp), %rdx
movl $0x1, %ecx
callq 0x14930
cmpl $0x0, -0x3c(%rbp)
jl 0x1533b
movq -0x50(%rbp), %rax
cmpq -0x30(%rbp), %rax
jb 0x1533b
movslq -0x3c(%rbp), %rcx
leaq -0x460(%rbp), %rax
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
movslq -0x28(%rbp), %rcx
cmpq %rcx, %rax
jae 0x1548f
movq -0x4a0(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x1548a
movq 0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x15389
movl -0x34(%rbp), %eax
addl $0x1, %eax
cltq
movq 0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq 0x10(%rbp), %rdx
movq (%rdx), %rdx
subq $0x1, %rdx
shlq $0x5, %rdx
addq %rdx, %rcx
movq 0x18(%rcx), %rcx
shrq $0x20, %rcx
cmpq %rcx, %rax
jae 0x15488
movq -0x4b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x50(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
cltq
shlq $0x20, %rax
orq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq 0x10(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x15447
movq 0x10(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x153f3
movq 0x10(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4f0(%rbp)
jmp 0x15401
movl $0x2, %eax
movq %rax, -0x4f0(%rbp)
jmp 0x15401
movq -0x4f0(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x10(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x24c1a(%rip), %rdx     # 0x3a045
movl $0x17d, %ecx            # imm = 0x17D
leaq 0x24c14(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x15488
jmp 0x1548a
jmp 0x155f7
movq -0x4a0(%rbp), %rax
cmpq $0x0, (%rax)
je 0x154dc
movslq -0x3c(%rbp), %rcx
leaq -0x460(%rbp), %rax
shlq $0x5, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rdx
subq $0x1, %rdx
shlq $0x5, %rdx
addq %rdx, %rcx
cmpq 0x10(%rcx), %rax
je 0x155f5
movq -0x4b0(%rbp), %rax
movq 0x18(%rax), %rcx
movslq -0x3c(%rbp), %rdx
leaq -0x460(%rbp), %rax
shlq $0x5, %rdx
addq %rdx, %rax
movq %rcx, 0x18(%rax)
movq -0x4a0(%rbp), %rax
movq (%rax), %rax
movq -0x4a0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x1559d
movq -0x4a0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x1553d
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x4f8(%rbp)
jmp 0x1554b
movl $0x2, %eax
movq %rax, -0x4f8(%rbp)
jmp 0x1554b
movq -0x4f8(%rbp), %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x4a0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x5, %rsi
leaq 0x24ac7(%rip), %rdx     # 0x3a045
movl $0x182, %ecx            # imm = 0x182
leaq 0x24ac1(%rip), %r8      # 0x3a04b
callq 0x31d40
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x4a0(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x4a0(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x5, %rcx
addq %rcx, %rax
movslq -0x3c(%rbp), %rdx
leaq -0x460(%rbp), %rcx
shlq $0x5, %rdx
addq %rdx, %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
jmp 0x155f5
jmp 0x155f7
jmp 0x155f9
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x152ab
movq -0x4a0(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x15616
jmp 0x1564e
movq -0x4a0(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x498(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x4a8(%rbp), %rax
movq %rax, -0x498(%rbp)
movl -0x34(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x15232
movq 0x10(%rbp), %rdi
callq 0x156b0
cmpq $0x0, 0x18(%rbp)
je 0x15668
movq 0x18(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x15674
movq -0x480(%rbp), %rdi
callq 0x3380
cmpq $0x0, 0x18(%rbp)
je 0x15686
movq 0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x15692
movq -0x468(%rbp), %rdi
callq 0x3380
movl -0x40(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x500, %rsp            # imm = 0x500
popq %rbp
retq
nopw %cs:(%rax,%rax)