// File: /workspace/github_c_makefile_star2_O3/canboat[P]canboat/n2kd/gps_ais.c
// Function: nmea0183AIVDM
extern void nmea0183AIVDM(StringBuffer *msg183, int source, const char *msg)
{
  long int msgid, pgn;
  char     jstr[10];
  char     channel      = 'A';
  int      src          = 'I' - 'A'; // Should give source AI in sentence, i.e. Mobile AIS station
  char    *aisSource[2] = {"VDM", "VDO"};
  enum
  {
    VDM,
    VDO
  };
  int       aisTalkerId = VDM;
  aisVector aisPayload;
  aisPayload.pos = 0;

  if (!getJSONValue(msg, "pgn", jstr, sizeof(jstr)))
    return;
  pgn = atoi(jstr);

  // Source information
  switch (aisEnum(msg, "AIS Transceiver information"))
  {
    case 0: // Default
      channel     = 'A';
      aisTalkerId = VDM;
      break;
    case 1:
      channel     = 'B';
      aisTalkerId = VDM;
      break;
    case 2:
      channel     = 'A';
      aisTalkerId = VDO;
      break;
    case 3:
      channel     = 'B';
      aisTalkerId = VDO;
      break;
    case 4:              // Own information, how to code?
      aisTalkerId = VDO; // It is at least from own vessel
      break;
    default: // Last case supposedly not used
      return;
  }

  // AIS payload bit vector
  msgid = aisEnum(msg, "Message ID");
  switch (msgid)
  {
    case 1:
    case 2:
    case 3: // PGN 129038 "Class A position report"
      // Common navigation block
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(aisEnum(msg, "Nav Status"), 4, &aisPayload);
      addAisInt(aisFloat(msg, "Rate of Turn"), 8, &aisPayload);
      addAisInt(aisFloat(msg, "SOG"), 10, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisFloat(msg, "COG"), 12, &aisPayload);
      addAisInt(aisFloat(msg, "Heading"), 9, &aisPayload);
      addAisInt(aisEnum(msg, "Time Stamp"), 6, &aisPayload);
      addAisInt(aisEnum(msg, "Special Maneuver Indicator"), 2, &aisPayload);
      addAisInt(0, 3, &aisPayload); /* Spare */
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisInteger(msg, "Communication State"), 19, &aisPayload);
      break;
    case 4: // PGN 129793 "AIS UTC and Date Report"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(aisDate(msg), 23, &aisPayload);
      addAisInt(aisTime(msg), 17, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisEnum(msg, "GNSS type"), 4, &aisPayload);
      addAisInt(0, 10, &aisPayload); // Spare
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisInteger(msg, "Communication State"), 19, &aisPayload);
      break;
    case 5: // PGN 129794 "AIS Class A Static and Voyage Related Data"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(aisEnum(msg, "AIS version indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "IMO number"), 30, &aisPayload);
      addAisString(aisString(msg, "Callsign"), 42, &aisPayload);
      addAisString(aisString(msg, "Name"), 120, &aisPayload);
      addAisInt(aisEnum(msg, "Type of ship"), 8, &aisPayload);
      addAisInt(aisShipDimensions(msg, true), 30, &aisPayload);
      addAisInt(aisEnum(msg, "GNSS type"), 4, &aisPayload);
      addAisInt(aisETA(msg), 20, &aisPayload);
      addAisInt(aisFloat(msg, "Draft"), 8, &aisPayload);
      addAisString(aisString(msg, "Destination"), 120, &aisPayload);
      addAisInt(aisEnum(msg, "DTE"), 1, &aisPayload);
      addAisInt(0, 1, &aisPayload); // Spare
      break;
    case 9: // PGN 129798 "AIS SAR Aircraft Position Report"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(aisFloat(msg, "Altitude"), 12, &aisPayload);
      addAisInt((aisFloat(msg, "SOG") + 5) / 10, 10, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisFloat(msg, "COG"), 12, &aisPayload);
      addAisInt(aisInteger(msg, "Time Stamp"), 6, &aisPayload);
      addAisInt(0, 8, &aisPayload); /* Regional Reserved */
      addAisInt(aisEnum(msg, "DTE"), 1, &aisPayload);
      addAisInt(0, 3, &aisPayload);                        // Spare
      addAisInt(aisEnum(msg, "AIS mode"), 1, &aisPayload); // Missing in PGN?
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "AIS communication state"), 1, &aisPayload); // Not in PGN?, defaults to 0
      addAisInt(aisInteger(msg, "Communication State"), 19, &aisPayload);
      break;
    case 12: // PGN 129801 "AIS Addressed Safety Related Message"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "Source ID"), 30, &aisPayload);
      addAisInt(aisInteger(msg, "Sequence Number"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "Destination ID"), 30, &aisPayload);
      addAisInt(aisInteger(msg, "Retransmit flag"), 1, &aisPayload);
      addAisInt(0, 1, &aisPayload); // Spare
      addAisLongString(msg, "Safety Related Text", 156, true, &aisPayload);
      break;
    case 14: // PGN 129802 "AIS Safety Related Broadcast Message"
      /* Note: The AIS sentence transmitts up to 161 characters of text in the message
         The incomplete PGN in pgns.json has a text field of 288 bits, corresponding
         to a maximum of 36 characters.
      */
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "Source ID"), 30, &aisPayload);
      addAisInt(0, 2, &aisPayload); // Spare
      addAisLongString(msg, "Safety Related Text", 161, true, &aisPayload);
      break;
    case 18: // PGN 129039 "AIS Class B Position Report"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(0, 8, &aisPayload); /* Regional Reserved */
      addAisInt(aisFloat(msg, "SOG"), 10, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisFloat(msg, "COG"), 12, &aisPayload);
      addAisInt(aisFloat(msg, "Heading"), 9, &aisPayload);
      addAisInt(aisEnum(msg, "Time Stamp"), 6, &aisPayload);
      addAisInt(0, 2, &aisPayload); /* Regional Reserved */
      addAisInt(aisEnum(msg, "Unit type"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "Integrated Display"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "DSC"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "Band"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "Can handle Msg 22"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "AIS mode"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "AIS communication state"), 1, &aisPayload);
      /* If "AIS communication state" is CS (1), then the following
         "Communication State" shall have its default value. Provided the
         PGN is properly encoded this should work even with no test on
         "AIS communication state" */
      addAisInt(aisInteger(msg, "Communication State"), 19, &aisPayload);
      break;
    case 19: // PGN 129040 "AIS Class B Extended Position Report"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(0, 8, &aisPayload); /* Regional Reserved */
      addAisInt(aisFloat(msg, "SOG"), 10, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisFloat(msg, "COG"), 12, &aisPayload);
      addAisInt(aisFloat(msg, "True Heading"), 9, &aisPayload);
      addAisInt(aisEnum(msg, "Time Stamp"), 6, &aisPayload);
      addAisInt(0, 4, &aisPayload); /* Regional Reserved */
      addAisString(aisString(msg, "Name"), 120, &aisPayload);
      addAisInt(aisEnum(msg, "Type of ship"), 8, &aisPayload);
      addAisInt(aisShipDimensions(msg, true), 30, &aisPayload);
      addAisInt(aisEnum(msg, "GNSS type"), 4, &aisPayload);
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "DTE"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "AIS mode"), 1, &aisPayload);
      addAisInt(0, 4, &aisPayload); // Spare
      break;
    case 21: // PGN 129041 "AIS Aids to Navigation (AtoN) Report"
    {
      int   len;
      char *ename;

      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      addAisInt(aisEnum(msg, "AtoN Type"), 5, &aisPayload);
      addAisString(aisAtoNName(msg, false, &len), 120, &aisPayload);
      addAisInt(aisEnum(msg, "Position Accuracy"), 1, &aisPayload);
      addAisInt(aisFloat(msg, "Longitude"), 28, &aisPayload);
      addAisInt(aisFloat(msg, "Latitude"), 27, &aisPayload);
      addAisInt(aisShipDimensions(msg, false), 30, &aisPayload);
      addAisInt(aisEnum(msg, "GNSS type"), 4, &aisPayload);
      addAisInt(aisEnum(msg, "Time Stamp"), 6, &aisPayload);
      addAisInt(aisEnum(msg, "Off Position Indicator"), 1, &aisPayload);
      addAisInt(0, 8, &aisPayload); /* Regional Reserved */
      addAisInt(aisEnum(msg, "RAIM"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "Virtual AtoN Flag"), 1, &aisPayload);
      addAisInt(aisEnum(msg, "Assigned Mode Flag"), 1, &aisPayload);
      addAisInt(0, 1, &aisPayload); // Spare
      ename = aisAtoNName(msg, true, &len);
      addAisString(ename, len, &aisPayload);
    }
    break;
    case 24: // PGN 129809 "AIS Class B "CS" Static Data Report, Part A"
             // PGN 129810 "AIS Class B "CS" Static Data Report, Part B"
      addAisInt(msgid, 6, &aisPayload);
      addAisInt(aisEnum(msg, "Repeat Indicator"), 2, &aisPayload);
      addAisInt(aisInteger(msg, "User ID"), 30, &aisPayload);
      // Part A or B?
      switch (pgn)
      {
        case 129809:                    // Part A
          addAisInt(0, 2, &aisPayload); // Part number
          addAisString(aisString(msg, "Name"), 120, &aisPayload);
          addAisInt(0, 8, &aisPayload); // Spare
          break;
        case 129810:                    // Part B
          addAisInt(1, 2, &aisPayload); // Part number
          addAisInt(aisEnum(msg, "Type of ship"), 8, &aisPayload);
          addAisString(aisString(msg, "Vendor ID"), 42, &aisPayload);
          addAisString(aisString(msg, "Callsign"), 42, &aisPayload);
          addAisInt(aisShipDimensions(msg, true), 30, &aisPayload);
          addAisInt(aisInteger(msg, "Mothership User ID"), 30, &aisPayload);
          addAisInt(0, 6, &aisPayload); // Spare
          break;
        default:
          return;
      }
      break;
    default:
      return;
  }

  // Partition, encode and send nmea0183 ais sentences
  aisToNmea0183(msg183, 256 + src, aisSource[aisTalkerId], channel, &aisPayload);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %rdx, %r14
