// File: /workspace/github_cpp_makefile_star2_O2/BenLangmead[P]bowtie/./blockwise_sa.h
// Function: KarkkainenBlockwiseSA<SString<char>>::nextBlock(int, int)
void KarkkainenBlockwiseSA<TStr>::nextBlock(int cur_block, int tid) {
#ifndef NDEBUG
	if(this->_nthreads > 1) {
		assert_lt((size_t)tid, this->_itrBuckets.size());
	}
#endif
	EList<TIndexOffU>& bucket = (this->_nthreads > 1 ? this->_itrBuckets[tid] : this->_itrBucket);
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Getting block " << (cur_block+1) << " of " << _sampleSuffs.size()+1);
	}
	assert(_built);
	assert_gt(_dcV, 3);
	assert_leq((size_t)cur_block, _sampleSuffs.size());
	const TStr& t = this->text();
	TIndexOffU len = (TIndexOffU)t.length();
	// Set up the bucket
	bucket.clear();
	TIndexOffU lo = OFF_MASK, hi = OFF_MASK;
	if(_sampleSuffs.size() == 0) {
		// Special case: if _sampleSuffs is 0, then multikey-quicksort
		// everything
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  No samples; assembling all-inclusive block");
		}
		assert_eq(0, cur_block);
		try {
			if(bucket.capacity() < this->bucketSz()) {
				bucket.reserveExact(len+1);
			}
			bucket.resize(len);
			for(TIndexOffU i = 0; i < len; i++) {
				bucket[i] = i;
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a master suffix-array block of " << ((len+1) * 4) << " bytes" << endl
				     << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
	} else {
		try {
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Reserving size (" << this->bucketSz() << ") for bucket " << (cur_block+1));
			}
			// BTL: Add a +100 fudge factor; there seem to be instances
			// where a bucket ends up having one more elt than bucketSz()
			if(bucket.size() < this->bucketSz()+100) {
				bucket.reserveExact(this->bucketSz()+100);
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a suffix-array block of " << ((this->bucketSz()+1) * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
		// Select upper and lower bounds from _sampleSuffs[] and
		// calculate the Z array up to the difference-cover periodicity
		// for both.  Be careful about first/last buckets.

		//String<TIndexOffU> zLo(EBWTB_CAT), zHi(EBWTB_CAT);
		EList<TIndexOffU> zLo, zHi;
		assert_geq(cur_block, 0);
		assert_leq((size_t)cur_block, _sampleSuffs.size());
		bool first = (cur_block == 0);
		bool last  = ((size_t)cur_block == _sampleSuffs.size());
		try {
			// Timer timer(cout, "  Calculating Z arrays time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Calculating Z arrays for bucket " << (cur_block+1));
			}
			if(!last) {
				// Not the last bucket
				assert_lt((size_t)cur_block, _sampleSuffs.size());
				hi = _sampleSuffs[cur_block];
				zHi.resizeExact(_dcV);
				zHi.fillZero();
				assert_eq(zHi[0], 0);
				calcZ(t, hi, zHi, this->verbose(), this->sanityCheck());
			}
			if(!first) {
				// Not the first bucket
				assert_gt(cur_block, 0);
				assert_leq((size_t)cur_block, _sampleSuffs.size());
				lo = _sampleSuffs[cur_block-1];
				zLo.resizeExact(_dcV);
				zLo.fillZero();
				assert_gt(_dcV, 3);
				assert_eq(zLo[0], 0);
				calcZ(t, lo, zLo, this->verbose(), this->sanityCheck());
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a z-array of " << (_dcV * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}

		// This is the most critical loop in the algorithm; this is where
		// we iterate over all suffixes in the text and pick out those that
		// fall into the current bucket.
		//
		// This loop is based on the SMALLERSUFFIXES function outlined on
		// p7 of the "Fast BWT" paper
		//
		int64_t kHi = -1, kLo = -1;
		int64_t jHi = -1, jLo = -1;
		bool kHiSoft = false, kLoSoft = false;
		assert_eq(0, bucket.size());
		{
			// Timer timer(cout, "  Block accumulator loop time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Entering block accumulator loop for bucket " << (cur_block+1) << ":");
			}
			TIndexOffU lenDiv10 = (len + 9) / 10;
			for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) {
				TIndexOffU itenNext = iten + lenDiv10;
				{
					ThreadSafe ts(&_mutex);
					if(ten > 0) VMSG_NL("  bucket " << (cur_block+1) << ": " << (ten * 10) << "%");
				}
				for(TIndexOffU i = iten; i < itenNext && i < len; i++) {
					assert_lt(jLo, (TIndexOff)i); assert_lt(jHi, (TIndexOff)i);
					// Advance the upper-bound comparison by one character
					if(i == hi || i == lo) continue; // equal to one of the bookends
					if(hi != OFF_MASK && !suffixCmp(hi, i, jHi, kHi, kHiSoft, zHi)) {
						continue; // not in the bucket
					}
					if(lo != OFF_MASK && suffixCmp(lo, i, jLo, kLo, kLoSoft, zLo)) {
						continue; // not in the bucket
					}
					// In the bucket! - add it
					assert_lt(i, len);
					try {
						bucket.push_back(i);
					} catch(bad_alloc &e) {
						cerr << "Could not append element to block of " << ((bucket.size()) * OFF_SIZE) << " bytes" << endl;
						if(this->_passMemExc) {
							throw e; // rethrow immediately
						} else {
							cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
							     << "a larger --bmaxdivn" << endl;
							throw 1;
						}
					}
					// Not necessarily true; we allow overflowing buckets
					// since we can't guarantee that a good set of sample
					// suffixes can be found in a reasonable amount of time
					//assert_lt(bucket.size(), this->bucketSz());
				}
			} // end loop over all suffixes of t
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  bucket " << (cur_block+1) << ": 100%");
			}
		}
	} // end else clause of if(_sampleSuffs.size() == 0)
	// Sort the bucket
	if(bucket.size() > 0) {
		Timer timer(cout, "  Sorting block time: ", this->verbose());
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  Sorting block of length " << bucket.size() << " for bucket " << (cur_block+1));
		}
		this->qsort(bucket);
	}
	if(hi != OFF_MASK) {
		// Not the final bucket; throw in the sample on the RHS
		bucket.push_back(hi);
	} else {
		// Final bucket; throw in $ suffix
		bucket.push_back(len);
	}
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Returning block of " << bucket.size() << " for bucket " << (cur_block+1));
	}

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rdi, %r12
movslq %edx, %rax
shlq $0x5, %rax
addq 0x110(%rdi), %rax
movl %esi, %r14d
leaq 0x18(%rdi), %r15
cmpl $0x2, 0x68(%rdi)
cmovgeq %rax, %r15
addq $0x98, %rdi
movq %rdi, 0x58(%rsp)
movq %rdi, 0x18(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x131b3
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x1392b(%rip), %rsi     # 0x26a70
callq 0x5350
leal 0x1(%r14), %esi
movq %rax, %rdi
callq 0x5660
leaq 0x12f25(%rip), %rsi     # 0x26082
movq %rax, %rdi
callq 0x5350
movq 0x60(%r12), %rsi
incq %rsi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x5580
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x30(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
movq 0x8(%r12), %rbp
movq 0x18(%rbp), %r13
movl %r13d, 0x7c(%rsp)
andq $0x0, 0x18(%r15)
orl $-0x1, 0x78(%rsp)
cmpq $0x0, 0x60(%r12)
je 0x13527
movq 0x18(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x13283
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x1391b(%rip), %rsi     # 0x26b33
callq 0x5350
movl 0x10(%r12), %esi
movq %rax, %rdi
callq 0x51e0
leaq 0x13915(%rip), %rsi     # 0x26b46
movq %rax, %rdi
callq 0x5350
leal 0x1(%r14), %esi
movq %rax, %rdi
callq 0x5660
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x5580
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x30(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
movl 0x10(%r12), %esi
addl $0x64, %esi
cmpq %rsi, 0x18(%r15)
jae 0x132a3
movq %r15, %rdi
callq 0x18e36
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
movq %rax, 0x30(%rsp)
andq $0x0, 0x38(%rsp)
movl $0x80, %ecx
movq %rcx, 0x40(%rsp)
andq $0x0, 0x48(%rsp)
movq %rax, 0x58(%rsp)
andq $0x0, 0x60(%rsp)
movq %rcx, 0x68(%rsp)
andq $0x0, 0x70(%rsp)
movq 0x60(%r12), %rbx
movq 0x18(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x13371
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x13867(%rip), %rsi     # 0x26b80
callq 0x5350
leal 0x1(%r14), %esi
movq %rax, %rdi
callq 0x5660
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x5580
leaq 0x90(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x90(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
movq %rbp, 0x50(%rsp)
movq %r15, 0xb0(%rsp)
movq %r14, 0x80(%rsp)
movslq %r14d, %r15
leaq 0x88(%rsp), %rdi
callq 0x14b42
pushq $-0x1
popq %r14
movl %r14d, %ebp
cmpq %r15, %rbx
je 0x133f1
movq 0x50(%r12), %rax
movl (%rax,%r15,4), %ebp
movl %ebp, 0x78(%rsp)
movl 0x74(%r12), %esi
leaq 0x58(%rsp), %rdi
callq 0x166ec
leaq 0x58(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movzbl 0x16(%r12), %ecx
movzbl 0x14(%r12), %r8d
movq 0x50(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x18e64
cmpl $0x0, 0x80(%rsp)
je 0x13448
movq 0x50(%r12), %rax
movl -0x4(%rax,%r15,4), %r14d
movl 0x74(%r12), %esi
leaq 0x30(%rsp), %rdi
callq 0x166ec
leaq 0x30(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movzbl 0x16(%r12), %ecx
movzbl 0x14(%r12), %r8d
movq 0x50(%rsp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x18e64
orq $-0x1, 0x88(%rsp)
orq $-0x1, 0xd8(%rsp)
orq $-0x1, 0xd0(%rsp)
orq $-0x1, 0xc8(%rsp)
xorl %eax, %eax
movb %al, 0x17(%rsp)
movb %al, 0x16(%rsp)
movq 0x18(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x2327a
cmpb $0x0, 0x16(%r12)
je 0x135e6
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x13717(%rip), %rsi     # 0x26bc4
callq 0x5350
movq 0x80(%rsp), %rcx
leal 0x1(%rcx), %esi
movq %rax, %rdi
movl %esi, 0x2c(%rsp)
callq 0x5660
leaq 0x11a45(%rip), %rsi     # 0x24f15
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x5580
leaq 0x90(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
movq %r12, %rbx
leaq 0x90(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
jmp 0x135f7
movq 0x18(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x1359d
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x13525(%rip), %rsi     # 0x26a7f
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x5580
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x30(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
movl 0x10(%r12), %eax
cmpq %rax, 0x10(%r15)
jae 0x135be
leal 0x1(%r13), %esi
movq %r15, %rdi
callq 0x18e36
movl %r13d, %ebx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x14752
xorl %eax, %eax
cmpq %rbx, %rax
jae 0x135df
movq 0x8(%r15), %rcx
movl %eax, (%rcx,%rax,4)
incq %rax
jmp 0x135ce
movb $0x1, %bl
jmp 0x138ae
movq %r12, %rbx
movq 0x80(%rsp), %rax
incl %eax
movl %eax, 0x2c(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x14b42
leal 0x9(%r13), %eax
xorl %r12d, %r12d
pushq $0xa
popq %rcx
xorl %edx, %edx
divl %ecx
movq %rax, 0xc0(%rsp)
leaq 0x90(%rsp), %r15
movl $0x0, 0x50(%rsp)
movq %r13, 0xb8(%rsp)
cmpl %r13d, %r12d
jae 0x137db
movq 0x18(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x2327a
cmpl $0x0, 0x50(%rsp)
je 0x136ec
cmpb $0x1, 0x16(%rbx)
jne 0x136ec
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x1357a(%rip), %rsi     # 0x26bf2
callq 0x5350
movq %rax, %rdi
movl 0x2c(%rsp), %esi
callq 0x5660
movq %rax, %rdi
leaq 0x110f8(%rip), %rsi     # 0x2478b
callq 0x5350
imull $0xa, 0x50(%rsp), %esi
movq %rax, %rdi
callq 0x51e0
movq %rax, %rdi
leaq 0x13578(%rip), %rsi     # 0x26c27
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq %r15, %rdi
leaq 0xf8(%rsp), %rsi
callq 0x5580
movq %rbx, %rdi
movq %r15, %rsi
callq 0x15946
movq %r15, %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
movq 0xc0(%rsp), %rax
leal (%r12,%rax), %r15d
leaq 0x20(%rsp), %rdi
callq 0x14b42
cmpl %r13d, %r15d
cmovbl %r15d, %r13d
movl %r12d, 0xe0(%rsp)
cmpl %r13d, %r12d
jae 0x137bf
cmpl %ebp, %r12d
je 0x137af
cmpl %r14d, %r12d
je 0x137af
cmpl $-0x1, %ebp
je 0x13760
leaq 0x58(%rsp), %rax
movq %rax, (%rsp)
movq %rbx, %rdi
movl %ebp, %esi
movl %r12d, %edx
leaq 0xd0(%rsp), %rcx
leaq 0x88(%rsp), %r8
leaq 0x17(%rsp), %r9
callq 0x18f96
testb %al, %al
je 0x137af
cmpl $-0x1, %r14d
je 0x1379a
movl 0xe0(%rsp), %edx
leaq 0x30(%rsp), %rax
movq %rax, (%rsp)
movq %rbx, %rdi
movl %r14d, %esi
leaq 0xc8(%rsp), %rcx
leaq 0xd8(%rsp), %r8
leaq 0x16(%rsp), %r9
callq 0x18f96
testb %al, %al
jne 0x137af
movq 0xb0(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x12800
movl 0xe0(%rsp), %r12d
incl %r12d
jmp 0x13709
incl 0x50(%rsp)
movl %r15d, %r12d
movq 0xb8(%rsp), %r13
leaq 0x90(%rsp), %r15
jmp 0x1362f
movq 0x18(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x2327a
movq %rbx, %r12
cmpb $0x1, 0x16(%rbx)
movq 0x80(%rsp), %r14
jne 0x13882
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x133d7(%rip), %rsi     # 0x26bf2
callq 0x5350
movq %rax, %rdi
movl 0x2c(%rsp), %esi
callq 0x5660
leaq 0x133ef(%rip), %rsi     # 0x26c22
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x5580
leaq 0x90(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x90(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x20(%rsp), %rdi
callq 0x14b42
leaq 0x58(%rsp), %rdi
callq 0x12c5c
leaq 0x30(%rsp), %rdi
callq 0x12c5c
cmpl $-0x1, %ebp
sete %bl
movq 0xb0(%rsp), %r15
cmpq $0x0, 0x18(%r15)
je 0x139af
movb 0x16(%r12), %bpl
xorl %edi, %edi
callq 0x5300
movq %rax, 0x30(%rsp)
movq 0x1e6cf(%rip), %rax     # 0x31fa0
movq %rax, 0x38(%rsp)
leaq 0x1334c(%rip), %rax     # 0x26c29
movq %rax, 0x40(%rsp)
movb %bpl, 0x48(%rsp)
movq 0x18(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x1398b
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x1331f(%rip), %rsi     # 0x26c40
callq 0x5350
movq 0x18(%r15), %rsi
movq %rax, %rdi
callq 0x51e0
leaq 0x1320e(%rip), %rsi     # 0x26b47
movq %rax, %rdi
callq 0x5350
leal 0x1(%r14), %esi
movq %rax, %rdi
callq 0x5660
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x5580
leaq 0x58(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x58(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x90(%rsp), %rdi
callq 0x14b42
movq (%r12), %rax
movq %r12, %rdi
movq %r15, %rsi
callq *0x38(%rax)
leaq 0x30(%rsp), %rdi
callq 0xcb3e
testb %bl, %bl
leaq 0x7c(%rsp), %rax
leaq 0x78(%rsp), %rsi
cmovneq %rax, %rsi
movq %r15, %rdi
callq 0x12800
movq 0x18(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x2327a
cmpb $0x1, 0x16(%r12)
jne 0x13a6a
leaq 0xe0(%rsp), %rdi
callq 0x5200
leaq 0xf0(%rsp), %rdi
leaq 0x1325d(%rip), %rsi     # 0x26c5b
callq 0x5350
movq 0x18(%r15), %rsi
movq %rax, %rdi
callq 0x51e0
leaq 0x13131(%rip), %rsi     # 0x26b47
movq %rax, %rdi
callq 0x5350
incl %r14d
movq %rax, %rdi
movl %r14d, %esi
callq 0x5660
movq %rax, %rdi
callq 0x5180
leaq 0xf8(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x5580
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x15946
leaq 0x30(%rsp), %rdi
callq 0x5778
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x13b32
jmp 0x13eaa
jmp 0x13b49
jmp 0x13ece
jmp 0x13ee7
jmp 0x13ec9
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x5778
jmp 0x13d6a
jmp 0x13d67
movq %rax, %r14
jmp 0x13d77
jmp 0x13ece
jmp 0x13ee7
jmp 0x13ec9
movq %rdx, %rbx
movq %rax, %r14
leaq 0x90(%rsp), %rdi
callq 0x5778
jmp 0x13c69
jmp 0x13c63
movq %rdx, %rbx
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x5778
jmp 0x13d99
jmp 0x13d93
movq %rdx, %rbx
movq %rax, %r14
jmp 0x13c76
jmp 0x13c50
movq %rdx, %rbx
movq %rax, %r14
jmp 0x13da6
jmp 0x13eaa
jmp 0x13b32
jmp 0x13eaa
jmp 0x13b49
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x5778
jmp 0x13ead
jmp 0x13eaa
movq %rax, %r14
jmp 0x13eba
movq %rax, %r14
cmpl $0x1, %edx
jne 0x1400a
movq %r14, %rdi
callq 0x5150
cmpb $0x1, 0x15(%r12)
jne 0x13b9e
pushq $0x8
popq %rdi
callq 0x5190
movq 0x1e41c(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x1e41e(%rip), %rsi     # 0x31fa8
movq 0x1e3f7(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
jmp 0x13fe1
movq 0x1e44b(%rip), %rdi     # 0x31ff0
leaq 0x12f00(%rip), %rsi     # 0x26aac
callq 0x5350
movl 0x7c(%rsp), %ecx
leal 0x4(,%rcx,4), %esi
movq %rax, %rdi
callq 0x51e0
leaq 0x12f14(%rip), %rsi     # 0x26adf
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x12f04(%rip), %rsi     # 0x26ae6
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x128bb(%rip), %rsi     # 0x264b4
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x1e342(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x13fe1
movq %rax, %r14
callq 0x55c0
jmp 0x1400a
jmp 0x13ff3
jmp 0x13c41
movq %rax, %r14
jmp 0x13d84
jmp 0x13ff3
jmp 0x13c5b
movq %rdx, %rbx
movq %rax, %r14
jmp 0x13db0
movq %rdx, %rbx
movq %rax, %r14
jmp 0x13c83
movq %rdx, %rbx
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x88(%rsp), %rdi
callq 0x14b42
cmpl $0x1, %ebx
jne 0x13ff6
movq %r14, %rdi
callq 0x5150
cmpb $0x1, 0x15(%r12)
jne 0x13ccd
pushq $0x8
popq %rdi
callq 0x5190
movq 0x1e2ed(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x1e2ef(%rip), %rsi     # 0x31fa8
movq 0x1e2c8(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
jmp 0x13fe1
movq 0x1e31c(%rip), %rdi     # 0x31ff0
leaq 0x12ec8(%rip), %rsi     # 0x26ba3
callq 0x5350
movl 0x74(%r12), %esi
shll $0x2, %esi
movq %rax, %rdi
callq 0x51e0
leaq 0x12de8(%rip), %rsi     # 0x26adf
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq 0x1e2e2(%rip), %rdi     # 0x31ff0
leaq 0x12dd1(%rip), %rsi     # 0x26ae6
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x1278b(%rip), %rsi     # 0x264b4
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x1e212(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x13fe1
jmp 0x13ee7
jmp 0x13ee7
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x90(%rsp), %rdi
callq 0x14b42
leaq 0x30(%rsp), %rdi
callq 0xcb3e
jmp 0x1400a
movq %rdx, %rbx
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
cmpl $0x1, %ebx
jne 0x1400a
movq %r14, %rdi
callq 0x5150
cmpb $0x1, 0x15(%r12)
jne 0x13dfa
pushq $0x8
popq %rdi
callq 0x5190
movq 0x1e1c0(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x1e1c2(%rip), %rsi     # 0x31fa8
movq 0x1e19b(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
jmp 0x13fe1
movq 0x1e1ef(%rip), %rdi     # 0x31ff0
leaq 0x12d4c(%rip), %rsi     # 0x26b54
callq 0x5350
movl 0x10(%r12), %ecx
leal 0x4(,%rcx,4), %esi
movq %rax, %rdi
callq 0x51e0
leaq 0x12cb7(%rip), %rsi     # 0x26adf
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
movq 0x1e1b1(%rip), %rdi     # 0x31ff0
leaq 0x12ca0(%rip), %rsi     # 0x26ae6
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x1265a(%rip), %rsi     # 0x264b4
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x1e0e1(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x13fe1
movq %rax, %r14
callq 0x55c0
jmp 0x13ff6
movq %rax, %r14
callq 0x55c0
jmp 0x1400a
jmp 0x13eaa
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x58(%rsp), %rdi
callq 0x14b42
jmp 0x1400a
movq %rax, %r14
jmp 0x13ef7
movq %rax, %r14
leaq 0x90(%rsp), %rdi
callq 0x5778
jmp 0x13eea
jmp 0x13ee7
jmp 0x13ff3
movq %rax, %r14
leaq 0xe0(%rsp), %rdi
callq 0x5240
leaq 0x20(%rsp), %rdi
callq 0x14b42
jmp 0x13ff6
movq %rax, %r14
cmpl $0x1, %edx
jne 0x13ff6
movq %r14, %rdi
callq 0x5150
movq 0x1e0cf(%rip), %rdi     # 0x31ff0
leaq 0x12cd4(%rip), %rsi     # 0x26bfc
callq 0x5350
movq 0xb0(%rsp), %rcx
movq 0x18(%rcx), %rsi
shlq $0x2, %rsi
movq %rax, %rdi
callq 0x51e0
leaq 0x12b93(%rip), %rsi     # 0x26adf
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
cmpb $0x1, 0x15(%rbx)
jne 0x13f90
pushq $0x8
popq %rdi
callq 0x5190
movq 0x1e027(%rip), %rcx     # 0x31f98
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x1e029(%rip), %rsi     # 0x31fa8
movq 0x1e002(%rip), %rdx     # 0x31f88
movq %rax, %rdi
callq 0x5630
jmp 0x13fe1
movq 0x1e059(%rip), %rdi     # 0x31ff0
leaq 0x12b48(%rip), %rsi     # 0x26ae6
callq 0x5350
movq %rax, %rdi
callq 0x5180
leaq 0x12502(%rip), %rsi     # 0x264b4
movq %rax, %rdi
callq 0x5350
movq %rax, %rdi
callq 0x5180
pushq $0x4
popq %rdi
callq 0x5190
movl $0x1, (%rax)
movq 0x1df89(%rip), %rsi     # 0x31f60
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
movq %rax, %r14
callq 0x55c0
jmp 0x13ff6
movq %rax, %rdi
callq 0xb51f
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0x12c5c
leaq 0x30(%rsp), %rdi
callq 0x12c5c
movq %r14, %rdi
callq 0x5680