// File: /workspace/github_c_makefile_star2_O0/nh13[P]ksw/src/ksw2/ksw2_extf2_sse.c
// Function: ksw_extf2_sse
void ksw_extf2_sse(void *km, int qlen, const uint8_t *query, int tlen, const uint8_t *target, int8_t mch, int8_t mis, int8_t e, int w, int xdrop, ksw_extz_t *ez)
{
	int32_t r, t, tlen_, qlen_, last_st, last_en, H0 = 0, last_H0_t = 0;
	uint8_t *qr, *sf, *mem;
	__m128i e2_, sc_mch_, sc_mis_, *u, *v, *s;

	ksw_reset_extz(ez);
	e2_ = _mm_set1_epi8(e * 2);
	sc_mch_ = _mm_set1_epi8(mch);
	sc_mis_ = _mm_set1_epi8(mis < 0? mis : -mis);
	tlen_ = (tlen + 15) / 16;
	qlen_ = (qlen + 15) / 16;
	if (w < 0) w = tlen > qlen? tlen : qlen;

	mem = (uint8_t*)kcalloc(km, tlen_ * 4 + qlen_ + 1, 16);
	u = (__m128i*)(((size_t)mem + 15) >> 4 << 4); // 16-byte aligned
	v = u + tlen_, s = v + tlen_, sf = (uint8_t*)(s + tlen_), qr = sf + tlen_ * 16;

	for (t = 0; t < qlen; ++t) qr[t] = query[qlen - 1 - t];
	memcpy(sf, target, tlen);

	for (r = 0, last_st = last_en = -1; r < qlen + tlen - 1; ++r) {
		int st = 0, en = tlen - 1, st0, en0, st_, en_;
		uint8_t v1, *qrr = qr + (qlen - 1 - r), *u8 = (uint8_t*)u, *v8 = (uint8_t*)v;
		__m128i v1_;
		// find the boundaries
		if (st < r - qlen + 1) st = r - qlen + 1;
		if (en > r) en = r;
		if (st < (r-w+1)>>1) st = (r-w+1)>>1; // take the ceil
		if (en > (r+w)>>1) en = (r+w)>>1; // take the floor
		if (st > en) break;
		st0 = st, en0 = en;
		st = st / 16 * 16, en = (en + 16) / 16 * 16 - 1;
		// set boundary conditions
		v1 = (st > 0 && st - 1 >= last_st && st - 1 <= last_en)? v8[st - 1] : 0;
		if (en >= r) u8[r] = 0;
		// core loop
		v1_ = _mm_cvtsi32_si128(v1);
		st_ = st / 16, en_ = en / 16;
		for (t = st0; t <= en0; t += 16) {
			__m128i sq, st, tmp;
			sq = _mm_loadu_si128((__m128i*)&sf[t]);
			st = _mm_loadu_si128((__m128i*)&qrr[t]);
			tmp = _mm_cmpeq_epi8(sq, st);
#ifdef __SSE4_1__
			tmp = _mm_blendv_epi8(sc_mis_, sc_mch_, tmp);
#else
			tmp = _mm_or_si128(_mm_andnot_si128(tmp, sc_mis_), _mm_and_si128(tmp, sc_mch_));
#endif
			_mm_storeu_si128((__m128i*)((uint8_t*)s + t), tmp);
		}
		for (t = st_; t <= en_; ++t) {
			__m128i z, vt1, ut, tmp;
			z = _mm_add_epi8(_mm_load_si128(&s[t]), e2_);
			vt1 = _mm_load_si128(&v[t]);                     // vt1 <- v[r-1][t..t+15]
			tmp = _mm_srli_si128(vt1, 15);                   // tmp <- v[r-1][t+15]
			vt1 = _mm_or_si128(_mm_slli_si128(vt1, 1), v1_); // vt1 <- v[r-1][t-1..t+14]
			v1_ = tmp;
			ut = _mm_load_si128(&u[t]);                      // ut <- u[t..t+15]
#ifdef __SSE4_1__
			z = _mm_max_epi8(z, vt1);                        // z = z > a? z : a (signed)
#else
			z = _mm_and_si128(z, _mm_cmpgt_epi8(z, _mm_setzero_si128()));  // z = z > 0? z : 0;
			z = _mm_max_epu8(z, vt1);                        // z = max(z, a); this works because both are non-negative
#endif
			z = _mm_max_epu8(z, ut);                         // z = max(z, b); this works because both are non-negative
			_mm_store_si128(&u[t], _mm_sub_epi8(z, vt1));    // u[r][t..t+15] <- z - v[r-1][t-1..t+14]
			_mm_store_si128(&v[t], _mm_sub_epi8(z, ut));     // v[r][t..t+15] <- z - u[r-1][t..t+15]
		}
		if (r > 0) {
			if (last_H0_t >= st0 && last_H0_t <= en0 && last_H0_t + 1 >= st0 && last_H0_t + 1 <= en0) {
				int32_t d0 = v8[last_H0_t] - e, d1 = u8[last_H0_t + 1] - e;
				if (d0 > d1) H0 += d0;
				else H0 += d1, ++last_H0_t;
			} else if (last_H0_t >= st0 && last_H0_t <= en0) {
				H0 += v8[last_H0_t] - e;
			} else {
				++last_H0_t, H0 += u8[last_H0_t] - e;
			}
			if (H0 > ez->max) ez->max = H0, ez->max_t = last_H0_t, ez->max_q = r - last_H0_t;
			else if (xdrop >= 0 && ez->max - H0 > xdrop) break;
		} else H0 = v8[0] - e - e, last_H0_t = 0;
		last_st = st, last_en = en;
	}
	if (r == qlen + tlen - 1) ez->score = H0;
	else ez->zdropped = 1;
	kfree(km, mem);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x430, %rsp            # imm = 0x430
movb %r9b, %al
movq 0x30(%rbp), %r9
movl 0x28(%rbp), %r9d
movl 0x20(%rbp), %r9d
movb 0x18(%rbp), %r9b
movb 0x10(%rbp), %r9b
movq %rdi, -0x2b0(%rbp)
movl %esi, -0x2b4(%rbp)
movq %rdx, -0x2c0(%rbp)
movl %ecx, -0x2c4(%rbp)
movq %r8, -0x2d0(%rbp)
movb %al, -0x2d1(%rbp)
movl $0x0, -0x2f0(%rbp)
movl $0x0, -0x2f4(%rbp)
movq 0x30(%rbp), %rdi
callq 0x1a8420
movb 0x18(%rbp), %al
addb %al, %al
movb %al, -0x2a1(%rbp)
movb -0x2a1(%rbp), %al
movb %al, -0x41a(%rbp)
movb %al, -0x41(%rbp)
movb %al, -0x42(%rbp)
movb %al, -0x43(%rbp)
movb %al, -0x44(%rbp)
movb %al, -0x45(%rbp)
movb %al, -0x46(%rbp)
movb %al, -0x47(%rbp)
movb %al, -0x48(%rbp)
movb %al, -0x49(%rbp)
movb %al, -0x4a(%rbp)
movb %al, -0x4b(%rbp)
movb %al, -0x4c(%rbp)
movb %al, -0x4d(%rbp)
movb %al, -0x4e(%rbp)
movb %al, -0x4f(%rbp)
movb %al, -0x50(%rbp)
movzbl -0x41(%rbp), %eax
movd %eax, %xmm0
movzbl -0x42(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
movzbl -0x43(%rbp), %eax
movd %eax, %xmm2
movzbl -0x44(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
punpcklwd %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movzbl -0x45(%rbp), %eax
movd %eax, %xmm1
movzbl -0x46(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
movzbl -0x47(%rbp), %eax
movd %eax, %xmm3
movzbl -0x48(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movzbl -0x49(%rbp), %eax
movd %eax, %xmm2
movzbl -0x4a(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movzbl -0x4b(%rbp), %eax
movd %eax, %xmm3
movzbl -0x4c(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
punpcklwd %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
movzbl -0x4d(%rbp), %eax
movd %eax, %xmm0
movzbl -0x4e(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
movzbl -0x4f(%rbp), %eax
movd %eax, %xmm4
movzbl -0x50(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpcklwd %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movaps %xmm0, -0x60(%rbp)
movaps -0x60(%rbp), %xmm0
movaps %xmm0, -0x320(%rbp)
movb -0x2d1(%rbp), %al
movb %al, -0x2a2(%rbp)
movb -0x2a2(%rbp), %al
movb %al, -0x419(%rbp)
movb %al, -0x21(%rbp)
movb %al, -0x22(%rbp)
movb %al, -0x23(%rbp)
movb %al, -0x24(%rbp)
movb %al, -0x25(%rbp)
movb %al, -0x26(%rbp)
movb %al, -0x27(%rbp)
movb %al, -0x28(%rbp)
movb %al, -0x29(%rbp)
movb %al, -0x2a(%rbp)
movb %al, -0x2b(%rbp)
movb %al, -0x2c(%rbp)
movb %al, -0x2d(%rbp)
movb %al, -0x2e(%rbp)
movb %al, -0x2f(%rbp)
movb %al, -0x30(%rbp)
movzbl -0x21(%rbp), %eax
movd %eax, %xmm0
movzbl -0x22(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
movzbl -0x23(%rbp), %eax
movd %eax, %xmm2
movzbl -0x24(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
punpcklwd %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movzbl -0x25(%rbp), %eax
movd %eax, %xmm1
movzbl -0x26(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
movzbl -0x27(%rbp), %eax
movd %eax, %xmm3
movzbl -0x28(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movzbl -0x29(%rbp), %eax
movd %eax, %xmm2
movzbl -0x2a(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movzbl -0x2b(%rbp), %eax
movd %eax, %xmm3
movzbl -0x2c(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
punpcklwd %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
movzbl -0x2d(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2e(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
movzbl -0x2f(%rbp), %eax
movd %eax, %xmm4
movzbl -0x30(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpcklwd %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movdqa %xmm0, -0x40(%rbp)
movdqa -0x40(%rbp), %xmm0
movdqa %xmm0, -0x330(%rbp)
movsbl 0x10(%rbp), %eax
cmpl $0x0, %eax
jge 0x1a7833
movsbl 0x10(%rbp), %eax
movl %eax, -0x420(%rbp)
jmp 0x1a7841
movsbl 0x10(%rbp), %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, -0x420(%rbp)
movl -0x420(%rbp), %eax
movb %al, -0x2a3(%rbp)
movb -0x2a3(%rbp), %al
movb %al, -0x421(%rbp)
movb %al, -0x1(%rbp)
movb %al, -0x2(%rbp)
movb %al, -0x3(%rbp)
movb %al, -0x4(%rbp)
movb %al, -0x5(%rbp)
movb %al, -0x6(%rbp)
movb %al, -0x7(%rbp)
movb %al, -0x8(%rbp)
movb %al, -0x9(%rbp)
movb %al, -0xa(%rbp)
movb %al, -0xb(%rbp)
movb %al, -0xc(%rbp)
movb %al, -0xd(%rbp)
movb %al, -0xe(%rbp)
movb %al, -0xf(%rbp)
movb %al, -0x10(%rbp)
movzbl -0x1(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
movzbl -0x3(%rbp), %eax
movd %eax, %xmm2
movzbl -0x4(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
punpcklwd %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movzbl -0x5(%rbp), %eax
movd %eax, %xmm1
movzbl -0x6(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
movzbl -0x7(%rbp), %eax
movd %eax, %xmm3
movzbl -0x8(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movzbl -0x9(%rbp), %eax
movd %eax, %xmm2
movzbl -0xa(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movzbl -0xb(%rbp), %eax
movd %eax, %xmm3
movzbl -0xc(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
punpcklwd %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
movzbl -0xd(%rbp), %eax
movd %eax, %xmm0
movzbl -0xe(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
movzbl -0xf(%rbp), %eax
movd %eax, %xmm4
movzbl -0x10(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpcklwd %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movdqa %xmm0, -0x20(%rbp)
movdqa -0x20(%rbp), %xmm0
movdqa %xmm0, -0x340(%rbp)
movl -0x2c4(%rbp), %eax
addl $0xf, %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl %eax, -0x2e0(%rbp)
movl -0x2b4(%rbp), %eax
addl $0xf, %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl %eax, -0x2e4(%rbp)
cmpl $0x0, 0x20(%rbp)
jge 0x1a79bc
movl -0x2c4(%rbp), %eax
cmpl -0x2b4(%rbp), %eax
jle 0x1a79a7
movl -0x2c4(%rbp), %eax
movl %eax, -0x428(%rbp)
jmp 0x1a79b3
movl -0x2b4(%rbp), %eax
movl %eax, -0x428(%rbp)
movl -0x428(%rbp), %eax
movl %eax, 0x20(%rbp)
movq -0x2b0(%rbp), %rdi
movl -0x2e0(%rbp), %eax
shll $0x2, %eax
addl -0x2e4(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
movl $0x10, %edx
callq 0x19e9c0
movq %rax, -0x310(%rbp)
movq -0x310(%rbp), %rax
addq $0xf, %rax
shrq $0x4, %rax
shlq $0x4, %rax
movq %rax, -0x348(%rbp)
movq -0x348(%rbp), %rax
movslq -0x2e0(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x350(%rbp)
movq -0x350(%rbp), %rax
movslq -0x2e0(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x358(%rbp)
movq -0x358(%rbp), %rax
movslq -0x2e0(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x308(%rbp)
movq -0x308(%rbp), %rax
movl -0x2e0(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x300(%rbp)
movl $0x0, -0x2dc(%rbp)
movl -0x2dc(%rbp), %eax
cmpl -0x2b4(%rbp), %eax
jge 0x1a7aca
movq -0x2c0(%rbp), %rax
movl -0x2b4(%rbp), %ecx
subl $0x1, %ecx
subl -0x2dc(%rbp), %ecx
movslq %ecx, %rcx
movb (%rax,%rcx), %dl
movq -0x300(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x2dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2dc(%rbp)
jmp 0x1a7a7e
movq -0x308(%rbp), %rdi
movq -0x2d0(%rbp), %rsi
movslq -0x2c4(%rbp), %rdx
callq 0x19e0a0
movl $0x0, -0x2d8(%rbp)
movl $0xffffffff, -0x2ec(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x2e8(%rbp) # imm = 0xFFFFFFFF
movl -0x2d8(%rbp), %eax
movl -0x2b4(%rbp), %ecx
addl -0x2c4(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1a83c1
movl $0x0, -0x35c(%rbp)
movl -0x2c4(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x360(%rbp)
movq -0x300(%rbp), %rax
movl -0x2b4(%rbp), %ecx
subl $0x1, %ecx
subl -0x2d8(%rbp), %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x380(%rbp)
movq -0x348(%rbp), %rax
movq %rax, -0x388(%rbp)
movq -0x350(%rbp), %rax
movq %rax, -0x390(%rbp)
movl -0x35c(%rbp), %eax
movl -0x2d8(%rbp), %ecx
subl -0x2b4(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x1a7ba5
movl -0x2d8(%rbp), %eax
subl -0x2b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x35c(%rbp)
movl -0x360(%rbp), %eax
cmpl -0x2d8(%rbp), %eax
jle 0x1a7bbf
movl -0x2d8(%rbp), %eax
movl %eax, -0x360(%rbp)
movl -0x35c(%rbp), %eax
movl -0x2d8(%rbp), %ecx
subl 0x20(%rbp), %ecx
addl $0x1, %ecx
sarl %ecx
cmpl %ecx, %eax
jge 0x1a7beb
movl -0x2d8(%rbp), %eax
subl 0x20(%rbp), %eax
addl $0x1, %eax
sarl %eax
movl %eax, -0x35c(%rbp)
movl -0x360(%rbp), %eax
movl -0x2d8(%rbp), %ecx
addl 0x20(%rbp), %ecx
sarl %ecx
cmpl %ecx, %eax
jle 0x1a7c11
movl -0x2d8(%rbp), %eax
addl 0x20(%rbp), %eax
sarl %eax
movl %eax, -0x360(%rbp)
movl -0x35c(%rbp), %eax
cmpl -0x360(%rbp), %eax
jle 0x1a7c24
jmp 0x1a83c1
movl -0x35c(%rbp), %eax
movl %eax, -0x364(%rbp)
movl -0x360(%rbp), %eax
movl %eax, -0x368(%rbp)
movl -0x35c(%rbp), %eax
movl $0x10, %ecx
cltd
idivl %ecx
shll $0x4, %eax
movl %eax, -0x35c(%rbp)
movl -0x360(%rbp), %eax
addl $0x10, %eax
movl $0x10, %ecx
cltd
idivl %ecx
shll $0x4, %eax
subl $0x1, %eax
movl %eax, -0x360(%rbp)
cmpl $0x0, -0x35c(%rbp)
jle 0x1a7cba
movl -0x35c(%rbp), %eax
subl $0x1, %eax
cmpl -0x2e8(%rbp), %eax
jl 0x1a7cba
movl -0x35c(%rbp), %eax
subl $0x1, %eax
cmpl -0x2ec(%rbp), %eax
jg 0x1a7cba
movq -0x390(%rbp), %rax
movl -0x35c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x42c(%rbp)
jmp 0x1a7cc4
xorl %eax, %eax
movl %eax, -0x42c(%rbp)
jmp 0x1a7cc4
movl -0x42c(%rbp), %eax
movb %al, -0x371(%rbp)
movl -0x360(%rbp), %eax
cmpl -0x2d8(%rbp), %eax
jl 0x1a7cf0
movq -0x388(%rbp), %rax
movslq -0x2d8(%rbp), %rcx
movb $0x0, (%rax,%rcx)
movzbl -0x371(%rbp), %eax
movl %eax, -0x284(%rbp)
movd -0x284(%rbp), %xmm0
movdqa %xmm0, -0x2a0(%rbp)
movdqa -0x2a0(%rbp), %xmm0
movdqa %xmm0, -0x3a0(%rbp)
movl -0x35c(%rbp), %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl %eax, -0x36c(%rbp)
movl -0x360(%rbp), %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl %eax, -0x370(%rbp)
movl -0x364(%rbp), %eax
movl %eax, -0x2dc(%rbp)
movl -0x2dc(%rbp), %eax
cmpl -0x368(%rbp), %eax
jg 0x1a7ec4
movq -0x308(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x278(%rbp)
movq -0x278(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x3b0(%rbp)
movq -0x380(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x280(%rbp)
movq -0x280(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x3c0(%rbp)
movaps -0x3b0(%rbp), %xmm1
movaps -0x3c0(%rbp), %xmm0
movaps %xmm1, -0x260(%rbp)
movaps %xmm0, -0x270(%rbp)
movaps -0x260(%rbp), %xmm0
movaps -0x270(%rbp), %xmm1
pcmpeqb %xmm1, %xmm0
movaps %xmm0, -0x3d0(%rbp)
movaps -0x3d0(%rbp), %xmm1
movaps -0x340(%rbp), %xmm0
movaps %xmm1, -0x200(%rbp)
movaps %xmm0, -0x210(%rbp)
movaps -0x200(%rbp), %xmm1
pcmpeqd %xmm0, %xmm0
pxor %xmm0, %xmm1
pand -0x210(%rbp), %xmm1
movdqa -0x3d0(%rbp), %xmm2
movdqa -0x330(%rbp), %xmm0
movdqa %xmm2, -0x1c0(%rbp)
movdqa %xmm0, -0x1d0(%rbp)
movdqa -0x1c0(%rbp), %xmm0
pand -0x1d0(%rbp), %xmm0
movdqa %xmm1, -0x220(%rbp)
movdqa %xmm0, -0x230(%rbp)
movdqa -0x220(%rbp), %xmm0
por -0x230(%rbp), %xmm0
movdqa %xmm0, -0x3d0(%rbp)
movq -0x358(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
addq %rcx, %rax
movdqa -0x3d0(%rbp), %xmm0
movq %rax, -0x198(%rbp)
movdqa %xmm0, -0x1b0(%rbp)
movdqa -0x1b0(%rbp), %xmm0
movq -0x198(%rbp), %rax
movdqu %xmm0, (%rax)
movl -0x2dc(%rbp), %eax
addl $0x10, %eax
movl %eax, -0x2dc(%rbp)
jmp 0x1a7d51
movl -0x36c(%rbp), %eax
movl %eax, -0x2dc(%rbp)
movl -0x2dc(%rbp), %eax
cmpl -0x370(%rbp), %eax
jg 0x1a81a1
movq -0x358(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rax
movaps (%rax), %xmm1
movaps -0x320(%rbp), %xmm0
movaps %xmm1, -0x180(%rbp)
movaps %xmm0, -0x190(%rbp)
movaps -0x180(%rbp), %xmm0
movaps -0x190(%rbp), %xmm1
paddb %xmm1, %xmm0
movaps %xmm0, -0x3e0(%rbp)
movq -0x350(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x160(%rbp)
movq -0x160(%rbp), %rax
movaps (%rax), %xmm0
movaps %xmm0, -0x3f0(%rbp)
movaps -0x3f0(%rbp), %xmm0
psrldq $0xf, %xmm0             # xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
movaps %xmm0, -0x410(%rbp)
movaps -0x3f0(%rbp), %xmm1
pslldq $0x1, %xmm1             # xmm1 = zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
movaps -0x3a0(%rbp), %xmm0
movaps %xmm1, -0x240(%rbp)
movaps %xmm0, -0x250(%rbp)
movaps -0x240(%rbp), %xmm0
movaps -0x250(%rbp), %xmm1
por %xmm1, %xmm0
movaps %xmm0, -0x3f0(%rbp)
movaps -0x410(%rbp), %xmm0
movaps %xmm0, -0x3a0(%rbp)
movq -0x348(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rax
movaps (%rax), %xmm0
movaps %xmm0, -0x400(%rbp)
movaps -0x3e0(%rbp), %xmm1
xorps %xmm0, %xmm0
movaps %xmm0, -0x130(%rbp)
movaps -0x130(%rbp), %xmm0
movaps %xmm1, -0x140(%rbp)
movaps %xmm0, -0x150(%rbp)
movaps -0x140(%rbp), %xmm0
movaps -0x150(%rbp), %xmm2
pcmpgtb %xmm2, %xmm0
movdqa %xmm1, -0x1e0(%rbp)
movdqa %xmm0, -0x1f0(%rbp)
movdqa -0x1e0(%rbp), %xmm0
pand -0x1f0(%rbp), %xmm0
movdqa %xmm0, -0x3e0(%rbp)
movdqa -0x3e0(%rbp), %xmm1
movdqa -0x3f0(%rbp), %xmm0
movdqa %xmm1, -0xf0(%rbp)
movdqa %xmm0, -0x100(%rbp)
movdqa -0xf0(%rbp), %xmm0
movdqa -0x100(%rbp), %xmm1
pmaxub %xmm1, %xmm0
movdqa %xmm0, -0x3e0(%rbp)
movdqa -0x3e0(%rbp), %xmm1
movdqa -0x400(%rbp), %xmm0
movdqa %xmm1, -0x110(%rbp)
movdqa %xmm0, -0x120(%rbp)
movdqa -0x110(%rbp), %xmm0
movdqa -0x120(%rbp), %xmm1
pmaxub %xmm1, %xmm0
movdqa %xmm0, -0x3e0(%rbp)
movq -0x348(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movdqa -0x3e0(%rbp), %xmm1
movdqa -0x3f0(%rbp), %xmm0
movdqa %xmm1, -0x70(%rbp)
movdqa %xmm0, -0x80(%rbp)
movdqa -0x70(%rbp), %xmm0
movdqa -0x80(%rbp), %xmm1
psubb %xmm1, %xmm0
movq %rax, -0xa8(%rbp)
movdqa %xmm0, -0xc0(%rbp)
movdqa -0xc0(%rbp), %xmm0
movq -0xa8(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x350(%rbp), %rax
movslq -0x2dc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movdqa -0x3e0(%rbp), %xmm1
movdqa -0x400(%rbp), %xmm0
movdqa %xmm1, -0x90(%rbp)
movdqa %xmm0, -0xa0(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xa0(%rbp), %xmm1
psubb %xmm1, %xmm0
movq %rax, -0xc8(%rbp)
movdqa %xmm0, -0xe0(%rbp)
movdqa -0xe0(%rbp), %xmm0
movq -0xc8(%rbp), %rax
movdqa %xmm0, (%rax)
movl -0x2dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2dc(%rbp)
jmp 0x1a7ed0
cmpl $0x0, -0x2d8(%rbp)
jle 0x1a836f
movl -0x2f4(%rbp), %eax
cmpl -0x364(%rbp), %eax
jl 0x1a8282
movl -0x2f4(%rbp), %eax
cmpl -0x368(%rbp), %eax
jg 0x1a8282
movl -0x2f4(%rbp), %eax
addl $0x1, %eax
cmpl -0x364(%rbp), %eax
jl 0x1a8282
movl -0x2f4(%rbp), %eax
addl $0x1, %eax
cmpl -0x368(%rbp), %eax
jg 0x1a8282
movq -0x390(%rbp), %rax
movslq -0x2f4(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x414(%rbp)
movq -0x388(%rbp), %rax
movl -0x2f4(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x418(%rbp)
movl -0x414(%rbp), %eax
cmpl -0x418(%rbp), %eax
jle 0x1a825f
movl -0x414(%rbp), %eax
addl -0x2f0(%rbp), %eax
movl %eax, -0x2f0(%rbp)
jmp 0x1a8280
movl -0x418(%rbp), %eax
addl -0x2f0(%rbp), %eax
movl %eax, -0x2f0(%rbp)
movl -0x2f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f4(%rbp)
jmp 0x1a82f9
movl -0x2f4(%rbp), %eax
cmpl -0x364(%rbp), %eax
jl 0x1a82c4
movl -0x2f4(%rbp), %eax
cmpl -0x368(%rbp), %eax
jg 0x1a82c4
movq -0x390(%rbp), %rax
movslq -0x2f4(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
addl -0x2f0(%rbp), %eax
movl %eax, -0x2f0(%rbp)
jmp 0x1a82f7
movl -0x2f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f4(%rbp)
movq -0x388(%rbp), %rax
movslq -0x2f4(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
addl -0x2f0(%rbp), %eax
movl %eax, -0x2f0(%rbp)
jmp 0x1a82f9
movl -0x2f0(%rbp), %eax
movq 0x30(%rbp), %rcx
movl (%rcx), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jle 0x1a834d
movl -0x2f0(%rbp), %edx
movq 0x30(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl $0x80000000, %ecx       # imm = 0x80000000
orl %edx, %ecx
movl %ecx, (%rax)
movl -0x2f4(%rbp), %ecx
movq 0x30(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x2d8(%rbp), %ecx
subl -0x2f4(%rbp), %ecx
movq 0x30(%rbp), %rax
movl %ecx, 0x4(%rax)
jmp 0x1a836d
cmpl $0x0, 0x28(%rbp)
jl 0x1a836b
movq 0x30(%rbp), %rax
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
subl -0x2f0(%rbp), %eax
cmpl 0x28(%rbp), %eax
jle 0x1a836b
jmp 0x1a83c1
jmp 0x1a836d
jmp 0x1a8395
movq -0x390(%rbp), %rax
movzbl (%rax), %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
movsbl 0x18(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x2f0(%rbp)
movl $0x0, -0x2f4(%rbp)
movl -0x35c(%rbp), %eax
movl %eax, -0x2e8(%rbp)
movl -0x360(%rbp), %eax
movl %eax, -0x2ec(%rbp)
movl -0x2d8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2d8(%rbp)
jmp 0x1a7b02
movl -0x2d8(%rbp), %eax
movl -0x2b4(%rbp), %ecx
addl -0x2c4(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x1a83e9
movl -0x2f0(%rbp), %ecx
movq 0x30(%rbp), %rax
movl %ecx, 0x1c(%rax)
jmp 0x1a83fd
movq 0x30(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl $0x80000000, %ecx       # imm = 0x80000000
movl %ecx, (%rax)
movq -0x2b0(%rbp), %rdi
movq -0x310(%rbp), %rsi
callq 0x19e3f0
addq $0x430, %rsp            # imm = 0x430
popq %rbp
retq
nopl (%rax)