movq %rdi, 0x18(%rsp)
movl $0x0, 0x154(%rsp)
leaq 0x4d3b(%rip), %rsi      # 0x9a94
leaq 0x66(%rsp), %rdx
movl $0xa, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
je 0x5ffd
leaq 0x66(%rsp), %rdi
callq 0x22f0
movl %eax, %ebp
leaq 0x54d1(%rip), %rsi      # 0xa257
movq %r14, %rdi
callq 0x6107
cmpl $0x4, %eax
ja 0x5ffd
movl %eax, %eax
leaq 0x5360(%rip), %rcx      # 0xa100
movq (%rcx,%rax,8), %rbx
leaq 0x537d(%rip), %rcx      # 0xa128
movl (%rcx,%rax,4), %eax
movq %rax, 0x10(%rsp)
leaq 0x54b9(%rip), %rsi      # 0xa273
movq %r14, %rdi
callq 0x6107
leal -0x1(%rax), %ecx
cmpl $0x17, %ecx
ja 0x5ffd
leaq 0x52cb(%rip), %rdx      # 0xa0a0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movl %eax, %edi
leaq 0x70(%rsp), %r15
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5485(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x564e(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5458(%rip), %rsi      # 0xa28f
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x4, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5444(%rip), %rsi      # 0xa29a
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52c7(%rip), %rsi      # 0xa13c
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xa, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5413(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52ef(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52c7(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x524f(%rip), %rsi      # 0xa140
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xc, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x54f3(%rip), %rsi      # 0xa403
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x9, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x538a(%rip), %rsi      # 0xa2b9
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5376(%rip), %rsi      # 0xa2c4
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x3, %esi
jmp 0x5759
leaq 0x70(%rsp), %r15
movl $0x15, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52ee(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x54b7(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x543d(%rip), %rsi      # 0xa40b
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x5, %esi
movq %r15, %rdx
callq 0x6155
xorl %eax, %eax
movq %rax, 0x20a53ac(%rip)   # 0x20aa39b
movq %rax, 0x20a539e(%rip)   # 0x20aa394
leaq 0x20a5383(%rip), %rdx   # 0x20aa380
leaq 0x5241(%rip), %rsi      # 0xa245
movl $0x23, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
jne 0x501c
movb $0x0, 0x20a5364(%rip)   # 0x20aa380
xorl %eax, %eax
movb %al, 0x20a537e(%rip)    # 0x20aa3a2
leaq 0x20a5355(%rip), %rdi   # 0x20aa380
movb %al, 0x20a5363(%rip)    # 0x20aa394
leaq 0x70(%rsp), %r15
movl $0x78, %esi
movq %r15, %rdx
callq 0x6462
leaq 0x525d(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5139(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5111(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
movq %r14, %rdi
xorl %esi, %esi
callq 0x6552
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5237(%rip), %rsi      # 0xa2f8
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x4, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x51d9(%rip), %rsi      # 0xa2b9
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5316(%rip), %rsi      # 0xa415
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x51b2(%rip), %rsi      # 0xa2df
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52e0(%rip), %rsi      # 0xa42c
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x52d3(%rip), %rsi      # 0xa43e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x20(%rsp), %r12
movq %r14, %rdi
movl $0x1, %esi
movq %r12, %rdx
callq 0x4c99
movl (%r12), %esi
movq %rax, %rdi
movq %r15, %rdx
callq 0x6462
jmp 0x5e27
leaq 0x70(%rsp), %r15
movl $0x9, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x50a5(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x526e(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5138(%rip), %rsi      # 0xa34f
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xc, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f06(%rip), %rsi      # 0xa13c
movq %r14, %rdi
callq 0x62bf
addq $0x5, %rax
movabsq $0x6666666666666667, %rcx # imm = 0x6666666666666667
imulq %rcx
movq %rdx, %rdi
shrq $0x3f, %rdi
sarq $0x2, %rdx
addq %rdx, %rdi
movl $0xa, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5036(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f12(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4eea(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4e72(%rip), %rsi      # 0xa140
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xc, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4fcc(%rip), %rsi      # 0xa2b9
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x5030(%rip), %rsi      # 0xa34b
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x3, %esi
jmp 0x5da3
leaq 0x70(%rsp), %r15
movl $0x18, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f21(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x50ea(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
cmpl $0x1fb12, %ebp          # imm = 0x1FB12
je 0x600f
cmpl $0x1fb11, %ebp          # imm = 0x1FB11
jne 0x5ffd
leaq 0x70(%rsp), %rdx
xorl %edi, %edi
movl $0x2, %esi
callq 0x6155
leaq 0x4e86(%rip), %rsi      # 0xa24a
leaq 0x20a4fe5(%rip), %rdx   # 0x20aa3b0
movl $0x15, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
jne 0x53e3
movb $0x0, 0x20a4fcd(%rip)   # 0x20aa3b0
leaq 0x20a4fc6(%rip), %rdi   # 0x20aa3b0
leaq 0x70(%rsp), %r14
movl $0x78, %esi
movq %r14, %rdx
callq 0x6462
xorl %edi, %edi
movl $0x8, %esi
movq %r14, %rdx
jmp 0x5e22
leaq 0x70(%rsp), %r15
movl $0xc, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4e55(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f31(%rip), %rsi      # 0xa379
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f1c(%rip), %rsi      # 0xa383
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4f0d(%rip), %rsi      # 0xa393
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4efd(%rip), %rsi      # 0xa3a2
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
movq %r14, %rdi
movl $0x9c, %esi
jmp 0x5542
leaq 0x70(%rsp), %r15
movl $0xe, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4d8a(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4e66(%rip), %rsi      # 0xa379
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
movq %r14, %rdi
movl $0xa1, %esi
movq %r15, %rdx
callq 0x6684
jmp 0x5e27
leaq 0x70(%rsp), %r15
movl $0x4, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4d11(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4eda(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
xorl %r15d, %r15d
movl %r15d, 0xc(%rsp)
movl %r15d, 0x8(%rsp)
movl %r15d, 0x4(%rsp)
leaq 0x501f(%rip), %rsi      # 0xa5dc
leaq 0x20(%rsp), %rdx
movl $0xb, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
je 0x5631
leaq 0x5010(%rip), %rsi      # 0xa5ea
leaq 0x20(%rsp), %rdi
leaq 0xc(%rsp), %r12
leaq 0x8(%rsp), %r13
leaq 0x4(%rsp), %rbp
movq %r12, %rdx
movq %r13, %rcx
movq %rbp, %r8
xorl %eax, %eax
callq 0x2240
movl (%r12), %eax
movl %eax, %ecx
shll $0x9, %ecx
movl (%r13), %edx
movl %edx, %esi
shll $0x5, %esi
movl (%rbp), %edi
cmpl $0x20, %edi
cmovael %r15d, %edi
cmpl $0x2710, %eax           # imm = 0x2710
cmovael %r15d, %ecx
cmpl $0xd, %edx
cmovael %r15d, %esi
addl %ecx, %esi
addl %edi, %esi
movq %rsi, %r15
leaq 0x70(%rsp), %rdx
movq %r15, %rdi
movl $0x17, %esi
callq 0x6155
leaq 0x4fad(%rip), %rsi      # 0xa5f7
leaq 0x20(%rsp), %rdx
movl $0x9, %ecx
movq %r14, %rdi
callq 0x7c22
movl $0x18f3c, %edi          # imm = 0x18F3C
testb %al, %al
je 0x56c4
movzbl 0x20(%rsp), %eax
leal (%rax,%rax,4), %eax
movzbl 0x21(%rsp), %ecx
leal (%rcx,%rax,2), %eax
movl $0xfffffdf0, %ecx       # imm = 0xFFFFFDF0
addl %ecx, %eax
movzbl 0x23(%rsp), %edx
leal (%rdx,%rdx,4), %edx
movzbl 0x24(%rsp), %esi
leal (%rsi,%rdx,2), %edi
addl %ecx, %edi
movzbl 0x26(%rsp), %edx
leal (%rdx,%rdx,4), %edx
movzbl 0x27(%rsp), %esi
leal (%rsi,%rdx,2), %edx
addl %ecx, %edx
cmpl $0x18, %eax
movl $0x18, %ecx
cmovbl %eax, %ecx
movl $0x3c, %eax
cmpl %eax, %edi
cmovael %eax, %edi
cmpl %eax, %edx
cmovael %eax, %edx
shll $0xc, %ecx
shll $0x6, %edi
orl %ecx, %edi
orl %edx, %edi
leaq 0x70(%rsp), %r15
movl $0x11, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4bca(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4aa6(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4a7e(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4bbe(%rip), %rsi      # 0xa2f8
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x4, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0xa, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4b77(%rip), %rsi      # 0xa2df
jmp 0x5df0
leaq 0x70(%rsp), %r15
movl $0x5, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4af3(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4cbc(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4b39(%rip), %rsi      # 0xa302
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4b30(%rip), %rsi      # 0xa318
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4b1c(%rip), %rsi      # 0xa323
leaq 0x20a4ba2(%rip), %rdx   # 0x20aa3b0
movl $0x15, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
jne 0x5826
movb $0x0, 0x20a4b8a(%rip)   # 0x20aa3b0
leaq 0x20a4b83(%rip), %r15   # 0x20aa3b0
leaq 0x70(%rsp), %rdx
movq %r15, %rdi
movl $0x2a, %esi
callq 0x6462
leaq 0x4a04(%rip), %rsi      # 0xa24a
movl $0x15, %ecx
movq %r14, %rdi
movq %r15, %rdx
callq 0x7c22
testb %al, %al
jne 0x5861
movb $0x0, 0x20a4b4f(%rip)   # 0x20aa3b0
leaq 0x20a4b48(%rip), %r15   # 0x20aa3b0
leaq 0x70(%rsp), %r12
movq %r15, %rdi
movl $0x78, %esi
movq %r12, %rdx
callq 0x6462
leaq 0x4aa8(%rip), %rsi      # 0xa32c
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x8, %esi
movq %r12, %rdx
callq 0x6155
movq %r14, %rdi
movl $0x1, %esi
callq 0x6552
movq %rax, %rdi
movl $0x1e, %esi
movq %r12, %rdx
callq 0x6155
leaq 0x4a38(%rip), %rsi      # 0xa2f8
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x4, %esi
movq %r12, %rdx
callq 0x6155
movq %r14, %rdi
callq 0x4baf
movq %rax, %rdi
movl $0x14, %esi
movq %r12, %rdx
callq 0x6155
leaq 0x4a42(%rip), %rsi      # 0xa339
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x8, %esi
movq %r12, %rdx
callq 0x6155
leaq 0x4a29(%rip), %rsi      # 0xa33f
movl $0x15, %ecx
movq %r14, %rdi
movq %r15, %rdx
callq 0x7c22
testb %al, %al
jne 0x5931
movb $0x0, 0x20a4a7f(%rip)   # 0x20aa3b0
leaq 0x20a4a78(%rip), %rdi   # 0x20aa3b0
leaq 0x70(%rsp), %r15
movl $0x78, %esi
movq %r15, %rdx
callq 0x6462
leaq 0x49fa(%rip), %rsi      # 0xa34b
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x1, %esi
jmp 0x5e1f
leaq 0x70(%rsp), %r15
movl $0x13, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x48eb(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4ab4(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x475c(%rip), %rsi      # 0xa13c
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xa, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x48a8(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4784(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x475c(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x46e4(%rip), %rsi      # 0xa140
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xc, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4983(%rip), %rsi      # 0xa3fe
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x9, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x481f(%rip), %rsi      # 0xa2b9
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x4, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4782(%rip), %rsi      # 0xa24a
leaq 0x20a48e1(%rip), %rdx   # 0x20aa3b0
movl $0x15, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
jne 0x5ae7
movb $0x0, 0x20a48c9(%rip)   # 0x20aa3b0
leaq 0x20a48c2(%rip), %rdi   # 0x20aa3b0
leaq 0x70(%rsp), %r15
movl $0x78, %esi
movq %r15, %rdx
callq 0x6462
leaq 0x4825(%rip), %rsi      # 0xa32c
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
movq %r14, %rdi
movl $0x1, %esi
callq 0x6552
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x47b5(%rip), %rsi      # 0xa2f8
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x4, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x477d(%rip), %rsi      # 0xa2df
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x47ca(%rip), %rsi      # 0xa34b
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x47b8(%rip), %rsi      # 0xa358
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x4, %esi
jmp 0x5e1f
leaq 0x70(%rsp), %r15
movl $0x12, %edi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x469c(%rip), %rsi      # 0xa27e
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4865(%rip), %rsi      # 0xa466
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x450d(%rip), %rsi      # 0xa13c
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xa, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4659(%rip), %rsi      # 0xa2a7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4535(%rip), %rsi      # 0xa1a2
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1c, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x450d(%rip), %rsi      # 0xa199
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x1b, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4495(%rip), %rsi      # 0xa140
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0xc, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4739(%rip), %rsi      # 0xa403
movq %r14, %rdi
callq 0x62bf
movq %rax, %rdi
movl $0x9, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x45d0(%rip), %rsi      # 0xa2b9
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x6, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x46af(%rip), %rsi      # 0xa3c6
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x469a(%rip), %rsi      # 0xa3d0
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x468e(%rip), %rsi      # 0xa3e3
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4673(%rip), %rsi      # 0xa3e7
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4659(%rip), %rsi      # 0xa3ec
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x45a6(%rip), %rsi      # 0xa358
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x450e(%rip), %rsi      # 0xa2df
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4571(%rip), %rsi      # 0xa361
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x1, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x44d5(%rip), %rsi      # 0xa2e4
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x13, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x7b22(%rip), %rax      # 0xd950
movq (%rax,%rbx,8), %r14
movslq 0x154(%rsp), %rax
imulq $-0x49f49f49, %rax, %r15 # imm = 0xB60B60B7
shrq $0x20, %r15
addl %eax, %r15d
movl %r15d, %ecx
shrl $0x1f, %ecx
sarl $0x8, %r15d
addl %ecx, %r15d
imull $0xa4fa4fa5, %eax, %eax # imm = 0xA4FA4FA5
addl $0x2d82d80, %eax        # imm = 0x2D82D80
rorl $0x3, %eax
cmpl $0xb60b61, %eax         # imm = 0xB60B61
sbbl $-0x1, %r15d
cmpl $0x2, %r15d
jl 0x5ea1
movzbl 0x84c7(%rip), %eax      # 0xe340
movl %eax, %ecx
addl $-0x2f, %ecx
movl $0xcccccccd, %edx       # imm = 0xCCCCCCCD
imulq %rcx, %rdx
shrq $0x23, %rdx
addl %edx, %edx
leal (%rdx,%rdx,4), %ecx
negl %ecx
addl %ecx, %eax
addl $-0x2f, %eax
orb $0x30, %al
movb %al, 0x84a1(%rip)       # 0xe340
jmp 0x5eab
cmpl $0x1, %r15d
jne 0x5ffd
xorl %ebx, %ebx
movl $0x1, %r12d
leaq 0x70(%rsp), %rbp
xorl %r13d, %r13d
movl 0x154(%rsp), %edi
xorl %esi, %esi
cmpl %r13d, %edi
jl 0x5f69
leal 0x7(%r13), %eax
testl %r13d, %r13d
cmovnsl %r13d, %eax
movl %edi, %edx
subl %r13d, %edx
jle 0x5f6d
movl %eax, %r8d
sarl $0x3, %r8d
andl $-0x8, %eax
movl %r13d, %ecx
subl %eax, %ecx
movb $0x6, %al
subb %dl, %al
cmpl $0x6, %edx
movzbl %al, %eax
movzbl %bl, %ebx
cmovll %eax, %ebx
movslq %r8d, %rdx
movzbl 0x70(%rsp,%rdx), %r8d
shll %cl, %r8d
shrb $0x2, %r8b
movzbl %bl, %eax
movl %eax, %r9d
subl %ecx, %r9d
cmpl $-0x3, %r9d
jg 0x5f33
movzbl 0x1(%rdx,%rbp), %r9d
movb $0xa, %dl
subb %cl, %dl
movl %edx, %ecx
shrl %cl, %r9d
orb %r9b, %r8b
movl $0xff, %edx
movl %eax, %ecx
shll %cl, %edx
andb %r8b, %dl
subl %eax, %r13d
addl $0x6, %r13d
cmpb $0x28, %dl
setae %al
shlb $0x3, %al
addb %dl, %al
addb $0x30, %al
movb %al, 0x20(%rsp,%rsi)
incq %rsi
cmpq $0x3c, %rsi
jne 0x5ec4
movl $0x3c, %esi
movl %esi, %esi
jmp 0x5f72
movb $0x0, 0x20(%rsp,%rsi)
movb $0x0, 0x20(%rsp,%rsi)
movzbl %bl, %r10d
cmpl $0x2, %r15d
jl 0x5fb6
movzbl 0x83b7(%rip), %r11d     # 0xe340
movq 0x18(%rsp), %rdi
movl $0x108, %esi            # imm = 0x108
leaq 0x466b(%rip), %rdx      # 0xa605
movq %r14, %rcx
movl %r15d, %r8d
movl %r12d, %r9d
xorl %eax, %eax
pushq %r10
leaq 0x28(%rsp), %r10
pushq %r10
pushq 0x20(%rsp)
pushq %r11
jmp 0x5fe3
subq $0x8, %rsp
movq 0x20(%rsp), %rdi
movl $0x108, %esi            # imm = 0x108
leaq 0x464f(%rip), %rdx      # 0xa61a
movq %r14, %rcx
movl %r15d, %r8d
movl %r12d, %r9d
xorl %eax, %eax
pushq %r10
leaq 0x30(%rsp), %r10
pushq %r10
pushq 0x28(%rsp)
callq 0x6728
addq $0x20, %rsp
leal 0x1(%r12), %eax
cmpl %r15d, %r12d
movl %eax, %r12d
jne 0x5ebb
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x70(%rsp), %r15
movl $0x1, %edi
movl $0x2, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x42ff(%rip), %rsi      # 0xa32c
movq %r14, %rdi
callq 0x6107
movslq %eax, %rdi
movl $0x8, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4405(%rip), %rsi      # 0xa451
leaq 0x20a435d(%rip), %rdx   # 0x20aa3b0
movl $0x15, %ecx
movq %r14, %rdi
callq 0x7c22
testb %al, %al
jne 0x606b
movb $0x0, 0x20a4345(%rip)   # 0x20aa3b0
leaq 0x20a433e(%rip), %r15   # 0x20aa3b0
leaq 0x70(%rsp), %rdx
movq %r15, %rdi
movl $0x2a, %esi
callq 0x6462
leaq 0x4298(%rip), %rsi      # 0xa323
movl $0x15, %ecx
movq %r14, %rdi
movq %r15, %rdx
callq 0x7c22
testb %al, %al
jne 0x60a6
movb $0x0, 0x20a430a(%rip)   # 0x20aa3b0
leaq 0x20a4303(%rip), %rdi   # 0x20aa3b0
leaq 0x70(%rsp), %r15
movl $0x2a, %esi
movq %r15, %rdx
callq 0x6462
movq %r14, %rdi
movl $0x1, %esi
callq 0x6552
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
leaq 0x4378(%rip), %rsi      # 0xa45b
movq %r14, %rdi
callq 0x61f2
movq %rax, %rdi
movl $0x1e, %esi
movq %r15, %rdx
callq 0x6155
xorl %edi, %edi
movl $0x6, %esi
jmp 0x5e1f