// File: /workspace/github_c_makefile_star2_O0/nh13[P]ksw/src/parasail/contrib/sais-lite-lcp/sais.c
// Function: sais_main
static sais_index_type sais_main(const void *T, sais_index_type *SA,
				 sais_index_type *LCP,
				 sais_index_type fs, sais_index_type n, sais_index_type k, int cs,
				 sais_bool_type isbwt,
				 sais_bool_type level0) { /* level0 = 1 iff recursion depth is 0 */
  sais_index_type *C, *B, *D, *RA, *PLCP, *PHI, *DELTA, *b;
  sais_index_type i, j, m, /* m: number of S*-suffixes */
    p, q, t, name, pidx = 0, newfs;
  sais_index_type c0, c1;
  unsigned int flags;

  assert((T != NULL) && (SA != NULL));
  assert((0 <= fs) && (0 < n) && (1 <= k));

  if(k <= MINBUCKETSIZE) {
    if((C = SAIS_MYMALLOC(k, sais_index_type)) == NULL) { return -2; }
    if(k <= fs) {
      B = SA + (n + fs - k);
      flags = 1;
    } else {
      if((B = SAIS_MYMALLOC(k, sais_index_type)) == NULL) { SAIS_MYFREE(C, k, sais_index_type); return -2; }
      flags = 3;
    }
  } else if(k <= fs) {
    C = SA + (n + fs - k);
    if(k <= (fs - k)) {
      B = C - k;
      flags = 0;
    } else if(k <= (MINBUCKETSIZE * 4)) {
      if((B = SAIS_MYMALLOC(k, sais_index_type)) == NULL) { return -2; }
      flags = 2;
    } else {
      B = C;
      flags = 8;
    }
  } else {
    if((C = B = SAIS_MYMALLOC(k, sais_index_type)) == NULL) { return -2; }
    flags = 4 | 8;
  }
  if((n <= SAIS_LMSSORT2_LIMIT) && (2 <= (n / k))) {
    if(flags & 1) { flags |= ((k * 2) <= (fs - k)) ? 32 : 16; }
    else if((flags == 0) && ((k * 2) <= (fs - k * 2))) { flags |= 32; }
  }

  /* stage 1: reduce the problem by at least 1/2
     sort all the LMS-substrings */
  getCounts(T, C, n, k, cs); getBuckets(C, B, k, 1); /* find ends of buckets */

  for(i = 0; i < n; ++i) { SA[i] = 0; }
  b = &t; i = n - 1; j = n; m = 0; c0 = chr(n - 1);
  do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) >= c1));
  for(; 0 <= i;) {
    do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) <= c1));
    if(0 <= i) {
      *b = j;
      b = SA + --B[c1]; j = i; ++m;
      do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) >= c1));
    }
  }

  if(1 < m) {
    if(flags & (16 | 32)) {
      if(flags & 16) {
        if((D = SAIS_MYMALLOC(k * 2, sais_index_type)) == NULL) {
          if(flags & (1 | 4)) { SAIS_MYFREE(C, k, sais_index_type); }
          if(flags & 2) { SAIS_MYFREE(B, k, sais_index_type); }
          return -2;
        }
      } else {
        D = B - k * 2;
      }
      assert((j + 1) < n);
      ++B[chr(j + 1)];
      for(i = 0, j = 0; i < k; ++i) {
        j += C[i];
        if(B[i] != j) { assert(SA[B[i]] != 0); SA[B[i]] += n; }
        D[i] = D[i + k] = 0;
      }
      LMSsort2(T, SA, C, B, D, n, k, cs);
      name = LMSpostproc2(SA, n, m);
      if(flags & 16) { SAIS_MYFREE(D, k * 2, sais_index_type); }
    } else {
      LMSsort1(T, SA, C, B, n, k, cs);
      name = LMSpostproc1(T, SA, n, m, cs);
    }
  } else if (m == 1) { /* only one S*-suffix => set immediately */
    *b = j + 1;        /* set entry in SA */
    if (level0) { LCP[b-SA] = -1; } /* mark first (=only) S*-suffix in bucket */
    name = 1;
  } else {
    name = 0;
  }

  /* stage 2: solve the reduced problem
     recurse if names are not yet unique */
  if(name < m) {
    if(flags & 4) { SAIS_MYFREE(C, k, sais_index_type); }
    if(flags & 2) { SAIS_MYFREE(B, k, sais_index_type); }
    newfs = (n + fs) - (m * 2);
    if((flags & (1 | 4 | 8)) == 0) {
      if((k + name) <= newfs) { newfs -= k; }
      else { flags |= 8; }
    }
    assert((n >> 1) <= (newfs + m));
    RA = SA + m + newfs;
    for(i = m + (n >> 1) - 1, j = m - 1; m <= i; --i) {
      if(SA[i] != 0) {
        RA[j--] = SA[i] - 1;
      }
    }
    
    if(sais_main(RA, SA, NULL, newfs, m, name, sizeof(sais_index_type), 0, 0) != 0) {
      if(flags & 1) { SAIS_MYFREE(C, k, sais_index_type); }
      return -2;
    }

    /* (re)compute starting positions of S*-suffixes (stored in RA): */
    i = n - 1; j = m - 1; c0 = chr(n - 1);
    do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) >= c1));
    for(; 0 <= i;) {
      do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) <= c1));
      if(0 <= i) {
        RA[j--] = i + 1;
        do { c1 = c0; } while((0 <= --i) && ((c0 = chr(i)) >= c1));
      }
    }

    /* construct LCP for S*-suffixes: */
    /* PHI: "to whom I want to be compared" (pos. in T) */
    /* DELTA: "distance (in T) to next S*" (in PHI-order) */
    if (level0) {
      if (m < n/3) { /* hence we can store PHI and DELTA interleaved */
	PHI = LCP+m;       /* use space in LCP-array for PHI and DELTA */
	RA[m] = n;         /* stopper */
	j = SA[0];         /* j stores SA[i-1] in the following loop */
	PHI[j<<1] = n-1;   /* set PHI[SA[0]] to $ (causes mismatch in char. comp.) */
	PHI[(j<<1)+1] = 0; /* set DELTA */
	for (i = 1; i < m; ++i) {
	  q = SA[i];                /* text position */
	  p = q<<1;                 /* for interleaving */
	  PHI[p]=RA[j];             /* set PHI-array */
	  PHI[p+1]=RA[j+1]-RA[j];   /* set DELTA */
	  j = q;                    /* store for next loop iteration */
	}

	PLCP = PHI; /* overwrite DELTA in following loop */
	p = 0; /* guaranteed LCP-value */
	j = 0; /* position in PLCP and RA */
	for (i = 0; i < n; ++i) {
	  if (i == RA[j]) {
	    sais_index_type twoj = j << 1;
	    if (p < 0) p = 0;
	    while (chr(i+p) == chr(PHI[twoj]+p)) ++p;
	    t = PHI[twoj+1];      /* accesses DELTA-value */
	    q = RA[j+1]-RA[j];    /* length difference */
	    PLCP[twoj] = p;       /* overwrite PHI with PLCP */
	    ++j;
	    p -= (t > q) ? t : q; /* decrease p by larger of t and q */
	  }
	}

	/* translate PLCP-values to SA-order: */
	for (j = 0; j < m; ++j) LCP[j] = PLCP[SA[j]<<1];
      }
      else { /* non-interleaved */
	PHI = LCP;     /* use space in LCP-array for PHI */
	DELTA = LCP+m; /* because we compute only m < n/2 values, this is valid */
	RA[m] = n;     /* stopper */
	j = SA[0];     /* j stores SA[i-1] in the following loop */
	PHI[j] = n-1;  /* set PHI[SA[0]] to $ (causes mismatch in char. comp.) */
	DELTA[j] = 0;
	for (i = 1; i < m; ++i) {
	  q = SA[i];              /* text position */
	  PHI[q]=RA[j];           /* set PHI-array */
	  DELTA[q]=RA[j+1]-RA[j]; /* set DELTA */
	  j = q;                  /* store for next loop iteration */
	}

	PLCP = DELTA; /* overwrite DELTA in following loop */
	p = 0; /* guaranteed LCP-value */
	j = 0; /* position in PLCP and RA */
	for (i = 0; i < n; ++i) {
	  if (i == RA[j]) {
	    if (p < 0) p = 0;
	    while (chr(i+p) == chr(PHI[j]+p)) ++p;
	    t = PLCP[j];          /* accesses DELTA-value */
	    q = RA[j+1]-RA[j];    /* length difference */
	    PLCP[j++] = p;
	    p -= (t > q) ? t : q; /* decrease p by larger of t and q */
	  }
	}

	/* translate PLCP-values to SA-order: */
	for (j = 0; j < m; ++j) LCP[j] = PLCP[SA[j]];
      }
    }

    /* translate indices in RA to indices in T: */
    for(i = 0; i < m; ++i) SA[i] = RA[SA[i]];

    if(flags & 4) {
      if((C = B = SAIS_MYMALLOC(k, int)) == NULL) { return -2; }
    }
    if(flags & 2) {
      if((B = SAIS_MYMALLOC(k, int)) == NULL) {
        if(flags & 1) { SAIS_MYFREE(C, k, sais_index_type); }
        return -2;
      }
    }
  } /* endif (name < m) */
  else if (level0) { /* this should only occur for small or pathetic inputs */
    /* all names unique => computing LCP for *S naively takes linear time */
    /*printf("*** computing LCP naively..."); */
    j = SA[0]; /* j = SA[i-1] in the following loop */
    for (i = 1; i < m; ++i) {
      p = 0;
      while (chr(SA[i]+p) == chr(j+p)) p++;
      LCP[i] = p;
      j = SA[i];
    }
    /*printf("done.\n"); */
  }

  /* stage 3: induce the result for the original problem */
  if(flags & 8) { getCounts(T, C, n, k, cs); }
  /* put all S*-suffixes (and their LCP-values) into their buckets */
  if(1 < m) { /* otherwise SA (and LCP) is already correct */
    getBuckets(C, B, k, 1); /* find ends of buckets */
    i = m - 1, j = n, p = SA[m - 1], c1 = chr(p);
    if (level0) {
      newfs = LCP[m-1]; /* newfs stores LCP[i] in the following loop */
      do {
	q = B[c0 = c1];
	while(q < j) {
	  SA[--j] = 0; LCP[j] = -2; /* set remaining entries in old bucket to 0/-2 */
	}
	
	do { /* step through bucket c0 and write S*-suffixes to SA: */
	  SA[--j] = p; LCP[j] = newfs;
	  if(--i < 0) break;
	  newfs = LCP[i]; p = SA[i];
	} while((c1 = chr(p)) == c0);
	/*assert(LCP[j]==0); *//* first S*-suffix in bucket must have LCP-value 0 */
	LCP[j] = -1;       /* mark first S*-suffix in every bucket */
      } while(0 <= i);
      while(0 < j) {
	SA[--j] = 0; LCP[j] = -2; /* set remaining entries in smallest buckets to 0/-2 */
      }
    }
    else {
      do {
	q = B[c0 = c1];
	while(q < j) SA[--j] = 0; /* set remaining entries in old bucket to 0 */
	do { /* step through bucket c0 */
	  SA[--j] = p;
	  if(--i < 0) break;
	  p = SA[i];
	} while((c1 = chr(p)) == c0);
      } while(0 <= i);
      while(0 < j) SA[--j] = 0; /* set remaining entries in 1st bucket to 0 */
    }
  }

  if(isbwt == 0) {
    if (level0) induceSAandLCP(T, SA, LCP, C, B, n, k, cs);
    else induceSA(T, SA, C, B, n, k, cs);
  }
  else { pidx = computeBWT(T, SA, C, B, n, k, cs); }
  if(flags & (1 | 4)) { SAIS_MYFREE(C, k, sais_index_type); }
  if(flags & 2) { SAIS_MYFREE(B, k, sais_index_type); }

  return pidx;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movl 0x20(%rbp), %eax
