// File: /workspace/github_c_makefile_star2_O2/lh3[P]fermi2/main.c
// Function: main
int main(int argc, char *argv[])
{
	int ret = 0, i;
	double t_start;
	liftrlimit();
	if (argc == 1) {
		fprintf(stderr, "Usage: fermi2 <command> [arguments]\n");
		fprintf(stderr, "Command:\n");
		fprintf(stderr, "  diff        compare two FMD-indices\n");
		fprintf(stderr, "  occflt      pick up reads containing low-occurrence k-mers\n");
		fprintf(stderr, "  sub         subset FM-index\n");
		fprintf(stderr, "  unpack      unpack FM-index\n");
		fprintf(stderr, "  correct     error correction\n");
		fprintf(stderr, "  count       k-mer counting (inefficient for long k-mers)\n");
		fprintf(stderr, "  interleave  convert 2-file PE fastq to interleaved fastq\n");
		fprintf(stderr, "  assemble    assemble reads into a unitig graph\n");
		fprintf(stderr, "  simplify    simplify a unitig graph\n");
		fprintf(stderr, "  sa          generate sampled suffix array\n");
		fprintf(stderr, "  match       exact matches\n");
		fprintf(stderr, "  kprof       k-mer profile\n");
		return 1;
	}
	t_start = realtime();
	if (strcmp(argv[1], "diff") == 0) ret = main_diff(argc-1, argv+1);
	else if (strcmp(argv[1], "occflt") == 0) ret = main_diff(argc-1, argv+1);
	else if (strcmp(argv[1], "sub") == 0) ret = main_sub(argc-1, argv+1);
	else if (strcmp(argv[1], "unpack") == 0) ret = main_unpack(argc-1, argv+1);
	else if (strcmp(argv[1], "correct") == 0) ret = main_correct(argc-1, argv+1);
	else if (strcmp(argv[1], "count") == 0) ret = main_count(argc-1, argv+1);
	else if (strcmp(argv[1], "inspectk") == 0) ret = main_inspectk(argc-1, argv+1);
	else if (strcmp(argv[1], "interleave") == 0) ret = main_interleave(argc-1, argv+1);
	else if (strcmp(argv[1], "assemble") == 0) ret = main_assemble(argc-1, argv+1);
	else if (strcmp(argv[1], "simplify") == 0) ret = main_simplify(argc-1, argv+1);
	else if (strcmp(argv[1], "sa") == 0) ret = main_sa(argc-1, argv+1);
	else if (strcmp(argv[1], "match") == 0) ret = main_match(argc-1, argv+1);
	else if (strcmp(argv[1], "kprof") == 0) ret = main_kprof(argc-1, argv+1);
	else {
		fprintf(stderr, "[E::%s] unknown command\n", __func__);
		return 1;
	}
	if (ret == 0) {
		fprintf(stderr, "[M::%s] Version: %s\n", __func__, FM_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__, realtime() - t_start, cputime());
	}
	return ret;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movl %edi, %r14d
callq 0x3afc
cmpl $0x1, %r14d
je 0x188f2
callq 0x3b71
movsd %xmm0, (%rsp)
leaq 0x8(%rbx), %r15
movq 0x8(%rbx), %r12
leaq 0xa88(%rip), %rsi       # 0x19205
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x188b3
leaq 0x2d39(%rip), %rsi      # 0x1b4cd
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x188b3
leaq 0xb3c(%rip), %rsi       # 0x192e7
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x188d6
leaq 0x2d12(%rip), %rsi      # 0x1b4d4
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x188e4
leaq 0x1044(%rip), %rsi      # 0x1981d
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18af5
leaq 0x1791(%rip), %rsi      # 0x19f81
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b06
leaq 0x2cd4(%rip), %rsi      # 0x1b4db
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b17
leaq 0x2cc6(%rip), %rsi      # 0x1b4e4
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b28
leaq 0x2cba(%rip), %rsi      # 0x1b4ef
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b39
leaq 0x2cac(%rip), %rsi      # 0x1b4f8
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b4a
cmpb $0x73, (%r12)
jne 0x18877
cmpb $0x61, 0x1(%r12)
jne 0x18877
cmpb $0x0, 0x2(%r12)
je 0x18b6c
leaq 0x27c5(%rip), %rsi      # 0x1b043
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
je 0x18b5b
leaq 0x29fb(%rip), %rsi      # 0x1b290
movq %r12, %rdi
callq 0x21a0
testl %eax, %eax
jne 0x18b7d
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x17d87
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x426c
testl %eax, %eax
je 0x18a48
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x4a3a
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x4fdd
jmp 0x188bf
movq 0x96ff(%rip), %r12      # 0x21ff8
movq (%r12), %rcx
leaq 0x299f(%rip), %rdi      # 0x1b2a3
pushq $0x24
popq %rsi
pushq $0x1
popq %rbx
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29ab(%rip), %rdi      # 0x1b2c8
pushq $0x9
popq %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x299f(%rip), %rdi      # 0x1b2d2
pushq $0x26
popq %r14
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29ac(%rip), %rdi      # 0x1b2f9
pushq $0x3d
popq %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29d4(%rip), %rdi      # 0x1b337
pushq $0x1e
popq %r15
movq %r15, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29d9(%rip), %rdi      # 0x1b356
movq %r15, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29e2(%rip), %rdi      # 0x1b375
pushq $0x1f
popq %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x29ec(%rip), %rdi      # 0x1b395
pushq $0x3b
popq %r15
movq %r15, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a0e(%rip), %rdi      # 0x1b3d1
movq %r15, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a34(%rip), %rdi      # 0x1b40d
pushq $0x31
popq %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a50(%rip), %rdi      # 0x1b43f
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a61(%rip), %rdi      # 0x1b466
pushq $0x2c
popq %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a78(%rip), %rdi      # 0x1b493
pushq $0x1c
popq %r14
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2310
movq (%r12), %rcx
leaq 0x2a7b(%rip), %rdi      # 0x1b4b0
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2310
pushq $0x1
popq %rax
jmp 0x188c7
movq 0x95a9(%rip), %r13      # 0x21ff8
movq (%r13), %rdi
leaq 0x2ac5(%rip), %rsi      # 0x1b51f
leaq 0x2ab9(%rip), %r15      # 0x1b51a
leaq 0x2acc(%rip), %rcx      # 0x1b534
xorl %r12d, %r12d
movq %r15, %rdx
xorl %eax, %eax
callq 0x21c0
movq (%r13), %rdi
leaq 0x2ab9(%rip), %rsi      # 0x1b539
movq %r15, %rdx
xorl %eax, %eax
callq 0x21c0
testl %r14d, %r14d
cmovlel %r12d, %r14d
leaq 0x2aae(%rip), %r15      # 0x1b546
xorl %ebp, %ebp
movq (%r13), %r12
cmpq %rbp, %r14
je 0x18ab9
movq (%rbx,%rbp,8), %rdx
movq %r12, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x21c0
incq %rbp
jmp 0x18a9a
callq 0x3b71
subsd (%rsp), %xmm0
movsd %xmm0, (%rsp)
callq 0x3b2e
movapd %xmm0, %xmm1
leaq 0x2a72(%rip), %rsi      # 0x1b54a
leaq 0x2a3b(%rip), %rdx      # 0x1b51a
movq %r12, %rdi
movsd (%rsp), %xmm0
movb $0x2, %al
callq 0x21c0
xorl %eax, %eax
jmp 0x188c7
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x8d45
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0xace5
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x9313
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0xc613
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x143b3
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x12000
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x169e1
jmp 0x188bf
leal -0x1(%r14), %edi
movq %r15, %rsi
callq 0x16011
jmp 0x188bf
movq 0x9474(%rip), %rax      # 0x21ff8
movq (%rax), %rdi
leaq 0x2973(%rip), %rsi      # 0x1b501
leaq 0x2985(%rip), %rdx      # 0x1b51a
xorl %eax, %eax
callq 0x21c0
jmp 0x18a40