// File: /workspace/github_cpp_makefile_star2_O1/jsteemann[P]jshund/src/jshund.cpp
// Function: main
int main (int argc, char* argv[]) {
  if (argc < 2) {
    // not enough arguments
    Bark();
    std::cout << "usage: " << argv[0] << " <file>" << std::endl;
    return EXIT_FAILURE;
  }
 
  // parse options
  bool colors  = true;
  bool globals = true; 
  bool debug   = false; 

  for (int i = 1; i < argc; ++i) {
    const std::string argument(argv[i]);

    if (argument.size() > 2 && argument.substr(0, 2) == "--") { 
      if (argument == "--colors") {
        colors = true;
      }
      else if (argument == "--no-colors") {
        colors = false;
      }
      else if (argument == "--globals") {
        globals = true;
      }
      else if (argument == "--no-globals") {
        globals = false;
      }
      else if (argument == "--debug") {
        debug = true;
      }
      else if (argument == "--help" || argument == "--version" || argument == "--bark") {
        Bark();
        return EXIT_SUCCESS;
      }
    }
  }

  // add files
  std::vector<std::string> files = AddFiles(argc, argv);

  int errors = ProcessFiles(files, colors, globals, debug);

  // return status code based on whether there were any errors
  if (errors == 0) {
    return EXIT_SUCCESS;
  }

  return EXIT_FAILURE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1b8, %rsp            # imm = 0x1B8
movq %rsi, %rbx
cmpl $0x2, %edi
jge 0x2570
callq 0x2c10
movq 0x9a9f(%rip), %r14      # 0xbfd0
leaq 0x5b20(%rip), %rsi      # 0x8058
movl $0x7, %edx
movq %r14, %rdi
callq 0x2250
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x2af8
movq %rbx, %rdi
callq 0x20f0
movq 0x9a70(%rip), %rdi      # 0xbfd0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x2250
jmp 0x2b10
movl %edi, %eax
movl $0x1, %ecx
movq %rax, 0x18(%rsp)
subq %rax, %rcx
movq %rcx, 0x28(%rsp)
movb $0x1, %r15b
movl $0x2, %r12d
movq $0x0, 0x20(%rsp)
leaq 0x68(%rsp), %r14
movb $0x1, %al
movl %eax, 0x4(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
movq %rbx, 0x10(%rsp)
movq -0x8(%rbx,%r12,8), %rsi
movq %r14, %rdi
leaq 0x130(%rsp), %rdx
callq 0x2da2
movq 0x70(%rsp), %r13
cmpq $0x3, %r13
jb 0x25fc
movl $0x2, %ecx
leaq 0x110(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x2220
movq %rbx, %rdi
leaq 0x5c6d(%rip), %rsi      # 0x825d
callq 0x20b0
testl %eax, %eax
sete %bl
jmp 0x25fe
xorl %ebx, %ebx
cmpq $0x3, %r13
jb 0x2629
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x2629
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x2200
movb $0x1, %bpl
testb %bl, %bl
je 0x26ef
movq %r14, %rdi
leaq 0x5a2a(%rip), %rsi      # 0x8068
callq 0x20b0
movb $0x1, %bpl
testl %eax, %eax
movq 0x10(%rsp), %rbx
je 0x26f6
movq %r14, %rdi
leaq 0x5a14(%rip), %rsi      # 0x8071
callq 0x20b0
testl %eax, %eax
je 0x26fe
movq %r14, %rdi
leaq 0x5a09(%rip), %rsi      # 0x807d
callq 0x20b0
movb $0x1, %bpl
testl %eax, %eax
je 0x2708
movq %r14, %rdi
leaq 0x59f9(%rip), %rsi      # 0x8087
callq 0x20b0
testl %eax, %eax
je 0x2710
movq %r14, %rdi
leaq 0x59f3(%rip), %rsi      # 0x8094
callq 0x20b0
movb $0x1, %bpl
testl %eax, %eax
je 0x271a
movq %r14, %rdi
leaq 0x59e5(%rip), %rsi      # 0x809c
callq 0x20b0
testl %eax, %eax
je 0x26e6
movq %r14, %rdi
leaq 0x59d9(%rip), %rsi      # 0x80a3
callq 0x20b0
testl %eax, %eax
je 0x26e6
movq %r14, %rdi
leaq 0x59d0(%rip), %rsi      # 0x80ad
callq 0x20b0
testl %eax, %eax
jne 0x2721
callq 0x2c10
xorl %ebp, %ebp
jmp 0x2721
movq 0x10(%rsp), %rbx
jmp 0x2721
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x2721
movl $0x0, 0x8(%rsp)
jmp 0x2721
movb $0x1, %al
movl %eax, 0x4(%rsp)
jmp 0x2721
movl $0x0, 0x4(%rsp)
jmp 0x2721
movb $0x1, %al
movq %rax, 0x20(%rsp)
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x273d
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2200
testb %bpl, %bpl
je 0x2763
cmpq 0x18(%rsp), %r12
setb %r15b
movq 0x28(%rsp), %rax
addq %r12, %rax
incq %rax
incq %r12
cmpq $0x2, %rax
jne 0x25ac
xorl %ebp, %ebp
testb $0x1, %r15b
jne 0x2b5e
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rax
movaps %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movl $0x1, %r14d
xorl %r13d, %r13d
leaq 0x68(%rsp), %r15
leaq 0x130(%rsp), %r12
movq (%rbx,%r14,8), %rsi
movq %r15, %rdi
movq %r12, %rdx
callq 0x2da2
movl $0x2, %ecx
movq %r12, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x2220
movq %r12, %rdi
leaq 0x5a9a(%rip), %rsi      # 0x825d
callq 0x20b0
movl %eax, %ebp
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x27ef
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x2200
testl %ebp, %ebp
jne 0x280e
testb $0x1, %r13b
jne 0x280e
cmpq $0x2, 0x70(%rsp)
movzbl %r13b, %r13d
movl $0x1, %eax
cmovel %eax, %r13d
jmp 0x2820
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movq %r15, %rdx
callq 0x2e3c
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x283c
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2200
incq %r14
cmpq %r14, 0x18(%rsp)
jne 0x2798
movq 0x50(%rsp), %rax
cmpq %rax, 0x58(%rsp)
je 0x2b52
movl $0x8, %ebx
xorl %r14d, %r14d
leaq 0x30(%rsp), %r15
movzbl 0x20(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x18(%rsp)
movzbl 0x8(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x10(%rsp)
movzbl 0x4(%rsp), %ecx
andl $0x1, %ecx
movl %ecx, 0x28(%rsp)
xorl %r12d, %r12d
leaq 0x40(%rsp), %rcx
movq %rcx, 0x30(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x35f8
leaq 0xf(%rsp), %rdi
movq %r15, %rsi
callq 0x3688
movq %rax, %rbp
testq %rax, %rax
je 0x2a34
testb $0x1, 0x20(%rsp)
je 0x29b1
movl $0x14, %edx
movq 0x96f4(%rip), %rdi      # 0xbfd0
leaq 0x592d(%rip), %rsi      # 0x8210
callq 0x2250
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x96d7(%rip), %rdi      # 0xbfd0
callq 0x2250
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
leaq 0x5aab(%rip), %rsi      # 0x83bb
callq 0x2250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
movl $0x3a, %edx
movq 0x9687(%rip), %rdi      # 0xbfd0
leaq 0x58d5(%rip), %rsi      # 0x8225
callq 0x2250
movq 0x9674(%rip), %rcx      # 0xbfd0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq 0x9656(%rip), %rdi      # 0xbfd0
callq 0x2040
movq %rax, %rdi
callq 0x2160
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
leaq 0x68(%rsp), %rdi
movl 0x18(%rsp), %esi
callq 0x375c
leaq 0x130(%rsp), %rdi
movl 0x10(%rsp), %esi
movl 0x28(%rsp), %edx
callq 0x4d40
leaq 0x68(%rsp), %rdi
movq %rbp, %rsi
callq 0x5a6e
leaq 0x130(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x4e7a
testl %eax, %eax
movzbl %r14b, %r14d
movl $0x1, %eax
cmovel %eax, %r14d
movq %r13, %rdi
callq 0x5b1c
leaq 0xc8(%rsp), %rdi
callq 0x5c1e
leaq 0x98(%rsp), %rdi
callq 0x5fc8
leaq 0x68(%rsp), %rdi
callq 0x5fc8
jmp 0x2aa4
movl $0x1b, %edx
movq 0x95b0(%rip), %rdi      # 0xbff0
leaq 0x57ad(%rip), %rsi      # 0x81f4
callq 0x2250
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x9593(%rip), %rdi      # 0xbff0
callq 0x2250
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
leaq 0x5947(%rip), %rsi      # 0x83bb
callq 0x2250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x2040
movb $0x1, %r14b
movq %rax, %rdi
callq 0x2160
testq %rbp, %rbp
je 0x2ab1
movq %rbp, %rdi
callq 0x2290
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2acd
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x2200
incq %r12
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %rcx, %r12
jb 0x288e
andb $0x1, %r14b
movzbl %r14b, %ebp
jmp 0x2b54
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x2340
leaq 0x5549(%rip), %rsi      # 0x8060
movl $0x7, %edx
movq %r14, %rdi
callq 0x2250
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2160
movl $0x1, %ebp
jmp 0x2b5e
xorl %ebp, %ebp
leaq 0x50(%rsp), %rdi
callq 0x2de0
movl %ebp, %eax
addq $0x1b8, %rsp            # imm = 0x1B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2b7d
jmp 0x2bdf
movq %rax, %rbx
jmp 0x2bb0
jmp 0x2bc1
movq %rax, %rbx
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x2c08
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x2c08
jmp 0x2bbc
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
callq 0x5b1c
leaq 0x68(%rsp), %rdi
callq 0x5b82
jmp 0x2be2
movq %rax, %rbx
jmp 0x2bfe
movq %rax, %rbx
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x2bfe
movq 0x78(%rsp), %rsi
jmp 0x2bf6
movq %rax, %rbx
jmp 0x2c08
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x2bfe
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x50(%rsp), %rdi
callq 0x2de0
movq %rbx, %rdi
callq 0x2380