// File: /workspace/github_cpp_makefile_star2_O2/BenLangmead[P]bowtie/./multikey_qsort.h
// Function: bool assertPartitionedSuf<S2bDnaString>(S2bDnaString const&, unsigned long*, unsigned long, int, int, unsigned long, unsigned long, unsigned long)
bool assertPartitionedSuf(
	const THost& host,
	TIndexOffU *s,
	size_t slen,
	int hi,
	int pivot,
	size_t begin,
	size_t end,
	size_t depth)
{
	size_t hlen = host.length();
	int state = 0; // 0 -> 1st = section, 1 -> < section, 2 -> > section, 3 -> 2nd = section
	for(size_t i = begin; i < end; i++) {
		switch(state) {
		case 0:
			if       (CHAR_AT_SUF(i, depth) < pivot)  { state = 1; break; }
			else if  (CHAR_AT_SUF(i, depth) > pivot)  { state = 2; break; }
			assert_eq(CHAR_AT_SUF(i, depth), pivot);  break;
		case 1:
			if       (CHAR_AT_SUF(i, depth) > pivot)  { state = 2; break; }
			else if  (CHAR_AT_SUF(i, depth) == pivot) { state = 3; break; }
			assert_lt(CHAR_AT_SUF(i, depth), pivot);  break;
		case 2:
			if       (CHAR_AT_SUF(i, depth) == pivot) { state = 3; break; }
			assert_gt(CHAR_AT_SUF(i, depth), pivot);	 break;
		case 3:
			assert_eq(CHAR_AT_SUF(i, depth), pivot);	 break;
		}
	}
	return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, %r12
movl %ecx, %ebp
movq %rsi, %r13
movq 0x58(%rsp), %r14
movq %rdi, 0x10(%rsp)
movq 0x18(%rdi), %r15
xorl %eax, %eax
leaq 0x3435(%rip), %rbx      # 0x28044
movl %r8d, 0xc(%rsp)
cmpq 0x50(%rsp), %r12
jae 0x24db1
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %eax, %eax
movslq (%rbx,%rax,4), %rax
addq %rbx, %rax
jmpq *%rax
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24c4b
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x1
popq %rax
cmpl %r8d, %ecx
jl 0x24da9
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24c78
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x2
popq %rax
cmpl %r8d, %ecx
jg 0x24da9
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24ca5
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
xorl %eax, %eax
cmpl %r8d, %ecx
je 0x24da9
jmp 0x24feb
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24cce
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x3
popq %rax
cmpl %r8d, %ecx
je 0x24da9
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24cfb
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x2
popq %rax
cmpl %r8d, %ecx
jg 0x24da9
jmp 0x24f2a
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24d25
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x3
popq %rax
cmpl %r8d, %ecx
je 0x24da9
jmp 0x24dc2
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24d4b
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x2
popq %rax
cmpl %r8d, %ecx
jg 0x24da9
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24d74
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x3
popq %rax
cmpl %r8d, %ecx
je 0x24da9
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %ecx
cmpq %r15, %rsi
jae 0x24d9d
movq 0x10(%rsp), %rdi
callq 0x22204
movl 0xc(%rsp), %r8d
movsbl %al, %ecx
pushq $0x1
popq %rax
cmpl %r8d, %ecx
jge 0x25153
incq %r12
jmp 0x24c14
movb $0x1, %al
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0xf1ef(%rip), %rdi      # 0x33fb8
leaq 0x3389(%rip), %rsi      # 0x28159
callq 0x42d0
movq %rax, %rbx
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %eax
cmpq %r15, %rsi
jae 0x24df4
movq 0x10(%rsp), %rdi
callq 0x22204
movsbl %al, %eax
movq %rbx, %rdi
movl %eax, %esi
callq 0x45d0
leaq 0x336a(%rip), %rsi      # 0x2816f
movq %rax, %rdi
callq 0x42d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rax
movl 0x18(%rbx,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x18(%rbx,%rax)
addq (%r13,%r12,8), %r14
cmpq %r15, %r14
jae 0x24e3f
movq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x22204
movsbl %al, %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x45d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x330f(%rip), %rsi      # 0x28174
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl 0xc(%rsp), %ebx
movl %ebx, %esi
callq 0x45d0
leaq 0x32ed(%rip), %rsi      # 0x2816f
movq %rax, %rdi
callq 0x42d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq %rax, %rdi
movl %ebx, %esi
callq 0x45d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x5553(%rip), %rsi      # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
movq 0xf0dc(%rip), %rdi      # 0x33fb8
leaq 0x5e3a(%rip), %rbx      # 0x2ad1d
movq %rbx, %rsi
callq 0x42d0
leaq 0x4849(%rip), %rsi      # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0xfd, %esi
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x4705(%rip), %rdi      # 0x2961b
leaq 0x6b8c(%rip), %rcx      # 0x2baa9
movq %rbx, %rsi
movl $0xfd, %edx
callq 0x4190
movq 0xf087(%rip), %rdi      # 0x33fb8
leaq 0x3200(%rip), %rsi      # 0x28138
callq 0x42d0
movq %rax, %rbx
addq (%r13,%r12,8), %r14
cmpq %r15, %r14
jae 0x24f5a
movq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x22204
movsbl %al, %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x45d0
leaq 0x31e3(%rip), %rsi      # 0x2814e
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl 0xc(%rsp), %esi
callq 0x45d0
leaq 0x5492(%rip), %rsi      # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
movq 0xf01b(%rip), %rdi      # 0x33fb8
leaq 0x5d79(%rip), %rbx      # 0x2ad1d
movq %rbx, %rsi
callq 0x42d0
leaq 0x4788(%rip), %rsi      # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0xfb, %esi
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x4644(%rip), %rdi      # 0x2961b
leaq 0x6acb(%rip), %rcx      # 0x2baa9
movq %rbx, %rsi
movl $0xfb, %edx
callq 0x4190
movq 0xefc6(%rip), %rdi      # 0x33fb8
leaq 0x3160(%rip), %rsi      # 0x28159
callq 0x42d0
movq %rax, %rbx
movq (%r13,%r12,8), %rsi
addq %r14, %rsi
movl %ebp, %eax
cmpq %r15, %rsi
jae 0x2501d
movq 0x10(%rsp), %rdi
callq 0x22204
movsbl %al, %eax
movq %rbx, %rdi
movl %eax, %esi
callq 0x45d0
leaq 0x3141(%rip), %rsi      # 0x2816f
movq %rax, %rdi
callq 0x42d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rax
movl 0x18(%rbx,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x18(%rbx,%rax)
addq (%r13,%r12,8), %r14
cmpq %r15, %r14
jae 0x25068
movq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x22204
movsbl %al, %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x45d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x30e6(%rip), %rsi      # 0x28174
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl 0xc(%rsp), %ebx
movl %ebx, %esi
callq 0x45d0
leaq 0x30c4(%rip), %rsi      # 0x2816f
movq %rax, %rdi
callq 0x42d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x8, %edx
movl %edx, 0x18(%rax,%rcx)
movq %rax, %rdi
movl %ebx, %esi
callq 0x45d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl 0x18(%rax,%rcx), %edx
andl $-0x4b, %edx
orl $0x2, %edx
movl %edx, 0x18(%rax,%rcx)
leaq 0x532a(%rip), %rsi      # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
movq 0xeeb3(%rip), %rdi      # 0x33fb8
leaq 0x5c11(%rip), %rbx      # 0x2ad1d
movq %rbx, %rsi
callq 0x42d0
leaq 0x4620(%rip), %rsi      # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0xf4, %esi
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x44dc(%rip), %rdi      # 0x2961b
leaq 0x6963(%rip), %rcx      # 0x2baa9
movq %rbx, %rsi
movl $0xf4, %edx
callq 0x4190
movq 0xee5e(%rip), %rdi      # 0x33fb8
leaq 0x3126(%rip), %rsi      # 0x28287
callq 0x42d0
movq %rax, %rbx
addq (%r13,%r12,8), %r14
cmpq %r15, %r14
jae 0x25183
movq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x22204
movsbl %al, %ebp
movq %rbx, %rdi
movl %ebp, %esi
callq 0x45d0
leaq 0x3109(%rip), %rsi      # 0x2829d
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl 0xc(%rsp), %esi
callq 0x45d0
leaq 0x5269(%rip), %rsi      # 0x2a418
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
callq 0x4130
movq 0xedf2(%rip), %rdi      # 0x33fb8
leaq 0x5b50(%rip), %rbx      # 0x2ad1d
movq %rbx, %rsi
callq 0x42d0
leaq 0x455f(%rip), %rsi      # 0x2973b
movq %rax, %rdi
callq 0x42d0
movq %rax, %rdi
movl $0xf8, %esi
callq 0x45d0
movq %rax, %rdi
callq 0x4130
leaq 0x441b(%rip), %rdi      # 0x2961b
leaq 0x68a2(%rip), %rcx      # 0x2baa9
movq %rbx, %rsi
movl $0xf8, %edx
callq 0x4190