// File: lvandeve[P]lodepng/pngdetail.cpp
// Function: printICCDetails(unsigned char const*, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void printICCDetails(const unsigned char* icc, size_t size, const std::string& indent) {
  // 128 for header, 4 for num tags
  if(size < 132) {
    std::cout << indent << "Invalid ICC: too small to contain header" << std::endl;
    return;
  }
  if(printableICCWord(icc, size, 36) != "acsp") {
    std::cout << indent << "Invalid ICC: does not contain signature \"acsp\"" << std::endl;
    return;
  }

  std::cout << indent << "profile size: " << getICCUint32(icc, size, 0) << std::endl;
  std::cout << indent << "CMM type: " << printableICCWord(icc, size, 4) << std::endl;

  uint32_t version = getICCUint32(icc, size, 8);
  uint16_t version_major = (version >> 24) & 255;
  uint16_t version_minor = (version >> 20) & 15;
  uint16_t version_bugfix = (version >> 16) & 15;
  std::cout << indent << "version: " << version_major << "." << version_minor
            << "." << version_bugfix << std::endl;

  std::cout << indent << "device class: " << printableICCWord(icc, size, 12) << std::endl;
  std::cout << indent << "input space: \"" << printableICCWord(icc, size, 16) << "\", ";
  std::cout << "output space: \"" << printableICCWord(icc, size, 20) << "\"" << std::endl;
  std::cout << indent;
  printf("date: %02d-%02d-%02dT%02d:%02d:%02d\n",
         getICCUint16(icc, size, 24), getICCUint16(icc, size, 26), getICCUint16(icc, size, 28),
         getICCUint16(icc, size, 30), getICCUint16(icc, size, 32), getICCUint16(icc, size, 34));
  std::cout << indent << "signature: " << printableICCWord(icc, size, 36) << std::endl;
  std::cout << indent << "platform: " << printableICCWord(icc, size, 40) << std::endl;
  std::cout << indent << "flags: " << getICCUint32(icc, size, 44) << std::endl;
  std::cout << indent << "device manufacturer: " << printableICCWord(icc, size, 48) << ", ";
  std::cout << "device model: " << printableICCWord(icc, size, 52) << ", ";
  std::cout << "device attributes: " << getICCUint32(icc, size, 56) << " "
            << getICCUint32(icc, size, 60) << std::endl;
  std::cout << indent << "rendering intent: " << getICCUint32(icc, size, 64) << std::endl;

  float pcsx = getICC15Fixed16(icc, size, 68);
  float pcsy = getICC15Fixed16(icc, size, 72);
  float pcsz = getICC15Fixed16(icc, size, 76);
  float pcsxyz = pcsx + pcsy + pcsz;
  std::cout << indent << "xyz illuminant: X:" << pcsx << ", Y:" << pcsy << ", Z:" << pcsz
            << ", xy:" << (pcsx / pcsxyz) << "," << (pcsy / pcsxyz) << std::endl;

  std::cout << indent << "creator: " << printableICCWord(icc, size, 80) << std::endl;

  // The md5 is present in v2.4 and above profiles, but it's always shown anyway. Those
  // bytes are normally all zero for older versions.
  std::cout << indent;
  printf("md5: %08x%08x%08x%08x\n", getICCUint32(icc, size, 84), getICCUint32(icc, size, 88),
                                    getICCUint32(icc, size, 92), getICCUint32(icc, size, 96));

  size_t numtags = getICCUint32(icc, size, 128);
  std::cout << indent << "num icc tags: " << numtags << std::endl;
  if(size < 128 + 4 + numtags * 12) {
    std::cout << indent << "Invalid ICC: too small to contain tag descriptions" << std::endl;
    return;
  }
  for(size_t i = 0; i < numtags; i++) {
    size_t pos = 132 + i * 12;
    std::cout << indent << "icc tag: \"" << printableICCWord(icc, size, pos) << "\"";
    size_t offset = getICCUint32(icc, size, pos + 4);
    size_t tagsize = getICCUint32(icc, size, pos + 8);
    std::cout << ", offset: " << offset << ", size: " << tagsize;
    if(offset + tagsize > size || tagsize < 4) {
      std::cout << std::endl << indent << "Invalid ICC: tag out of range" << std::endl;
      return;
    }
    std::string datatype = printableICCWord(icc, size, offset);
    std::cout << ", datatype: \"" << datatype << "\"";
    if(datatype == "XYZ ") {
      float x = getICC15Fixed16(icc, size, offset + 8);
      float y = getICC15Fixed16(icc, size, offset + 12);
      float z = getICC15Fixed16(icc, size, offset + 16);
      float xyz = x + y + z;
      std::cout << ", X:" << x << ", Y:" << y << ", Z:" << z;
      if(xyz) std::cout << ", xy:" << (x / xyz) << "," << (y / xyz);
    }
    if(datatype == "curv") {
      size_t lutsize = getICCUint32(icc, size, offset + 8);
      std::cout << ", lookup table size: " << lutsize;
      if(lutsize == 1 && offset + 14 <= size) {
        std::cout << " (gamma: " << (getICCUint16(icc, size, offset + 12) / 256.0) << ")";
      }
      if(lutsize == 0) std::cout << " (linear)";
    }
    if(datatype == "para") {
      unsigned type = getICCUint16(icc, size, offset + 8);
      float gamma = getICC15Fixed16(icc, size, offset + 12);
      int numparams = (type == 4) ? 7 : ((type >= 1 && type <= 3) ? (type + 1) : 0);
      std::cout << " type: " << type << ", gamma: " <<  gamma;
      if(numparams > 0) {
        std::cout << ", params: ";
        for(int j = 0; j < numparams; j++) {
          if(j > 0) std::cout << ", ";
          std::cout << getICC15Fixed16(icc, size, offset + 16 + j * 4);
        }
      }
    }
    if(datatype == "sf32") {
      std::cout << ":";
      for(size_t j = 8; j < tagsize; j += 4) {
        float v = getICC15Fixed16(icc, size, offset + j);
        std::cout << " " << v;
      }
    }
    if(datatype == "chrm") {
      size_t numchannels = getICCUint16(icc, size, offset + 8);
      std::cout << ": n:" << numchannels
                << " phosphor:" << getICCUint16(icc, size, offset + 10);
      for(size_t j = 0; j < numchannels; j++) {
        std::cout << " xy:" << getICC16Fixed16(icc, size, offset + 12 + j * 8)
                  << "," << getICC16Fixed16(icc, size, offset + 12 + j * 8 + 4);
      }
    }
    if(datatype == "text" || datatype == "mluc" || datatype == "desc") {
      // TODO: this is a bit of a simplification of the parse for now, e.g.
      // ignoring UTF-16, instead implicitely skipping non-ASCII bytes, and
      // potentially printing things multiple times in a row if multiple
      // variants are in desc or mluc.
      std::cout << ": ";
      for(size_t j = (datatype == "mluc" ? 28 : 8); j < tagsize; j++) {
        char c = icc[offset + j];
        if(c >= 32 && c < 127) std::cout << c;
      }
    }
    std::cout << std::endl;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x500, %rsp            # imm = 0x500
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
cmpq $0x84, -0x10(%rbp)
jae 0x2c2b4
movq -0x18(%rbp), %rsi
movq 0x1ad44(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xe64d(%rip), %rsi      # 0x3a8e8
callq 0x2250
movq %rax, %rdi
movq 0x1ad16(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2da8f
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x38(%rbp), %rdi
movq %rdi, -0x250(%rbp)
movl $0x24, %ecx
callq 0x2dab0
movq -0x250(%rbp), %rdi
leaq 0xe632(%rip), %rsi      # 0x3a911
callq 0x32790
movb %al, -0x242(%rbp)
jmp 0x2c2ec
leaq -0x38(%rbp), %rdi
callq 0x2170
movb -0x242(%rbp), %al
testb $0x1, %al
jne 0x2c301
jmp 0x2c350
movq -0x18(%rbp), %rsi
movq 0x1acc4(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xe5fb(%rip), %rsi      # 0x3a916
callq 0x2250
movq %rax, %rdi
movq 0x1ac96(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2da8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x2170
jmp 0x2c34b
jmp 0x2da98
movq -0x18(%rbp), %rsi
movq 0x1ac75(%rip), %rdi     # 0x46fd0
movq %rdi, -0x270(%rbp)
callq 0x2210
movq %rax, %rdi
leaq 0xe5d4(%rip), %rsi      # 0x3a945
callq 0x2250
movq %rax, -0x278(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x2dbf0
movq -0x278(%rbp), %rdi
movl %eax, %esi
callq 0x2340
movq %rax, %rdi
movq 0x1ac1a(%rip), %rsi     # 0x46fc0
callq 0x22a0
movq -0x270(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xe58f(%rip), %rsi      # 0x3a954
callq 0x2250
movq %rax, -0x268(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x68(%rbp), %rdi
movq %rdi, -0x260(%rbp)
movl $0x4, %ecx
callq 0x2dab0
movq -0x268(%rbp), %rdi
movq -0x260(%rbp), %rsi
callq 0x2210
movq %rax, -0x258(%rbp)
jmp 0x2c40a
movq -0x258(%rbp), %rdi
movq 0x1aba8(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2c41f
leaq -0x68(%rbp), %rdi
callq 0x2170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x8, %edx
callq 0x2dbf0
movl %eax, -0x6c(%rbp)
movzbl -0x69(%rbp), %eax
movw %ax, -0x6e(%rbp)
movl -0x6c(%rbp), %eax
shrl $0x14, %eax
andl $0xf, %eax
movw %ax, -0x70(%rbp)
movzwl -0x6a(%rbp), %eax
andl $0xf, %eax
movw %ax, -0x72(%rbp)
movq -0x18(%rbp), %rsi
movq 0x1ab68(%rip), %rdi     # 0x46fd0
movq %rdi, -0x298(%rbp)
callq 0x2210
movq %rax, %rdi
leaq 0xd97f(%rip), %rsi      # 0x39dfd
callq 0x2250
movq %rax, %rdi
movzwl -0x6e(%rbp), %esi
callq 0x2400
movq %rax, %rdi
leaq 0xe440(%rip), %rsi      # 0x3a8d9
movq %rsi, -0x2a0(%rbp)
callq 0x2250
movq %rax, %rdi
movzwl -0x70(%rbp), %esi
callq 0x2400
movq -0x2a0(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq %rax, %rdi
movzwl -0x72(%rbp), %esi
callq 0x2400
movq %rax, %rdi
movq 0x1aaea(%rip), %rsi     # 0x46fc0
callq 0x22a0
movq -0x298(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xe46a(%rip), %rsi      # 0x3a95f
callq 0x2250
movq %rax, -0x290(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x98(%rbp), %rdi
movq %rdi, -0x288(%rbp)
movl $0xc, %ecx
callq 0x2dab0
movq -0x290(%rbp), %rdi
movq -0x288(%rbp), %rsi
callq 0x2210
movq %rax, -0x280(%rbp)
jmp 0x2c53d
movq -0x280(%rbp), %rdi
movq 0x1aa75(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2c552
leaq -0x98(%rbp), %rdi
callq 0x2170
movq -0x18(%rbp), %rsi
movq 0x1aa67(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xe3f6(%rip), %rsi      # 0x3a96e
callq 0x2250
movq %rax, -0x2b8(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
movl $0x10, %ecx
callq 0x2dab0
movq -0x2b8(%rbp), %rdi
movq -0x2b0(%rbp), %rsi
callq 0x2210
movq %rax, -0x2a8(%rbp)
jmp 0x2c5c0
movq -0x2a8(%rbp), %rdi
leaq 0xe3af(%rip), %rsi      # 0x3a97d
callq 0x2250
jmp 0x2c5d5
leaq -0xb8(%rbp), %rdi
callq 0x2170
movq 0x1a9e8(%rip), %rdi     # 0x46fd0
leaq 0xe392(%rip), %rsi      # 0x3a981
callq 0x2250
movq %rax, -0x2d0(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0xd8(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
movl $0x14, %ecx
callq 0x2dab0
movq -0x2d0(%rbp), %rdi
movq -0x2c8(%rbp), %rsi
callq 0x2210
movq %rax, -0x2c0(%rbp)
jmp 0x2c637
movq -0x2c0(%rbp), %rdi
leaq 0xe336(%rip), %rsi      # 0x3a97b
callq 0x2250
movq %rax, -0x2d8(%rbp)
jmp 0x2c653
movq -0x2d8(%rbp), %rdi
movq 0x1a95f(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2c668
leaq -0xd8(%rbp), %rdi
callq 0x2170
movq -0x18(%rbp), %rsi
movq 0x1a951(%rip), %rdi     # 0x46fd0
movq %rdi, -0x2f8(%rbp)
callq 0x2210
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x18, %edx
callq 0x2dc70
movl %eax, -0x30c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x1a, %edx
callq 0x2dc70
movl %eax, -0x308(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x1c, %edx
callq 0x2dc70
movl %eax, -0x304(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x1e, %edx
callq 0x2dc70
movl %eax, -0x300(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x20, %edx
callq 0x2dc70
movl %eax, -0x2fc(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x22, %edx
callq 0x2dc70
movl -0x30c(%rbp), %esi
movl -0x308(%rbp), %edx
movl -0x304(%rbp), %ecx
movl -0x300(%rbp), %r8d
movl -0x2fc(%rbp), %r9d
movl %eax, %edi
movq %rsp, %rax
movl %edi, (%rax)
leaq 0xe24e(%rip), %rdi      # 0x3a991
xorl %eax, %eax
callq 0x2060
movq -0x2f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xe252(%rip), %rsi      # 0x3a9b6
callq 0x2250
movq %rax, -0x2f0(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0xf8(%rbp), %rdi
movq %rdi, -0x2e8(%rbp)
movl $0x24, %ecx
callq 0x2dab0
movq -0x2f0(%rbp), %rdi
movq -0x2e8(%rbp), %rsi
callq 0x2210
movq %rax, -0x2e0(%rbp)
jmp 0x2c7ac
movq -0x2e0(%rbp), %rdi
movq 0x1a806(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2c7c1
leaq -0xf8(%rbp), %rdi
callq 0x2170
movq -0x18(%rbp), %rsi
movq 0x1a7f8(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xe1db(%rip), %rsi      # 0x3a9c2
callq 0x2250
movq %rax, -0x328(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x118(%rbp), %rdi
movq %rdi, -0x320(%rbp)
movl $0x28, %ecx
callq 0x2dab0
movq -0x328(%rbp), %rdi
movq -0x320(%rbp), %rsi
callq 0x2210
movq %rax, -0x318(%rbp)
jmp 0x2c82f
movq -0x318(%rbp), %rdi
movq 0x1a783(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2c844
leaq -0x118(%rbp), %rdi
callq 0x2170
movq -0x18(%rbp), %rsi
movq 0x1a775(%rip), %rdi     # 0x46fd0
movq %rdi, -0x348(%rbp)
callq 0x2210
movq %rax, %rdi
leaq 0xe15c(%rip), %rsi      # 0x3a9cd
callq 0x2250
movq %rax, -0x350(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x2c, %edx
callq 0x2dbf0
movq -0x350(%rbp), %rdi
movl %eax, %esi
callq 0x2340
movq %rax, %rdi
movq 0x1a719(%rip), %rsi     # 0x46fc0
callq 0x22a0
movq -0x348(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xe10f(%rip), %rsi      # 0x3a9d5
callq 0x2250
movq %rax, -0x340(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x138(%rbp), %rdi
movq %rdi, -0x338(%rbp)
movl $0x30, %ecx
callq 0x2dab0
movq -0x340(%rbp), %rdi
movq -0x338(%rbp), %rsi
callq 0x2210
movq %rax, -0x330(%rbp)
jmp 0x2c90e
movq -0x330(%rbp), %rdi
leaq 0xe062(%rip), %rsi      # 0x3a97e
callq 0x2250
jmp 0x2c923
leaq -0x138(%rbp), %rdi
callq 0x2170
movq 0x1a69a(%rip), %rdi     # 0x46fd0
leaq 0xe0ae(%rip), %rsi      # 0x3a9eb
callq 0x2250
movq %rax, -0x368(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x158(%rbp), %rdi
movq %rdi, -0x360(%rbp)
movl $0x34, %ecx
callq 0x2dab0
movq -0x368(%rbp), %rdi
movq -0x360(%rbp), %rsi
callq 0x2210
movq %rax, -0x358(%rbp)
jmp 0x2c985
movq -0x358(%rbp), %rdi
leaq 0xdfeb(%rip), %rsi      # 0x3a97e
callq 0x2250
jmp 0x2c99a
leaq -0x158(%rbp), %rdi
callq 0x2170
movq 0x1a623(%rip), %rdi     # 0x46fd0
movq %rdi, -0x388(%rbp)
leaq 0xe03f(%rip), %rsi      # 0x3a9fa
callq 0x2250
movq %rax, -0x3a8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x38, %edx
callq 0x2dbf0
movq -0x3a8(%rbp), %rdi
movl %eax, %esi
callq 0x2340
movq %rax, %rdi
leaq 0xe3fc(%rip), %rsi      # 0x3aded
callq 0x2250
movq %rax, -0x3a0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x3c, %edx
callq 0x2dbf0
movq -0x3a0(%rbp), %rdi
movl %eax, %esi
callq 0x2340
movq %rax, %rdi
movq 0x1a599(%rip), %rsi     # 0x46fc0
movq %rsi, -0x390(%rbp)
callq 0x22a0
movq -0x388(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xe2c3(%rip), %rsi      # 0x3ad10
callq 0x2250
movq %rax, -0x398(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x40, %edx
callq 0x2dbf0
movq -0x398(%rbp), %rdi
movl %eax, %esi
callq 0x2340
movq -0x390(%rbp), %rsi
movq %rax, %rdi
callq 0x22a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x44, %edx
callq 0x2dcc0
movss %xmm0, -0x15c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x48, %edx
callq 0x2dcc0
movss %xmm0, -0x160(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4c, %edx
callq 0x2dcc0
movq -0x388(%rbp), %rdi
movss %xmm0, -0x164(%rbp)
movss -0x15c(%rbp), %xmm0
movss -0x160(%rbp), %xmm1
addss %xmm1, %xmm0
movss -0x164(%rbp), %xmm1
addss %xmm1, %xmm0
movss %xmm0, -0x168(%rbp)
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xdef6(%rip), %rsi      # 0x3aa0e
callq 0x2250
movq %rax, %rdi
movss -0x15c(%rbp), %xmm0
callq 0x21c0
movq %rax, %rdi
leaq 0xdeea(%rip), %rsi      # 0x3aa21
callq 0x2250
movq %rax, %rdi
movss -0x160(%rbp), %xmm0
callq 0x21c0
movq %rax, %rdi
leaq 0xded0(%rip), %rsi      # 0x3aa26
callq 0x2250
movq %rax, %rdi
movss -0x164(%rbp), %xmm0
callq 0x21c0
movq %rax, %rdi
leaq 0xdeb6(%rip), %rsi      # 0x3aa2b
callq 0x2250
movq %rax, %rdi
movss -0x15c(%rbp), %xmm0
movss -0x168(%rbp), %xmm1
divss %xmm1, %xmm0
callq 0x21c0
movq %rax, %rdi
leaq 0xde91(%rip), %rsi      # 0x3aa31
callq 0x2250
movq %rax, %rdi
movss -0x160(%rbp), %xmm0
movss -0x168(%rbp), %xmm1
divss %xmm1, %xmm0
callq 0x21c0
movq -0x390(%rbp), %rsi
movq %rax, %rdi
callq 0x22a0
movq -0x388(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xde49(%rip), %rsi      # 0x3aa33
callq 0x2250
movq %rax, -0x380(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq -0x188(%rbp), %rdi
movq %rdi, -0x378(%rbp)
movl $0x50, %ecx
callq 0x2dab0
movq -0x380(%rbp), %rdi
movq -0x378(%rbp), %rsi
callq 0x2210
movq %rax, -0x370(%rbp)
jmp 0x2cc32
movq -0x370(%rbp), %rdi
movq 0x1a380(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2cc47
leaq -0x188(%rbp), %rdi
callq 0x2170
movq -0x18(%rbp), %rsi
movq 0x1a372(%rip), %rdi     # 0x46fd0
callq 0x2210
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x54, %edx
callq 0x2dbf0
movl %eax, -0x3b4(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x58, %edx
callq 0x2dbf0
movl %eax, -0x3b0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x5c, %edx
callq 0x2dbf0
movl %eax, -0x3ac(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x60, %edx
callq 0x2dbf0
movl -0x3b4(%rbp), %esi
movl -0x3b0(%rbp), %edx
movl -0x3ac(%rbp), %ecx
movl %eax, %r8d
leaq 0xdd64(%rip), %rdi      # 0x3aa3d
movb $0x0, %al
callq 0x2060
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x80, %edx
callq 0x2dbf0
movl %eax, %eax
movq %rax, -0x190(%rbp)
movq -0x18(%rbp), %rsi
movq 0x1a2ca(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xdd3f(%rip), %rsi      # 0x3aa54
callq 0x2250
movq %rax, %rdi
movq -0x190(%rbp), %rsi
callq 0x2080
movq %rax, %rdi
movq 0x1a28d(%rip), %rsi     # 0x46fc0
callq 0x22a0
movq -0x10(%rbp), %rax
imulq $0xc, -0x190(%rbp), %rcx
addq $0x84, %rcx
cmpq %rcx, %rax
jae 0x2ce9b
movq -0x18(%rbp), %rsi
movq 0x1a271(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xdcf5(%rip), %rsi      # 0x3aa63
callq 0x2250
movq %rax, %rdi
movq 0x1a243(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2da8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x2170
jmp 0x2cd9e
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x2170
jmp 0x2cdbd
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2170
jmp 0x2cddc
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x2170
jmp 0x2cdfb
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x2170
jmp 0x2ce1a
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x2170
jmp 0x2ce39
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x2170
jmp 0x2ce58
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x2170
jmp 0x2ce77
jmp 0x2da98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x2170
jmp 0x2ce96
jmp 0x2da98
movq $0x0, -0x198(%rbp)
movq -0x198(%rbp), %rax
cmpq -0x190(%rbp), %rax
jae 0x2da8f
movq -0x198(%rbp), %rax
leaq (%rax,%rax,2), %rax
leaq 0x84(,%rax,4), %rax
movq %rax, -0x1a0(%rbp)
movq -0x18(%rbp), %rsi
movq 0x1a0f1(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, %rdi
leaq 0xdba8(%rip), %rsi      # 0x3aa96
callq 0x2250
movq %rax, -0x3d0(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x1a0(%rbp), %rcx
leaq -0x1c0(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0x2dab0
movq -0x3d0(%rbp), %rdi
movq -0x3c8(%rbp), %rsi
callq 0x2210
movq %rax, -0x3c0(%rbp)
jmp 0x2cf38
movq -0x3c0(%rbp), %rdi
leaq 0xda35(%rip), %rsi      # 0x3a97b
callq 0x2250
jmp 0x2cf4d
leaq -0x1c0(%rbp), %rdi
callq 0x2170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1a0(%rbp), %rdx
addq $0x4, %rdx
callq 0x2dbf0
movl %eax, %eax
movq %rax, -0x1c8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1a0(%rbp), %rdx
addq $0x8, %rdx
callq 0x2dbf0
movl %eax, %eax
movq %rax, -0x1d0(%rbp)
movq 0x1a02e(%rip), %rdi     # 0x46fd0
leaq 0xdaf8(%rip), %rsi      # 0x3aaa1
callq 0x2250
movq %rax, %rdi
movq -0x1c8(%rbp), %rsi
callq 0x2080
movq %rax, %rdi
leaq 0xdae5(%rip), %rsi      # 0x3aaac
callq 0x2250
movq %rax, %rdi
movq -0x1d0(%rbp), %rsi
callq 0x2080
movq -0x1c8(%rbp), %rax
addq -0x1d0(%rbp), %rax
cmpq -0x10(%rbp), %rax
ja 0x2cff9
cmpq $0x4, -0x1d0(%rbp)
jae 0x2d05a
movq 0x19fd0(%rip), %rdi     # 0x46fd0
movq 0x19fb9(%rip), %rsi     # 0x46fc0
callq 0x22a0
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x2210
movq %rax, %rdi
leaq 0xda93(%rip), %rsi      # 0x3aab5
callq 0x2250
movq %rax, %rdi
movq 0x19f8f(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2da8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x2170
jmp 0x2d055
jmp 0x2da98
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x1c8(%rbp), %rcx
leaq -0x1f0(%rbp), %rdi
callq 0x2dab0
movq 0x19f54(%rip), %rdi     # 0x46fd0
leaq 0xda50(%rip), %rsi      # 0x3aad3
callq 0x2250
movq %rax, -0x3d8(%rbp)
jmp 0x2d091
movq -0x3d8(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x2210
movq %rax, -0x3e0(%rbp)
jmp 0x2d0ad
movq -0x3e0(%rbp), %rdi
leaq 0xd8c0(%rip), %rsi      # 0x3a97b
callq 0x2250
jmp 0x2d0c2
leaq 0xda18(%rip), %rsi      # 0x3aae1
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x3e1(%rbp)
jmp 0x2d0dd
movb -0x3e1(%rbp), %al
testb $0x1, %al
jne 0x2d0ec
jmp 0x2d309
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0x8, %rdx
callq 0x2dcc0
movss %xmm0, -0x3e8(%rbp)
jmp 0x2d10e
movss -0x3e8(%rbp), %xmm0
movss %xmm0, -0x1f4(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0xc, %rdx
callq 0x2dcc0
movss %xmm0, -0x3ec(%rbp)
jmp 0x2d140
movss -0x3ec(%rbp), %xmm0
movss %xmm0, -0x1f8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0x10, %rdx
callq 0x2dcc0
movss %xmm0, -0x3f0(%rbp)
jmp 0x2d172
movss -0x3f0(%rbp), %xmm0
movss %xmm0, -0x1fc(%rbp)
movss -0x1f4(%rbp), %xmm0
movss -0x1f8(%rbp), %xmm1
addss %xmm1, %xmm0
movss -0x1fc(%rbp), %xmm1
addss %xmm1, %xmm0
movss %xmm0, -0x200(%rbp)
movq 0x19e1f(%rip), %rdi     # 0x46fd0
leaq 0xd92e(%rip), %rsi      # 0x3aae6
callq 0x2250
movq %rax, -0x3f8(%rbp)
jmp 0x2d1c6
movq -0x3f8(%rbp), %rdi
movss -0x1f4(%rbp), %xmm0
callq 0x21c0
movq %rax, -0x400(%rbp)
jmp 0x2d1e3
movq -0x400(%rbp), %rdi
leaq 0xd830(%rip), %rsi      # 0x3aa21
callq 0x2250
movq %rax, -0x408(%rbp)
jmp 0x2d1ff
movq -0x408(%rbp), %rdi
movss -0x1f8(%rbp), %xmm0
callq 0x21c0
movq %rax, -0x410(%rbp)
jmp 0x2d21c
movq -0x410(%rbp), %rdi
leaq 0xd7fc(%rip), %rsi      # 0x3aa26
callq 0x2250
movq %rax, -0x418(%rbp)
jmp 0x2d238
movq -0x418(%rbp), %rdi
movss -0x1fc(%rbp), %xmm0
callq 0x21c0
jmp 0x2d24e
movss -0x200(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x2d265
jp 0x2d265
jmp 0x2d307
movq 0x19d64(%rip), %rdi     # 0x46fd0
leaq 0xd7b8(%rip), %rsi      # 0x3aa2b
callq 0x2250
movq %rax, -0x420(%rbp)
jmp 0x2d281
movq -0x420(%rbp), %rdi
movss -0x1f4(%rbp), %xmm0
movss -0x200(%rbp), %xmm1
divss %xmm1, %xmm0
callq 0x21c0
movq %rax, -0x428(%rbp)
jmp 0x2d2aa
movq -0x428(%rbp), %rdi
leaq 0xd779(%rip), %rsi      # 0x3aa31
callq 0x2250
movq %rax, -0x430(%rbp)
jmp 0x2d2c6
movq -0x430(%rbp), %rdi
movss -0x1f8(%rbp), %xmm0
movss -0x200(%rbp), %xmm1
divss %xmm1, %xmm0
callq 0x21c0
jmp 0x2d2e8
jmp 0x2d307
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x2170
jmp 0x2da8d
jmp 0x2d309
leaq 0xc7cd(%rip), %rsi      # 0x39add
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x431(%rbp)
jmp 0x2d324
movb -0x431(%rbp), %al
testb $0x1, %al
jne 0x2d333
jmp 0x2d45a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0x8, %rdx
callq 0x2dbf0
movl %eax, -0x438(%rbp)
jmp 0x2d353
movl -0x438(%rbp), %eax
movl %eax, %eax
movq %rax, -0x208(%rbp)
movq 0x19c67(%rip), %rdi     # 0x46fd0
leaq 0xd77b(%rip), %rsi      # 0x3aaeb
callq 0x2250
movq %rax, -0x440(%rbp)
jmp 0x2d37e
movq -0x440(%rbp), %rdi
movq -0x208(%rbp), %rsi
callq 0x2080
jmp 0x2d393
cmpq $0x1, -0x208(%rbp)
jne 0x2d437
movq -0x1c8(%rbp), %rax
addq $0xe, %rax
cmpq -0x10(%rbp), %rax
ja 0x2d437
movq 0x19c13(%rip), %rdi     # 0x46fd0
leaq 0xd73d(%rip), %rsi      # 0x3ab01
callq 0x2250
movq %rax, -0x448(%rbp)
jmp 0x2d3d2
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0xc, %rdx
callq 0x2dc70
movl %eax, -0x44c(%rbp)
jmp 0x2d3f2
movq -0x448(%rbp), %rdi
movl -0x44c(%rbp), %eax
movl %eax, %eax
cvtsi2sd %rax, %xmm0
movsd 0xc98a(%rip), %xmm1     # 0x39d98
mulsd %xmm1, %xmm0
callq 0x2450
movq %rax, -0x458(%rbp)
jmp 0x2d420
movq -0x458(%rbp), %rdi
leaq 0xc702(%rip), %rsi      # 0x39b30
callq 0x2250
jmp 0x2d435
jmp 0x2d437
cmpq $0x0, -0x208(%rbp)
jne 0x2d458
movq 0x19b88(%rip), %rdi     # 0x46fd0
leaq 0xd6bc(%rip), %rsi      # 0x3ab0b
callq 0x2250
jmp 0x2d456
jmp 0x2d458
jmp 0x2d45a
leaq 0xc681(%rip), %rsi      # 0x39ae2
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x459(%rbp)
jmp 0x2d475
movb -0x459(%rbp), %al
testb $0x1, %al
jne 0x2d484
jmp 0x2d65f
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0x8, %rdx
callq 0x2dc70
movl %eax, -0x460(%rbp)
jmp 0x2d4a4
movl -0x460(%rbp), %eax
movl %eax, -0x20c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0xc, %rdx
callq 0x2dcc0
movss %xmm0, -0x464(%rbp)
jmp 0x2d4d2
movss -0x464(%rbp), %xmm0
movss %xmm0, -0x210(%rbp)
cmpl $0x4, -0x20c(%rbp)
jne 0x2d4f8
movl $0x7, %eax
movl %eax, -0x468(%rbp)
jmp 0x2d531
cmpl $0x1, -0x20c(%rbp)
jb 0x2d51b
cmpl $0x3, -0x20c(%rbp)
ja 0x2d51b
movl -0x20c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x46c(%rbp)
jmp 0x2d525
xorl %eax, %eax
movl %eax, -0x46c(%rbp)
jmp 0x2d525
movl -0x46c(%rbp), %eax
movl %eax, -0x468(%rbp)
movl -0x468(%rbp), %eax
movl %eax, -0x214(%rbp)
movq 0x19a8c(%rip), %rdi     # 0x46fd0
leaq 0xd40c(%rip), %rsi      # 0x3a957
callq 0x2250
movq %rax, -0x478(%rbp)
jmp 0x2d559
movq -0x478(%rbp), %rdi
movl -0x20c(%rbp), %esi
callq 0x2340
movq %rax, -0x480(%rbp)
jmp 0x2d574
movq -0x480(%rbp), %rdi
leaq 0xd593(%rip), %rsi      # 0x3ab15
callq 0x2250
movq %rax, -0x488(%rbp)
jmp 0x2d590
movq -0x488(%rbp), %rdi
movss -0x210(%rbp), %xmm0
callq 0x21c0
jmp 0x2d5a6
cmpl $0x0, -0x214(%rbp)
jle 0x2d65d
movq 0x19a16(%rip), %rdi     # 0x46fd0
leaq 0xd55e(%rip), %rsi      # 0x3ab1f
callq 0x2250
jmp 0x2d5c8
movl $0x0, -0x218(%rbp)
movl -0x218(%rbp), %eax
cmpl -0x214(%rbp), %eax
jge 0x2d65b
cmpl $0x0, -0x218(%rbp)
jle 0x2d600
movq 0x199e0(%rip), %rdi     # 0x46fd0
leaq 0xd387(%rip), %rsi      # 0x3a97e
callq 0x2250
jmp 0x2d5fe
jmp 0x2d600
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rax
movl -0x218(%rbp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
leaq 0x10(%rax,%rcx), %rdx
callq 0x2dcc0
movss %xmm0, -0x48c(%rbp)
jmp 0x2d62f
movss -0x48c(%rbp), %xmm0
movq 0x19992(%rip), %rdi     # 0x46fd0
callq 0x21c0
jmp 0x2d645
jmp 0x2d647
movl -0x218(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x218(%rbp)
jmp 0x2d5d2
jmp 0x2d65d
jmp 0x2d65f
leaq 0xd4c4(%rip), %rsi      # 0x3ab2a
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x48d(%rbp)
jmp 0x2d67a
movb -0x48d(%rbp), %al
testb $0x1, %al
jne 0x2d689
jmp 0x2d742
movq 0x19940(%rip), %rdi     # 0x46fd0
leaq 0xcee0(%rip), %rsi      # 0x3a577
callq 0x2250
jmp 0x2d69e
movq $0x8, -0x220(%rbp)
movq -0x220(%rbp), %rax
cmpq -0x1d0(%rbp), %rax
jae 0x2d740
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
movq -0x220(%rbp), %rax
addq %rax, %rdx
callq 0x2dcc0
movss %xmm0, -0x494(%rbp)
jmp 0x2d6e5
movss -0x494(%rbp), %xmm0
movss %xmm0, -0x224(%rbp)
movq 0x198d4(%rip), %rdi     # 0x46fd0
leaq 0xd6ea(%rip), %rsi      # 0x3aded
callq 0x2250
movq %rax, -0x4a0(%rbp)
jmp 0x2d711
movq -0x4a0(%rbp), %rdi
movss -0x224(%rbp), %xmm0
callq 0x21c0
jmp 0x2d727
jmp 0x2d729
movq -0x220(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x220(%rbp)
jmp 0x2d6a9
jmp 0x2d742
leaq 0xd3e6(%rip), %rsi      # 0x3ab2f
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x4a1(%rbp)
jmp 0x2d75d
movb -0x4a1(%rbp), %al
testb $0x1, %al
jne 0x2d76c
jmp 0x2d91c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0x8, %rdx
callq 0x2dc70
movl %eax, -0x4a8(%rbp)
jmp 0x2d78c
movl -0x4a8(%rbp), %eax
movl %eax, %eax
movq %rax, -0x230(%rbp)
movq 0x1982e(%rip), %rdi     # 0x46fd0
leaq 0xd38b(%rip), %rsi      # 0x3ab34
callq 0x2250
movq %rax, -0x4b0(%rbp)
jmp 0x2d7b7
movq -0x4b0(%rbp), %rdi
movq -0x230(%rbp), %rsi
callq 0x2080
movq %rax, -0x4b8(%rbp)
jmp 0x2d7d3
movq -0x4b8(%rbp), %rdi
leaq 0xd358(%rip), %rsi      # 0x3ab39
callq 0x2250
movq %rax, -0x4c0(%rbp)
jmp 0x2d7ef
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rdx
addq $0xa, %rdx
callq 0x2dc70
movl %eax, -0x4c4(%rbp)
jmp 0x2d80f
movl -0x4c4(%rbp), %esi
movq -0x4c0(%rbp), %rdi
callq 0x2340
jmp 0x2d823
movq $0x0, -0x238(%rbp)
movq -0x238(%rbp), %rax
cmpq -0x230(%rbp), %rax
jae 0x2d91a
movq 0x19787(%rip), %rdi     # 0x46fd0
leaq 0xd1dc(%rip), %rsi      # 0x3aa2c
callq 0x2250
movq %rax, -0x4d0(%rbp)
jmp 0x2d85e
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rax
movq -0x238(%rbp), %rcx
leaq 0xc(%rax,%rcx,8), %rdx
callq 0x2dd00
movss %xmm0, -0x4d4(%rbp)
jmp 0x2d888
movss -0x4d4(%rbp), %xmm0
movq -0x4d0(%rbp), %rdi
callq 0x21c0
movq %rax, -0x4e0(%rbp)
jmp 0x2d8a5
movq -0x4e0(%rbp), %rdi
leaq 0xd17e(%rip), %rsi      # 0x3aa31
callq 0x2250
movq %rax, -0x4e8(%rbp)
jmp 0x2d8c1
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1c8(%rbp), %rax
movq -0x238(%rbp), %rcx
leaq 0x10(%rax,%rcx,8), %rdx
callq 0x2dd00
movss %xmm0, -0x4ec(%rbp)
jmp 0x2d8eb
movss -0x4ec(%rbp), %xmm0
movq -0x4e8(%rbp), %rdi
callq 0x21c0
jmp 0x2d901
jmp 0x2d903
movq -0x238(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x238(%rbp)
jmp 0x2d82e
jmp 0x2d91c
leaq 0xd221(%rip), %rsi      # 0x3ab44
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x4ed(%rbp)
jmp 0x2d937
movb -0x4ed(%rbp), %al
testb $0x1, %al
jne 0x2d994
jmp 0x2d943
leaq 0xd1ff(%rip), %rsi      # 0x3ab49
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x4ee(%rbp)
jmp 0x2d95e
movb -0x4ee(%rbp), %al
testb $0x1, %al
jne 0x2d994
jmp 0x2d96a
leaq 0xd1dd(%rip), %rsi      # 0x3ab4e
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x4ef(%rbp)
jmp 0x2d985
movb -0x4ef(%rbp), %al
testb $0x1, %al
jne 0x2d994
jmp 0x2da55
movq 0x19635(%rip), %rdi     # 0x46fd0
leaq 0xd657(%rip), %rsi      # 0x3aff9
callq 0x2250
jmp 0x2d9a9
leaq 0xd199(%rip), %rsi      # 0x3ab49
leaq -0x1f0(%rbp), %rdi
callq 0x22220
movb %al, -0x4f0(%rbp)
jmp 0x2d9c4
movb -0x4f0(%rbp), %dl
movl $0x8, %eax
movl $0x1c, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
cltq
movq %rax, -0x240(%rbp)
movq -0x240(%rbp), %rax
cmpq -0x1d0(%rbp), %rax
jae 0x2da53
movq -0x8(%rbp), %rax
movq -0x1c8(%rbp), %rcx
addq -0x240(%rbp), %rcx
movb (%rax,%rcx), %al
movb %al, -0x241(%rbp)
movsbl -0x241(%rbp), %eax
cmpl $0x20, %eax
jl 0x2da3d
movsbl -0x241(%rbp), %eax
cmpl $0x7f, %eax
jge 0x2da3d
movsbl -0x241(%rbp), %esi
movq 0x1959c(%rip), %rdi     # 0x46fd0
callq 0x22f0
jmp 0x2da3b
jmp 0x2da3d
jmp 0x2da3f
movq -0x240(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x240(%rbp)
jmp 0x2d9e3
jmp 0x2da55
movq 0x19574(%rip), %rdi     # 0x46fd0
movq 0x1955d(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2da6a
leaq -0x1f0(%rbp), %rdi
callq 0x2170
movq -0x198(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x198(%rbp)
jmp 0x2cea6
jmp 0x2da98
addq $0x500, %rsp            # imm = 0x500
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x2430
movq %rax, %rdi
callq 0x19400
nopl (%rax)