// File: /workspace/github_cpp_makefile_star2_O3/SNUCSE-CTA[P]GI/src/program.cpp
// Function: main
int main(int argc, char* argv[])
{
	if( argc != 3 && argc != 4) {
		bool handled = false;
		if( argc == 2 ) {
			if( strcmp(argv[1], "--help") == 0 ) {
				//print help
				cout << "Usage: " << argv[0] << " graph1 graph2 (isomorphism_output)" << endl;
				cout << "Other options:" << endl;
				cout << "  --help        Display help" << endl;
				cout << "  --example     Display example file format" << endl;
				handled = true;
			}
			else if( strcmp(argv[1], "--example") == 0 ) {
				//print example file format
				printExample();
				handled = true;
			}
		}

		if(handled == false) {
			//print usages
			cout << "Usage: " << argv[0] << " graph1 graph2 (isomorphism_output)" << endl;
			cout << "Try '" << argv[0] << " --help' for more information" << endl;
		}
		return -1;
	}

	double totalTime;
	bool isomorphic;
	char* outfname = (argc == 4 ? argv[3] : nullptr);
	int ret = compare(argv[1], argv[2], &isomorphic, &totalTime, outfname);
	if (ret == 0) {
		//cout << "There is no file" << endl;
		return -1;
	}

	cout << "Elasped Time: " << totalTime << endl;
	if (isomorphic) {
		cout << "True: " << argv[1] << " and " << argv[2] << " are isomorphic" << endl;
	} else {
		cout << "False: " << argv[1] << " and " << argv[2] << " are not isomorphic" << endl;
	}

	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rbx
leal -0x5(%rdi), %eax
cmpl $-0x3, %eax
ja 0x269f
cmpl $0x2, %edi
jne 0x2659
movq 0x8(%rbx), %r14
leaq 0x99d2(%rip), %rsi      # 0xc004
movq %r14, %rdi
callq 0x2210
testl %eax, %eax
je 0x2868
leaq 0x9a46(%rip), %rsi      # 0xc08f
movq %r14, %rdi
callq 0x2210
testl %eax, %eax
je 0x28ae
movq 0xd970(%rip), %r14      # 0xffd0
leaq 0x99a4(%rip), %rsi      # 0xc00b
movl $0x7, %edx
movq %r14, %rdi
callq 0x21c0
movq (%rbx), %r15
testq %r15, %r15
je 0x27b4
movq %r15, %rdi
callq 0x20c0
movq 0xd941(%rip), %rdi      # 0xffd0
movq %r15, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x27cc
cmpl $0x4, %edi
jne 0x26aa
movq 0x18(%rbx), %r8
jmp 0x26ad
xorl %r8d, %r8d
movq 0x8(%rbx), %rdi
movq 0x10(%rbx), %rsi
leaq 0xf(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x2d68
testl %eax, %eax
je 0x2af7
movq 0xd8fd(%rip), %r14      # 0xffd0
leaq 0x99e3(%rip), %rsi      # 0xc0bd
movl $0xe, %edx
movq %r14, %rdi
callq 0x21c0
movsd 0x10(%rsp), %xmm0
movq %r14, %rdi
callq 0x2270
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
cmpb $0x1, 0xf(%rsp)
jne 0x276d
movq 0xd8a3(%rip), %r15      # 0xffd0
leaq 0x9998(%rip), %rsi      # 0xc0cc
movl $0x6, %edx
movq %r15, %rdi
callq 0x21c0
movq 0x8(%rbx), %r12
testq %r12, %r12
je 0x28b8
movq %r12, %rdi
callq 0x20c0
movq 0xd873(%rip), %rdi      # 0xffd0
movq %r12, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x28d0
movq 0xd85c(%rip), %r15      # 0xffd0
leaq 0x996e(%rip), %rsi      # 0xc0e9
movl $0x7, %edx
movq %r15, %rdi
callq 0x21c0
movq 0x8(%rbx), %r12
testq %r12, %r12
je 0x2910
movq %r12, %rdi
callq 0x20c0
movq 0xd82c(%rip), %rdi      # 0xffd0
movq %r12, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x2928
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x22c0
leaq 0x9840(%rip), %rsi      # 0xc013
movl $0x23, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
leaq 0x988b(%rip), %rsi      # 0xc099
movl $0x5, %edx
movq %r14, %rdi
callq 0x21c0
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x283f
movq %rbx, %rdi
callq 0x20c0
movq 0xd79e(%rip), %rdi      # 0xffd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x2857
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x22c0
leaq 0x9841(%rip), %rsi      # 0xc09f
movl $0x1d, %edx
jmp 0x2ac8
movq 0xd761(%rip), %r14      # 0xffd0
leaq 0x9795(%rip), %rsi      # 0xc00b
movl $0x7, %edx
movq %r14, %rdi
callq 0x21c0
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x29f3
movq %rbx, %rdi
callq 0x20c0
movq 0xd732(%rip), %rdi      # 0xffd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x2a0b
callq 0x2b08
jmp 0x2af7
movq (%r15), %rax
movq -0x18(%rax), %rax
leaq (%r15,%rax), %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x22c0
movq 0xd6f9(%rip), %r15      # 0xffd0
leaq 0x97f5(%rip), %rsi      # 0xc0d3
movl $0x5, %edx
movq %r15, %rdi
callq 0x21c0
movq 0x10(%rbx), %rbx
testq %rbx, %rbx
je 0x2968
movq %rbx, %rdi
callq 0x20c0
movq 0xd6cd(%rip), %rdi      # 0xffd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x2980
movq (%r15), %rax
movq -0x18(%rax), %rax
leaq (%r15,%rax), %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x22c0
movq 0xd6a1(%rip), %r15      # 0xffd0
leaq 0x979d(%rip), %rsi      # 0xc0d3
movl $0x5, %edx
movq %r15, %rdi
callq 0x21c0
movq 0x10(%rbx), %rbx
testq %rbx, %rbx
je 0x2995
movq %rbx, %rdi
callq 0x20c0
movq 0xd675(%rip), %rdi      # 0xffd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x21c0
jmp 0x29ad
movq (%r15), %rax
movq -0x18(%rax), %rax
leaq (%r15,%rax), %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x22c0
movq 0xd649(%rip), %rdi      # 0xffd0
leaq 0x974b(%rip), %rsi      # 0xc0d9
movl $0xf, %edx
jmp 0x29c0
movq (%r15), %rax
movq -0x18(%rax), %rax
leaq (%r15,%rax), %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x22c0
movq 0xd61c(%rip), %rdi      # 0xffd0
leaq 0x9736(%rip), %rsi      # 0xc0f1
movl $0x13, %edx
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
xorl %eax, %eax
jmp 0x2afc
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x22c0
leaq 0x9601(%rip), %rsi      # 0xc013
movl $0x23, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
leaq 0x95ea(%rip), %rsi      # 0xc037
movl $0xe, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
leaq 0x95be(%rip), %rsi      # 0xc046
movl $0x1c, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
leaq 0x95a0(%rip), %rsi      # 0xc063
movl $0x2b, %edx
movq %r14, %rdi
callq 0x21c0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2170
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2100
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq