// File: BenLangmead[P]bowtie/./ebwt.h
// Function: Ebwt::report(SDnaStringExpandable<25, 2> const&, SStringExpandable<char, 25, 2, 0>*, SStringExpandable<char, 25, 2, 0>*, EList<unsigned int, 128> const&, EList<unsigned char, 128> const&, unsigned long, unsigned int, unsigned int, unsigned int, unsigned int, int, unsigned short, unsigned int, unsigned int, EbwtSearchParams const&) const
inline bool Ebwt::report(const BTDnaString& query,
			 BTString* quals,
			 BTString* name,
			 const EList<TIndexOffU>& mmui32,
			 const EList<uint8_t>& refcs,
			 size_t numMms,
			 TIndexOffU off,
			 TIndexOffU top,
			 TIndexOffU bot,
			 uint32_t qlen,
			 int stratum,
			 uint16_t cost,
			 uint32_t patid,
			 uint32_t seed,
			 const EbwtSearchParams& params) const
{
	VMSG_NL("In report");
	assert_geq(cost, (uint32_t)(stratum << 14));
	assert_lt(off, this->_eh._len);
	TIndexOffU tidx;
	TIndexOffU textoff;
	TIndexOffU tlen;
	joinedToTextOff(qlen, off, tidx, textoff, tlen);
	if(tidx == OFF_MASK) {
		return false;
	}
	return params.reportHit(
			query,                    // read sequence
			quals,                    // read quality values
			name,                     // read name
			_fw,                      // true = index is forward; false = mirror
			mmui32,                   // mismatch positions
			refcs,                    // reference characters for mms
			numMms,                   // # mismatches
			make_pair(tidx, textoff), // position
			make_pair<TIndexOffU,TIndexOffU>(0, 0),          // (bogus) mate position
			true,                     // (bogus) mate orientation
			0,                        // (bogus) mate length
			make_pair(top, bot),      // arrows
			tlen,                     // textlen
			qlen,                     // qlen
			stratum,                  // alignment stratum
			cost,                     // cost, including stratum & quality penalty
			bot-top-1,                // # other hits
			patid,                    // pattern id
			seed,                     // pseudo-random seed
			0);                       // mate (0 = unpaired)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x308, %rsp            # imm = 0x308
movq 0x58(%rbp), %rax
movl 0x50(%rbp), %eax
movl 0x48(%rbp), %eax
movw 0x40(%rbp), %ax
movl 0x38(%rbp), %eax
movl 0x30(%rbp), %eax
movl 0x28(%rbp), %eax
movl 0x20(%rbp), %eax
movl 0x18(%rbp), %eax
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)
movq -0x38(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x24d10
testb $0x1, %al
jne 0x6a586
jmp 0x6a64a
leaq -0x1e8(%rbp), %rdi
callq 0xa3f0
leaq -0x1d8(%rbp), %rdi
leaq 0x22e68(%rip), %rsi     # 0x8d408
callq 0xa5d0
movq %rax, -0x258(%rbp)
jmp 0x6a5ae
movq -0x258(%rbp), %rdi
movq 0x3d9ac(%rip), %rsi     # 0xa7f68
callq 0xa640
jmp 0x6a5c3
leaq -0x218(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0xa5c0
jmp 0x6a5d8
movq -0x250(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x24d30
jmp 0x6a5ed
leaq -0x218(%rbp), %rdi
callq 0xacd8
leaq -0x1e8(%rbp), %rdi
callq 0xa440
jmp 0x6a64a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
jmp 0x6a639
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1f0(%rbp)
movl %eax, -0x1f4(%rbp)
leaq -0x218(%rbp), %rdi
callq 0xacd8
leaq -0x1e8(%rbp), %rdi
callq 0xa440
jmp 0x6a856
movq -0x250(%rbp), %rdi
movl 0x30(%rbp), %esi
movl 0x18(%rbp), %edx
leaq -0x21c(%rbp), %rcx
leaq -0x220(%rbp), %r8
leaq -0x224(%rbp), %r9
callq 0xd9d0
cmpl $-0x1, -0x21c(%rbp)
jne 0x6a683
movb $0x0, -0x29(%rbp)
jmp 0x6a83f
movq -0x250(%rbp), %rax
movq 0x58(%rbp), %rcx
movq %rcx, -0x2a8(%rbp)
movq -0x40(%rbp), %rcx
movq %rcx, -0x2a0(%rbp)
movq -0x48(%rbp), %rcx
movq %rcx, -0x298(%rbp)
movq -0x50(%rbp), %rcx
movq %rcx, -0x290(%rbp)
movb 0x10(%rax), %al
movb %al, -0x2a9(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x288(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x280(%rbp)
movq 0x10(%rbp), %rax
movq %rax, -0x278(%rbp)
leaq -0x21c(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x4cb80
movq %rax, -0x22c(%rbp)
movl $0x0, -0x238(%rbp)
movl $0x0, -0x23c(%rbp)
leaq -0x238(%rbp), %rdi
leaq -0x23c(%rbp), %rsi
callq 0x4d4c0
movq %rax, -0x234(%rbp)
leaq 0x20(%rbp), %rdi
leaq 0x28(%rbp), %rsi
callq 0x4cb80
movb -0x2a9(%rbp), %r8b
movq -0x2a8(%rbp), %rdi
movq -0x2a0(%rbp), %rsi
movq -0x298(%rbp), %rdx
movq -0x290(%rbp), %rcx
movq -0x288(%rbp), %r9
movq %rax, -0x244(%rbp)
movl -0x224(%rbp), %r12d
movl 0x30(%rbp), %r15d
movl 0x38(%rbp), %r14d
movw 0x40(%rbp), %bx
movl 0x28(%rbp), %r11d
subl 0x20(%rbp), %r11d
subl $0x1, %r11d
movl 0x48(%rbp), %r10d
movl 0x50(%rbp), %eax
movl %eax, -0x25c(%rbp)
movq -0x22c(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x234(%rbp), %rax
movq %rax, -0x268(%rbp)
movq -0x244(%rbp), %r13
xorl %eax, %eax
movq -0x280(%rbp), %rax
andb $0x1, %r8b
movzbl %r8b, %r8d
movq %rax, (%rsp)
movq -0x278(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x270(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0x268(%rbp), %rax
movq %rax, 0x18(%rsp)
movl -0x25c(%rbp), %eax
movl $0x1, 0x20(%rsp)
movl $0x0, 0x28(%rsp)
movq %r13, 0x30(%rsp)
movl %r12d, 0x38(%rsp)
movl %r15d, 0x40(%rsp)
movl %r14d, 0x48(%rsp)
movzwl %bx, %ebx
movl %ebx, 0x50(%rsp)
movl %r11d, 0x58(%rsp)
movl %r10d, 0x60(%rsp)
movl %eax, 0x68(%rsp)
movl $0x0, 0x70(%rsp)
callq 0x4cbe0
andb $0x1, %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
addq $0x308, %rsp            # imm = 0x308
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq -0x1f0(%rbp), %rdi
callq 0xab60
nopw %cs:(%rax,%rax)
nopl (%rax)