movl 0x18(%rbp), %eax
movl 0x10(%rbp), %eax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movl %r8d, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
movl $0x0, -0x90(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x2c6c75
cmpq $0x0, -0x18(%rbp)
je 0x2c6c75
jmp 0x2c6c94
leaq 0xae8f43(%rip), %rdi    # 0xdafbbf
leaq 0xae8f58(%rip), %rsi    # 0xdafbdb
movl $0x236, %edx            # imm = 0x236
leaq 0xae8fa7(%rip), %rcx    # 0xdafc36
callq 0x2af1a0
xorl %eax, %eax
cmpl -0x24(%rbp), %eax
jg 0x2c6cae
xorl %eax, %eax
cmpl -0x28(%rbp), %eax
jge 0x2c6cae
movl $0x1, %eax
cmpl -0x2c(%rbp), %eax
jg 0x2c6cae
jmp 0x2c6ccd
leaq 0xae8fc9(%rip), %rdi    # 0xdafc7e
leaq 0xae8f1f(%rip), %rsi    # 0xdafbdb
movl $0x237, %edx            # imm = 0x237
leaq 0xae8f6e(%rip), %rcx    # 0xdafc36
callq 0x2af1a0
cmpl $0x100, -0x2c(%rbp)     # imm = 0x100
jg 0x2c6d67
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x2c6cfd
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
movl -0x2c(%rbp), %eax
cmpl -0x24(%rbp), %eax
jg 0x2c6d2c
movq -0x18(%rbp), %rax
movl -0x28(%rbp), %ecx
addl -0x24(%rbp), %ecx
subl -0x2c(%rbp), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movl $0x1, -0xa0(%rbp)
jmp 0x2c6d62
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x40(%rbp)
cmpq $0x0, %rax
jne 0x2c6d58
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
movl $0x3, -0xa0(%rbp)
jmp 0x2c6e40
movl -0x2c(%rbp), %eax
cmpl -0x24(%rbp), %eax
jg 0x2c6e0d
movq -0x18(%rbp), %rax
movl -0x28(%rbp), %ecx
addl -0x24(%rbp), %ecx
subl -0x2c(%rbp), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movl -0x2c(%rbp), %eax
movl -0x24(%rbp), %ecx
subl -0x2c(%rbp), %ecx
cmpl %ecx, %eax
jg 0x2c6dbf
movq -0x38(%rbp), %rax
movslq -0x2c(%rbp), %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movl $0x0, -0xa0(%rbp)
jmp 0x2c6e0b
cmpl $0x400, -0x2c(%rbp)     # imm = 0x400
jg 0x2c6df7
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x40(%rbp)
cmpq $0x0, %rax
jne 0x2c6deb
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
movl $0x2, -0xa0(%rbp)
jmp 0x2c6e09
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movl $0x8, -0xa0(%rbp)
jmp 0x2c6e0b
jmp 0x2c6e3e
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x40(%rbp)
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x2c6e34
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
movl $0xc, -0xa0(%rbp)
jmp 0x2c6e40
cmpl $0x3fffffff, -0x28(%rbp) # imm = 0x3FFFFFFF
jg 0x2c6ec0
movl -0x28(%rbp), %eax
cltd
idivl -0x2c(%rbp)
movl %eax, %ecx
movl $0x2, %eax
cmpl %ecx, %eax
jg 0x2c6ec0
movl -0xa0(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2c6e91
movl -0x2c(%rbp), %edx
shll %edx
movl -0x24(%rbp), %esi
subl -0x2c(%rbp), %esi
movl $0x10, %eax
movl $0x20, %ecx
cmpl %esi, %edx
cmovlel %ecx, %eax
orl -0xa0(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x2c6ebe
cmpl $0x0, -0xa0(%rbp)
jne 0x2c6ebc
movl -0x2c(%rbp), %eax
shll %eax
movl -0x24(%rbp), %ecx
movl -0x2c(%rbp), %edx
shll %edx
subl %edx, %ecx
cmpl %ecx, %eax
jg 0x2c6ebc
movl -0xa0(%rbp), %eax
orl $0x20, %eax
movl %eax, -0xa0(%rbp)
jmp 0x2c6ebe
jmp 0x2c6ec0
movq -0x10(%rbp), %rdi
movq -0x38(%rbp), %rsi
movl -0x28(%rbp), %edx
movl -0x2c(%rbp), %ecx
movl 0x10(%rbp), %r8d
callq 0x2c85e0
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
movl -0x2c(%rbp), %edx
movl $0x1, %ecx
callq 0x2c8680
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x2c6f15
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c6ef3
leaq -0x88(%rbp), %rax
movq %rax, -0x70(%rbp)
movl -0x28(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x74(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x78(%rbp)
movl $0x0, -0x7c(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c6f58
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xa8(%rbp)
jmp 0x2c6f6f
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
movl %eax, -0x98(%rbp)
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xa9(%rbp)
jg 0x2c6fe8
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c6fbb
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xb0(%rbp)
jmp 0x2c6fcd
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setge %al
movb %al, -0xa9(%rbp)
movb -0xa9(%rbp), %al
testb $0x1, %al
jne 0x2c6f7b
jmp 0x2c6ff4
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jg 0x2c713f
jmp 0x2c7001
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xb1(%rbp)
jg 0x2c706e
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7041
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xb8(%rbp)
jmp 0x2c7053
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setle %al
movb %al, -0xb1(%rbp)
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0x2c7001
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jg 0x2c713a
movl -0x78(%rbp), %ecx
movq -0x70(%rbp), %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rdx
movslq -0x9c(%rbp), %rsi
movl (%rdx,%rsi,4), %ecx
addl $-0x1, %ecx
movl %ecx, (%rdx,%rsi,4)
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0x78(%rbp)
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xb9(%rbp)
jg 0x2c712e
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7101
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xc0(%rbp)
jmp 0x2c7113
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xc0(%rbp)
movl -0xc0(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setge %al
movb %al, -0xb9(%rbp)
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0x2c70c1
jmp 0x2c713a
jmp 0x2c6ff4
movl $0x1, %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c73c1
movl -0xa0(%rbp), %eax
andl $0x30, %eax
cmpl $0x0, %eax
je 0x2c737f
movl -0xa0(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x2c71c4
movl -0x2c(%rbp), %eax
shll %eax
movslq %eax, %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x48(%rbp)
cmpq $0x0, %rax
jne 0x2c71c2
movl -0xa0(%rbp), %eax
andl $0x5, %eax
cmpl $0x0, %eax
je 0x2c719f
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl -0xa0(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2c71b6
movq -0x40(%rbp), %rdi
callq 0x2af3a0
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
jmp 0x2c71e0
movq -0x40(%rbp), %rax
movl -0x2c(%rbp), %ecx
shll %ecx
movslq %ecx, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
cmpl -0x28(%rbp), %eax
jge 0x2c71ed
jmp 0x2c720c
leaq 0xae8aab(%rip), %rdi    # 0xdafc9f
leaq 0xae89e0(%rip), %rsi    # 0xdafbdb
movl $0x272, %edx            # imm = 0x272
leaq 0xae8a2f(%rip), %rcx    # 0xdafc36
callq 0x2af1a0
movq -0x40(%rbp), %rax
movq %rax, -0xc8(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7239
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xcc(%rbp)
jmp 0x2c7250
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xcc(%rbp)
movq -0xc8(%rbp), %rax
movl -0xcc(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
movl $0x0, -0x74(%rbp)
movl $0x0, -0x78(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jge 0x2c7325
movq -0x38(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
addl -0x78(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x40(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x78(%rbp), %eax
je 0x2c72f4
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movslq -0x74(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2c72bc
jmp 0x2c72db
leaq 0xae89e8(%rip), %rdi    # 0xdafcab
leaq 0xae8911(%rip), %rsi    # 0xdafbdb
movl $0x276, %edx            # imm = 0x276
leaq 0xae8960(%rip), %rcx    # 0xdafc36
callq 0x2af1a0
movl -0x28(%rbp), %edx
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movslq -0x74(%rbp), %rsi
movslq (%rcx,%rsi,4), %rcx
addl (%rax,%rcx,4), %edx
movl %edx, (%rax,%rcx,4)
movq -0x48(%rbp), %rax
movl -0x74(%rbp), %ecx
addl -0x2c(%rbp), %ecx
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
movq -0x48(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7277
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0x48(%rbp), %r8
movl -0x28(%rbp), %r9d
movl -0x2c(%rbp), %r10d
movl 0x10(%rbp), %eax
movl %r10d, (%rsp)
movl %eax, 0x8(%rsp)
callq 0x2c8730
movq -0x18(%rbp), %rdi
movl -0x28(%rbp), %esi
movl -0x7c(%rbp), %edx
callq 0x2c8e60
movl %eax, -0x8c(%rbp)
movl -0xa0(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x2c737d
movq -0x48(%rbp), %rdi
callq 0x2af3a0
jmp 0x2c73bf
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rcx
movl -0x28(%rbp), %r8d
movl -0x2c(%rbp), %r9d
movl 0x10(%rbp), %eax
movl %eax, (%rsp)
callq 0x2c90a0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x28(%rbp), %edx
movl -0x7c(%rbp), %ecx
movl 0x10(%rbp), %r8d
callq 0x2c9590
movl %eax, -0x8c(%rbp)
jmp 0x2c740b
cmpl $0x1, -0x7c(%rbp)
jne 0x2c73ff
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movq -0x70(%rbp), %rax
movl %ecx, (%rax)
cmpl $0x0, 0x20(%rbp)
je 0x2c73f3
movq -0x20(%rbp), %rax
movq -0x70(%rbp), %rcx
movq -0x18(%rbp), %rdx
subq %rdx, %rcx
sarq $0x2, %rcx
movl $0xffffffff, (%rax,%rcx,4) # imm = 0xFFFFFFFF
movl $0x1, -0x8c(%rbp)
jmp 0x2c7409
movl $0x0, -0x8c(%rbp)
jmp 0x2c740b
movl -0x8c(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7ddd
movl -0xa0(%rbp), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x2c7431
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl -0xa0(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2c7448
movq -0x40(%rbp), %rdi
callq 0x2af3a0
movl -0x28(%rbp), %eax
addl -0x24(%rbp), %eax
movl -0x7c(%rbp), %ecx
shll %ecx
subl %ecx, %eax
movl %eax, -0x94(%rbp)
movl -0xa0(%rbp), %eax
andl $0xd, %eax
cmpl $0x0, %eax
jne 0x2c749e
movl -0x2c(%rbp), %eax
addl -0x8c(%rbp), %eax
cmpl -0x94(%rbp), %eax
jg 0x2c748d
movl -0x2c(%rbp), %ecx
movl -0x94(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x94(%rbp)
jmp 0x2c749c
movl -0xa0(%rbp), %eax
orl $0x8, %eax
movl %eax, -0xa0(%rbp)
jmp 0x2c749e
movl -0x28(%rbp), %eax
sarl %eax
movl -0x94(%rbp), %ecx
addl -0x7c(%rbp), %ecx
cmpl %ecx, %eax
jg 0x2c74b2
jmp 0x2c74d1
leaq 0xae8800(%rip), %rdi    # 0xdafcb9
leaq 0xae871b(%rip), %rsi    # 0xdafbdb
movl $0x292, %edx            # imm = 0x292
leaq 0xae876a(%rip), %rcx    # 0xdafc36
callq 0x2af1a0
movq -0x18(%rbp), %rax
movslq -0x7c(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movslq -0x94(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x7c(%rbp), %eax
movl -0x28(%rbp), %ecx
sarl %ecx
addl %ecx, %eax
subl $0x1, %eax
movl %eax, -0x74(%rbp)
movl -0x7c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x78(%rbp)
movl -0x7c(%rbp), %eax
cmpl -0x74(%rbp), %eax
jg 0x2c7551
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x2c7544
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %edx
subl $0x1, %edx
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
movl %ecx, %esi
addl $-0x1, %esi
movl %esi, -0x78(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x2c7546
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c750b
movq -0x50(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x94(%rbp), %ecx
movl -0x7c(%rbp), %r8d
movl -0x8c(%rbp), %r9d
xorl %eax, %eax
movl %eax, %edx
xorl %eax, %eax
movl $0x4, (%rsp)
movl $0x0, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x2c6c30
cmpl $0x0, %eax
je 0x2c75b4
movl -0xa0(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2c75a8
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
movl -0x28(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x74(%rbp)
movl -0x7c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x78(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c75e8
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xd0(%rbp)
jmp 0x2c75ff
movq -0x10(%rbp), %rax
movl -0x28(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xd0(%rbp)
movl -0xd0(%rbp), %eax
movl %eax, -0x98(%rbp)
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xd1(%rbp)
jg 0x2c7678
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c764b
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xd8(%rbp)
jmp 0x2c765d
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xd8(%rbp)
movl -0xd8(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setge %al
movb %al, -0xd1(%rbp)
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0x2c760b
jmp 0x2c7684
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jg 0x2c77ac
jmp 0x2c7691
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xd9(%rbp)
jg 0x2c76fe
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c76d1
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xe0(%rbp)
jmp 0x2c76e3
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xe0(%rbp)
movl -0xe0(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setle %al
movb %al, -0xd9(%rbp)
movb -0xd9(%rbp), %al
testb $0x1, %al
jne 0x2c7691
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jg 0x2c77a7
movl -0x74(%rbp), %edx
addl $0x1, %edx
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
movl %ecx, %esi
addl $-0x1, %esi
movl %esi, -0x78(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl -0x98(%rbp), %eax
movl %eax, -0x9c(%rbp)
movl -0x74(%rbp), %edx
addl $-0x1, %edx
movl %edx, -0x74(%rbp)
xorl %eax, %eax
xorl %ecx, %ecx
cmpl %edx, %ecx
movb %al, -0xe1(%rbp)
jg 0x2c779b
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c776e
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xe8(%rbp)
jmp 0x2c7780
movq -0x10(%rbp), %rax
movslq -0x74(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xe8(%rbp)
movl -0xe8(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl -0x9c(%rbp), %eax
setge %al
movb %al, -0xe1(%rbp)
movb -0xe1(%rbp), %al
testb $0x1, %al
jne 0x2c772e
jmp 0x2c77a7
jmp 0x2c7684
cmpl $0x0, 0x20(%rbp)
je 0x2c7d1f
movl -0x7c(%rbp), %eax
movl %eax, -0xec(%rbp)
movl -0x28(%rbp), %eax
movl $0x3, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0xec(%rbp), %eax
cmpl %ecx, %eax
jge 0x2c7a93
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movl -0x28(%rbp), %edx
movq -0x50(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x78(%rbp)
movl -0x28(%rbp), %edx
subl $0x1, %edx
movq -0x60(%rbp), %rax
movl -0x78(%rbp), %ecx
shll %ecx
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movq -0x60(%rbp), %rax
movl -0x78(%rbp), %ecx
shll %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
movl $0x1, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c78af
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %eax
shll %eax
movl %eax, -0x80(%rbp)
movq -0x50(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x60(%rbp), %rax
movslq -0x80(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movq -0x50(%rbp), %rax
movslq -0x78(%rbp), %rcx
subl (%rax,%rcx,4), %edx
movq -0x60(%rbp), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl -0x84(%rbp), %eax
movl %eax, -0x78(%rbp)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7836
movq -0x60(%rbp), %rax
movq %rax, -0x58(%rbp)
movl $0x0, -0x80(%rbp)
movl $0x0, -0x78(%rbp)
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x2c7a52
movl -0x74(%rbp), %eax
movq -0x50(%rbp), %rcx
movslq -0x78(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jne 0x2c7a42
movl -0x78(%rbp), %eax
shll %eax
movl %eax, -0xa4(%rbp)
cmpl $0x0, -0x80(%rbp)
jge 0x2c7904
movl $0x0, -0x80(%rbp)
jmp 0x2c7906
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7928
movq -0x10(%rbp), %rax
movl -0x74(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xf0(%rbp)
jmp 0x2c793f
movq -0x10(%rbp), %rax
movl -0x74(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xf0(%rbp)
movl -0xf0(%rbp), %eax
movl %eax, -0xf4(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7978
movq -0x10(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0xa4(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xf8(%rbp)
jmp 0x2c799a
movq -0x10(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0xa4(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0xf8(%rbp)
movl -0xf4(%rbp), %eax
movl -0xf8(%rbp), %ecx
cmpl %ecx, %eax
jne 0x2c79b8
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x2c7906
movq -0x60(%rbp), %rax
movl -0xa4(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x88(%rbp)
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movq -0x50(%rbp), %rcx
movslq -0x78(%rbp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, -0x84(%rbp)
movl -0x80(%rbp), %edx
movq -0x58(%rbp), %rax
movslq -0xa4(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
movl -0x88(%rbp), %eax
cmpl -0x84(%rbp), %eax
jle 0x2c7a28
movl -0x88(%rbp), %eax
movl %eax, -0xfc(%rbp)
jmp 0x2c7a34
movl -0x84(%rbp), %eax
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %ecx
movl -0x80(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x80(%rbp)
jmp 0x2c7a44
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c78cc
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7a8e
movq -0x58(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq -0x78(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
shll %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x2c7a59
jmp 0x2c7d1d
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movl -0x28(%rbp), %edx
movq -0x50(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x78(%rbp)
movl -0x28(%rbp), %edx
subl $0x1, %edx
movq -0x60(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x68(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl $0x1, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7b5b
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x84(%rbp)
movq -0x50(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x60(%rbp), %rax
movslq -0x84(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movq -0x50(%rbp), %rax
movslq -0x78(%rbp), %rcx
subl (%rax,%rcx,4), %edx
movq -0x68(%rbp), %rax
movslq -0x84(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x84(%rbp), %eax
movl %eax, -0x78(%rbp)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7aec
movq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movl $0x0, -0x80(%rbp)
movl $0x0, -0x78(%rbp)
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x2c7ce3
movl -0x74(%rbp), %eax
movq -0x50(%rbp), %rcx
movslq -0x78(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jne 0x2c7cd3
cmpl $0x0, -0x80(%rbp)
jge 0x2c7ba5
movl $0x0, -0x80(%rbp)
jmp 0x2c7ba7
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7bc9
movq -0x10(%rbp), %rax
movl -0x74(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x100(%rbp)
jmp 0x2c7be0
movq -0x10(%rbp), %rax
movl -0x74(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x100(%rbp)
movl -0x100(%rbp), %eax
movl %eax, -0x104(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7c16
movq -0x10(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0x78(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x108(%rbp)
jmp 0x2c7c35
movq -0x10(%rbp), %rax
movq -0x60(%rbp), %rcx
movslq -0x78(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x108(%rbp)
movl -0x104(%rbp), %eax
movl -0x108(%rbp), %ecx
cmpl %ecx, %eax
jne 0x2c7c53
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x2c7ba7
movq -0x58(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x88(%rbp)
movq -0x50(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movq -0x50(%rbp), %rcx
movslq -0x78(%rbp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, -0x84(%rbp)
movl -0x80(%rbp), %edx
movq -0x58(%rbp), %rax
movl -0x78(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x78(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl -0x88(%rbp), %eax
cmpl -0x84(%rbp), %eax
jle 0x2c7cb9
movl -0x88(%rbp), %eax
movl %eax, -0x10c(%rbp)
jmp 0x2c7cc5
movl -0x84(%rbp), %eax
movl %eax, -0x10c(%rbp)
movl -0x10c(%rbp), %ecx
movl -0x80(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x80(%rbp)
jmp 0x2c7cd5
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7b78
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7d1b
movq -0x58(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq -0x78(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %edx
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x2c7cea
jmp 0x2c7d1d
jmp 0x2c7d1f
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7d57
movq -0x50(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq -0x74(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %edx
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7d26
movl -0xa0(%rbp), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x2c7d8e
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x40(%rbp)
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x2c7d8c
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
jmp 0x2c7d8e
movl -0xa0(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2c7dd8
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x2af400
movq %rax, -0x40(%rbp)
cmpq $0x0, %rax
jne 0x2c7dd6
movl -0xa0(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2c7dca
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x2c8294
jmp 0x2c7dd8
jmp 0x2c7ee4
cmpl $0x0, 0x20(%rbp)
je 0x2c7ee2
movq -0x18(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x78(%rbp)
movl $0x1, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c7ee0
movl $0x0, -0x80(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7e34
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq -0x74(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x110(%rbp)
jmp 0x2c7e53
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq -0x74(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x110(%rbp)
movl -0x110(%rbp), %eax
movl %eax, -0x114(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7e81
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x118(%rbp)
jmp 0x2c7e98
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl -0x80(%rbp), %ecx
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x118(%rbp)
movl -0x114(%rbp), %eax
movl -0x118(%rbp), %ecx
cmpl %ecx, %eax
jne 0x2c7eb6
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x2c7e0a
movl -0x80(%rbp), %edx
movq -0x20(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x78(%rbp)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x2c7df7
jmp 0x2c7ee2
jmp 0x2c7ee4
movl -0xa0(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x2c7f09
movq -0x10(%rbp), %rdi
movq -0x38(%rbp), %rsi
movl -0x28(%rbp), %edx
movl -0x2c(%rbp), %ecx
movl 0x10(%rbp), %r8d
callq 0x2c85e0
movl $0x1, %eax
cmpl -0x7c(%rbp), %eax
jge 0x2c81d5
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
movl -0x2c(%rbp), %edx
movl $0x1, %ecx
callq 0x2c8680
movl -0x7c(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x74(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movl -0x7c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x80(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c7f6b
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x11c(%rbp)
jmp 0x2c7f7d
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x9c(%rbp)
cmpl $0x0, 0x20(%rbp)
je 0x2c80e7
movq -0x20(%rbp), %rax
movl -0x7c(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x94(%rbp)
movq -0x40(%rbp), %rax
movl -0x9c(%rbp), %ecx
movl %ecx, -0x98(%rbp)
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %eax
cmpl -0x78(%rbp), %eax
jge 0x2c7ff8
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl $0xfffffffe, (%rax,%rcx,4) # imm = 0xFFFFFFFE
jmp 0x2c7fc5
jmp 0x2c7ffa
movl -0x80(%rbp), %edx
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl -0x94(%rbp), %edx
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
cmpl $0x0, %eax
jge 0x2c8031
jmp 0x2c8097
movq -0x20(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x94(%rbp)
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x80(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c806d
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x120(%rbp)
jmp 0x2c807f
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x120(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x9c(%rbp)
cmpl -0x98(%rbp), %eax
je 0x2c7ffa
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl $0xffffffff, (%rax,%rcx,4) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jle 0x2c7fa9
jmp 0x2c80b3
xorl %eax, %eax
cmpl -0x78(%rbp), %eax
jge 0x2c80e2
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
movq -0x20(%rbp), %rax
movslq -0x78(%rbp), %rcx
movl $0xfffffffe, (%rax,%rcx,4) # imm = 0xFFFFFFFE
jmp 0x2c80b3
jmp 0x2c81d3
jmp 0x2c80e9
movq -0x40(%rbp), %rax
movl -0x9c(%rbp), %ecx
movl %ecx, -0x98(%rbp)
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %eax
cmpl -0x78(%rbp), %eax
jge 0x2c8129
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
jmp 0x2c8105
jmp 0x2c812b
movl -0x80(%rbp), %edx
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
cmpl $0x0, %eax
jge 0x2c8151
jmp 0x2c81a2
movq -0x18(%rbp), %rax
movslq -0x74(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x80(%rbp)
movslq 0x10(%rbp), %rax
cmpq $0x4, %rax
jne 0x2c817c
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x124(%rbp)
jmp 0x2c818e
movq -0x10(%rbp), %rax
movslq -0x80(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, -0x124(%rbp)
movl -0x124(%rbp), %eax
movl %eax, -0x9c(%rbp)
cmpl -0x98(%rbp), %eax
je 0x2c812b
jmp 0x2c81a4
xorl %eax, %eax
cmpl -0x74(%rbp), %eax
jle 0x2c80e9
jmp 0x2c81b1
xorl %eax, %eax
cmpl -0x78(%rbp), %eax
jge 0x2c81d1
movq -0x18(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $-0x1, %ecx
movl %ecx, -0x78(%rbp)
movslq %ecx, %rcx
movl $0x0, (%rax,%rcx,4)
jmp 0x2c81b1
jmp 0x2c81d3
jmp 0x2c81d5
cmpl $0x0, 0x18(%rbp)
jne 0x2c8234
cmpl $0x0, 0x20(%rbp)
je 0x2c820f
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %r8
movl -0x28(%rbp), %r9d
movl -0x2c(%rbp), %r10d
movl 0x10(%rbp), %eax
movl %r10d, (%rsp)
movl %eax, 0x8(%rsp)
callq 0x2c99e0
jmp 0x2c8232
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rcx
movl -0x28(%rbp), %r8d
movl -0x2c(%rbp), %r9d
movl 0x10(%rbp), %eax
movl %eax, (%rsp)
callq 0x2caa90
jmp 0x2c825d
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rcx
movl -0x28(%rbp), %r8d
movl -0x2c(%rbp), %r9d
movl 0x10(%rbp), %eax
movl %eax, (%rsp)
callq 0x2caf90
movl %eax, -0x90(%rbp)
movl -0xa0(%rbp), %eax
andl $0x5, %eax
cmpl $0x0, %eax
je 0x2c8274
movq -0x38(%rbp), %rdi
callq 0x2af3a0
movl -0xa0(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x2c828b
movq -0x40(%rbp), %rdi
callq 0x2af3a0
movl -0x90(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq