// File: /workspace/github_c_makefile_star2_O2/richarddurbin[P]hash10x/hash10x.c
// Function: main
int main (int argc, char *argv[])
{
  --argc ; ++argv ;		/* eat program name */

  outFile = stdout ;
  
  timeUpdate (stdout) ;		/* initialise timer */

  /* command line parameters */
  params.k = 21 ;
  params.w = 31 ;
  params.r = 17 ;
  params.B = 28 ;
  params.N = 0 ;
  params.chunkSize = 100000 ;
  params.clusterThreshold = 5 ;
#ifdef OMP
  numThreads = omp_get_max_threads () ;
  omp_set_num_threads (numThreads) ;
#endif
  
  if (!argc) usage () ;

#ifdef SIZES
  printf ("sizeof ClusterBlock is %d\n", sizeof(ClusterBlock)) ;
  printf ("sizeof ClusterHash is %d\n", sizeof(ClusterHash)) ;
  exit (0) ;
#endif

  clusterBlocks = arrayCreate (1200, ClusterBlock) ;

  FILE *f ;
  char inputBuffer[1024] ;	/* use these for interactive mode */
  char *inputArgs[32] ;
  Array inputArray = arrayCreate (1024, char) ;
  
  while (argc) {
    if (**argv != '-')
      die ("option/command %s does not start with '-': run without arguments for usage", *argv) ;
    if (!isInteractive)
      { fprintf (outFile, "COMMAND %s", *argv) ;
	int i ;
	for (i = 1 ; i < argc && *argv[i] != '-' ; ++i) fprintf (outFile, " %s", argv[i]) ;
	fputc ('\n', outFile) ;
	if (outFile != stdout)
	  { printf ("COMMAND %s", *argv) ;
	    int i ;
	    for (i = 1 ; i < argc && *argv[i] != '-' ; ++i) fprintf (outFile, " %s", argv[i]) ;
	    putchar ('\n') ;
	  }
      }
#define ARGMATCH(x,n)	(!strcmp (*argv, x) && argc >= n && (argc -= n, argv += n))
    if (ARGMATCH("-k",2)) params.k = atoi(argv[-1]) ;
    else if (ARGMATCH("-w",2)) params.w = atoi(argv[-1]) ;
    else if (ARGMATCH("-r",2)) params.r = atoi(argv[-1]) ;
    else if (ARGMATCH("-B",2)) params.B = atoi(argv[-1]) ;
    else if (ARGMATCH("-N",2)) params.N = atoi(argv[-1]) ;
    else if (ARGMATCH("-c",2)) params.chunkSize = atoi(argv[-1]) ;
    else if (ARGMATCH("-t",2) || ARGMATCH ("--threads",2))
      {
#ifdef OMP
	numThreads = atoi(argv[-1]) ;
	if (numThreads > omp_get_max_threads ()) numThreads = omp_get_max_threads () ;
	omp_set_num_threads (numThreads) ;
	fprintf (outFile, "  setting number of threads to %d\n", numThreads) ;
#else
	fprintf (stderr, "  can't set thread number - not compiled with OMP\n") ;
#endif
      }
    else if (ARGMATCH("-o",2) || ARGMATCH("--output",2))
      { if (!strcmp (argv[-1], "-"))
	  outFile = stdout ;
	else if (!(outFile = fopen (argv[-1], "w")))
	  { fprintf (stderr, "can't open output file %s\n", argv[-1]) ; outFile = stdout ; }
      }
    else if (ARGMATCH("--interactive",1)) isInteractive = TRUE ;
    else if (ARGMATCH("--tables",1)) isPrintTables = !isPrintTables ;
    else if (ARGMATCH("--verbose",1)) isVerbose = !isVerbose ;
    else if (ARGMATCH("--readFQB",2))
      { if (!(f = fopen (argv[-1], "r"))) die ("failed to open fqb file %s", argv[-1]) ;
	initialise (params.k, params.w, params.r, params.B) ;
        readFQB (f, params.N, params.chunkSize) ;
	fillHashTable () ;
      }
    else if (ARGMATCH("--readHash",2))
      { if (!(f = fopen (argv[-1], "r"))) die ("failed to open hash file %s", argv[-1]) ;
	initialise (params.k, params.w, params.r, params.B) ;
	readHashFile (f) ;
	fillHashTable () ;
      }
    else if (ARGMATCH("--writeHash",2))
      { if (!(f = fopen (argv[-1], "w"))) die ("failed to open hash file %s", argv[-1]) ;
	writeHashFile (f) ;
      }
    else if (ARGMATCH("--hashDepthRange",3))
      { hashWithinRangeBuild (atoi(argv[-2]), atoi(argv[-1])) ;
	goodHashesBuild () ;
      }
    else if (ARGMATCH("--hashInfo",4))
      hashInfo (atoi(argv[-3]), atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--hashExplore",2))
      exploreHash (atoi(argv[-1])) ;
    else if (ARGMATCH("--doubleShared",3))
      doubleShared (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--codeExplore",2))
      if (goodHashes)
	codeExplore (atoi(argv[-1]), params.clusterThreshold) ;
      else
	{ fprintf (outFile, "!! you must set hashDepthRange before codeExplore\n") ;
	  if (outFile != stdout) fprintf (stderr, "!! you must set hashDepthRange before codeExplore\n") ;
	}
    else if (ARGMATCH("--cribBuild",3))
      { FILE *f1, *f2 ;
	if (!(f1 = fopen (argv[-2], "r"))) die ("failed to open .fa file %s", argv[-2]) ;
	if (!(f2 = fopen (argv[-1], "r"))) die ("failed to open .fa file %s", argv[-1]) ;
	cribBuild (f1, f2) ;
      }
    else if (ARGMATCH("-ct",2) || ARGMATCH ("--clusterThreshold",2))
      params.clusterThreshold = atoi(argv[-1]) ;
    else if (ARGMATCH("--cluster",3))
      { int code, codeMin = atoi(argv[-2]), codeMax = atoi(argv[-1]) ;
	if (!codeMin) codeMin = 1 ;
	if (!codeMax) codeMax = arrayMax(clusterBlocks) ;
	if (goodHashes)
	  {
#ifdef OMP
#pragma omp parallel for
#endif
	    for (code = codeMin ; code < codeMax ; ++code)
	      { codeClusterFind (code, params.clusterThreshold) ;
		codeClusterReadMerge (code) ;
	      }
	    fprintf (outFile, "  clustered codes %d to %d\n", codeMin, codeMax) ;
	    if (outFile != stdout) printf ("  clustered codes %d to %d\n", codeMin, codeMax) ;
	  }
      else
	{ fprintf (outFile, "!! you must set hashDepthRange before cluster\n") ;
	  if (outFile != stdout) fprintf (stderr, "!! you must set hashDepthRange before cluster\n") ;
	}
      }
    else if (ARGMATCH("--clusterReport",3))
      { int code, codeMin = atoi(argv[-2]), codeMax = atoi(argv[-1]) ;
	if (!codeMax) codeMax = arrayMax(clusterBlocks) ;
	codeClusterReport (codeMin, codeMax) ;
      }
    else if (ARGMATCH("--clusterSplit",1)) clusterSplitCodes () ;
    else if (ARGMATCH("--hashStats",1)) hashDepthHist () ;
    else if (ARGMATCH("--codeStats",1)) codeSizeHist () ;
    else if (ARGMATCH("--cribSummary",1)) cribSummary () ;
    else if (ARGMATCH("--errorFix",3)) errorFix (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--shareScan",3)) shareScan (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--help",1)) usage () ;
    else if (ARGMATCH("--quit",1) || ARGMATCH("--exit",1)) break ; /* end loop */
    else
      if (isInteractive) fprintf (stderr, "  unknown option/command %s", (*argv)+2) ;
      else die ("unknown option/command %s; run without arguments for usage", *argv) ;

    printf ("  ") ; timeUpdate (stdout) ; fflush (stdout) ;
    
    if (isInteractive)		/* get an input line from stdin and convert to *argv */
      { if (argc) fprintf (stderr, "INPUT ERROR - ignoring arguments starting %s\n", *argv) ;
	char c ;
	printf ("> ") ; fflush (stdout) ;
	while ((c = getchar())) if (!isspace (c) || c == '\n') break ; /* remove leading space */
	if (c == '\n') { argc = 1 ; argv = inputArgs ; *argv = "--help" ; continue ; }
	arr(inputArray,0,char) = '-' ; arr(inputArray,1,char) = '-' ; arrayMax(inputArray) = 2 ;
	while (c != '\n' && c != EOF)
	  { for ( ; isgraph(c) ; c = getchar ())
	      array(inputArray, arrayMax(inputArray), char) = c ;
	    array(inputArray, arrayMax(inputArray), char) = 0 ; /* string terminator */
	    while (isspace (c) && c != '\n') c = getchar() ;	/* eat whitespace separator */
	  }
	if (c == EOF) break ;	       /* end of file or error - exit program */
	argv = inputArgs ; argc = 0 ; int i = 0 ;
	while (i < arrayMax(inputArray))
	  { argv[argc++] = arrp(inputArray,i,char) ;
	    while (*arrp(inputArray,i++,char)) ;
	  }
      }
  }

  fprintf (outFile, "total resources used: ") ; timeTotal (outFile) ;
  if (outFile != stdout) { printf ("total resources used: ") ; timeTotal (stdout) ; }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %rsi, %r15
movl %edi, %ebp
movq 0xa215(%rip), %r13      # 0xefc8
movq (%r13), %rdi
movq %rdi, 0xb5e2(%rip)      # 0x103a0
callq 0x8d03
movaps 0x4266(%rip), %xmm0     # 0x9030
movaps %xmm0, 0xb66f(%rip)     # 0x10440
movabsq $0x186a000000000, %rax  # imm = 0x186A000000000
movq %rax, 0xb66e(%rip)      # 0x10450
movl $0x5, 0xb66c(%rip)      # 0x10458
decl %ebp
jne 0x4df5
callq 0x49b1
addq $0x8, %r15
pushq $0x20
popq %rsi
movl $0x4b0, %edi            # imm = 0x4B0
callq 0x82c8
movq %rax, 0xb58b(%rip)      # 0x10398
pushq $0x1
popq %rsi
movl $0x400, %edi            # imm = 0x400
callq 0x82c8
movq %rax, %r14
testl %ebp, %ebp
je 0x5aa0
movq (%r15), %r12
cmpb $0x2d, (%r12)
je 0x4e43
leaq 0x53a5(%rip), %rdi      # 0xa1db
movq %r12, %rsi
xorl %eax, %eax
callq 0x8a3c
movq (%r15), %r12
cmpb $0x0, 0xb538(%rip)      # 0x10382
jne 0x4efe
movq 0xb549(%rip), %rdi      # 0x103a0
leaq 0x53c8(%rip), %rsi      # 0xa226
movq %r12, %rdx
xorl %eax, %eax
callq 0x1150
movslq %ebp, %rbx
pushq $0x1
popq %r12
cmpq %rbx, %r12
jge 0x4e97
movq (%r15,%r12,8), %rdx
cmpb $0x2d, (%rdx)
je 0x4e97
movq 0xb51c(%rip), %rdi      # 0x103a0
leaq 0x48a7(%rip), %rsi      # 0x9732
xorl %eax, %eax
callq 0x1150
incq %r12
jmp 0x4e6f
movq 0xb502(%rip), %rsi      # 0x103a0
pushq $0xa
popq %rdi
callq 0x1100
movq 0xb4f3(%rip), %rax      # 0x103a0
movq (%r15), %r12
cmpq (%r13), %rax
je 0x4efe
leaq 0x5369(%rip), %rdi      # 0xa226
movq %r12, %rsi
xorl %eax, %eax
callq 0x10d0
pushq $0x1
popq %r12
cmpq %rbx, %r12
jge 0x4ef3
movq (%r15,%r12,8), %rdx
cmpb $0x2d, (%rdx)
je 0x4ef3
movq 0xb4c0(%rip), %rdi      # 0x103a0
leaq 0x484b(%rip), %rsi      # 0x9732
xorl %eax, %eax
callq 0x1150
incq %r12
jmp 0x4ecb
pushq $0xa
popq %rdi
callq 0x1050
movq (%r15), %r12
movb (%r12), %bl
cmpb $0x2d, %bl
jne 0x4f47
cmpb $0x6b, 0x1(%r12)
jne 0x5005
cmpl $0x2, %ebp
setge %r13b
jl 0x500c
cmpb $0x0, 0x2(%r12)
jne 0x500c
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb4fe(%rip)      # 0x10440
jmp 0x51f2
cmpl $0x2, %ebp
setge %r13b
movq %r12, %rdi
leaq 0x52d9(%rip), %rsi      # 0xa231
callq 0x1130
testb %r13b, %r13b
je 0x4f6a
testl %eax, %eax
je 0x519a
cmpb $0x2d, %bl
jne 0x4f85
cmpb $0x6f, 0x1(%r12)
jne 0x4f85
cmpb $0x0, 0x2(%r12)
sete %al
testb %al, %r13b
jne 0x4fa7
movq %r12, %rdi
leaq 0x52df(%rip), %rsi      # 0xa26e
callq 0x1130
testl %eax, %eax
setne %al
movl %r13d, %ebx
xorb $0x1, %bl
orb %bl, %al
jne 0x5078
addl $-0x2, %ebp
leaq 0x10(%r15), %rbx
movq 0x8(%r15), %rdi
cmpb $0x2d, (%rdi)
jne 0x4fc1
cmpb $0x0, 0x1(%rdi)
je 0x51fb
leaq 0x55a8(%rip), %rsi      # 0xa570
callq 0x11f0
movq %rax, 0xb3cc(%rip)      # 0x103a0
testq %rax, %rax
movq 0x9fea(%rip), %r13      # 0xefc8
jne 0x520d
movq 0xa005(%rip), %rax      # 0xeff0
movq (%rax), %rdi
movq 0x8(%r15), %rdx
leaq 0x527e(%rip), %rsi      # 0xa277
xorl %eax, %eax
callq 0x1150
jmp 0x5202
cmpl $0x2, %ebp
setge %r13b
cmpb $0x77, 0x1(%r12)
jne 0x5042
cmpb $0x0, 0x2(%r12)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x5042
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb407(%rip)      # 0x10444
jmp 0x51f2
cmpb $0x72, 0x1(%r12)
jne 0x50a5
cmpb $0x0, 0x2(%r12)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x50a5
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb3d5(%rip)      # 0x10448
jmp 0x51f2
movq %r12, %rdi
leaq 0x5210(%rip), %rsi      # 0xa292
callq 0x1130
testl %ebp, %ebp
jle 0x5111
testl %eax, %eax
jne 0x5111
addq $0x8, %r15
decl %ebp
movb $0x1, 0xb2e2(%rip)      # 0x10382
jmp 0x51f2
cmpb $0x42, 0x1(%r12)
jne 0x50db
cmpb $0x0, 0x2(%r12)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x50db
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb376(%rip)      # 0x1044c
jmp 0x51f2
cmpb $0x4e, 0x1(%r12)
jne 0x5149
cmpb $0x0, 0x2(%r12)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x5149
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb344(%rip)      # 0x10450
jmp 0x51f2
movq %r12, %rdi
leaq 0x5185(%rip), %rsi      # 0xa2a0
callq 0x1130
testl %ebp, %ebp
jle 0x51bf
testl %eax, %eax
jne 0x51bf
addq $0x8, %r15
decl %ebp
cmpb $0x0, 0xb243(%rip)      # 0x10380
sete 0xb23c(%rip)            # 0x10380
jmp 0x51f2
cmpb $0x63, 0x1(%r12)
jne 0x517c
cmpb $0x0, 0x2(%r12)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x517c
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xb2da(%rip)      # 0x10454
jmp 0x51f2
cmpb $0x74, 0x1(%r12)
jne 0x4f4e
cmpb $0x0, 0x2(%r12)
sete %al
testb %al, %r13b
je 0x4f4e
addl $-0x2, %ebp
addq $0x10, %r15
movq 0x9e48(%rip), %rax      # 0xeff0
movq (%rax), %rcx
leaq 0x5089(%rip), %rdi      # 0xa23b
pushq $0x32
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
jmp 0x51f2
movq %r12, %rdi
leaq 0x50e0(%rip), %rsi      # 0xa2a9
callq 0x1130
testl %ebp, %ebp
jle 0x5398
testl %eax, %eax
jne 0x5398
addq $0x8, %r15
decl %ebp
cmpb $0x0, 0xb196(%rip)      # 0x10381
sete 0xb18f(%rip)            # 0x10381
movq 0x9dcf(%rip), %r13      # 0xefc8
jmp 0x5210
movq 0x9dc6(%rip), %r13      # 0xefc8
movq (%r13), %rax
movq %rax, 0xb193(%rip)      # 0x103a0
movq %rbx, %r15
leaq 0x463b(%rip), %rdi      # 0x9852
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x8d03
movq (%r13), %rdi
callq 0x11a0
cmpb $0x0, 0xb14b(%rip)      # 0x10382
je 0x4e1d
testl %ebp, %ebp
jne 0x5378
leaq 0x52c2(%rip), %rdi      # 0xa50e
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x11a0
callq 0x1140
movl %eax, %r15d
testb %r15b, %r15b
je 0x528e
callq 0x1280
movl %r15d, %ecx
shll $0x18, %ecx
cmpl $0xa000000, %ecx        # imm = 0xA000000
je 0x528e
movq (%rax), %rax
movsbq %r15b, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
jne 0x525c
cmpb $0xa, %r15b
jne 0x52af
leaq 0x51d9(%rip), %rax      # 0xa474
movq %rax, 0x10(%rsp)
leaq 0x10(%rsp), %r15
pushq $0x1
popq %rax
movl %eax, %ebp
jmp 0x4e1d
movq 0x8(%r14), %rax
movb $0x2d, %dl
movb %dl, (%rax)
movq 0x8(%r14), %rax
movslq 0x14(%r14), %rcx
movb %dl, (%rax,%rcx)
movl $0x2, 0x18(%r14)
cmpb $-0x1, %r15b
je 0x5aa0
movzbl %r15b, %eax
cmpl $0xa, %eax
je 0x5337
callq 0x1280
movq %rax, %r12
movq (%r12), %rax
movsbq %r15b, %rcx
movzwl (%rax,%rcx,2), %ebx
movl 0x18(%r14), %esi
movq %r14, %rdi
callq 0x8560
testw %bx, %bx
jns 0x530f
movb %r15b, (%rax)
callq 0x1140
movl %eax, %r15d
jmp 0x52e5
movb $0x0, (%rax)
movq (%r12), %rax
movsbq %r15b, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpb $0xa, %cl
je 0x52ca
testw %ax, %ax
je 0x52ca
callq 0x1140
movl %eax, %r15d
jmp 0x5312
movl 0x18(%r14), %eax
xorl %ebp, %ebp
xorl %ecx, %ecx
cmpl %eax, %ecx
jge 0x536e
movslq 0x14(%r14), %rdx
movslq %ecx, %rsi
imulq %rdx, %rsi
movq 0x8(%r14), %rdi
addq %rsi, %rdi
movq %rdi, 0x10(%rsp,%rbp,8)
addq 0x8(%r14), %rsi
incl %ecx
cmpb $0x0, (%rsi)
leaq (%rsi,%rdx), %rsi
jne 0x535e
incq %rbp
jmp 0x533f
leaq 0x10(%rsp), %r15
jmp 0x4e1d
movq 0x9c71(%rip), %rax      # 0xeff0
movq (%rax), %rdi
movq (%r15), %rdx
leaq 0x5154(%rip), %rsi      # 0xa4e0
xorl %eax, %eax
callq 0x1150
jmp 0x5245
movq %r12, %rdi
leaq 0x4f11(%rip), %rsi      # 0xa2b3
callq 0x1130
testl %eax, %eax
setne %al
orb %bl, %al
jne 0x5423
movq 0x8(%r15), %rdi
leaq 0x3fce(%rip), %rsi      # 0x9389
callq 0x11f0
movq %rax, %r12
testq %rax, %rax
movq 0x9bfb(%rip), %r13      # 0xefc8
jne 0x53e1
movq 0x8(%r15), %rsi
leaq 0x4ee3(%rip), %rdi      # 0xa2bd
xorl %eax, %eax
callq 0x8a3c
addl $-0x2, %ebp
addq $0x10, %r15
movl 0xb052(%rip), %edi      # 0x10440
movl 0xb050(%rip), %esi      # 0x10444
movl 0xb04e(%rip), %edx      # 0x10448
movl 0xb04c(%rip), %ecx      # 0x1044c
callq 0x4c98
movl 0xb045(%rip), %esi      # 0x10450
movl 0xb043(%rip), %edx      # 0x10454
movq %r12, %rdi
callq 0x1740
callq 0x1fdd
jmp 0x5210
movq %r12, %rdi
leaq 0x4eab(%rip), %rsi      # 0xa2d8
callq 0x1130
testl %eax, %eax
setne %al
orb %bl, %al
jne 0x549b
movq 0x8(%r15), %rdi
leaq 0x3f43(%rip), %rsi      # 0x9389
callq 0x11f0
movq %rax, %r12
testq %rax, %rax
jne 0x5465
movq 0x8(%r15), %rsi
leaq 0x4e85(%rip), %rdi      # 0xa2e3
xorl %eax, %eax
callq 0x8a3c
addl $-0x2, %ebp
addq $0x10, %r15
movl 0xafce(%rip), %edi      # 0x10440
movl 0xafcc(%rip), %esi      # 0x10444
movl 0xafca(%rip), %edx      # 0x10448
movl 0xafc8(%rip), %ecx      # 0x1044c
callq 0x4c98
movq %r12, %rdi
callq 0x1c6c
callq 0x1fdd
jmp 0x51f2
movq %r12, %rdi
leaq 0x4e5a(%rip), %rsi      # 0xa2ff
callq 0x1130
testl %eax, %eax
setne %al
orb %bl, %al
jne 0x54f8
movq 0x8(%r15), %rdi
leaq 0x50b2(%rip), %rsi      # 0xa570
callq 0x11f0
movq %rax, %r12
testq %rax, %rax
movq 0x9af8(%rip), %r13      # 0xefc8
jne 0x54e4
movq 0x8(%r15), %rsi
leaq 0x4e06(%rip), %rdi      # 0xa2e3
xorl %eax, %eax
callq 0x8a3c
addl $-0x2, %ebp
addq $0x10, %r15
movq %r12, %rdi
callq 0x1a2a
jmp 0x5210
movq %r12, %rdi
leaq 0x4e09(%rip), %rsi      # 0xa30b
callq 0x1130
cmpl $0x3, %ebp
jl 0x553d
testl %eax, %eax
jne 0x553d
leaq 0x18(%r15), %rbx
addl $-0x3, %ebp
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x10(%r15), %rdi
callq 0x1220
movl %r12d, %edi
movl %eax, %esi
callq 0x2b69
callq 0x3812
jmp 0x558a
movq %r12, %rdi
leaq 0x4dd5(%rip), %rsi      # 0xa31c
callq 0x1130
cmpl $0x4, %ebp
jl 0x5592
testl %eax, %eax
jne 0x5592
leaq 0x20(%r15), %rbx
addl $-0x4, %ebp
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r13d
movq 0x10(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x18(%r15), %rdi
callq 0x1220
movl %r13d, %edi
movl %r12d, %esi
movl %eax, %edx
callq 0x31d6
movq %rbx, %r15
jmp 0x51f2
movq %r12, %rdi
leaq 0x4d8b(%rip), %rsi      # 0xa327
callq 0x1130
testl %eax, %eax
setne %al
orb %bl, %al
jne 0x55c6
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, %edi
callq 0x2edc
jmp 0x51f2
movq %r12, %rdi
leaq 0x4d65(%rip), %rsi      # 0xa335
callq 0x1130
cmpl $0x3, %ebp
jl 0x5606
testl %eax, %eax
jne 0x5606
leaq 0x18(%r15), %rbx
addl $-0x3, %ebp
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x10(%r15), %rdi
callq 0x1220
movl %r12d, %edi
movl %eax, %esi
callq 0x3063
jmp 0x558a
movq %r12, %rdi
leaq 0x4d34(%rip), %rsi      # 0xa344
callq 0x1130
testl %eax, %eax
setne %al
orb %bl, %al
jne 0x564e
addl $-0x2, %ebp
leaq 0x10(%r15), %rbx
cmpq $0x0, 0xadf3(%rip)      # 0x10420
je 0x5727
movq 0x8(%r15), %rdi
callq 0x1220
movl 0xae16(%rip), %esi      # 0x10458
movl %eax, %edi
callq 0x5afd
jmp 0x558a
movq %r12, %rdi
leaq 0x4d2d(%rip), %rsi      # 0xa385
callq 0x1130
cmpl $0x3, %ebp
jl 0x56db
testl %eax, %eax
jne 0x56db
movq 0x8(%r15), %rdi
leaq 0x3d18(%rip), %rbx      # 0x9389
movq %rbx, %rsi
callq 0x11f0
movq %rax, 0x8(%rsp)
testq %rax, %rax
jne 0x5695
movq 0x8(%r15), %rsi
leaq 0x4d03(%rip), %rdi      # 0xa391
xorl %eax, %eax
callq 0x8a3c
movq 0x10(%r15), %rdi
movq %rbx, %rsi
callq 0x11f0
movq %rax, %r12
testq %rax, %rax
movq 0x991a(%rip), %r13      # 0xefc8
jne 0x56c2
movq 0x10(%r15), %rsi
leaq 0x4cd6(%rip), %rdi      # 0xa391
xorl %eax, %eax
callq 0x8a3c
addl $-0x3, %ebp
addq $0x18, %r15
movq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0x25a8
jmp 0x5210
movq %r12, %rdi
leaq 0x4cc7(%rip), %rsi      # 0xa3ac
callq 0x1130
testl %eax, %eax
sete %al
testb %al, %r13b
jne 0x570c
movq %r12, %rdi
leaq 0x4cb2(%rip), %rsi      # 0xa3b0
callq 0x1130
testl %eax, %eax
setne %al
orb %al, %bl
jne 0x5779
addl $-0x2, %ebp
movq 0x8(%r15), %rdi
addq $0x10, %r15
callq 0x1220
movl %eax, 0xad36(%rip)      # 0x10458
jmp 0x51f2
movq 0xac72(%rip), %rcx      # 0x103a0
leaq 0x4c1d(%rip), %rdi      # 0xa352
pushq $0x32
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
movq 0xac59(%rip), %rax      # 0x103a0
movq 0x987a(%rip), %r13      # 0xefc8
cmpq (%r13), %rax
je 0x520d
movq 0x9891(%rip), %rax      # 0xeff0
movq (%rax), %rcx
leaq 0x4be9(%rip), %rdi      # 0xa352
pushq $0x32
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
jmp 0x520d
movq %r12, %rdi
leaq 0x4c40(%rip), %rsi      # 0xa3c3
callq 0x1130
cmpl $0x3, %ebp
jl 0x57f5
testl %eax, %eax
jne 0x57f5
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %ebx
movq 0x10(%r15), %rdi
callq 0x1220
movl %eax, %r13d
cmpl $0x1, %ebx
adcl $0x0, %ebx
testl %eax, %eax
jne 0x57bd
movq 0xabdf(%rip), %rax      # 0x10398
movl 0x18(%rax), %r13d
addl $-0x3, %ebp
addq $0x18, %r15
cmpq $0x0, 0xac54(%rip)      # 0x10420
je 0x58be
movl %ebx, %r12d
cmpl %r13d, %r12d
jge 0x584e
movl 0xac78(%rip), %esi      # 0x10458
movl %r12d, %edi
callq 0x39da
movl %r12d, %edi
callq 0x3d7c
incl %r12d
jmp 0x57d5
movq %r12, %rdi
leaq 0x4c19(%rip), %rsi      # 0xa418
callq 0x1130
cmpl $0x3, %ebp
jl 0x5897
testl %eax, %eax
jne 0x5897
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x10(%r15), %rdi
callq 0x1220
testl %eax, %eax
jne 0x5838
movq 0xab63(%rip), %rax      # 0x10398
movl 0x18(%rax), %eax
addl $-0x3, %ebp
addq $0x18, %r15
movl %r12d, %edi
movl %eax, %esi
callq 0x3f30
jmp 0x51f2
movq 0xab4b(%rip), %rdi      # 0x103a0
leaq 0x4b71(%rip), %rsi      # 0xa3cd
movl %ebx, %edx
movl %r13d, %ecx
xorl %eax, %eax
callq 0x1150
movq 0xab31(%rip), %rax      # 0x103a0
movq 0x9752(%rip), %rcx      # 0xefc8
cmpq (%rcx), %rax
je 0x51f2
leaq 0x4b47(%rip), %rdi      # 0xa3cd
movl %ebx, %esi
movl %r13d, %edx
xorl %eax, %eax
callq 0x10d0
jmp 0x51f2
movq %r12, %rdi
leaq 0x4b87(%rip), %rsi      # 0xa428
callq 0x1130
testl %ebp, %ebp
jle 0x5906
testl %eax, %eax
jne 0x5906
addq $0x8, %r15
decl %ebp
callq 0x433a
jmp 0x51f2
movq 0xaadb(%rip), %rcx      # 0x103a0
leaq 0x4b1d(%rip), %rdi      # 0xa3e9
pushq $0x2e
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
movq 0xaac2(%rip), %rax      # 0x103a0
movq 0x96e3(%rip), %rcx      # 0xefc8
cmpq (%rcx), %rax
je 0x51f2
movq 0x96fb(%rip), %rax      # 0xeff0
movq (%rax), %rcx
leaq 0x4aea(%rip), %rdi      # 0xa3e9
pushq $0x2e
jmp 0x51b4
movq %r12, %rdi
leaq 0x4b27(%rip), %rsi      # 0xa437
callq 0x1130
testl %ebp, %ebp
jle 0x592d
testl %eax, %eax
jne 0x592d
addq $0x8, %r15
decl %ebp
callq 0x23df
jmp 0x51f2
movq %r12, %rdi
leaq 0x4b0c(%rip), %rsi      # 0xa443
callq 0x1130
testl %ebp, %ebp
jle 0x5954
testl %eax, %eax
jne 0x5954
addq $0x8, %r15
decl %ebp
callq 0x2466
jmp 0x51f2
movq %r12, %rdi
leaq 0x4af1(%rip), %rsi      # 0xa44f
callq 0x1130
testl %ebp, %ebp
jle 0x597b
testl %eax, %eax
jne 0x597b
addq $0x8, %r15
decl %ebp
callq 0x46bc
jmp 0x51f2
movq %r12, %rdi
leaq 0x4ad8(%rip), %rsi      # 0xa45d
callq 0x1130
cmpl $0x3, %ebp
jl 0x59be
testl %eax, %eax
jne 0x59be
leaq 0x18(%r15), %rbx
addl $-0x3, %ebp
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x10(%r15), %rdi
callq 0x1220
movl %r12d, %edi
movl %eax, %esi
callq 0x32ea
jmp 0x558a
movq %r12, %rdi
leaq 0x4aa0(%rip), %rsi      # 0xa468
callq 0x1130
cmpl $0x3, %ebp
jl 0x5a01
testl %eax, %eax
jne 0x5a01
leaq 0x18(%r15), %rbx
addl $-0x3, %ebp
movq 0x8(%r15), %rdi
callq 0x1220
movl %eax, %r12d
movq 0x10(%r15), %rdi
callq 0x1220
movl %r12d, %edi
movl %eax, %esi
callq 0x35bb
jmp 0x558a
movq %r12, %rdi
leaq 0x4a69(%rip), %rsi      # 0xa474
callq 0x1130
testl %ebp, %ebp
jle 0x5a28
testl %eax, %eax
jne 0x5a28
addq $0x8, %r15
decl %ebp
callq 0x49b1
jmp 0x51f2
movq %r12, %rdi
leaq 0x4a49(%rip), %rsi      # 0xa47b
callq 0x1130
testl %ebp, %ebp
movq 0x9588(%rip), %r13      # 0xefc8
jle 0x5a46
testl %eax, %eax
je 0x5aa0
movq %r12, %rdi
leaq 0x4a32(%rip), %rsi      # 0xa482
callq 0x1130
testl %ebp, %ebp
jle 0x5a5d
testl %eax, %eax
je 0x5aa0
cmpb $0x0, 0xa91e(%rip)      # 0x10382
jne 0x5a7c
leaq 0x4a38(%rip), %rdi      # 0xa4a5
movq %r12, %rsi
xorl %eax, %eax
callq 0x8a3c
jmp 0x51f2
movq 0x956d(%rip), %rax      # 0xeff0
movq (%rax), %rdi
addq $0x2, %r12
leaq 0x49f8(%rip), %rsi      # 0xa489
movq %r12, %rdx
xorl %eax, %eax
callq 0x1150
jmp 0x51f2
movq 0xa8f9(%rip), %rcx      # 0x103a0
leaq 0x4a63(%rip), %rdi      # 0xa511
pushq $0x16
popq %rsi
pushq $0x1
popq %rdx
callq 0x1260
movq 0xa8e0(%rip), %rdi      # 0x103a0
callq 0x8e1c
movq 0xa8d4(%rip), %rax      # 0x103a0
cmpq (%r13), %rax
je 0x5ae9
leaq 0x4a38(%rip), %rdi      # 0xa511
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x8e1c
xorl %eax, %eax
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq