// File: /workspace/github_c_makefile_star2_O0/Nico01[P]obj2asm/rec_coment.c
// Function: coment
void coment(size_t length)
{
  char            junk[3];
  char            *comment;
  char            text[80];
  char            temp[80];
  int             type;
  int             class;
  char            cksum;
  uchar           *prt_char;
  int             i;
  int             w;
  char            *p;
  LOCAL_VAR       *local_var;
  static word     scope_type = VT_VAR;
  static NODE_T **ppScope_tree;
  static SCOPE_T *pScope;
  static SCOPE_T **ppScope;
  static SCOPE_T *arg_scope;
  static SCOPE_T *loc_scope;

  type = get_byte();
  class = get_byte();
  length -= 3;
  if (length)
    comment = o_malloc(length);
  else
    comment = junk;
  get_str( length, comment);
  switch( class ) {
  case MSLANG:
       out_line( "", "; Compiler:", comment, "" );
       break;
  case MSMODL:
       processor_type_comment_occurred = TRUE;
       switch( comment[0] ) {
       case '3':
            out_line( "", ".386p", "", "" );
            out_line( "", ".387", "", "" );
            processor_mode = 386;
            break;
       case '2':
            out_line( "", ".286p", "", "" );
            out_line( "", ".287", "", "" );
            processor_mode = 286;
            break;
       case '1':
            out_line( "", ".186", "", "" );
            out_line( "", ".187", "", "" );
            processor_mode = 186;
            break;
       case '0':
            out_line( "", ".8086", "", "" );
            out_line( "", ".8087", "", "" );
            processor_mode = 8086;
            break;
       default:
            fmt_error( "Unknown Processor Type" );
            break;
       }
       switch( comment[1] ) {
       case 'c':
            out_line( "", "; Compact Memory Model", "", "" );
            break;
       case 's':
            out_line( "", "; Small Memory Model", "", "" );
            break;
       case 'm':
            out_line( "", "; Medium Memory Model", "", "" );
            break;
       case 'l':
            out_line( "", "; Large Memory Model", "", "" );
            break;
       case 'h':
            out_line( "", "; Huge Memory Model", "", "" );
            break;
       default:
            fmt_error( "Unknown Model" );
            break;
       }
       if ( comment[2] == 'O' )
           out_line( "", "; Optimizations Enabled", "", "" );
       break;
  case MSDSEG:
       out_line( "", "; Force DOSSEG linker option", "", "" );
       break;
  case MSILIB:
       out_line( "", "includelib", comment, "" );
       break;
  case MSEXTN:
       if (length) {
         if ( !strcmp( comment, "\001CV" ) ) {
             out_line( "", "; CodeView Enabled", "", "" );
         } else {
             fmt_error( "Unknown CodeView Option" );
         }
       }
       break;
  case UNKNWN:
       out_line( "", "; Linker - Pass two marker","","");
       break;
  case PATIME:
       if ( comment[0] != 16 )
         fmt_error( "Unknown Phoenix Time Stamp Prefix" );
       out_line( "", "; Time: ", &comment[1], "" );
       break;
  case PACMNT:
       out_line( "", ";", comment, "" );
       break;

/*
   Extensions to COMENT record defined by Borland.

   Note that these have been deduced using TDUMP (and lots of examples)
   and consequently may be completely wrong.
                                                                   [rh]
*/

  case TCXSYMTYPIX:
       sprintf(text, "; External symbol type index %02X", *comment, comment[1]&1);
       out_line(text,"","","");
       break;

  case TCPUBSYMTYP:
       sprintf(text, "; Public symbol type %02X, function return offset %02X", *comment, comment[1]&1);
       out_line(text,"","","");
       break;

  case TCSTRUCT:
       out_line("; typedef struct:","","","");
       i = 1;
       while (i<length) {
         out_newline();
         sprintf(text, "; \"%.*s\"",comment[i],&comment[i+1]);
         i+=comment[i]+1;
         sprintf(temp, "type %02X",comment[i]); /* ;* */
         i+=2;
         out_line(text,"","",temp);
       }
       break;

  case TCDEPFIL:
       if (length<=3) {
         out_line("; End of dependency list","","","");
       } else {
         sprintf(text,"%.*s",(int)comment[4],&comment[5]);
         out_line("; Dependent file: ",text,"","");
       }
       break;

  case TCENDSCP:
       pScope = o_malloc(sizeof(SCOPE_T));
       pScope->hex_offset = *(int*)comment;
       pScope = insert(pScope, end_scope_tree,TC scope_compare)->data;
       sprintf(text, "; End of scope at offset %04X",*(int*)comment);
       out_line(text,"","","");
       break;

  case TCBEGSCP:
       if (scope_type==VT_ARG)
         scope_type = VT_VAR;
       else
         scope_type = VT_ARG;
       if (scope_type==VT_ARG) {
         ppScope_tree = &arg_scope_tree;
         ppScope      = &arg_scope;
       } else {
         ppScope_tree = &loc_scope_tree;
         ppScope      = &loc_scope;
       }
       *ppScope = o_malloc(sizeof(SCOPE_T));
       (*ppScope)->hex_offset = *(int*)&comment[1];
       *ppScope = insert(*ppScope,*ppScope_tree, TC scope_compare)->data;
       sprintf(text,"; Begin scope segment %04X, offset %04X",(int)*comment,*(int*)&comment[1]);
       out_line(text,"","","");
       break;

  case TCLOCDEF:
       out_line("; Local definitions:","","","");
       i = 0;
       local_var = (*ppScope)->head = o_malloc(sizeof(LOCAL_VAR));
       while (i+1<length) {
         if (i!=0)
           local_var=local_var->next = o_malloc(sizeof(LOCAL_VAR));
         out_newline();
         sprintf(text,"; \"%.*s\"",comment[i],&comment[i+1]);
         sprintf(local_var->vname,"%.*s",comment[i],&comment[i+1]);
         i+=comment[i]+1;
         sprintf(temp,", type %02X, class %02X",comment[i],comment[i+1]&7);
         strcat(text,temp);
         *temp = 0;
         i++;
         local_var->class = comment[i]&7;
         switch (comment[i]&7) {
         case 7:
              sprintf(temp, " (instance of typed variable)");
              local_var->bInfo1 = comment[i+1];
              i++;
              break;
         case 6:                           /* local typedef ? */
              sprintf(temp, " (local typedef)");
              local_var->bInfo1 = comment[i+1];
              i++;
              break;
         case 4:                          /* register variable */
              i++;
              switch (comment[i]) {
              case 0x06: p = "si"; break;
              case 0x07: p = "di"; break;
              default  : p = "[unknown]"; break;
              }
              local_var->bInfo1 = comment[i];
              sprintf(temp," variable in register %s",p);
              i++;
              local_var->bInfo2 = comment[i];
              break;
         case 2:                        /* variable */
              local_var->bInfo1 = comment[i]; /* argument or local */
              sprintf(temp," (var) %s stored in ",comment[i]&8?"argument":"local");
              strcat(text,temp);
              switch (comment[i++]&7) {
              case 2 :                          /* stored on stack */
                   local_var->bInfo2 = (comment[i-1]&7)==2; /* stored on stack */
                   local_var->wInfo1 = *(int*)&comment[i]; /* address */
                   w = *(int*)&comment[i++];
                   if (w<0)
                     sprintf(temp,"[bp-%04X]",-w);
                   else
                     sprintf(temp,"[bp+%04X]",w);
                   break;
              default :
                   strcpy(temp,"[unknown]");
                   break;
              }
              i++;
              break;
         case 0:                  /* static function */
              sprintf(temp, " (static func) index %04X, word %04X", *(int*)&comment[i+1],*(int*)&comment[i+3]);
              i+=5;
         }
         strcat(text,temp);
         out_line(text,"","","");
       }
       break;

  case TCTYPDEF:
       sprintf(text, "; Type definition: index %02X ",*(int*)&comment[0]);
       i = 1;
       if (comment[1]) {
         sprintf(temp, "\"%.*s\", ",comment[1],&comment[2]); /* name */
         strcat(text,temp);
       }
       i+=comment[i]+1;
       sprintf(temp, "size %04X, TID %02X",*(int*)&comment[i],comment[i+2]);
       strcat(text,temp);
       out_line(text,"","","");
       break;

  case TCSOURCE :
       if (!*comment) {
         i = 1;
         sprintf(text, "; Source file %.*s",comment[1],&comment[2]);
         i+=comment[1]+1;
         sprint_date(temp,&comment[i]);
         out_line(text,temp,"","");
       } else {
         out_line("; Source file","","","");
       }
       break;

  case TCXLATOR :
       strcpy(text, "; Compiler: ");
       switch (*comment) {
       case 0x01: strcat(text,"'C'");       break;
       case 0x04: strcat(text,"Assembler"); break;
       default :  strcat(text,"[unknown]"); break;
       }
       sprintf(temp, " using %s model with underscores %s",
               models[comment[1]&7],comment[1]&8?"on":"off");
       strcat(text,temp);
       out_line(text,"","","");
       break;

  case TCENUM :
       i = 1;
       out_line("; ENUM member list","","","");
       while (i<length) {
         sprintf(text,"; %.*s",comment[i],&comment[i+1]);
         i+=comment[i]+1;
         sprintf(temp, " = %04X",*(word*)&comment[i]);
         i+=3;
         strcat(text,temp);
         out_line(text,"","","");
         out_newline();
       }
       break;

  case TCMANGLE:
       sprintf(temp, "; Mangled name \"%.*s\"",*comment, &comment[1]);
       out_line(temp,"","","");
       break;

  default:
       text[0] = '\0';
       prt_char = comment;
       while ( length ) {
           if ( isprint(*prt_char) ) {
               sprintf( temp, "%c", *prt_char );
           } else {
               sprintf( temp, "[%02X]", *prt_char );
           }
           strcat( text, temp );
           prt_char++;
           --length;
       }
       sprintf( temp, "; Unknown COMENT Record (Class %d): '%s'", class, text );
       out_line("", temp, "", "" );
       break;
  }
  out_newline();
  cksum = get_byte();
  cksum = cksum;
  type = type;
  if (comment!=junk)
    free(comment);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
callq 0x11ad0
movzbl %al, %eax
movl %eax, -0xc4(%rbp)
callq 0x11ad0
movzbl %al, %eax
movl %eax, -0xc8(%rbp)
movq -0x8(%rbp), %rax
subq $0x3, %rax
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x1363d
movq -0x8(%rbp), %rdi
callq 0x16e40
movq %rax, -0x18(%rbp)
jmp 0x13645
leaq -0xb(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x11be0
movl -0xc8(%rbp), %eax
movl %eax, -0xf4(%rbp)
testl %eax, %eax
je 0x137d4
jmp 0x13668
movl -0xf4(%rbp), %eax
subl $0x9d, %eax
je 0x137f3
jmp 0x1367b
movl -0xf4(%rbp), %eax
subl $0x9e, %eax
je 0x13a3b
jmp 0x1368e
movl -0xf4(%rbp), %eax
subl $0x9f, %eax
je 0x13a59
jmp 0x136a1
movl -0xf4(%rbp), %eax
subl $0xa1, %eax
je 0x13a78
jmp 0x136b4
movl -0xf4(%rbp), %eax
subl $0xa2, %eax
je 0x13ac2
jmp 0x136c7
movl -0xf4(%rbp), %eax
subl $0xdd, %eax
je 0x13ae0
jmp 0x136da
movl -0xf4(%rbp), %eax
subl $0xe0, %eax
je 0x13b3a
jmp 0x136ed
movl -0xf4(%rbp), %eax
subl $0xe1, %eax
je 0x13b79
jmp 0x13700
movl -0xf4(%rbp), %eax
subl $0xe2, %eax
je 0x13bb8
jmp 0x13713
movl -0xf4(%rbp), %eax
subl $0xe3, %eax
je 0x14355
jmp 0x13726
movl -0xf4(%rbp), %eax
subl $0xe4, %eax
je 0x145b4
jmp 0x13739
movl -0xf4(%rbp), %eax
subl $0xe5, %eax
je 0x13d79
jmp 0x1374c
movl -0xf4(%rbp), %eax
subl $0xe6, %eax
je 0x13e70
jmp 0x1375f
movl -0xf4(%rbp), %eax
subl $0xe7, %eax
je 0x13cfc
jmp 0x13772
movl -0xf4(%rbp), %eax
subl $0xe8, %eax
je 0x14436
jmp 0x13785
movl -0xf4(%rbp), %eax
subl $0xe9, %eax
je 0x13c99
jmp 0x13798
movl -0xf4(%rbp), %eax
subl $0xea, %eax
je 0x144d6
jmp 0x137ab
movl -0xf4(%rbp), %eax
subl $0xf8, %eax
je 0x146a0
jmp 0x137be
movl -0xf4(%rbp), %eax
subl $0xff, %eax
je 0x13b1b
jmp 0x146e2
movq -0x18(%rbp), %rdx
leaq 0x49e1(%rip), %rcx      # 0x181c0
leaq 0x4dee(%rip), %rsi      # 0x185d4
movq %rcx, %rdi
callq 0xe2d0
jmp 0x147ca
leaq 0xc8c6(%rip), %rax      # 0x200c0
movl $0x1, (%rax)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
addl $-0x30, %eax
movl %eax, %ecx
movq %rcx, -0x100(%rbp)
subl $0x3, %eax
ja 0x1393d
movq -0x100(%rbp), %rax
leaq 0x4d56(%rip), %rcx      # 0x18580
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x4986(%rip), %rcx      # 0x181c0
leaq 0x4d9f(%rip), %rsi      # 0x185e0
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0x496d(%rip), %rcx      # 0x181c0
leaq 0x4d8c(%rip), %rsi      # 0x185e6
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0xc848(%rip), %rax      # 0x200b4
movl $0x182, (%rax)          # imm = 0x182
jmp 0x13949
leaq 0x4942(%rip), %rcx      # 0x181c0
leaq 0x4668(%rip), %rsi      # 0x17eed
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0x4929(%rip), %rcx      # 0x181c0
leaq 0x4655(%rip), %rsi      # 0x17ef3
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0xc804(%rip), %rax      # 0x200b4
movl $0x11e, (%rax)          # imm = 0x11E
jmp 0x13949
leaq 0x48fe(%rip), %rcx      # 0x181c0
leaq 0x4d22(%rip), %rsi      # 0x185eb
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0x48e5(%rip), %rcx      # 0x181c0
leaq 0x4d0e(%rip), %rsi      # 0x185f0
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0xc7c0(%rip), %rax      # 0x200b4
movl $0xba, (%rax)
jmp 0x13949
leaq 0x48bd(%rip), %rcx      # 0x181c0
leaq 0x4ceb(%rip), %rsi      # 0x185f5
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0x48a4(%rip), %rcx      # 0x181c0
leaq 0x4cd8(%rip), %rsi      # 0x185fb
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
leaq 0xc77f(%rip), %rax      # 0x200b4
movl $0x1f96, (%rax)         # imm = 0x1F96
jmp 0x13949
leaq 0x4cbd(%rip), %rdi      # 0x18601
callq 0x16e00
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
addl $-0x63, %eax
movl %eax, %ecx
movq %rcx, -0x108(%rbp)
subl $0x10, %eax
ja 0x13a04
movq -0x108(%rbp), %rax
leaq 0x4c1c(%rip), %rcx      # 0x18590
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x483c(%rip), %rcx      # 0x181c0
leaq 0x4c8d(%rip), %rsi      # 0x18618
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13a10
leaq 0x4821(%rip), %rcx      # 0x181c0
leaq 0x4c89(%rip), %rsi      # 0x1862f
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13a10
leaq 0x4806(%rip), %rcx      # 0x181c0
leaq 0x4c83(%rip), %rsi      # 0x18644
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13a10
leaq 0x47eb(%rip), %rcx      # 0x181c0
leaq 0x4c7e(%rip), %rsi      # 0x1865a
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13a10
leaq 0x47d0(%rip), %rcx      # 0x181c0
leaq 0x4c78(%rip), %rsi      # 0x1866f
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13a10
leaq 0x4c78(%rip), %rdi      # 0x18683
callq 0x16e00
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x4f, %eax
jne 0x13a36
leaq 0x479c(%rip), %rcx      # 0x181c0
leaq 0x4c66(%rip), %rsi      # 0x18691
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
leaq 0x477e(%rip), %rcx      # 0x181c0
leaq 0x4c60(%rip), %rsi      # 0x186a9
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movq -0x18(%rbp), %rdx
leaq 0x475c(%rip), %rcx      # 0x181c0
leaq 0x4c5b(%rip), %rsi      # 0x186c6
movq %rcx, %rdi
callq 0xe2d0
jmp 0x147ca
cmpq $0x0, -0x8(%rbp)
je 0x13abd
movq -0x18(%rbp), %rdi
leaq 0x4c47(%rip), %rsi      # 0x186d1
callq 0x9100
cmpl $0x0, %eax
jne 0x13aaf
leaq 0x4725(%rip), %rcx      # 0x181c0
leaq 0x4c33(%rip), %rsi      # 0x186d5
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13abb
leaq 0x4c32(%rip), %rdi      # 0x186e8
callq 0x16e00
jmp 0x13abd
jmp 0x147ca
leaq 0x46f7(%rip), %rcx      # 0x181c0
leaq 0x4c30(%rip), %rsi      # 0x18700
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x10, %eax
je 0x13af8
leaq 0x4c28(%rip), %rdi      # 0x1871b
callq 0x16e00
movq -0x18(%rbp), %rdx
addq $0x1, %rdx
leaq 0x46b9(%rip), %rcx      # 0x181c0
leaq 0x4c2f(%rip), %rsi      # 0x1873d
movq %rcx, %rdi
callq 0xe2d0
jmp 0x147ca
movq -0x18(%rbp), %rdx
leaq 0x469a(%rip), %rcx      # 0x181c0
leaq 0x4441(%rip), %rsi      # 0x17f6e
movq %rcx, %rdi
callq 0xe2d0
jmp 0x147ca
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl (%rax), %edx
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %ecx
andl $0x1, %ecx
leaq 0x4bef(%rip), %rsi      # 0x18746
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq 0x4657(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl (%rax), %edx
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %ecx
andl $0x1, %ecx
leaq 0x4bd2(%rip), %rsi      # 0x18768
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq 0x4618(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
leaq 0x4be0(%rip), %rdi      # 0x1879f
leaq 0x45fa(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
movl $0x1, -0xdc(%rbp)
movslq -0xdc(%rbp), %rax
cmpq -0x8(%rbp), %rax
jae 0x13c94
callq 0xe280
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %edx
movq -0x18(%rbp), %rcx
movl -0xdc(%rbp), %eax
addl $0x1, %eax
cltq
addq %rax, %rcx
leaq 0x4b94(%rip), %rsi      # 0x187b1
movb $0x0, %al
callq 0x9190
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
addl -0xdc(%rbp), %eax
movl %eax, -0xdc(%rbp)
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %edx
leaq 0x4b5b(%rip), %rsi      # 0x187ba
movb $0x0, %al
callq 0x9190
movl -0xdc(%rbp), %eax
addl $0x2, %eax
movl %eax, -0xdc(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rcx
leaq 0x4539(%rip), %rdx      # 0x181c0
movq %rdx, %rsi
callq 0xe2d0
jmp 0x13bdb
jmp 0x147ca
cmpq $0x3, -0x8(%rbp)
ja 0x13cbb
leaq 0x4b1d(%rip), %rdi      # 0x187c4
leaq 0x4512(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13cf7
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl 0x4(%rax), %edx
movq -0x18(%rbp), %rcx
addq $0x5, %rcx
leaq 0x4c67(%rip), %rsi      # 0x1893d
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rsi
leaq 0x4af5(%rip), %rdi      # 0x187dd
leaq 0x44d1(%rip), %rcx      # 0x181c0
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movl $0x10, %edi
callq 0x16e40
movq %rax, 0xdabb(%rip)      # 0x217c8
movq -0x18(%rbp), %rax
movslq (%rax), %rcx
movq 0xdaad(%rip), %rax      # 0x217c8
movq %rcx, (%rax)
movq 0xdaa3(%rip), %rdi      # 0x217c8
leaq 0xc42c(%rip), %rax      # 0x20158
movq (%rax), %rsi
leaq -0x796(%rip), %rdx      # 0x135a0
callq 0x16820
movq 0x20(%rax), %rax
movq %rax, 0xda82(%rip)      # 0x217c8
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movl (%rax), %edx
leaq 0x4a99(%rip), %rsi      # 0x187f0
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq 0x4457(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
cmpl $0x1, 0xda38(%rip)      # 0x217b8
jne 0x13d8e
movl $0x0, 0xda2c(%rip)      # 0x217b8
jmp 0x13d98
movl $0x1, 0xda20(%rip)      # 0x217b8
cmpl $0x1, 0xda19(%rip)      # 0x217b8
jne 0x13dbf
leaq 0xc3a0(%rip), %rax      # 0x20148
movq %rax, 0xda11(%rip)      # 0x217c0
leaq 0xda22(%rip), %rax      # 0x217d8
movq %rax, 0xda13(%rip)      # 0x217d0
jmp 0x13ddb
leaq 0xc38a(%rip), %rax      # 0x20150
movq %rax, 0xd9f3(%rip)      # 0x217c0
leaq 0xda0c(%rip), %rax      # 0x217e0
movq %rax, 0xd9f5(%rip)      # 0x217d0
movl $0x10, %edi
callq 0x16e40
movq %rax, %rcx
movq 0xd9e1(%rip), %rax      # 0x217d0
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movslq 0x1(%rax), %rcx
movq 0xd9cf(%rip), %rax      # 0x217d0
movq (%rax), %rax
movq %rcx, (%rax)
movq 0xd9c2(%rip), %rax      # 0x217d0
movq (%rax), %rdi
movq 0xd9a8(%rip), %rax      # 0x217c0
movq (%rax), %rsi
leaq -0x882(%rip), %rdx      # 0x135a0
callq 0x16820
movq 0x20(%rax), %rcx
movq 0xd99e(%rip), %rax      # 0x217d0
movq %rcx, (%rax)
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl (%rax), %edx
movq -0x18(%rbp), %rax
movl 0x1(%rax), %ecx
leaq 0x49c0(%rip), %rsi      # 0x1880e
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq 0x4360(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
leaq 0x49bf(%rip), %rdi      # 0x18836
leaq 0x4342(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
movl $0x0, -0xdc(%rbp)
movl $0x38, %edi
callq 0x16e40
movq 0xd92c(%rip), %rcx      # 0x217d0
movq (%rcx), %rcx
movq %rax, 0x8(%rcx)
movq %rax, -0xf0(%rbp)
movl -0xdc(%rbp), %eax
addl $0x1, %eax
cltq
cmpq -0x8(%rbp), %rax
jae 0x14350
cmpl $0x0, -0xdc(%rbp)
je 0x13eec
movl $0x38, %edi
callq 0x16e40
movq -0xf0(%rbp), %rcx
movq %rax, 0x30(%rcx)
movq %rax, -0xf0(%rbp)
callq 0xe280
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %edx
leaq 0x1(%rax,%rcx), %rcx
leaq 0x48a5(%rip), %rsi      # 0x187b1
xorl %eax, %eax
movb %al, -0x121(%rbp)
leaq -0x70(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x9190
movb -0x121(%rbp), %al
movq -0xf0(%rbp), %rdi
addq $0xc, %rdi
movq -0x18(%rbp), %rcx
movslq -0xdc(%rbp), %rsi
movsbl (%rcx,%rsi), %edx
leaq 0x1(%rcx,%rsi), %rcx
leaq 0x49ed(%rip), %rsi      # 0x1893d
callq 0x9190
movb -0x121(%rbp), %al
movq -0x18(%rbp), %rdx
movslq -0xdc(%rbp), %rsi
movl %esi, %ecx
movsbl (%rdx,%rsi), %esi
movl %ecx, %edx
movl %esi, %ecx
leal 0x1(%rcx,%rdx), %ecx
movl %ecx, -0xdc(%rbp)
movq -0x18(%rbp), %rcx
movslq -0xdc(%rbp), %rsi
movsbl (%rcx,%rsi), %edx
movzbl 0x1(%rcx,%rsi), %ecx
andl $0x7, %ecx
leaq 0x48b3(%rip), %rsi      # 0x1884b
leaq -0xc0(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x9190
movq -0x120(%rbp), %rdi
movq -0x118(%rbp), %rsi
callq 0x9180
movb $0x0, -0xc0(%rbp)
movl -0xdc(%rbp), %eax
incl %eax
movl %eax, -0xdc(%rbp)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movzbl (%rax,%rcx), %ecx
andl $0x7, %ecx
movq -0xf0(%rbp), %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movzbl (%rax,%rcx), %eax
andl $0x7, %eax
movl %eax, %ecx
movq %rcx, -0x110(%rbp)
subl $0x7, %eax
ja 0x14325
movq -0x110(%rbp), %rax
leaq 0x4540(%rip), %rcx      # 0x18560
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0xc0(%rbp), %rdi
leaq 0x3ee3(%rip), %rsi      # 0x17f1a
movb $0x0, %al
callq 0x9190
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb (%rax,%rcx), %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x4(%rax)
movl -0xdc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xdc(%rbp)
jmp 0x14325
leaq -0xc0(%rbp), %rdi
leaq 0x3ebc(%rip), %rsi      # 0x17f39
movb $0x0, %al
callq 0x9190
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb (%rax,%rcx), %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x4(%rax)
movl -0xdc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xdc(%rbp)
jmp 0x14325
movl -0xdc(%rbp), %eax
incl %eax
movl %eax, -0xdc(%rbp)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
movl %eax, -0x128(%rbp)
subl $0x6, %eax
je 0x140ec
jmp 0x140df
movl -0x128(%rbp), %eax
subl $0x7, %eax
je 0x140fc
jmp 0x1410c
leaq 0x3094(%rip), %rax      # 0x17187
movq %rax, -0xe8(%rbp)
jmp 0x1411a
leaq 0x308b(%rip), %rax      # 0x1718e
movq %rax, -0xe8(%rbp)
jmp 0x1411a
leaq 0x3e37(%rip), %rax      # 0x17f4a
movq %rax, -0xe8(%rbp)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x4(%rax)
leaq -0xc0(%rbp), %rdi
movq -0xe8(%rbp), %rdx
leaq 0x3e0e(%rip), %rsi      # 0x17f55
movb $0x0, %al
callq 0x9190
movl -0xdc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xdc(%rbp)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x5(%rax)
jmp 0x14325
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x4(%rax)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movb %al, %cl
leaq 0x3dc6(%rip), %rax      # 0x17f70
leaq 0x3dc8(%rip), %rdx      # 0x17f79
testb $0x8, %cl
cmovneq %rax, %rdx
leaq 0x3dc1(%rip), %rsi      # 0x17f80
xorl %eax, %eax
leaq -0xc0(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x9190
movq -0x130(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x9180
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movl %ecx, %edx
incl %edx
movl %edx, -0xdc(%rbp)
movzbl (%rax,%rcx), %eax
andl $0x7, %eax
subl $0x2, %eax
jne 0x142b7
jmp 0x1420b
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsbl (%rax,%rcx), %eax
andl $0x7, %eax
cmpl $0x2, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movb %al, %cl
movq -0xf0(%rbp), %rax
movb %cl, 0x5(%rax)
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movl (%rax,%rcx), %ecx
movq -0xf0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0xdc(%rbp)
movslq %ecx, %rcx
movl (%rax,%rcx), %eax
movl %eax, -0xe0(%rbp)
cmpl $0x0, -0xe0(%rbp)
jge 0x1429a
leaq -0xc0(%rbp), %rdi
xorl %edx, %edx
subl -0xe0(%rbp), %edx
leaq 0x3d04(%rip), %rsi      # 0x17f95
movb $0x0, %al
callq 0x9190
jmp 0x142b5
leaq -0xc0(%rbp), %rdi
movl -0xe0(%rbp), %edx
leaq 0x3cf1(%rip), %rsi      # 0x17f9f
movb $0x0, %al
callq 0x9190
jmp 0x142ca
leaq -0xc0(%rbp), %rdi
leaq 0x3c85(%rip), %rsi      # 0x17f4a
callq 0x9060
movl -0xdc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xdc(%rbp)
jmp 0x14325
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx), %edx
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx), %ecx
leaq 0x4554(%rip), %rsi      # 0x18863
movb $0x0, %al
callq 0x9190
movl -0xdc(%rbp), %eax
addl $0x5, %eax
movl %eax, -0xdc(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
leaq -0x70(%rbp), %rdi
leaq 0x3e80(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x13eb2
jmp 0x147ca
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movl (%rax), %edx
leaq 0x4522(%rip), %rsi      # 0x18888
movb $0x0, %al
callq 0x9190
movl $0x1, -0xdc(%rbp)
movq -0x18(%rbp), %rax
cmpb $0x0, 0x1(%rax)
je 0x143b6
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %edx
movq -0x18(%rbp), %rcx
addq $0x2, %rcx
leaq 0x4508(%rip), %rsi      # 0x188a7
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
addl -0xdc(%rbp), %eax
movl %eax, -0xdc(%rbp)
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movl (%rax,%rcx), %edx
movq -0x18(%rbp), %rax
movl -0xdc(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movsbl (%rax,%rcx), %ecx
leaq 0x44ac(%rip), %rsi      # 0x188b0
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
leaq -0x70(%rbp), %rdi
leaq 0x3d9a(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
jne 0x144b8
movl $0x1, -0xdc(%rbp)
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %edx
movq -0x18(%rbp), %rcx
addq $0x2, %rcx
leaq 0x4460(%rip), %rsi      # 0x188c4
movb $0x0, %al
callq 0x9190
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
addl $0x1, %eax
addl -0xdc(%rbp), %eax
movl %eax, -0xdc(%rbp)
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rsi
movslq -0xdc(%rbp), %rax
addq %rax, %rsi
callq 0x14820
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
leaq 0x3d12(%rip), %rcx      # 0x181c0
movq %rcx, %rdx
callq 0xe2d0
jmp 0x144d1
leaq 0x4418(%rip), %rdi      # 0x188d7
leaq 0x3cfa(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
leaq 0x4408(%rip), %rsi      # 0x188e5
leaq -0x70(%rbp), %rdi
callq 0x9060
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x134(%rbp)
subl $0x1, %eax
je 0x14507
jmp 0x144fa
movl -0x134(%rbp), %eax
subl $0x4, %eax
je 0x14519
jmp 0x1452b
leaq -0x70(%rbp), %rdi
leaq 0x43e0(%rip), %rsi      # 0x188f2
callq 0x9180
jmp 0x1453b
leaq -0x70(%rbp), %rdi
leaq 0x43d2(%rip), %rsi      # 0x188f6
callq 0x9180
jmp 0x1453b
leaq -0x70(%rbp), %rdi
leaq 0x3a14(%rip), %rsi      # 0x17f4a
callq 0x9180
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
andl $0x7, %eax
movslq %eax, %rcx
leaq 0xb9c9(%rip), %rax      # 0x1ff20
movq (%rax,%rcx,8), %rdx
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %esi
andl $0x8, %esi
leaq 0x43b7(%rip), %rcx      # 0x18924
leaq 0x4189(%rip), %rax      # 0x186fd
cmpl $0x0, %esi
cmovneq %rax, %rcx
leaq 0x437e(%rip), %rsi      # 0x18900
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
leaq -0x70(%rbp), %rdi
leaq 0x3c1c(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movl $0x1, -0xdc(%rbp)
leaq 0x4363(%rip), %rdi      # 0x18928
leaq 0x3bf4(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
movslq -0xdc(%rbp), %rax
cmpq -0x8(%rbp), %rax
jae 0x1469b
leaq -0x70(%rbp), %rdi
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %edx
movq -0x18(%rbp), %rcx
movl -0xdc(%rbp), %eax
addl $0x1, %eax
cltq
addq %rax, %rcx
leaq 0x4327(%rip), %rsi      # 0x1893b
movb $0x0, %al
callq 0x9190
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
addl -0xdc(%rbp), %eax
movl %eax, -0xdc(%rbp)
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movslq -0xdc(%rbp), %rcx
movl (%rax,%rcx), %edx
leaq 0x42ed(%rip), %rsi      # 0x18942
movb $0x0, %al
callq 0x9190
movl -0xdc(%rbp), %eax
addl $0x3, %eax
movl %eax, -0xdc(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
leaq -0x70(%rbp), %rdi
leaq 0x3b3a(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
callq 0xe280
jmp 0x145d7
jmp 0x147ca
leaq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movsbl (%rax), %edx
movq -0x18(%rbp), %rcx
addq $0x1, %rcx
leaq 0x428d(%rip), %rsi      # 0x1894a
movb $0x0, %al
callq 0x9190
leaq -0xc0(%rbp), %rdi
leaq 0x3aee(%rip), %rcx      # 0x181c0
movq %rcx, %rsi
movq %rcx, %rdx
callq 0xe2d0
jmp 0x147ca
movb $0x0, -0x70(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xd8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x14792
callq 0x91c0
movq (%rax), %rax
movq -0xd8(%rbp), %rcx
movzbl (%rcx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x14740
leaq -0xc0(%rbp), %rdi
movq -0xd8(%rbp), %rax
movzbl (%rax), %edx
leaq 0x3952(%rip), %rsi      # 0x18089
movb $0x0, %al
callq 0x9190
jmp 0x1475f
leaq -0xc0(%rbp), %rdi
movq -0xd8(%rbp), %rax
movzbl (%rax), %edx
leaq 0x4208(%rip), %rsi      # 0x18960
movb $0x0, %al
callq 0x9190
leaq -0x70(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x9180
movq -0xd8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xd8(%rbp)
movq -0x8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x146f1
leaq -0xc0(%rbp), %rdi
movl -0xc8(%rbp), %edx
leaq -0x70(%rbp), %rcx
leaq 0x41bd(%rip), %rsi      # 0x18967
movb $0x0, %al
callq 0x9190
leaq -0xc0(%rbp), %rsi
leaq 0x3a01(%rip), %rcx      # 0x181c0
movq %rcx, %rdi
movq %rcx, %rdx
callq 0xe2d0
callq 0xe280
callq 0x11ad0
movb %al, -0xc9(%rbp)
movb -0xc9(%rbp), %al
movb %al, -0xc9(%rbp)
movl -0xc4(%rbp), %eax
movl %eax, -0xc4(%rbp)
movq -0x18(%rbp), %rax
leaq -0xb(%rbp), %rcx
cmpq %rcx, %rax
je 0x14808
movq -0x18(%rbp), %rdi
callq 0x9030
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nopw %cs:(%rax,%rax)