// File: chhylp123[P]hifiasm/inter.cpp
// Function: gl_chain_refine_advance_combine_with_trans(mg_tbuf_s*, ul_vec_t*, overlap_region_alloc*, Correct_dumy*, haplotype_evdience_alloc*, st_mt_t*, glchain_t*, gdpchain_t*, ul_idx_t const*, double, long, long, ug_opt_t const*, long, long, void*)
int64_t gl_chain_refine_advance_combine_with_trans(mg_tbuf_t *b, ul_vec_t *rch, overlap_region_alloc* olist, Correct_dumy* dumy, haplotype_evdience_alloc *hap, st_mt_t *sps, glchain_t *ll, gdpchain_t *gdp, const ul_idx_t *uref, double diff_ec_ul, int64_t winLen, int64_t qlen, const ug_opt_t *uopt, 
int64_t debug_i, int64_t tid, void *km)
{
	ll->tk.n = ll->lo.n = 0;
	kv_ul_ov_t *idx = &(ll->lo);
	uint64_t o2 = gl_chain_gen(olist, uref, idx, 0, hap, km);
	if(idx->n == 0) return 0;
	// fprintf(stderr, "(beg0) [M::%s::tid:%ld] debug_i:%ld, qlen:%ld, # cis:%lu, # trans:%lu\n", __func__, tid, debug_i, qlen, (uint64_t)idx->n, o2);
	int64_t max_idx, occ = 0, f = 0;

	kv_resize_km(km, uint64_t, ll->srt.a, idx->n);
    kv_resize_km(km, uint64_t, hap->snp_srt, idx->n);
	kv_resize_km(km, ul_ov_t, ll->tk, idx->n);
	///chain exact U-matches
	occ = gl_chain_advance(idx, ll->tk.a, uref, uopt, G_CHAIN_BW, /**diff_ec_ul**/N_GCHAIN_RATE, qlen, UG_SKIP, dumy->overlapID, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_TRANS_WEIGHT, 0, NULL, uref->ug, debug_i, km);
	if(occ) {
		if(ff_chain(idx, qlen, 0.99/**P_CHAIN_COV**/, -1/**G_CHAIN_TRANS_RATE**/, ll->tk.a, NULL, NULL, NULL, diff_ec_ul, winLen, km)) {
			f = l2g_res_chain(uref->ug, ll->tk.a+idx->a[idx->n-1].ts, idx->a[idx->n-1].te-idx->a[idx->n-1].ts, &(gdp->swap), -1/**N_GCHAIN_RATE**/);
		} else if(o2) {///means there are trans overlaps
			gl_chain_gen(olist, uref, idx, 1, hap, km);
			kv_resize_km(km, uint64_t, ll->srt.a, idx->n);
    		kv_resize_km(km, uint64_t, hap->snp_srt, idx->n);
			kv_resize_km(km, ul_ov_t, ll->tk, idx->n);
			///chain all U-matches
			occ = gl_chain_advance(idx, ll->tk.a, uref, uopt, G_CHAIN_BW, /**diff_ec_ul**/N_GCHAIN_RATE, qlen, UG_SKIP, dumy->overlapID, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_TRANS_WEIGHT, 0, NULL, uref->ug, debug_i, km);
			if(ff_chain(idx, qlen, 0.99/**P_CHAIN_COV**/, G_CHAIN_TRANS_RATE, ll->tk.a, olist, hap, uref, diff_ec_ul, winLen, km)) {
				f = l2g_res_chain(uref->ug, ll->tk.a+idx->a[idx->n-1].ts, idx->a[idx->n-1].te-idx->a[idx->n-1].ts, &(gdp->swap), -1/**N_GCHAIN_RATE**/);
			}
		}
	}
	// fprintf(stderr, "(beg1) [M::%s] debug_i:%ld, qlen:%ld\n", __func__, debug_i, qlen);
	if(!f) {
		gl_chain_gen(olist, uref, idx, 1, hap, km);
		l2g_chain(uref, idx, &(gdp->l)); ll->tk.n = 0;
		///buffer
		kv_resize(uint64_t, ll->srt.a, gdp->l.n); kv_resize(uint64_t, hap->snp_srt, gdp->l.n);
		kv_resize(uint64_t, gdp->v, gdp->l.n); kv_resize(int64_t, gdp->f, gdp->l.n);
		max_idx = hc_gchain1_dp(b->km, uref, uref->ug, &(gdp->l), &(gdp->swap), &(gdp->dst), &(gdp->out), &(gdp->path), rch->rlen,
		uopt, G_CHAIN_BW, diff_ec_ul, -1, ll->srt.a.a, sps, gdp->f.a, hap->snp_srt.a, gdp->v.a);
		if(max_idx >= 0 && gen_max_gchain_adv(b->km, uref, debug_i, sps, &(gdp->l), &(ll->tk), NULL, rch->rlen, P_CHAIN_COV, 0.3/**P_FRAGEMENT_PRIMARY_CHAIN_COV**/, 
			0.1/**P_FRAGEMENT_PRIMARY_SECOND_COV**/, PRIMARY_UL_CHAIN_MIN, uref->ug->g, &(gdp->dst_done), &(gdp->out), &(gdp->path), ll->srt.a.a, &(gdp->swap))) {
			// print_raw_chains(&(gdp->swap), debug_i);
			f = check_trans_rate_gap(&(gdp->swap), &(ll->tk), olist, hap, uref, diff_ec_ul, winLen, G_CHAIN_TRANS_RATE);
		}
	}
	// if(debug_i == 1756) fprintf(stderr, "[M::%s] ulid:%ld, qlen:%ld, f:%ld\n", __func__, debug_i, qlen, f);
	if(f) update_ul_vec_t_ug(uref, rch, &(gdp->swap), debug_i);
	// debug_ul_vec_t_chain(km, uref->ug->g, rch, &(gdp->dst_done), &(gdp->out));
	// fprintf(stderr, "(beg3) [M::%s::tid:%ld] debug_i:%ld, qlen:%ld\n", __func__, tid, debug_i, qlen);
	return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq 0x50(%rbp), %rax
movq 0x48(%rbp), %rax
movq 0x40(%rbp), %rax
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x38(%rbp)
movq %rsi, -0x40(%rbp)
movq %rdx, -0x48(%rbp)
movq %rcx, -0x50(%rbp)
movq %r8, -0x58(%rbp)
movq %r9, -0x60(%rbp)
movsd %xmm0, -0x68(%rbp)
movq 0x10(%rbp), %rax
movq $0x0, 0x8(%rax)
movq 0x10(%rbp), %rax
movq $0x0, 0x20(%rax)
movq 0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rdi
movq 0x20(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x58(%rbp), %r8
movq 0x50(%rbp), %r9
xorl %ecx, %ecx
callq 0x28cb20
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x29d2ec
movq $0x0, -0x30(%rbp)
jmp 0x29e2ed
movq $0x0, -0x88(%rbp)
movq $0x0, -0x90(%rbp)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29d3e7
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x50(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x58(%rax), %rsi
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x29d3e9
jmp 0x29d3eb
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29d518
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x50(%rbp), %rdi
movq -0x58(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x29d51a
jmp 0x29d51c
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29d5fe
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x50(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq 0x10(%rbp), %rax
imulq $0x1c, 0x28(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x29d600
movq -0x70(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq 0x20(%rbp), %rdx
movq 0x38(%rbp), %rcx
movq 0x30(%rbp), %r9
movq -0x50(%rbp), %rax
movq 0x28(%rax), %r15
movq 0x10(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x58(%rbp), %rax
movq 0x248(%rax), %rbx
movq 0x20(%rbp), %rax
movq (%rax), %r11
movq 0x40(%rbp), %r10
movq 0x50(%rbp), %rax
movl $0x10, %r8d
movsd 0xe19e0(%rip), %xmm0    # 0x37f030
xorl %r12d, %r12d
movq $0x5, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq $-0x1, 0x20(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x292be0
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
je 0x29dc39
movq -0x70(%rbp), %rdi
movq 0x30(%rbp), %rsi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rdx
movsd -0x68(%rbp), %xmm2
movq 0x28(%rbp), %r10
movq 0x50(%rbp), %rax
movss 0xf30b9(%rip), %xmm0    # 0x39078c
movss 0xe1995(%rip), %xmm1    # 0x37f070
xorl %ecx, %ecx
movl %ecx, %r9d
movq %r9, %rcx
movq %r9, %r8
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x294890
cmpl $0x0, %eax
je 0x29d78f
movq 0x20(%rbp), %rax
movq (%rax), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
imulq $0x1c, %rax, %rax
addq %rax, %rsi
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movq -0x70(%rbp), %rcx
movq (%rcx), %rcx
movq -0x70(%rbp), %rdx
movq 0x8(%rdx), %rdx
subq $0x1, %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
subl 0x10(%rcx), %eax
movl %eax, %eax
movl %eax, %edx
movq 0x18(%rbp), %rcx
addq $0x18, %rcx
movsd 0xe4afa(%rip), %xmm0    # 0x382278
callq 0x298a10
movq %rax, -0x90(%rbp)
jmp 0x29dc37
cmpq $0x0, -0x78(%rbp)
je 0x29dc35
movq -0x48(%rbp), %rdi
movq 0x20(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x58(%rbp), %r8
movq 0x50(%rbp), %r9
movl $0x1, %ecx
callq 0x28cb20
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29d89d
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x50(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x58(%rax), %rsi
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x29d89f
jmp 0x29d8a1
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29d9ce
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x50(%rbp), %rdi
movq -0x58(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x29d9d0
jmp 0x29d9d2
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x70(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29dab4
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq 0x10(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq 0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x50(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq 0x10(%rbp), %rax
imulq $0x1c, 0x28(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x29dab6
movq -0x70(%rbp), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq 0x20(%rbp), %rdx
movq 0x38(%rbp), %rcx
movq 0x30(%rbp), %r9
movq -0x50(%rbp), %rax
movq 0x28(%rax), %r15
movq 0x10(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x58(%rbp), %rax
movq 0x248(%rax), %rbx
movq 0x20(%rbp), %rax
movq (%rax), %r11
movq 0x40(%rbp), %r10
movq 0x50(%rbp), %rax
movl $0x10, %r8d
movsd 0xe152a(%rip), %xmm0    # 0x37f030
xorl %r12d, %r12d
movq $0x5, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq $-0x1, 0x20(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x292be0
movq %rax, -0x88(%rbp)
movq -0x70(%rbp), %rdi
movq 0x30(%rbp), %rsi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x48(%rbp), %rcx
movq -0x58(%rbp), %r8
movq 0x20(%rbp), %r9
movsd -0x68(%rbp), %xmm2
movq 0x28(%rbp), %r10
movq 0x50(%rbp), %rax
movss 0xf2c05(%rip), %xmm0    # 0x39078c
movss 0xf2bf5(%rip), %xmm1    # 0x390784
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x294890
cmpl $0x0, %eax
je 0x29dc33
movq 0x20(%rbp), %rax
movq (%rax), %rdi
movq 0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
imulq $0x1c, %rax, %rax
addq %rax, %rsi
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movq -0x70(%rbp), %rcx
movq (%rcx), %rcx
movq -0x70(%rbp), %rdx
movq 0x8(%rdx), %rdx
subq $0x1, %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
subl 0x10(%rcx), %eax
movl %eax, %eax
movl %eax, %edx
movq 0x18(%rbp), %rcx
addq $0x18, %rcx
movsd 0xe4651(%rip), %xmm0    # 0x382278
callq 0x298a10
movq %rax, -0x90(%rbp)
jmp 0x29dc35
jmp 0x29dc37
jmp 0x29dc39
cmpq $0x0, -0x90(%rbp)
jne 0x29e2c2
movq -0x48(%rbp), %rdi
movq 0x20(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x58(%rbp), %r8
movq 0x50(%rbp), %r9
movl $0x1, %ecx
callq 0x28cb20
movq 0x20(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq 0x18(%rbp), %rdx
callq 0x298710
movq 0x10(%rbp), %rax
movq $0x0, 0x20(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29dd63
movq 0x18(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq 0x10(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x10(%rbp), %rax
movq 0x58(%rax), %rdi
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x29dd65
jmp 0x29dd67
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rax
movq 0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29de90
movq 0x18(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x58(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x58(%rbp), %rax
movq 0x248(%rax), %rdi
movq -0x58(%rbp), %rax
movq 0x240(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x29de92
jmp 0x29de94
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rax
movq 0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29dfbd
movq 0x18(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
shrq %rcx
movq 0x18(%rbp), %rax
orq 0x80(%rax), %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
shrq $0x2, %rcx
movq 0x18(%rbp), %rax
orq 0x80(%rax), %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
shrq $0x4, %rcx
movq 0x18(%rbp), %rax
orq 0x80(%rax), %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
shrq $0x8, %rcx
movq 0x18(%rbp), %rax
orq 0x80(%rax), %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
shrq $0x10, %rcx
movq 0x18(%rbp), %rax
orq 0x80(%rax), %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x80(%rax)
movq 0x18(%rbp), %rax
movq 0x88(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x80(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
jmp 0x29dfbf
jmp 0x29dfc1
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x29e0ea
movq 0x18(%rbp), %rax
movq 0x8(%rax), %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
shrq %rcx
movq 0x18(%rbp), %rax
orq 0x98(%rax), %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
shrq $0x2, %rcx
movq 0x18(%rbp), %rax
orq 0x98(%rax), %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
shrq $0x4, %rcx
movq 0x18(%rbp), %rax
orq 0x98(%rax), %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
shrq $0x8, %rcx
movq 0x18(%rbp), %rax
orq 0x98(%rax), %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
shrq $0x10, %rcx
movq 0x18(%rbp), %rax
orq 0x98(%rax), %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x98(%rax)
movq 0x18(%rbp), %rax
movq 0xa0(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x98(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0xa0(%rax)
jmp 0x29e0ec
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq 0x20(%rbp), %rsi
movq 0x20(%rbp), %rax
movq (%rax), %rdx
movq 0x18(%rbp), %rcx
movq 0x18(%rbp), %r8
addq $0x18, %r8
movq 0x18(%rbp), %r9
addq $0x30, %r9
movq 0x18(%rbp), %rax
addq $0x48, %rax
movq %rax, -0xa0(%rbp)
movq 0x18(%rbp), %r13
addq $0x60, %r13
movq -0x40(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %r12d
movq 0x38(%rbp), %r15
movsd -0x68(%rbp), %xmm0
movq 0x10(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x60(%rbp), %rbx
movq 0x18(%rbp), %rax
movq 0xa0(%rax), %r11
movq -0x58(%rbp), %rax
movq 0x248(%rax), %r10
movq 0x18(%rbp), %rax
movq 0x88(%rax), %rax
movq %rax, -0x98(%rbp)
movq -0xa0(%rbp), %rax
movsd 0xe40f9(%rip), %xmm1    # 0x382278
movq %rax, (%rsp)
movq -0x98(%rbp), %rax
movq %r13, 0x8(%rsp)
movq %r12, 0x10(%rsp)
movq %r15, 0x18(%rsp)
movq $0x10, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq %rbx, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x29e310
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
jl 0x29e2c0
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq 0x20(%rbp), %rsi
movq 0x40(%rbp), %rdx
movq -0x60(%rbp), %rcx
movq 0x18(%rbp), %r8
movq 0x10(%rbp), %r9
addq $0x18, %r9
movq -0x40(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %r12d
movq 0x20(%rbp), %rax
movq (%rax), %rax
movq 0x18(%rax), %r15
movq 0x18(%rbp), %r14
addq $0xa8, %r14
movq 0x18(%rbp), %rbx
addq $0x48, %rbx
movq 0x18(%rbp), %r11
addq $0x60, %r11
movq 0x10(%rbp), %rax
movq 0x58(%rax), %r10
movq 0x18(%rbp), %rax
addq $0x18, %rax
xorl %r13d, %r13d
movss 0xf2547(%rip), %xmm0    # 0x390780
movss 0xf254f(%rip), %xmm1    # 0x390790
movss 0xe864f(%rip), %xmm2    # 0x386898
movq $0x0, (%rsp)
movq %r12, 0x8(%rsp)
movq $0x124f8, 0x10(%rsp)    # imm = 0x124F8
movq %r15, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movq %rbx, 0x28(%rsp)
movq %r11, 0x30(%rsp)
movq %r10, 0x38(%rsp)
movq %rax, 0x40(%rsp)
callq 0x29f9f0
cmpl $0x0, %eax
je 0x29e2c0
movq 0x18(%rbp), %rdi
addq $0x18, %rdi
movq 0x10(%rbp), %rsi
addq $0x18, %rsi
movq -0x48(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq 0x20(%rbp), %r8
movsd -0x68(%rbp), %xmm0
movq 0x28(%rbp), %r9
movss 0xf24d0(%rip), %xmm1    # 0x390784
callq 0x299a90
movq %rax, -0x90(%rbp)
jmp 0x29e2c2
cmpq $0x0, -0x90(%rbp)
je 0x29e2e5
movq 0x20(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq 0x18(%rbp), %rdx
addq $0x18, %rdx
movq 0x40(%rbp), %rcx
callq 0x29b090
movq $0x1, -0x30(%rbp)
movq -0x30(%rbp), %rax
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)