// File: chhylp123[P]hifiasm/inter.cpp
// Function: select_max_gchain(void*, ul_idx_t const*, long, st_mt_t*, vec_mg_lchain_t*, kv_ul_ov_t*, asg_t const*, st_mt_t*, vec_sp_node_t*, vec_mg_pathv_t*, vec_mg_lchain_t*)
uint32_t select_max_gchain(void *km, const ul_idx_t *uref, int64_t ulid, st_mt_t *idx, vec_mg_lchain_t *e, kv_ul_ov_t *raw_idx, 
const asg_t *g, st_mt_t *dst_done, vec_sp_node_t *out, vec_mg_pathv_t *res, vec_mg_lchain_t *gchains)
{
	gchains->n = 0;
    if(idx->n <= 0) return 0;
    int64_t a_n, idx_n = idx->n, i, k, n_mchain = 0, min_sc, max_sc; uint64_t om, ok, ovlp; 
    ul_ov_t *m = NULL, *p = NULL, kp; mg_lchain_t *a = e->a, *g_item; int64_t raw_idx_n = raw_idx->n;
    ul_ov_t *gb = NULL; int64_t gb_n = 0;
    for (i = a_n = 0; i < idx_n; ++i) {
        kv_pushp(ul_ov_t, *raw_idx, &p);
        p->qn = ((int64_t)(idx->a[i]>>32));//score
        p->ts = a_n; p->te = a_n + ((uint32_t)idx->a[i]);
        p->qs = a[p->ts].qs; p->qe = a[p->te-1].qe; p->tn = 1;//(tn = 1) -> normal; (t = 0) -> duplicated chain
        a_n += ((uint32_t)idx->a[i]);
    }
    gb = raw_idx->a + raw_idx_n; gb_n = raw_idx->n - raw_idx_n;
    radix_sort_ul_ov_srt_qn(gb, gb + gb_n);//sort by scores
	for (k = 0, n_mchain = gb_n>>1; k < n_mchain; k++) {
		kp = gb[k]; gb[k] = gb[gb_n-k-1]; gb[gb_n-k-1] = kp;
	}
	
	for (k = 0; k < gb_n; k++) {//filter too close chains
		m = &(gb[k]); om = m->qe - m->qs; ///current chain
		// fprintf(stderr, "k::%ld[M::%s::sc->%u] q::[%u, %u), set::%u\n", k, __func__, m->qn, m->qs, m->qe, m->tn);
		if(m->tn == 0) continue;
		for (i = k-1; i >= 0; i--) {
			p = &(gb[i]);
			ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
			if(ovlp == 0) continue;
			min_sc = MIN(p->qn, m->qn); max_sc = MAX(p->qn, m->qn);
			ok = p->qe - p->qs; ok = MAX(ok, om);
			if(min_sc < (max_sc*0.98)) break;
			if((ovlp > GC_OFFSET_POS) && (min_sc > (max_sc*0.98)) && (ovlp > (ok*0.8))) {
				// fprintf(stderr, "k::%ld[M::%s::i->%ld] min_sc::%ld, max_sc::%ld\n", 
				// k, __func__, i, min_sc, max_sc);
				m->tn = p->tn = 0;
			}
		}

		for (i = k+1; i < gb_n; i++) {
			p = &(gb[i]);
			ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
			if(ovlp == 0) continue;
			min_sc = MIN(p->qn, m->qn); max_sc = MAX(p->qn, m->qn);
			ok = p->qe - p->qs; ok = MAX(ok, om);
			if(min_sc < (max_sc*0.98)) break;
			if((ovlp > GC_OFFSET_POS) && (min_sc > (max_sc*0.98)) && (ovlp > (ok*0.8))) {
				// fprintf(stderr, "k::%ld[M::%s::i->%ld] min_sc::%ld, max_sc::%ld\n", 
				// k, __func__, i, min_sc, max_sc);
				m->tn = p->tn = 0;
			}
		}
	}

	for (k = i = 0; k < gb_n; k++) {
		m = &(gb[k]); if(m->tn == 0) continue;
		gb[i++] = gb[k];
	}
	// fprintf(stderr, "[M::%s::] gb_n0::%ld, gb_n::%ld\n", __func__, gb_n, i);
	gb_n = i;

	for (k = n_mchain = 0; k < gb_n; k++) {
		m = &(gb[k]); om = m->qe - m->qs;
		for (i = 0; i < n_mchain; i++) {
			p = &(gb[i]);
			ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
			if(ovlp == 0) continue;
			ok = p->qe - p->qs;
			if((ovlp > ok*0.1) || (ovlp > om*0.1)) break;
		}
		if(i < n_mchain) continue;
		gb[n_mchain++] = gb[k];
	}
	gb_n = n_mchain;

	if(gb_n) {
		gchains->n = 0;
		for (k = 0; k < gb_n; k++) {
			kv_pushp(mg_lchain_t, *gchains, &g_item);
			g_item->v = (uint32_t)-1; 
			g_item->qs = gb[k].qs; g_item->qe = gb[k].qe; 
			g_item->rs = gb[k].ts; g_item->re = gb[k].te; 
			g_item->cnt = g_item->off = 0;
			gen_gchain_track(km, a + g_item->rs, g_item->re - g_item->rs, g, dst_done, out, res);
			kv_resize(mg_lchain_t, *gchains, gchains->n + res->n); ///a = gchains->a + gchains->n;
			for (i = 0, g_item = &(gchains->a[gchains->n-1]); i < ((int64_t)res->n); i++) {
				if(res->a[i].v == (uint32_t)-1) {
					gchains->a[i+gchains->n] = a[res->a[i].pre + g_item->rs]; 
					gchains->a[i+gchains->n].dist_pre = res->a[i].d;
					// if(ulid == 14714) {
					// 	fprintf(stderr, "+[M::%s::]\tutg%.6dl(%c)\tq::[%d, %d)\tt::[%d, %d)\n", __func__, 
					// 		(int32_t)(gchains->a[i+gchains->n].v>>1)+1, "+-"[gchains->a[i+gchains->n].v&1],
					// 		gchains->a[i+gchains->n].qs, gchains->a[i+gchains->n].qe,
					// 		gchains->a[i+gchains->n].rs, gchains->a[i+gchains->n].re);
					// }
				} else {
					gchains->a[i+gchains->n].v = res->a[i].v; 
					gchains->a[i+gchains->n].off = -1; 
					gchains->a[i+gchains->n].dist_pre = res->a[i].d;
					///the nodes detected by the graph chaining should be fully covered
					gchains->a[i+gchains->n].rs = 0;
					gchains->a[i+gchains->n].re = uref->ug->g->seq[res->a[i].v>>1].len;
					// fprintf(stderr, "aaaaaaa, ulid->%ld\n", ulid);
					// fprintf(stderr, "-[M::%s::]\tutg%.6dl(%c)\n", __func__, 
					// (int32_t)(gchains->a[i+gchains->n].v>>1)+1, "+-"[gchains->a[i+gchains->n].v&1]);
					// if(ulid == 14714) {
					// 	fprintf(stderr, "-[M::%s::]\tutg%.6dl(%c)\tq::[%d, %d)\tt::[%d, %d)\n", __func__, 
					// 		(int32_t)(gchains->a[i+gchains->n].v>>1)+1, "+-"[gchains->a[i+gchains->n].v&1],
					// 		gchains->a[i+gchains->n].qs, gchains->a[i+gchains->n].qe,
					// 		gchains->a[i+gchains->n].rs, gchains->a[i+gchains->n].re);
					// }
				}
			}
			g_item->cnt = res->n;
			gchains->n += res->n;
			// fprintf(stderr, "sbsbsbsb, ulid->%ld\n", ulid);
			// debug_gchain(km, g, gchains->a + gchains->n - res->n, res->n, dst_done, out);
		}
	}

	raw_idx->n = raw_idx_n;
    return n_mchain;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq 0x30(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
ja 0x2a8649
movl $0x0, -0x4(%rbp)
jmp 0x2a989c
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0x98(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xc0(%rbp)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xd0(%rbp)
movq $0x0, -0xd8(%rbp)
movq $0x0, -0xe0(%rbp)
movq $0x0, -0x40(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x48(%rbp), %rax
jge 0x2a8836
jmp 0x2a86c5
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x38(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x2a8732
movq -0x38(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2a86f6
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
shlq %rax
movq %rax, -0xe8(%rbp)
jmp 0x2a8704
movl $0x2, %eax
movq %rax, -0xe8(%rbp)
jmp 0x2a8704
movq -0xe8(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq -0x38(%rbp), %rax
imulq $0x1c, 0x10(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rax
shrq $0x20, %rax
movl %eax, %ecx
movq -0x98(%rbp), %rax
movl %ecx, (%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0x98(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x40(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x50(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl %ecx, %ecx
addq %rcx, %rax
movl %eax, %ecx
movq -0x98(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xc0(%rbp), %rax
movq -0x98(%rbp), %rcx
movl 0x10(%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x14(%rax), %ecx
movq -0x98(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xc0(%rbp), %rax
movq -0x98(%rbp), %rcx
movl 0x14(%rcx), %ecx
subl $0x1, %ecx
movl %ecx, %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
movq -0x98(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x98(%rbp), %rax
movl $0x1, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl %eax, %eax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2a86b5
movq -0x38(%rbp), %rax
movq (%rax), %rax
imulq $0x1c, -0xd0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xd8(%rbp)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
subq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xd8(%rbp), %rdi
movq -0xd8(%rbp), %rsi
imulq $0x1c, -0xe0(%rbp), %rax
addq %rax, %rsi
callq 0x27c310
movq $0x0, -0x58(%rbp)
movq -0xe0(%rbp), %rax
sarq %rax
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x60(%rbp), %rax
jge 0x2a897e
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0xb4(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xac(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0xa4(%rbp)
movl 0x18(%rax), %eax
movl %eax, -0x9c(%rbp)
movq -0xd8(%rbp), %rcx
movq -0xe0(%rbp), %rax
subq -0x58(%rbp), %rax
subq $0x1, %rax
imulq $0x1c, %rax, %rax
addq %rax, %rcx
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0xd8(%rbp), %rax
movq -0xe0(%rbp), %rcx
subq -0x58(%rbp), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq -0xb4(%rbp), %rcx
movq %rcx, (%rax)
movq -0xac(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xa4(%rbp), %rcx
movq %rcx, 0x10(%rax)
movl -0x9c(%rbp), %ecx
movl %ecx, 0x18(%rax)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x2a8899
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x2a9012
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x90(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq -0x90(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x2a89d9
jmp 0x2a9001
movq -0x58(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jl 0x2a8ce9
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a8a2e
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xec(%rbp)
jmp 0x2a8a3e
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xec(%rbp)
movl -0xec(%rbp), %eax
movl %eax, -0xf0(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a8a72
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xf4(%rbp)
jmp 0x2a8a82
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xf4(%rbp)
movl -0xf0(%rbp), %eax
movl -0xf4(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2a8b28
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a8abe
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xf8(%rbp)
jmp 0x2a8ace
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %eax
movl %eax, -0xfc(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a8b02
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x100(%rbp)
jmp 0x2a8b12
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x100(%rbp)
movl -0xfc(%rbp), %eax
movl -0x100(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x104(%rbp)
jmp 0x2a8b32
xorl %eax, %eax
movl %eax, -0x104(%rbp)
jmp 0x2a8b32
movl -0x104(%rbp), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
jne 0x2a8b50
jmp 0x2a8cd8
movq -0x98(%rbp), %rax
movl (%rax), %eax
movq -0x90(%rbp), %rcx
cmpl (%rcx), %eax
ja 0x2a8b75
movq -0x98(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x108(%rbp)
jmp 0x2a8b84
movq -0x90(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
movl %eax, %eax
movq %rax, -0x68(%rbp)
movq -0x98(%rbp), %rax
movl (%rax), %eax
movq -0x90(%rbp), %rcx
cmpl (%rcx), %eax
jb 0x2a8bb5
movq -0x98(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x10c(%rbp)
jmp 0x2a8bc4
movq -0x90(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x10c(%rbp)
movl -0x10c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x70(%rbp)
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq -0x78(%rbp), %rax
jb 0x2a8c01
movq -0x80(%rbp), %rax
movq %rax, -0x118(%rbp)
jmp 0x2a8c0c
movq -0x78(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x80(%rbp)
cvtsi2sdq -0x68(%rbp), %xmm1
cvtsi2sdq -0x70(%rbp), %xmm0
movsd 0xe7b0d(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2a8c3a
jmp 0x2a8ce9
cmpq $0x8, -0x88(%rbp)
jbe 0x2a8cd6
cvtsi2sdq -0x68(%rbp), %xmm0
cvtsi2sdq -0x70(%rbp), %xmm1
movsd 0xe7adc(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a8cd6
movq -0x88(%rbp), %xmm0
movaps 0xd939b(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xd939f(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x80(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd9580(%rip), %xmm2    # 0x382230
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a8cd6
movq -0x98(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x90(%rbp), %rax
movl $0x0, 0xc(%rax)
jmp 0x2a8cd8
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2a89e5
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x2a8fff
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a8d44
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x11c(%rbp)
jmp 0x2a8d54
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x120(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a8d88
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x124(%rbp)
jmp 0x2a8d98
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x124(%rbp)
movl -0x120(%rbp), %eax
movl -0x124(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2a8e3e
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a8dd4
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x128(%rbp)
jmp 0x2a8de4
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x128(%rbp)
movl -0x128(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a8e18
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x130(%rbp)
jmp 0x2a8e28
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x130(%rbp)
movl -0x12c(%rbp), %eax
movl -0x130(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x134(%rbp)
jmp 0x2a8e48
xorl %eax, %eax
movl %eax, -0x134(%rbp)
jmp 0x2a8e48
movl -0x134(%rbp), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
jne 0x2a8e66
jmp 0x2a8fee
movq -0x98(%rbp), %rax
movl (%rax), %eax
movq -0x90(%rbp), %rcx
cmpl (%rcx), %eax
ja 0x2a8e8b
movq -0x98(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x138(%rbp)
jmp 0x2a8e9a
movq -0x90(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x138(%rbp)
movl -0x138(%rbp), %eax
movl %eax, %eax
movq %rax, -0x68(%rbp)
movq -0x98(%rbp), %rax
movl (%rax), %eax
movq -0x90(%rbp), %rcx
cmpl (%rcx), %eax
jb 0x2a8ecb
movq -0x98(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x13c(%rbp)
jmp 0x2a8eda
movq -0x90(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x13c(%rbp)
movl -0x13c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x70(%rbp)
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq -0x78(%rbp), %rax
jb 0x2a8f17
movq -0x80(%rbp), %rax
movq %rax, -0x148(%rbp)
jmp 0x2a8f22
movq -0x78(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
movq %rax, -0x80(%rbp)
cvtsi2sdq -0x68(%rbp), %xmm1
cvtsi2sdq -0x70(%rbp), %xmm0
movsd 0xe77f7(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2a8f50
jmp 0x2a8fff
cmpq $0x8, -0x88(%rbp)
jbe 0x2a8fec
cvtsi2sdq -0x68(%rbp), %xmm0
cvtsi2sdq -0x70(%rbp), %xmm1
movsd 0xe77c6(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a8fec
movq -0x88(%rbp), %xmm0
movaps 0xd9085(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xd9089(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x80(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd926a(%rip), %xmm2    # 0x382230
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a8fec
movq -0x98(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x90(%rbp), %rax
movl $0x0, 0xc(%rax)
jmp 0x2a8fee
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2a8cf5
jmp 0x2a9001
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x2a8986
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x2a90ad
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x2a9054
jmp 0x2a909c
movq -0xd8(%rbp), %rcx
imulq $0x1c, -0x58(%rbp), %rax
addq %rax, %rcx
movq -0xd8(%rbp), %rax
movq -0x50(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0x50(%rbp)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x2a9022
movq -0x50(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x2a93b4
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x90(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x60(%rbp), %rax
jge 0x2a934f
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a915d
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x14c(%rbp)
jmp 0x2a916d
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x14c(%rbp)
movl -0x14c(%rbp), %eax
movl %eax, -0x150(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a91a1
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x154(%rbp)
jmp 0x2a91b1
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x154(%rbp)
movl -0x150(%rbp), %eax
movl -0x154(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2a9257
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2a91ed
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x158(%rbp)
jmp 0x2a91fd
movq -0x98(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x158(%rbp)
movl -0x158(%rbp), %eax
movl %eax, -0x15c(%rbp)
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x98(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2a9231
movq -0x90(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x160(%rbp)
jmp 0x2a9241
movq -0x98(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x160(%rbp)
movl -0x15c(%rbp), %eax
movl -0x160(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x164(%rbp)
jmp 0x2a9261
xorl %eax, %eax
movl %eax, -0x164(%rbp)
jmp 0x2a9261
movl -0x164(%rbp), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
jne 0x2a927f
jmp 0x2a933e
movq -0x98(%rbp), %rax
movl 0x4(%rax), %ecx
movl 0x8(%rax), %eax
subl %ecx, %eax
movq %rax, -0x80(%rbp)
movaps 0xd8d77(%rip), %xmm3    # 0x382010
movq -0x88(%rbp), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xd8d73(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x80(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd5d3c(%rip), %xmm2    # 0x37f018
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
ja 0x2a933a
movq -0x88(%rbp), %xmm0
movaps 0xd8d1b(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xd8d1f(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x78(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd5ce8(%rip), %xmm2    # 0x37f018
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a933c
jmp 0x2a934f
jmp 0x2a933e
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2a9111
movq -0x50(%rbp), %rax
cmpq -0x60(%rbp), %rax
jge 0x2a935b
jmp 0x2a93a3
movq -0xd8(%rbp), %rcx
imulq $0x1c, -0x58(%rbp), %rax
addq %rax, %rcx
movq -0xd8(%rbp), %rax
movq -0x60(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0x60(%rbp)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x2a90c8
movq -0x60(%rbp), %rax
movq %rax, -0xe0(%rbp)
cmpq $0x0, -0xe0(%rbp)
je 0x2a9886
movq 0x30(%rbp), %rax
movq $0x0, 0x8(%rax)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x2a9884
jmp 0x2a93f4
movq 0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x2a9461
movq 0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2a9425
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rax
shlq %rax
movq %rax, -0x170(%rbp)
jmp 0x2a9433
movl $0x2, %eax
movq %rax, -0x170(%rbp)
jmp 0x2a9433
movq -0x170(%rbp), %rcx
movq 0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq (%rax), %rdi
movq 0x30(%rbp), %rax
imulq $0x28, 0x10(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq 0x30(%rbp), %rax
movq %rcx, (%rax)
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rbp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0xd8(%rbp), %rax
imulq $0x1c, -0x58(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0xc8(%rbp), %rax
movl $0x0, (%rax)
movq -0xc8(%rbp), %rax
movl 0x4(%rax), %ecx
andl $0x80000000, %ecx       # imm = 0x80000000
orl $0x0, %ecx
movl %ecx, 0x4(%rax)
movq -0x10(%rbp), %rdi
movq -0xc0(%rbp), %rsi
movq -0xc8(%rbp), %rax
movslq 0xc(%rax), %rax
imulq $0x28, %rax, %rax
addq %rax, %rsi
movq -0xc8(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xc8(%rbp), %rcx
subl 0xc(%rcx), %eax
movslq %eax, %rdx
movq 0x10(%rbp), %rcx
movq 0x18(%rbp), %r8
movq 0x20(%rbp), %r9
movq 0x28(%rbp), %rax
movq %rax, (%rsp)
callq 0x2a98b0
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq 0x28(%rbp), %rdx
addq 0x8(%rdx), %rcx
cmpq %rcx, %rax
jae 0x2a9666
movq 0x30(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rbp), %rax
addq 0x8(%rax), %rcx
movq 0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
shrq %rcx
movq 0x30(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
shrq $0x2, %rcx
movq 0x30(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
shrq $0x4, %rcx
movq 0x30(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
shrq $0x8, %rcx
movq 0x30(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
shrq $0x10, %rcx
movq 0x30(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rax
movq (%rax), %rdi
movq 0x30(%rbp), %rax
imulq $0x28, 0x10(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq 0x30(%rbp), %rax
movq %rcx, (%rax)
jmp 0x2a9668
movq $0x0, -0x50(%rbp)
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0x50(%rbp), %rax
movq 0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jge 0x2a983a
movq 0x28(%rbp), %rax
movq (%rax), %rax
imulq $0xc, -0x50(%rbp), %rcx
addq %rcx, %rax
cmpl $-0x1, (%rax)
jne 0x2a973f
movq -0xc0(%rbp), %rsi
movq 0x28(%rbp), %rax
movq (%rax), %rax
imulq $0xc, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movq -0xc8(%rbp), %rcx
addl 0xc(%rcx), %eax
cltq
imulq $0x28, %rax, %rax
addq %rax, %rsi
movq 0x30(%rbp), %rax
movq (%rax), %rdi
movq -0x50(%rbp), %rax
movq 0x30(%rbp), %rcx
addq 0x8(%rcx), %rax
imulq $0x28, %rax, %rax
addq %rax, %rdi
movl $0x28, %edx
callq 0x2180
movq 0x28(%rbp), %rax
movq (%rax), %rax
imulq $0xc, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %ecx
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rdx
movq 0x30(%rbp), %rsi
addq 0x8(%rsi), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
jmp 0x2a9827
movq 0x28(%rbp), %rax
movq (%rax), %rax
imulq $0xc, -0x50(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %ecx
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rdx
movq 0x30(%rbp), %rsi
addq 0x8(%rsi), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x8(%rax)
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rcx
movq 0x30(%rbp), %rdx
addq 0x8(%rdx), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movq 0x28(%rbp), %rax
movq (%rax), %rax
imulq $0xc, -0x50(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %ecx
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rdx
movq 0x30(%rbp), %rsi
addq 0x8(%rsi), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x20(%rax)
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rcx
movq 0x30(%rbp), %rdx
addq 0x8(%rdx), %rcx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0xc(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rbp), %rcx
movq (%rcx), %rcx
imulq $0xc, -0x50(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
shrl %ecx
movl %ecx, %ecx
movl (%rax,%rcx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movq 0x30(%rbp), %rax
movq (%rax), %rax
movq -0x50(%rbp), %rdx
movq 0x30(%rbp), %rsi
addq 0x8(%rsi), %rdx
imulq $0x28, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
jmp 0x2a9829
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2a9691
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, %edx
movq -0xc8(%rbp), %rax
movl 0x4(%rax), %ecx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl $0x80000000, %ecx       # imm = 0x80000000
orl %edx, %ecx
movl %ecx, 0x4(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x30(%rbp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x2a93e1
jmp 0x2a9886
movq -0xd0(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
nopl (%rax,%rax)