// File: /workspace/github_c_makefile_star2_O3/rikuu[P]kermit/main.c
// Function: main
int main(int argc, char *argv[])
{
	ma_opt_t opt;
	int i, c, stage = 100, no_first = 0, no_second = 0, bi_dir = 1, o_set = 0, no_cont = 0, g_set = 0, no_propagate = 0;
	int max_depth = 5, max_distance=1;
	float cov = 40.0;
	char *fn_reads = 0, *fn_colors = 0, *outfmt = "ug";
	uint64_t excl_color = 0;

	ma_opt_init(&opt);
	while ((c = getopt(argc, argv, "n:m:s:c:S:i:d:g:o:h:I:r:f:e:p:C:G:b:12PVRF:")) >= 0) {
		if (c == 'm') opt.min_match = atoi(optarg);
		else if (c == 'i') opt.min_iden = atof(optarg);
		else if (c == 's') opt.min_span = atoi(optarg);
		else if (c == 'c') opt.min_dp = atoi(optarg);
		else if (c == 'o') opt.min_ovlp = atoi(optarg), o_set = 1;
		else if (c == 'S') stage = atoi(optarg);
		else if (c == 'd') opt.bub_dist = atoi(optarg);
		else if (c == 'g') opt.gap_fuzz = atoi(optarg);
		else if (c == 'h') opt.max_hang = atoi(optarg);
		else if (c == 'I') opt.int_frac = atof(optarg);
		else if (c == 'e') opt.max_ext = atoi(optarg);
		else if (c == 'f') fn_reads = optarg;
		else if (c == 'p') outfmt = optarg;
		else if (c == '1') no_first = 1;
		else if (c == '2') no_second = 1;
		else if (c == 'P') no_propagate = 1;
		else if (c == 'n') opt.n_rounds = atoi(optarg) - 1;
		else if (c == 'R') no_cont = 1;
		else if (c == 'F') opt.final_ovlp_drop_ratio = atof(optarg);
		else if (c == 'C') fn_colors = optarg;
		else if (c == 'G') excl_color = atoi(optarg), g_set = 1;
		else if (c == 'D') max_depth = atoi(optarg);
		else if (c == 'b') max_distance = atoi(optarg);
		else if (c == 'V') {
			printf("%s\n", KM_VERSION);
			return 0;
		} else if (c == 'r') {
			char *s;
			opt.max_ovlp_drop_ratio = strtod(optarg, &s);
			if (*s == ',') opt.min_ovlp_drop_ratio = strtod(s + 1, &s);
		}
	}
	if (o_set == 0) opt.min_ovlp = opt.min_span;
	if (strcmp(outfmt, "cf") == 0) stage = (stage < 5) ? stage : 5;
	if (argc == optind) {
		fprintf(stderr, "Usage: kermit [options] <in.paf>\n");
		fprintf(stderr, "Options:\n");
		fprintf(stderr, "  Pre-selection:\n");
		fprintf(stderr, "    -R          prefilter clearly contained reads (2-pass required)\n");
		fprintf(stderr, "    -G INT      use only reads with given color\n");
		fprintf(stderr, "    -m INT      min match length [%d]\n", opt.min_match);
		fprintf(stderr, "    -i FLOAT    min identity [%.2g]\n", opt.min_iden);
		fprintf(stderr, "    -s INT      min span [%d]\n", opt.min_span);
		fprintf(stderr, "    -c INT      min coverage [%d]\n", opt.min_dp);
		fprintf(stderr, "  Overlap:\n");
		fprintf(stderr, "    -o INT      min overlap [same as -s]\n");
		fprintf(stderr, "    -h INT      max over hang length [%d]\n", opt.max_hang);
		fprintf(stderr, "    -I FLOAT    min end-to-end match ratio [%.2g]\n", opt.int_frac);
		fprintf(stderr, "  Layout:\n");
		fprintf(stderr, "    -g INT      max gap differences between reads for trans-reduction [%d]\n", opt.gap_fuzz);
		fprintf(stderr, "    -d INT      max distance for bubble popping [%d]\n", opt.bub_dist);
		fprintf(stderr, "    -e INT      small unitig threshold [%d]\n", opt.max_ext);
		fprintf(stderr, "    -f FILE     read sequences []\n");
		fprintf(stderr, "    -n INT      rounds of short overlap removal [%d]\n", opt.n_rounds + 1);
		fprintf(stderr, "    -r FLOAT[,FLOAT]\n");
		fprintf(stderr, "                max and min overlap drop ratio [%.2g,%.2g]\n", opt.max_ovlp_drop_ratio, opt.min_ovlp_drop_ratio);
		fprintf(stderr, "    -F FLOAT    aggressive overlap drop ratio in the end [%.2g]\n", opt.final_ovlp_drop_ratio);
		fprintf(stderr, "  Coloring:\n");
		fprintf(stderr, "    -C FILE     read colors []\n");
		fprintf(stderr, "    -D INT      max propagation depth [%d]\n", max_depth);
		fprintf(stderr, "    -b INT      max distance between colors [%d]\n", max_distance);
		fprintf(stderr, "  Miscellaneous:\n");
		fprintf(stderr, "    -p STR      output information: ug, sg, or cf [%s]\n", outfmt);
		fprintf(stderr, "    -b          both directions of an arc are present in input\n");
		fprintf(stderr, "    -1          skip 1-pass read selection\n");
		fprintf(stderr, "    -2          skip 2-pass read selection\n");
		fprintf(stderr, "    -P          skip propagation\n");
		fprintf(stderr, "    -V          print version number\n");
		return 1;
	}

	sys_init();

	sdict_t *excl = 0;
	if (no_cont || (fn_colors && g_set)) {
		fprintf(stderr, "[M::%s] ===> Step 0: excluding reads <===\n", __func__);
		if (fn_colors && g_set) {
			fprintf(stderr, "[M::%s] ===> Step 0.1: excluding colored reads <===\n", __func__);
			excl = km_exclude(fn_colors, excl_color);
		}

		if (no_cont) {
			fprintf(stderr, "[M::%s] ===> Step 0.2: excluding contained reads <===\n", __func__);
			sdict_t *excl2 = ma_hit_no_cont(argv[optind], opt.min_span, opt.min_match, opt.max_hang, opt.int_frac);
			
			if (excl) {
				dict_merge(excl, excl2);
				sd_destroy(excl2);
			} else {
				excl = excl2;
			}
		}
	}

	fprintf(stderr, "[M::%s] ===> Step 1: reading read mappings <===\n", __func__);
	sdict_t *d = sd_init();
	size_t n_hits;
	ma_hit_t *hit = ma_hit_read(argv[optind], opt.min_span, opt.min_match, d, &n_hits, bi_dir, excl);
	if (excl) sd_destroy(excl);

	ma_sub_t *sub = 0;
	if (!no_first) {
		fprintf(stderr, "[M::%s] ===> Step 2: 1-pass (crude) read selection <===\n", __func__);
		if (stage >= 2) {
			sub = ma_hit_sub(opt.min_dp, opt.min_iden, 0, n_hits, hit, d->n_seq);
			n_hits = ma_hit_cut(sub, opt.min_span, n_hits, hit);
		}
		if (stage >= 3) n_hits = ma_hit_flt(sub, opt.max_hang * 1.5, opt.min_ovlp * .5, n_hits, hit, &cov);
	}

	if (!no_second) {
		fprintf(stderr, "[M::%s] ===> Step 3: 2-pass (fine) read selection <===\n", __func__);
		if (stage >= 4) {
			ma_sub_t *sub2 = ma_hit_sub(opt.min_dp, opt.min_iden, opt.min_span/2, n_hits, hit, d->n_seq);
			n_hits = ma_hit_cut(sub2, opt.min_span, n_hits, hit);
			if (sub != 0) {
				ma_sub_merge(d->n_seq, sub, sub2);
				free(sub2);
			} else {
				sub = sub2;
			}
		}
		if (stage >= 5) n_hits = ma_hit_contained(&opt, d, sub, n_hits, hit);
	}

	hit = (ma_hit_t*)realloc(hit, n_hits * sizeof(ma_hit_t));

	fprintf(stderr, "[M::%s] ===> Step 4: 1-pass graph cleaning <===\n", __func__);
	asg_t *sg = ma_sg_gen(&opt, d, sub, n_hits, hit);
	if (fn_colors) {
		fprintf(stderr, "[M::%s] ===> Step 4.1: reading graph coloring <===\n", __func__);
		km_color_t *colors = km_colors_read(fn_colors, d);

		if (!no_propagate) {
			fprintf(stderr, "[M::%s] ===> Step 4.2: propagating colors <===\n", __func__);
			km_propagate(sg, colors, max_depth);
		}

		if (strcmp(outfmt, "cf") == 0) {
			km_cf_print(d, colors);
		} else {
			fprintf(stderr, "[M::%s] ===> Step 4.3: removing color crossing arcs <===\n", __func__);
			km_cut_cross(sg, colors, max_distance);
		}

		free(colors);
	}

	if (stage >= 6) {
		fprintf(stderr, "[M::%s] ===> Step 5: 2-pass graph cleaning <===\n", __func__);
		fprintf(stderr, "[M::%s] ===> Step 5.1: transitive reduction <===\n", __func__);
		asg_arc_del_trans(sg, opt.gap_fuzz);
	}
	if (stage >= 7) {
		fprintf(stderr, "[M::%s] ===> Step 5.2: initial tip cutting and bubble popping <===\n", __func__);
		asg_cut_tip(sg, opt.max_ext);
		asg_pop_bubble(sg, opt.bub_dist);
	}
	if (stage >= 9) {
		fprintf(stderr, "[M::%s] ===> Step 5.3: cutting short overlaps (%d rounds in total) <===\n", __func__, opt.n_rounds + 1);
		for (i = 0; i <= opt.n_rounds; ++i) {
			float r = opt.min_ovlp_drop_ratio + (opt.max_ovlp_drop_ratio - opt.min_ovlp_drop_ratio) / opt.n_rounds * i;
			if (asg_arc_del_short(sg, r) != 0) {
				asg_cut_tip(sg, opt.max_ext);
				asg_pop_bubble(sg, opt.bub_dist);
			}
		}
	}
	if (stage >= 10) {
		fprintf(stderr, "[M::%s] ===> Step 5.4: removing short internal sequences and bi-loops <===\n", __func__);
		asg_cut_internal(sg, 1);
		asg_cut_biloop(sg, opt.max_ext);
		asg_cut_tip(sg, opt.max_ext);
		asg_pop_bubble(sg, opt.bub_dist);
	}
	if (stage >= 11) {
		fprintf(stderr, "[M::%s] ===> Step 5.5: aggressively cutting short overlaps <===\n", __func__);
		if (asg_arc_del_short(sg, opt.final_ovlp_drop_ratio) != 0) {
			asg_cut_tip(sg, opt.max_ext);
			asg_pop_bubble(sg, opt.bub_dist);
		}
	}

	if (strcmp(outfmt, "ug") == 0) {
		fprintf(stderr, "[M::%s] ===> Step 6: generating unitigs <===\n", __func__);
		ma_ug_t *ug = ma_ug_gen(sg);
		if (fn_reads) ma_ug_seq(ug, d, sub, fn_reads);
		ma_ug_print(ug, d, sub, stdout);
		ma_ug_destroy(ug);
	} else if (strcmp(outfmt, "sg") == 0)
		ma_sg_print(sg, d, sub, stdout);

	asg_destroy(sg);
	free(sub);
	free(hit);
	sd_destroy(d);

	fprintf(stderr, "[M::%s] Version: %s (miniasm %s)\n", __func__, KM_VERSION, MA_VERSION);
	fprintf(stderr, "[M::%s] CMD:", __func__);
	for (i = 0; i < argc; ++i)
		fprintf(stderr, " %s", argv[i]);
	fprintf(stderr, "\n[M::%s] Real time: %.3f sec; CPU: %.3f sec\n", __func__, sys_realtime(), sys_cputime());
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rsi, %rbx
movl %edi, %ebp
movl $0x42200000, 0x9c(%rsp) # imm = 0x42200000
leaq 0x50(%rsp), %rdi
callq 0x4d98
leaq 0x19de(%rip), %rdx      # 0xa9df
movl %ebp, %edi
movq %rbx, %rsi
callq 0x11c0
testl %eax, %eax
js 0x9449
movq $0x0, 0xa0(%rsp)
movl $0x5, 0x28(%rsp)
movl $0x1, 0x2c(%rsp)
leaq 0x19a6(%rip), %rcx      # 0xa9dc
movq %rcx, 0x40(%rsp)
movl $0x64, 0x20(%rsp)
leaq 0x1995(%rip), %r12      # 0xa9df
leaq 0x18c7(%rip), %r14      # 0xa918
movq 0x4f80(%rip), %r13      # 0xdfd8
movl $0x0, 0x4c(%rsp)
movl $0x0, 0x18(%rsp)
movl $0x0, 0x30(%rsp)
movq $0x0, 0x90(%rsp)
movq $0x0, 0x38(%rsp)
movq $0x0, 0x88(%rsp)
movl $0x0, 0x34(%rsp)
xorl %r15d, %r15d
leal -0x43(%rax), %ecx
cmpl $0x30, %ecx
ja 0x90bb
movslq (%r14,%rcx,4), %rax
addq %r14, %rax
jmpq *%rax
movq (%r13), %rax
movq %rax, 0x38(%rsp)
jmp 0x9298
cmpl $0x31, %eax
je 0x928b
cmpl $0x32, %eax
jne 0x9298
movl $0x1, 0x4c(%rsp)
jmp 0x9298
movq (%r13), %rdi
leaq 0x10(%rsp), %rsi
callq 0x1060
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x80(%rsp)
movq 0x10(%rsp), %rdi
cmpb $0x2c, (%rdi)
jne 0x9298
incq %rdi
leaq 0x10(%rsp), %rsi
callq 0x1060
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x7c(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x54(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x1070
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x5c(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x64(%rsp)
movl $0x1, 0x18(%rsp)
jmp 0x9298
movq (%r13), %rax
movq %rax, 0x40(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x6c(%rsp)
jmp 0x9298
movq (%r13), %rax
movq %rax, 0x88(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
cltq
movq %rax, 0x90(%rsp)
movl $0x1, %r15d
jmp 0x9298
movq (%r13), %rdi
callq 0x1070
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x68(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x28(%rsp)
jmp 0x9298
movl $0x1, 0x30(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x1070
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x84(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x58(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x78(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x50(%rsp)
jmp 0x9298
movl $0x1, 0x34(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x60(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x20(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x2c(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
movl %eax, 0x74(%rsp)
jmp 0x9298
movq (%r13), %rdi
callq 0x11e0
decl %eax
movl %eax, 0x70(%rsp)
jmp 0x9298
movl $0x1, %eax
movq %rax, 0xa0(%rsp)
movl %ebp, %edi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x11c0
testl %eax, %eax
jns 0x909c
cmpl $0x0, 0x30(%rsp)
sete %r12b
testl %r15d, %r15d
setne %r15b
cmpl $0x0, 0xa0(%rsp)
sete %r8b
cmpl $0x0, 0x4c(%rsp)
sete %dil
cmpl $0x0, 0x34(%rsp)
sete %sil
cmpl $0x0, 0x18(%rsp)
movq 0x40(%rsp), %rcx
movl 0x20(%rsp), %edx
jne 0x92f3
movl 0x50(%rsp), %eax
movl %eax, 0x64(%rsp)
cmpb $0x63, (%rcx)
jne 0x9310
cmpb $0x66, 0x1(%rcx)
jne 0x9310
cmpl $0x5, %edx
movl $0x5, %eax
cmovll %edx, %eax
cmpb $0x0, 0x2(%rcx)
cmovel %eax, %edx
movl %edx, 0x20(%rsp)
movq 0x4cb5(%rip), %r13      # 0xdfd0
cmpl %ebp, (%r13)
jne 0x9352
leaq 0x50(%rsp), %rdi
movl 0x28(%rsp), %esi
movl 0x2c(%rsp), %edx
callq 0x2a2a
movl $0x1, %r14d
jmp 0x98f1
leaq 0x16c6(%rip), %rdi      # 0xaa0b
callq 0x1050
xorl %r14d, %r14d
jmp 0x98f1
movb %r8b, 0x34(%rsp)
movb %dil, 0x18(%rsp)
movb %sil, 0x30(%rsp)
movq %rcx, 0x40(%rsp)
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x2eda
cmpq $0x0, 0x38(%rsp)
setne %al
testb %r12b, %r12b
je 0x9387
andb %r15b, %al
je 0x94ad
movq 0x4c6a(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1ba8(%rip), %rsi      # 0xaf40
leaq 0x1bcc(%rip), %rdx      # 0xaf6b
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x1120
movq 0x38(%rsp), %rcx
testq %rcx, %rcx
setne %al
andb %r15b, %al
cmpb $0x1, %al
jne 0x93f5
movq 0x4c36(%rip), %r15      # 0xdff8
movq (%r15), %rdi
leaq 0x1ba4(%rip), %rsi      # 0xaf70
leaq 0x1b98(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
movq %rcx, %r14
callq 0x1120
movq %r14, %rdi
movq 0x90(%rsp), %rsi
callq 0x840c
movq %rax, %r14
movq %r15, %rax
jmp 0x93fc
movq 0x4bfc(%rip), %rax      # 0xdff8
testb %r12b, %r12b
jne 0x94ad
movq (%rax), %rdi
leaq 0x1b96(%rip), %rsi      # 0xafa5
leaq 0x1b55(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movslq (%r13), %rax
movq (%rbx,%rax,8), %rdi
movl 0x50(%rsp), %esi
movl 0x54(%rsp), %edx
movl 0x60(%rsp), %ecx
movss 0x68(%rsp), %xmm0
callq 0x5432
movq %rax, %r15
testq %r14, %r14
jne 0x949a
movq %r15, %r14
jmp 0x94ad
movl $0x5, 0x28(%rsp)
movl $0x1, 0x2c(%rsp)
leaq 0x157c(%rip), %rcx      # 0xa9dc
movb $0x1, %r8b
movl $0x64, %edx
movb $0x1, %dil
movb $0x1, %r12b
movq $0x0, 0x90(%rsp)
movq $0x0, 0x38(%rsp)
movq $0x0, 0x88(%rsp)
movb $0x1, %sil
xorl %r15d, %r15d
jmp 0x92eb
movq %r14, %rdi
movq %r15, %rsi
callq 0x8f84
movq %r15, %rdi
callq 0x301b
movq 0x4b44(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1b1e(%rip), %rsi      # 0xafdc
leaq 0x1aa6(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
callq 0x2ff0
movq %rax, %r15
movslq (%r13), %rax
movq (%rbx,%rax,8), %rdi
movl 0x50(%rsp), %esi
movl 0x54(%rsp), %edx
movq %r14, (%rsp)
leaq 0x10(%rsp), %r8
movq %r15, %rcx
movl $0x1, %r9d
callq 0x55e6
movq %rax, %r12
testq %r14, %r14
je 0x950b
movq %r14, %rdi
callq 0x301b
cmpb $0x0, 0x34(%rsp)
movl 0x20(%rsp), %r14d
je 0x95d2
movq 0x4ad6(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1ae1(%rip), %rsi      # 0xb00d
leaq 0x1a38(%rip), %rdx      # 0xaf6b
xorl %r13d, %r13d
xorl %eax, %eax
callq 0x1120
cmpl $0x2, %r14d
movb 0x18(%rsp), %r14b
jl 0x95da
movl 0x58(%rsp), %edi
movss 0x5c(%rsp), %xmm0
movq 0x10(%rsp), %rdx
movl (%r15), %r8d
xorl %esi, %esi
movq %r12, %rcx
callq 0x59af
movq %rax, %r13
movl 0x50(%rsp), %esi
movq 0x10(%rsp), %rdx
movq %rax, %rdi
movq %r12, %rcx
callq 0x5d6e
movq %rax, 0x10(%rsp)
cmpl $0x2, 0x20(%rsp)
je 0x95da
xorps %xmm0, %xmm0
cvtsi2sdl 0x60(%rsp), %xmm0
mulsd 0x1374(%rip), %xmm0     # 0xa910
cvttsd2si %xmm0, %esi
xorps %xmm0, %xmm0
cvtsi2sdl 0x64(%rsp), %xmm0
mulsd 0xa77(%rip), %xmm0      # 0xa028
cvttsd2si %xmm0, %edx
leaq 0x9c(%rsp), %r9
movq %r13, %rdi
movq %rax, %rcx
movq %r12, %r8
callq 0x5f2d
movq %rax, 0x10(%rsp)
jmp 0x95da
xorl %r13d, %r13d
movb 0x18(%rsp), %r14b
testb %r14b, %r14b
je 0x9655
movq 0x4a12(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1a56(%rip), %rsi      # 0xb046
leaq 0x1974(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movq 0x10(%rsp), %rax
cmpl $0x4, 0x20(%rsp)
jl 0x9661
movl 0x50(%rsp), %ecx
movl 0x58(%rsp), %edi
movss 0x5c(%rsp), %xmm0
movl %ecx, %esi
shrl $0x1f, %esi
addl %ecx, %esi
sarl %esi
movl (%r15), %r8d
movq %rax, %rdx
movq %r12, %rcx
callq 0x59af
movq %rax, %r14
movl 0x50(%rsp), %esi
movq 0x10(%rsp), %rdx
movq %rax, %rdi
movq %r12, %rcx
callq 0x5d6e
movq %rax, 0x10(%rsp)
testq %r13, %r13
jne 0x9668
movq %r14, %r13
jmp 0x9683
movq %r13, 0x18(%rsp)
movq 0x10(%rsp), %rax
jmp 0x96aa
movq %r13, 0x18(%rsp)
jmp 0x96aa
movl (%r15), %edi
movq %r13, %rsi
movq %r14, %rdx
callq 0x6273
movq %r14, %rdi
callq 0x1040
movq 0x10(%rsp), %rax
cmpl $0x4, 0x20(%rsp)
movq %r13, 0x18(%rsp)
je 0x96aa
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %rax, %rcx
movq %r12, %r8
callq 0x62b4
movq %rax, 0x10(%rsp)
shlq $0x5, %rax
movq %r12, %rdi
movq %rax, %rsi
callq 0x1180
movq %rax, %r12
movq 0x4935(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x19b1(%rip), %rsi      # 0xb07e
leaq 0x1897(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movq 0x10(%rsp), %rcx
leaq 0x50(%rsp), %rdi
movq %r15, %r13
movq %r15, %rsi
movq 0x18(%rsp), %rdx
movq %r12, %r8
callq 0x1d33
movq %rax, %r15
movq 0x38(%rsp), %r14
testq %r14, %r14
je 0x97c4
movq 0x48e8(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1995(%rip), %rsi      # 0xb0af
leaq 0x184a(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movq %r14, %rdi
movq %r13, %rsi
callq 0x8444
movq %rax, %r14
cmpb $0x0, 0x30(%rsp)
je 0x976b
movq 0x48b4(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1995(%rip), %rsi      # 0xb0e3
leaq 0x1816(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movq %r15, %rdi
movq %r14, %rsi
movl 0x28(%rsp), %edx
callq 0x2095
movq 0x40(%rsp), %rax
cmpb $0x63, (%rax)
jne 0x978e
cmpb $0x66, 0x1(%rax)
jne 0x978e
cmpb $0x0, 0x2(%rax)
jne 0x978e
movq %r13, %rdi
movq %r14, %rsi
callq 0x8394
jmp 0x97bc
movq 0x4863(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x1974(%rip), %rsi      # 0xb113
leaq 0x17c5(%rip), %rdx      # 0xaf6b
xorl %eax, %eax
callq 0x1120
movq %r15, %rdi
movq %r14, %rsi
movl 0x2c(%rsp), %edx
callq 0x847c
movq %r14, %rdi
callq 0x1040
movl 0x20(%rsp), %edx
cmpl $0x6, %edx
jl 0x97da
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x27a8
movq 0x40(%rsp), %rcx
movzbl (%rcx), %eax
cmpl $0x73, %eax
je 0x9812
cmpl $0x75, %eax
jne 0x9838
cmpb $0x67, 0x1(%rcx)
jne 0x9838
cmpb $0x0, 0x2(%rcx)
jne 0x9838
movq %r15, %rdi
movq 0x88(%rsp), %rsi
movq %r13, %rdx
movq 0x18(%rsp), %rcx
callq 0x2966
jmp 0x9838
cmpb $0x67, 0x1(%rcx)
jne 0x9838
cmpb $0x0, 0x2(%rcx)
jne 0x9838
movq 0x479b(%rip), %rax      # 0xdfc0
movq (%rax), %rcx
movq %r15, %rdi
movq %r13, %rsi
movq 0x18(%rsp), %rdx
callq 0x658c
movq %r15, %rdi
callq 0x3e6f
movq 0x18(%rsp), %rdi
callq 0x1040
movq %r12, %rdi
callq 0x1040
movq %r13, %rdi
callq 0x301b
movq 0x4797(%rip), %r12      # 0xdff8
movq (%r12), %rdi
leaq 0x1a8c(%rip), %rsi      # 0xb2f8
leaq 0x16f8(%rip), %r15      # 0xaf6b
leaq 0x1191(%rip), %rcx      # 0xaa0b
leaq 0x1a99(%rip), %r8       # 0xb31a
xorl %r14d, %r14d
movq %r15, %rdx
xorl %eax, %eax
callq 0x1120
movq (%r12), %rdi
leaq 0x1a8a(%rip), %rsi      # 0xb323
movq %r15, %rdx
xorl %eax, %eax
callq 0x1120
testl %ebp, %ebp
jle 0x98b1
movl %ebp, %edi
movq %rbx, %rsi
callq 0x29e6
movq 0x4740(%rip), %rax      # 0xdff8
movq (%rax), %rbx
xorl %eax, %eax
callq 0x2e6f
movsd %xmm0, 0x20(%rsp)
xorl %eax, %eax
callq 0x2e2c
movapd %xmm0, %xmm1
leaq 0x1a5a(%rip), %rsi      # 0xb334
leaq 0x168a(%rip), %rdx      # 0xaf6b
movq %rbx, %rdi
movsd 0x20(%rsp), %xmm0
movb $0x2, %al
callq 0x1120
movl %r14d, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq