// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/bitpackstringop.c
// Function: gt_bsCopy
void
gt_bsCopy(constBitString src, BitOffset offsetSrc,
       BitString dest, BitOffset offsetDest, BitOffset numBits)
{
  size_t elemStartSrc = offsetSrc/bitElemBits,
    elemStartDest = offsetDest/bitElemBits;
  unsigned bitTopSrc = offsetSrc%bitElemBits,
    bitTopDest = offsetDest%bitElemBits;
  BitOffset bitsLeft = numBits;
  const BitElem *p = src + elemStartSrc;
  BitElem *q = dest + elemStartDest;
  gt_assert(src && dest);
  /* special optimization if equally aligned data will be copied */
  if (bitTopSrc == bitTopDest)
  {
    if (bitTopSrc)
    {
      BitElem mask = (~(BitElem)0) >> bitTopSrc;
      if (numBits < bitElemBits - bitTopSrc)
      {
        unsigned backShift = bitElemBits - numBits - bitTopSrc;
        mask &= ~(BitElem)0 << backShift;
        *q = (*q & ~mask) | (*p & mask);
        /* TODO: try wether  r = a ^ ((a ^ b) & mask) is faster, see above */
        return;
      }
      else
      {
        *q = (*q & ~mask) | (*p & mask);
        ++p, ++q;
        bitsLeft -= bitElemBits - bitTopSrc;
      }
    }
    if (bitsLeft)
    {
      size_t completeElems = bitsLeft/bitElemBits;
      memcpy(q, p, completeElems);
      p += completeElems, q += completeElems;
      bitsLeft %= bitElemBits;
    }
    if (bitsLeft)
    {
      BitElem mask = (~(BitElem)0) << (bitElemBits - bitsLeft);
      *q = (*q & ~mask) | (*p & mask);
    }
  }
  else
  {
    GtUword accum = 0;
    unsigned bitsInAccum = 0;
    while (bitsLeft && (bitTopSrc || bitTopDest))
    {
      if (bitTopSrc)
      {
        GtUword mask;
        unsigned bits2Read = GT_MIN3(bitElemBits - bitTopSrc, bitsLeft,
                                  sizeof (accum) * CHAR_BIT - bitsInAccum);
        unsigned unreadRightBits = (bitElemBits - bitTopSrc - bits2Read);
        mask = (~((~(GtUword)0) << bits2Read));
        accum = (accum << bits2Read) | (((*p) >> unreadRightBits) & mask);
        bitsLeft -= bits2Read;
        bitsInAccum += bits2Read;
        if ((bitTopSrc += bits2Read) == bitElemBits)
          bitTopSrc = 0, ++p;
      }
      if (bitTopDest)
      {
        unsigned bits2Write = GT_MIN(bitsLeft + bitsInAccum,
                                  bitElemBits - bitTopDest);
        while (bitsLeft >= bitElemBits
               && sizeof (accum) * CHAR_BIT - bitsInAccum > bitElemBits)
        {
          accum = accum << bitElemBits | (*p++);
          bitsLeft -= bitElemBits;
          bitsInAccum += bitElemBits;
        }
        if (bits2Write > bitsInAccum)
        {
          /* very inconvinient: we have to take all the bits we can get
           * just to fill the first incomplete element */
          while (bitsInAccum < bits2Write)
          {
            GtUword mask;
            unsigned bits2Read = GT_MIN3(sizeof (accum) * CHAR_BIT
                                         - bitsInAccum, bitsLeft, bitElemBits);
            unsigned unreadRightBits = (bitElemBits - bits2Read);
            mask = (~((~(GtUword)0) << bits2Read)) << unreadRightBits;
            accum = (accum << bits2Read) | ((*p) & mask) >> unreadRightBits;
            bitsLeft -= bits2Read;
            bitsInAccum += bits2Read;
            bitTopSrc = bits2Read;
          }
        }
        /* accum holds enough bits to fill incomplete region at dest start */
        {
          unsigned unwrittenRightBits = bitElemBits
            - bitTopDest - bits2Write;
          GtUword mask =
            (~((~(GtUword)0) << bits2Write)) << unwrittenRightBits;
          *q = (*q & ~mask)
            | (((accum >> (bitsInAccum -= bits2Write))
                << unwrittenRightBits) & mask);
          if ((bitTopDest += bits2Write) == bitElemBits)
            ++q, bitTopDest = 0;
        }
        while (bitsInAccum >= bitElemBits)
        {
          *q++ = accum >> (bitsInAccum -= bitElemBits);
        }
      }
    }
    /* all reads and writes are aligned on BitElems in this loop */
    do
    {
      /* fill accumulator */
      while (bitsLeft >= bitElemBits
             && sizeof (accum) * CHAR_BIT - bitsInAccum > bitElemBits)
      {
        accum = accum << bitElemBits | (*p++);
        bitsInAccum += bitElemBits;
        bitsLeft -= bitElemBits;
      }
      /* write out accum */
      while (bitsInAccum >= bitElemBits)
      {
        *q++ = accum >> (bitsInAccum -= bitElemBits);
      }
    }
    while (bitsLeft >= bitElemBits);
    /* write remaining (trailing) bits */
    while (bitsLeft || bitsInAccum)
    {
      while (bitsLeft && bitsInAccum < sizeof (accum) * CHAR_BIT)
      {
        unsigned bits2Read = GT_MIN3(bitsLeft, bitElemBits - bitTopSrc,
                                  sizeof (accum) * CHAR_BIT - bitsInAccum);
        unsigned unreadRightBits = (bitElemBits - bitTopSrc - bits2Read);
        GtUword mask =
          ~((~(GtUword)0) << bits2Read);
        accum = (accum << bits2Read) | (((*p) >> unreadRightBits) & mask);
        bitsLeft -= bits2Read;
        bitsInAccum += bits2Read;
        if ((bitTopSrc += bits2Read) == bitElemBits)
          ++p, bitTopSrc = 0;
      }
      while (bitsInAccum)
      {
        unsigned bits2Write = GT_MIN(bitsInAccum, bitElemBits - bitTopDest),
          unwrittenRightBits = bitElemBits - bits2Write - bitTopDest;
        GtUword mask = (~(GtUword)0);
        if (bits2Write != bitElemBits)
        {
          mask = (~(mask << bits2Write)) << unwrittenRightBits;
        }
        *q = (*q & ~mask) |
            (((accum >> (bitsInAccum -= bits2Write))
              << unwrittenRightBits) & mask);
        if ((bitTopDest += bits2Write) == bitElemBits)
          bitTopDest = 0, ++q;
      }
    }
  }
}

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x140(%rsp)
movq %rsi, 0x138(%rsp)
movq %rdx, 0x130(%rsp)
movq %rcx, 0x128(%rsp)
movq %r8, 0x120(%rsp)
movq 0x138(%rsp), %rax
shrq $0x3, %rax
movq %rax, 0x118(%rsp)
movq 0x128(%rsp), %rax
shrq $0x3, %rax
movq %rax, 0x110(%rsp)
movq 0x138(%rsp), %rax
andq $0x7, %rax
movl %eax, 0x10c(%rsp)
movq 0x128(%rsp), %rax
andq $0x7, %rax
movl %eax, 0x108(%rsp)
movq 0x120(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0x140(%rsp), %rax
addq 0x118(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0x130(%rsp), %rax
addq 0x110(%rsp), %rax
movq %rax, 0xf0(%rsp)
cmpq $0x0, 0x140(%rsp)
je 0x46f8e3
cmpq $0x0, 0x130(%rsp)
jne 0x46f91b
movq 0x1cc6b6(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0xa671f(%rip), %rsi     # 0x516013
leaq 0x14039d(%rip), %rdx    # 0x5afc98
leaq 0x1403a2(%rip), %rcx    # 0x5afca4
leaq 0x140374(%rip), %r8     # 0x5afc7d
movl $0xef, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x46f91d
movl 0x10c(%rsp), %eax
cmpl 0x108(%rsp), %eax
jne 0x46fb5e
cmpl $0x0, 0x10c(%rsp)
je 0x46fa76
movl 0x10c(%rsp), %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
sarl %cl, %eax
movb %al, 0xef(%rsp)
movq 0x120(%rsp), %rax
movl $0x8, %ecx
subl 0x10c(%rsp), %ecx
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x46f9ee
movl $0x8, %eax
subq 0x120(%rsp), %rax
movl 0x10c(%rsp), %ecx
subq %rcx, %rax
movl %eax, 0xe8(%rsp)
movl 0xe8(%rsp), %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
shll %cl, %eax
movl %eax, %ecx
movzbl 0xef(%rsp), %eax
andl %ecx, %eax
movb %al, 0xef(%rsp)
movq 0xf0(%rsp), %rax
movzbl (%rax), %eax
movzbl 0xef(%rsp), %ecx
xorl $-0x1, %ecx
andl %ecx, %eax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %ecx
movzbl 0xef(%rsp), %edx
andl %edx, %ecx
orl %ecx, %eax
movb %al, %cl
movq 0xf0(%rsp), %rax
movb %cl, (%rax)
jmp 0x470551
movq 0xf0(%rsp), %rax
movzbl (%rax), %eax
movzbl 0xef(%rsp), %ecx
xorl $-0x1, %ecx
andl %ecx, %eax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %ecx
movzbl 0xef(%rsp), %edx
andl %edx, %ecx
orl %ecx, %eax
movb %al, %cl
movq 0xf0(%rsp), %rax
movb %cl, (%rax)
movq 0xf8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf8(%rsp)
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
movl %eax, %ecx
movq 0x100(%rsp), %rax
subq %rcx, %rax
movq %rax, 0x100(%rsp)
jmp 0x46fa76
cmpq $0x0, 0x100(%rsp)
je 0x46faf6
movq 0x100(%rsp), %rax
shrq $0x3, %rax
movq %rax, 0xe0(%rsp)
movq 0xf0(%rsp), %rdi
movq 0xf8(%rsp), %rsi
movq 0xe0(%rsp), %rdx
callq 0x19610
movq 0xe0(%rsp), %rax
addq 0xf8(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0xe0(%rsp), %rax
addq 0xf0(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq 0x100(%rsp), %rax
andq $0x7, %rax
movq %rax, 0x100(%rsp)
cmpq $0x0, 0x100(%rsp)
je 0x46fb59
movl $0x8, %eax
subq 0x100(%rsp), %rax
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
shll %cl, %eax
movb %al, 0xdf(%rsp)
movq 0xf0(%rsp), %rax
movzbl (%rax), %eax
movzbl 0xdf(%rsp), %ecx
xorl $-0x1, %ecx
andl %ecx, %eax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %ecx
movzbl 0xdf(%rsp), %edx
andl %edx, %ecx
orl %ecx, %eax
movb %al, %cl
movq 0xf0(%rsp), %rax
movb %cl, (%rax)
jmp 0x470551
movq $0x0, 0xd0(%rsp)
movl $0x0, 0xcc(%rsp)
xorl %eax, %eax
cmpq $0x0, 0x100(%rsp)
movb %al, 0x6f(%rsp)
je 0x46fbad
movb $0x1, %al
cmpl $0x0, 0x10c(%rsp)
movb %al, 0x6e(%rsp)
jne 0x46fba5
cmpl $0x0, 0x108(%rsp)
setne %al
movb %al, 0x6e(%rsp)
movb 0x6e(%rsp), %al
movb %al, 0x6f(%rsp)
movb 0x6f(%rsp), %al
testb $0x1, %al
jne 0x46fbba
jmp 0x470129
cmpl $0x0, 0x10c(%rsp)
je 0x46fd77
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
cmpq 0x100(%rsp), %rax
jae 0x46fc3b
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
movl 0xcc(%rsp), %ecx
movl %ecx, %edx
movl $0x40, %ecx
subq %rdx, %rcx
cmpq %rcx, %rax
jae 0x46fc19
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
movq %rax, 0x60(%rsp)
jmp 0x46fc2f
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x58(%rsp)
jmp 0x46fc88
movq 0x100(%rsp), %rax
movl 0xcc(%rsp), %ecx
movl %ecx, %edx
movl $0x40, %ecx
subq %rdx, %rcx
cmpq %rcx, %rax
jae 0x46fc68
movq 0x100(%rsp), %rax
movq %rax, 0x50(%rsp)
jmp 0x46fc7e
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rax
movl %eax, 0xbc(%rsp)
movl $0x8, %eax
subl 0x10c(%rsp), %eax
subl 0xbc(%rsp), %eax
movl %eax, 0xb8(%rsp)
movl 0xbc(%rsp), %eax
movl %eax, %ecx
movq $-0x1, %rax
shlq %cl, %rax
xorq $-0x1, %rax
movq %rax, 0xc0(%rsp)
movq 0xd0(%rsp), %rax
movl 0xbc(%rsp), %ecx
shlq %cl, %rax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %edx
movl 0xb8(%rsp), %ecx
sarl %cl, %edx
movl %edx, %ecx
movslq %ecx, %rcx
andq 0xc0(%rsp), %rcx
orq %rcx, %rax
movq %rax, 0xd0(%rsp)
movl 0xbc(%rsp), %eax
movl %eax, %ecx
movq 0x100(%rsp), %rax
subq %rcx, %rax
movq %rax, 0x100(%rsp)
movl 0xbc(%rsp), %eax
addl 0xcc(%rsp), %eax
movl %eax, 0xcc(%rsp)
movl 0xbc(%rsp), %eax
addl 0x10c(%rsp), %eax
movl %eax, 0x10c(%rsp)
cmpl $0x8, %eax
jne 0x46fd75
movl $0x0, 0x10c(%rsp)
movq 0xf8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf8(%rsp)
jmp 0x46fd77
cmpl $0x0, 0x108(%rsp)
je 0x470124
movq 0x100(%rsp), %rax
movl 0xcc(%rsp), %ecx
addq %rcx, %rax
movl $0x8, %ecx
subl 0x108(%rsp), %ecx
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x46fdc3
movq 0x100(%rsp), %rax
movl 0xcc(%rsp), %ecx
addq %rcx, %rax
movq %rax, 0x48(%rsp)
jmp 0x46fdd6
movl $0x8, %eax
subl 0x108(%rsp), %eax
movl %eax, %eax
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rax
movl %eax, 0xb4(%rsp)
xorl %eax, %eax
cmpq $0x8, 0x100(%rsp)
movb %al, 0x47(%rsp)
jb 0x46fe0f
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
cmpq $0x8, %rax
seta %al
movb %al, 0x47(%rsp)
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x46fe19
jmp 0x46fe74
movq 0xd0(%rsp), %rax
shlq $0x8, %rax
movq 0xf8(%rsp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, 0xf8(%rsp)
movzbl (%rcx), %ecx
orq %rcx, %rax
movq %rax, 0xd0(%rsp)
movq 0x100(%rsp), %rax
subq $0x8, %rax
movq %rax, 0x100(%rsp)
movl 0xcc(%rsp), %eax
addl $0x8, %eax
movl %eax, 0xcc(%rsp)
jmp 0x46fde2
movl 0xb4(%rsp), %eax
cmpl 0xcc(%rsp), %eax
jbe 0x46fffd
jmp 0x46fe8a
movl 0xcc(%rsp), %eax
cmpl 0xb4(%rsp), %eax
jae 0x46fffb
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
cmpq 0x100(%rsp), %rax
jae 0x46ff00
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
cmpq $0x8, %rax
jae 0x46fee8
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
movq %rax, 0x38(%rsp)
jmp 0x46fef4
movl $0x8, %eax
movq %rax, 0x38(%rsp)
jmp 0x46fef4
movq 0x38(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x46ff30
cmpq $0x8, 0x100(%rsp)
jae 0x46ff1a
movq 0x100(%rsp), %rax
movq %rax, 0x28(%rsp)
jmp 0x46ff26
movl $0x8, %eax
movq %rax, 0x28(%rsp)
jmp 0x46ff26
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movl %eax, 0xa4(%rsp)
movl $0x8, %eax
subl 0xa4(%rsp), %eax
movl %eax, 0xa0(%rsp)
movl 0xa4(%rsp), %eax
movl %eax, %ecx
movq $-0x1, %rax
shlq %cl, %rax
xorq $-0x1, %rax
movl 0xa0(%rsp), %ecx
shlq %cl, %rax
movq %rax, 0xa8(%rsp)
movq 0xd0(%rsp), %rax
movl 0xa4(%rsp), %ecx
shlq %cl, %rax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %ecx
movl %ecx, %edx
andq 0xa8(%rsp), %rdx
movl 0xa0(%rsp), %ecx
shrq %cl, %rdx
movq %rdx, %rcx
orq %rcx, %rax
movq %rax, 0xd0(%rsp)
movl 0xa4(%rsp), %eax
movl %eax, %ecx
movq 0x100(%rsp), %rax
subq %rcx, %rax
movq %rax, 0x100(%rsp)
movl 0xa4(%rsp), %eax
addl 0xcc(%rsp), %eax
movl %eax, 0xcc(%rsp)
movl 0xa4(%rsp), %eax
movl %eax, 0x10c(%rsp)
jmp 0x46fe8a
jmp 0x46fffd
movl $0x8, %eax
subl 0x108(%rsp), %eax
subl 0xb4(%rsp), %eax
movl %eax, 0x9c(%rsp)
movl 0xb4(%rsp), %eax
movl %eax, %ecx
movq $-0x1, %rax
shlq %cl, %rax
xorq $-0x1, %rax
movl 0x9c(%rsp), %ecx
shlq %cl, %rax
movq %rax, 0x90(%rsp)
movq 0xf0(%rsp), %rax
movzbl (%rax), %eax
movq 0x90(%rsp), %rcx
xorq $-0x1, %rcx
andq %rcx, %rax
movq 0xd0(%rsp), %rdx
movl 0xb4(%rsp), %esi
movl 0xcc(%rsp), %ecx
subl %esi, %ecx
movl %ecx, 0xcc(%rsp)
movl %ecx, %ecx
shrq %cl, %rdx
movl 0x9c(%rsp), %ecx
shlq %cl, %rdx
movq %rdx, %rcx
andq 0x90(%rsp), %rcx
orq %rcx, %rax
movb %al, %cl
movq 0xf0(%rsp), %rax
movb %cl, (%rax)
movl 0xb4(%rsp), %eax
addl 0x108(%rsp), %eax
movl %eax, 0x108(%rsp)
cmpl $0x8, %eax
jne 0x4700db
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
movl $0x0, 0x108(%rsp)
jmp 0x4700dd
cmpl $0x8, 0xcc(%rsp)
jb 0x470122
movq 0xd0(%rsp), %rax
movl 0xcc(%rsp), %ecx
subl $0x8, %ecx
movl %ecx, 0xcc(%rsp)
movl %ecx, %ecx
shrq %cl, %rax
movb %al, %cl
movq 0xf0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xf0(%rsp)
movb %cl, (%rax)
jmp 0x4700dd
jmp 0x470124
jmp 0x46fb75
jmp 0x47012b
jmp 0x47012d
xorl %eax, %eax
cmpq $0x8, 0x100(%rsp)
movb %al, 0x27(%rsp)
jb 0x47015a
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
cmpq $0x8, %rax
seta %al
movb %al, 0x27(%rsp)
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x470164
jmp 0x4701bf
movq 0xd0(%rsp), %rax
shlq $0x8, %rax
movq 0xf8(%rsp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, 0xf8(%rsp)
movzbl (%rcx), %ecx
orq %rcx, %rax
movq %rax, 0xd0(%rsp)
movl 0xcc(%rsp), %eax
addl $0x8, %eax
movl %eax, 0xcc(%rsp)
movq 0x100(%rsp), %rax
subq $0x8, %rax
movq %rax, 0x100(%rsp)
jmp 0x47012d
jmp 0x4701c1
cmpl $0x8, 0xcc(%rsp)
jb 0x470206
movq 0xd0(%rsp), %rax
movl 0xcc(%rsp), %ecx
subl $0x8, %ecx
movl %ecx, 0xcc(%rsp)
movl %ecx, %ecx
shrq %cl, %rax
movb %al, %cl
movq 0xf0(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xf0(%rsp)
movb %cl, (%rax)
jmp 0x4701c1
jmp 0x470208
cmpq $0x8, 0x100(%rsp)
jae 0x47012b
jmp 0x470219
movb $0x1, %al
cmpq $0x0, 0x100(%rsp)
movb %al, 0x26(%rsp)
jne 0x470239
cmpl $0x0, 0xcc(%rsp)
setne %al
movb %al, 0x26(%rsp)
movb 0x26(%rsp), %al
testb $0x1, %al
jne 0x470246
jmp 0x47054f
jmp 0x470248
xorl %eax, %eax
cmpq $0x0, 0x100(%rsp)
movb %al, 0x25(%rsp)
je 0x47026b
movl 0xcc(%rsp), %eax
cmpq $0x40, %rax
setb %al
movb %al, 0x25(%rsp)
movb 0x25(%rsp), %al
testb $0x1, %al
jne 0x470278
jmp 0x47042d
movq 0x100(%rsp), %rax
movl $0x8, %ecx
subl 0x10c(%rsp), %ecx
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x4702e2
movq 0x100(%rsp), %rax
movl 0xcc(%rsp), %ecx
movl %ecx, %edx
movl $0x40, %ecx
subq %rdx, %rcx
cmpq %rcx, %rax
jae 0x4702c0
movq 0x100(%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x4702d6
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rsp)
jmp 0x47033b
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
movl 0xcc(%rsp), %ecx
movl %ecx, %edx
movl $0x40, %ecx
subq %rdx, %rcx
cmpq %rcx, %rax
jae 0x47031b
movl $0x8, %eax
subl 0x10c(%rsp), %eax
movl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x470331
movl 0xcc(%rsp), %eax
movl %eax, %ecx
movl $0x40, %eax
subq %rcx, %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movl %eax, 0x8c(%rsp)
movl $0x8, %eax
subl 0x10c(%rsp), %eax
subl 0x8c(%rsp), %eax
movl %eax, 0x88(%rsp)
movl 0x8c(%rsp), %eax
movl %eax, %ecx
movq $-0x1, %rax
shlq %cl, %rax
xorq $-0x1, %rax
movq %rax, 0x80(%rsp)
movq 0xd0(%rsp), %rax
movl 0x8c(%rsp), %ecx
shlq %cl, %rax
movq 0xf8(%rsp), %rcx
movzbl (%rcx), %edx
movl 0x88(%rsp), %ecx
sarl %cl, %edx
movl %edx, %ecx
movslq %ecx, %rcx
andq 0x80(%rsp), %rcx
orq %rcx, %rax
movq %rax, 0xd0(%rsp)
movl 0x8c(%rsp), %eax
movl %eax, %ecx
movq 0x100(%rsp), %rax
subq %rcx, %rax
movq %rax, 0x100(%rsp)
movl 0x8c(%rsp), %eax
addl 0xcc(%rsp), %eax
movl %eax, 0xcc(%rsp)
movl 0x8c(%rsp), %eax
addl 0x10c(%rsp), %eax
movl %eax, 0x10c(%rsp)
cmpl $0x8, %eax
jne 0x470428
movq 0xf8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf8(%rsp)
movl $0x0, 0x10c(%rsp)
jmp 0x470248
jmp 0x47042f
cmpl $0x0, 0xcc(%rsp)
je 0x47054a
movl 0xcc(%rsp), %eax
movl $0x8, %ecx
subl 0x108(%rsp), %ecx
cmpl %ecx, %eax
jae 0x470461
movl 0xcc(%rsp), %eax
movl %eax, 0x4(%rsp)
jmp 0x470471
movl $0x8, %eax
subl 0x108(%rsp), %eax
movl %eax, 0x4(%rsp)
movl 0x4(%rsp), %eax
movl %eax, 0x7c(%rsp)
movl $0x8, %eax
subl 0x7c(%rsp), %eax
subl 0x108(%rsp), %eax
movl %eax, 0x78(%rsp)
movq $-0x1, 0x70(%rsp)
cmpl $0x8, 0x7c(%rsp)
je 0x4704b9
movq 0x70(%rsp), %rax
movl 0x7c(%rsp), %ecx
shlq %cl, %rax
xorq $-0x1, %rax
movl 0x78(%rsp), %ecx
shlq %cl, %rax
movq %rax, 0x70(%rsp)
movq 0xf0(%rsp), %rax
movzbl (%rax), %eax
movq 0x70(%rsp), %rcx
xorq $-0x1, %rcx
andq %rcx, %rax
movq 0xd0(%rsp), %rdx
movl 0x7c(%rsp), %esi
movl 0xcc(%rsp), %ecx
subl %esi, %ecx
movl %ecx, 0xcc(%rsp)
movl %ecx, %ecx
shrq %cl, %rdx
movl 0x78(%rsp), %ecx
shlq %cl, %rdx
movq %rdx, %rcx
andq 0x70(%rsp), %rcx
orq %rcx, %rax
movb %al, %cl
movq 0xf0(%rsp), %rax
movb %cl, (%rax)
movl 0x7c(%rsp), %eax
addl 0x108(%rsp), %eax
movl %eax, 0x108(%rsp)
cmpl $0x8, %eax
jne 0x470545
movl $0x0, 0x108(%rsp)
movq 0xf0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xf0(%rsp)
jmp 0x47042f
jmp 0x470219
jmp 0x470551
addq $0x148, %rsp            # imm = 0x148
retq
nopl (%rax)