// File: jkingan[P]ladyheather/heathgps.cpp
// Function: get_z12_message()
void get_z12_message()
{
u08 c;
static int bin_len = 0;
static int z12_bin_len = 0;
static int bin_msg = 0;
static unsigned bin_sum = 0;
static unsigned odd=0, even=0, ck=0;
static unsigned msg_sum = 0;
static unsigned dben_low, dben_high;
static int mpc_msg = 0;

   // This routine buffers up an incoming NMEA message.  When the end of the
   // message is seen, the message is parsed and decoded with decode_nmea_msg()


   if(SERIAL_DATA_AVAILABLE(RCVR_PORT) == 0) {
      check_com_timer(RCVR_PORT);
if(in_mpc == 0) {
   get_norcvr_message();
   reset_com_timer(RCVR_PORT);
}
      return;
   }
   else {
      reset_com_timer(RCVR_PORT);
   }

   c = get_com_char();
   if(com[RCVR_PORT].rcv_error) {      // parity/framing/overrun errors
      com[RCVR_PORT].rcv_error = 0;
//!!!!!qqqq    goto rst_msg;
   }

   if(bin_len) {
      if(bin_len == (-2)) {  // DBEN payload length
         dben_low = c;
         ++bin_len;
      }
      else if(bin_len == (-1)) {
         dben_high = c;
         bin_len = (dben_high << 8) | dben_low;
         bin_sum = 0;
      }
      else if(tsip_wptr < MAX_TSIP) {   // add char to the message buffer
         tsip_buf[tsip_wptr++] = c;

         nmea_vfy_cksum ^= c;       // XOR cksum on MPC message

         if(bin_len & 1) odd = c;   // 16-bit sum on other messages
         else            even = c;

         if(bin_len <= 2) {
            if(bin_len == 1) {
               msg_sum = (even * 256) + odd;
            }
         }
         else if(bin_len & 1) {
            ck = ((unsigned) odd);
            ck += (((unsigned) even) << 8);
            bin_sum += ck;
            bin_sum &= 0xFFFF;
         }
      }
      else {
         tsip_error |= OVFL_ERROR;
         goto rst_msg;
      }
      ++bin_msg;
      --bin_len;
      if(bin_len <= 0) goto bin_end;
   }
   else if(tsip_sync == 0) {    // syncing to start of message, search for a '$'
      if(c == '$') {
         tsip_sync = 1;
         get_sync_time();
      }
      tsip_wptr = 0;
      tsip_rptr = 0;
      bin_len = 0;
//    z12_bin_len = 0;
      bin_msg = 0;
      bin_sum = 0;
      msg_sum = 0;
      nmea_vfy_cksum = 0;  // the calculated message checksum
      nmea_msg_cksum = 0;  // the checksum in the message
      return;
   }
   else if(tsip_sync == 1) { // '$' has been seen, now build the message
      if((c == 0x0D) || (c == 0x0A)) goto nmea_end;  // message has no checksum

      if(c == '*') tsip_sync = 2;  // message checksum follows
      else if(tsip_wptr < MAX_TSIP) {   // add char to the message buffer
         nmea_vfy_cksum ^= c;
         tsip_buf[tsip_wptr++] = c;
         tsip_buf[tsip_wptr] = 0;
         if(tsip_wptr == 10) {  // see if Z12 binary data follows
            mpc_msg = 0;
            if     (strstr((char *) tsip_buf, "PBN,")) bin_len = 56;
            else if(strstr((char *) tsip_buf, "ALM,")) bin_len = 70;
            else if(strstr((char *) tsip_buf, "SNV,")) bin_len = 132;
            else if(strstr((char *) tsip_buf, "EPB,")) bin_len = 122;
            else if(strstr((char *) tsip_buf, "RPC,")) bin_len = (-2);  // !!!! has variable sized messages, we ignore this
            else if(strstr((char *) tsip_buf, "MPC,")) {
               bin_len = 95;  // !!!! was 97
               nmea_vfy_cksum = 0x00;
               mpc_msg = 1;
            }
            z12_bin_len = bin_len;
         }
      }
      else {
         tsip_error |= OVFL_ERROR;
         goto rst_msg;
      }
   }
   else if(tsip_sync == 2) {  // getting message checksum chars
      if((c == 0x0D) || (c == 0x0A)) goto nmea_end;

      if     ((c >= '0') && (c <= '9')) nmea_msg_cksum = (nmea_msg_cksum << 4) | (c-'0');
      else if((c >= 'A') && (c <= 'F')) nmea_msg_cksum = (nmea_msg_cksum << 4) | ((c-'A')+10);
      else goto rst_msg;
   }
   else if(tsip_sync == 3) {  // end of message
      nmea_end:
if(debug_file) fprintf(debug_file, "At nmea end:(%s)\n", tsip_buf);
      if((tsip_sync == 2) && (nmea_vfy_cksum != nmea_msg_cksum)) { // checksum error
         tsip_error |= CKSUM_ERROR;
         goto rst_msg;
      }

      bin_end:
      if(bin_msg) {
         if(mpc_msg && (nmea_vfy_cksum == 0)) decode_nmea_msg();
         else if(msg_sum == bin_sum) decode_nmea_msg();
         else if(debug_file) {
            sprintf(out, "Message checksum error: nmea:%02X  msg:%04X vfy:%04X", nmea_vfy_cksum, msg_sum,bin_sum);
            fprintf(debug_file, "%s\n", out);
in_mpc = 0;
//strcpy(debug_text, out);
         }
      }
      else {
         decode_nmea_msg();      // message checksum matches, process the message
      }
      packet_end = 1;

      if(debug_file) {
         if(bin_msg) {
            tsip_buf[10] = 0;
            fprintf(debug_file, "RCVD Z12:%-11.11s (binary len:%d)  bin_sum:%04X  msg_sum:%04X\n", tsip_buf,z12_bin_len, bin_sum, msg_sum);
         }
         else {
            fprintf(debug_file, "RCVD Z12:%s  (ascii len:%d)\n", tsip_buf, z12_bin_len);
         }
         if(tsip_buf[0] == 'G') ;
         else if(tsip_buf[0] == 'P') ;
         else {
            fprintf(debug_file, "BAD MSG %d: msglen:%d  wptr:%d len:%d\n", bin_msg, z12_bin_len, tsip_wptr, bin_len);
         }
      }

      tsip_wptr = 0;     // prepare for next message
      tsip_sync = 0;
      bin_len = 0;
//    z12_bin_len = 0;
      bin_msg = 0;
      bin_sum = 0;
      msg_sum = 0;
      venus_nmea = 0;
   }
   else {     // should never happen, prepare for next message
      rst_msg:
      tsip_wptr = 0;
      tsip_sync = 0;
      bin_len = 0;
//    z12_bin_len = 0;
      bin_msg = 0;
      bin_sum = 0;
      msg_sum = 0;
      nmea_vfy_cksum = nmea_msg_cksum = 0; // init received message checksum
      venus_nmea = 0;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movl $0xa, %edi
callq 0xcad0
cmpl $0x0, %eax
jne 0xb608e
movl $0xa, %edi
callq 0x2b610
cmpl $0x0, 0x31af84(%rip)    # 0x3d0ffc
jne 0xb6089
callq 0xb2630
movl $0xa, %edi
callq 0x2bd30
jmp 0xb6836
movl $0xa, %edi
callq 0x2bd30
callq 0x79fc0
movb %al, -0x1(%rbp)
leaq 0x2b7419(%rip), %rax    # 0x36d4c0
cmpb $0x0, 0x17a12(%rax)
je 0xb60be
leaq 0x2b7409(%rip), %rax    # 0x36d4c0
movb $0x0, 0x17a12(%rax)
cmpl $0x0, 0x31af3b(%rip)    # 0x3d1000
je 0xb6273
cmpl $-0x2, 0x31af2e(%rip)   # 0x3d1000
jne 0xb60f2
movzbl -0x1(%rbp), %eax
movl %eax, 0x31af42(%rip)    # 0x3d1020
movl 0x31af1c(%rip), %eax    # 0x3d1000
addl $0x1, %eax
movl %eax, 0x31af13(%rip)    # 0x3d1000
jmp 0xb6242
cmpl $-0x1, 0x31af07(%rip)   # 0x3d1000
jne 0xb6129
movzbl -0x1(%rbp), %eax
movl %eax, 0x31af1f(%rip)    # 0x3d1024
movl 0x31af19(%rip), %eax    # 0x3d1024
shll $0x8, %eax
orl 0x31af0c(%rip), %eax    # 0x3d1020
movl %eax, 0x31aee6(%rip)    # 0x3d1000
movl $0x0, 0x31aee8(%rip)    # 0x3d100c
jmp 0xb6240
leaq 0x2e1302(%rip), %rax    # 0x397432
movzwl (%rax), %eax
cmpl $0x1000, %eax           # imm = 0x1000
jge 0xb6221
movb -0x1(%rbp), %dl
leaq 0x2e12ea(%rip), %rax    # 0x397432
movw (%rax), %ax
movw %ax, %si
addw $0x1, %si
leaq 0x2e12d9(%rip), %rcx    # 0x397432
movw %si, (%rcx)
movzwl %ax, %eax
movl %eax, %ecx
leaq 0x2e02c8(%rip), %rax    # 0x396430
movb %dl, (%rax,%rcx)
movzbl -0x1(%rbp), %ecx
movzbl 0x315b1e(%rip), %eax    # 0x3cbc94
xorl %ecx, %eax
movb %al, 0x315b16(%rip)     # 0x3cbc94
movl 0x31ae7c(%rip), %eax    # 0x3d1000
andl $0x1, %eax
cmpl $0x0, %eax
je 0xb6198
movzbl -0x1(%rbp), %eax
movl %eax, 0x31ae7a(%rip)    # 0x3d1010
jmp 0xb61a2
movzbl -0x1(%rbp), %eax
movl %eax, 0x31ae72(%rip)    # 0x3d1014
cmpl $0x2, 0x31ae57(%rip)    # 0x3d1000
jg 0xb61cb
cmpl $0x1, 0x31ae4e(%rip)    # 0x3d1000
jne 0xb61c9
movl 0x31ae5a(%rip), %eax    # 0x3d1014
shll $0x8, %eax
addl 0x31ae4d(%rip), %eax    # 0x3d1010
movl %eax, 0x31ae53(%rip)    # 0x3d101c
jmp 0xb621f
movl 0x31ae2f(%rip), %eax    # 0x3d1000
andl $0x1, %eax
cmpl $0x0, %eax
je 0xb621d
movl 0x31ae31(%rip), %eax    # 0x3d1010
movl %eax, 0x31ae33(%rip)    # 0x3d1018
movl 0x31ae29(%rip), %eax    # 0x3d1014
shll $0x8, %eax
addl 0x31ae24(%rip), %eax    # 0x3d1018
movl %eax, 0x31ae1e(%rip)    # 0x3d1018
movl 0x31ae18(%rip), %eax    # 0x3d1018
addl 0x31ae06(%rip), %eax    # 0x3d100c
movl %eax, 0x31ae00(%rip)    # 0x3d100c
movl 0x31adfa(%rip), %eax    # 0x3d100c
andl $0xffff, %eax           # imm = 0xFFFF
movl %eax, 0x31adef(%rip)    # 0x3d100c
jmp 0xb621f
jmp 0xb623e
leaq 0x1e7f28(%rip), %rax    # 0x29e150
movl (%rax), %ecx
orl $0x8000, %ecx           # imm = 0x8000
leaq 0x1e7f19(%rip), %rax    # 0x29e150
movl %ecx, (%rax)
jmp 0xb67d6
jmp 0xb6240
jmp 0xb6242
movl 0x31adc0(%rip), %eax    # 0x3d1008
addl $0x1, %eax
movl %eax, 0x31adb7(%rip)    # 0x3d1008
movl 0x31ada9(%rip), %eax    # 0x3d1000
addl $-0x1, %eax
movl %eax, 0x31ada0(%rip)    # 0x3d1000
cmpl $0x0, 0x31ad99(%rip)    # 0x3d1000
jg 0xb626e
jmp 0xb65fb
jmp 0xb6836
leaq 0x2e11bc(%rip), %rax    # 0x397436
movzwl (%rax), %eax
cmpl $0x0, %eax
jne 0xb62ef
movzbl -0x1(%rbp), %eax
cmpl $0x24, %eax
jne 0xb629c
leaq 0x2e11a4(%rip), %rax    # 0x397436
movw $0x1, (%rax)
callq 0x7a1d0
leaq 0x2e118f(%rip), %rax    # 0x397432
movw $0x0, (%rax)
leaq 0x2e1185(%rip), %rax    # 0x397434
movw $0x0, (%rax)
movl $0x0, 0x31ad42(%rip)    # 0x3d1000
movl $0x0, 0x31ad40(%rip)    # 0x3d1008
movl $0x0, 0x31ad3a(%rip)    # 0x3d100c
movl $0x0, 0x31ad40(%rip)    # 0x3d101c
movb $0x0, 0x3159b1(%rip)    # 0x3cbc94
movb $0x0, 0x3159ab(%rip)    # 0x3cbc95
jmp 0xb6836
leaq 0x2e1140(%rip), %rax    # 0x397436
movzwl (%rax), %eax
cmpl $0x1, %eax
jne 0xb64ee
movzbl -0x1(%rbp), %eax
cmpl $0xd, %eax
je 0xb6314
movzbl -0x1(%rbp), %eax
cmpl $0xa, %eax
jne 0xb6319
jmp 0xb658f
movzbl -0x1(%rbp), %eax
cmpl $0x2a, %eax
jne 0xb6333
leaq 0x2e110d(%rip), %rax    # 0x397436
movw $0x2, (%rax)
jmp 0xb64e9
leaq 0x2e10f8(%rip), %rax    # 0x397432
movzwl (%rax), %eax
cmpl $0x1000, %eax           # imm = 0x1000
jge 0xb64ca
movzbl -0x1(%rbp), %ecx
movzbl 0x315941(%rip), %eax    # 0x3cbc94
xorl %ecx, %eax
movb %al, 0x315939(%rip)     # 0x3cbc94
movb -0x1(%rbp), %dl
leaq 0x2e10cd(%rip), %rax    # 0x397432
movw (%rax), %ax
movw %ax, %si
addw $0x1, %si
leaq 0x2e10bc(%rip), %rcx    # 0x397432
movw %si, (%rcx)
movzwl %ax, %eax
movl %eax, %ecx
leaq 0x2e00ab(%rip), %rax    # 0x396430
movb %dl, (%rax,%rcx)
leaq 0x2e10a3(%rip), %rax    # 0x397432
movzwl (%rax), %eax
movl %eax, %ecx
leaq 0x2e0095(%rip), %rax    # 0x396430
movb $0x0, (%rax,%rcx)
leaq 0x2e108c(%rip), %rax    # 0x397432
movzwl (%rax), %eax
cmpl $0xa, %eax
jne 0xb64c8
movl $0x0, 0x31ac6c(%rip)    # 0x3d1028
leaq 0x2e006d(%rip), %rdi    # 0x396430
leaq 0xcfdee(%rip), %rsi     # 0x1861b8
callq 0x9090
cmpq $0x0, %rax
je 0xb63e4
movl $0x38, 0x31ac21(%rip)   # 0x3d1000
jmp 0xb64bc
leaq 0x2e0045(%rip), %rdi    # 0x396430
leaq 0xcfdcb(%rip), %rsi     # 0x1861bd
callq 0x9090
cmpq $0x0, %rax
je 0xb640c
movl $0x46, 0x31abf9(%rip)   # 0x3d1000
jmp 0xb64ba
leaq 0x2e001d(%rip), %rdi    # 0x396430
leaq 0xcfda8(%rip), %rsi     # 0x1861c2
callq 0x9090
cmpq $0x0, %rax
je 0xb6434
movl $0x84, 0x31abd1(%rip)   # 0x3d1000
jmp 0xb64b8
leaq 0x2dfff5(%rip), %rdi    # 0x396430
leaq 0xcfd85(%rip), %rsi     # 0x1861c7
callq 0x9090
cmpq $0x0, %rax
je 0xb6459
movl $0x7a, 0x31aba9(%rip)   # 0x3d1000
jmp 0xb64b6
leaq 0x2dffd0(%rip), %rdi    # 0x396430
leaq 0xcfd65(%rip), %rsi     # 0x1861cc
callq 0x9090
cmpq $0x0, %rax
je 0xb647e
movl $0xfffffffe, 0x31ab84(%rip) # imm = 0xFFFFFFFE
jmp 0xb64b4
leaq 0x2dffab(%rip), %rdi    # 0x396430
leaq 0xcfd45(%rip), %rsi     # 0x1861d1
callq 0x9090
cmpq $0x0, %rax
je 0xb64b2
movl $0x5f, 0x31ab5f(%rip)   # 0x3d1000
movb $0x0, 0x3157ec(%rip)    # 0x3cbc94
movl $0x1, 0x31ab76(%rip)    # 0x3d1028
jmp 0xb64b4
jmp 0xb64b6
jmp 0xb64b8
jmp 0xb64ba
jmp 0xb64bc
movl 0x31ab3e(%rip), %eax    # 0x3d1000
movl %eax, 0x31ab3c(%rip)    # 0x3d1004
jmp 0xb64e7
leaq 0x1e7c7f(%rip), %rax    # 0x29e150
movl (%rax), %ecx
orl $0x8000, %ecx           # imm = 0x8000
leaq 0x1e7c70(%rip), %rax    # 0x29e150
movl %ecx, (%rax)
jmp 0xb67d6
jmp 0xb64e9
jmp 0xb6832
leaq 0x2e0f41(%rip), %rax    # 0x397436
movzwl (%rax), %eax
cmpl $0x2, %eax
jne 0xb657a
movzbl -0x1(%rbp), %eax
cmpl $0xd, %eax
je 0xb650f
movzbl -0x1(%rbp), %eax
cmpl $0xa, %eax
jne 0xb6511
jmp 0xb658f
movzbl -0x1(%rbp), %eax
cmpl $0x30, %eax
jl 0xb653e
movzbl -0x1(%rbp), %eax
cmpl $0x39, %eax
jg 0xb653e
movzbl 0x31576b(%rip), %eax    # 0x3cbc95
shll $0x4, %eax
movzbl -0x1(%rbp), %ecx
subl $0x30, %ecx
orl %ecx, %eax
movb %al, 0x315759(%rip)     # 0x3cbc95
jmp 0xb6575
movzbl -0x1(%rbp), %eax
cmpl $0x41, %eax
jl 0xb656e
movzbl -0x1(%rbp), %eax
cmpl $0x46, %eax
jg 0xb656e
movzbl 0x31573e(%rip), %eax    # 0x3cbc95
shll $0x4, %eax
movzbl -0x1(%rbp), %ecx
subl $0x41, %ecx
addl $0xa, %ecx
orl %ecx, %eax
movb %al, 0x315729(%rip)     # 0x3cbc95
jmp 0xb6573
jmp 0xb67d6
jmp 0xb6575
jmp 0xb6830
leaq 0x2e0eb5(%rip), %rax    # 0x397436
movzwl (%rax), %eax
cmpl $0x3, %eax
jne 0xb67d4
jmp 0xb658f
leaq 0x1e6fda(%rip), %rax    # 0x29d570
cmpq $0x0, (%rax)
je 0xb65bb
leaq 0x1e6fcd(%rip), %rax    # 0x29d570
movq (%rax), %rdi
leaq 0xcfc29(%rip), %rsi     # 0x1861d6
leaq 0x2dfe7c(%rip), %rdx    # 0x396430
movb $0x0, %al
callq 0x9550
leaq 0x2e0e74(%rip), %rax    # 0x397436
movzwl (%rax), %eax
cmpl $0x2, %eax
jne 0xb65f9
movzbl 0x3156c3(%rip), %eax    # 0x3cbc94
movzbl 0x3156bd(%rip), %ecx    # 0x3cbc95
cmpl %ecx, %eax
je 0xb65f9
leaq 0x1e7b6d(%rip), %rax    # 0x29e150
movl (%rax), %ecx
orl $0x4000, %ecx           # imm = 0x4000
leaq 0x1e7b5e(%rip), %rax    # 0x29e150
movl %ecx, (%rax)
jmp 0xb67d6
jmp 0xb65fb
cmpl $0x0, 0x31aa06(%rip)    # 0x3d1008
je 0xb669e
cmpl $0x0, 0x31aa19(%rip)    # 0x3d1028
je 0xb6624
movzbl 0x31567c(%rip), %eax    # 0x3cbc94
cmpl $0x0, %eax
jne 0xb6624
callq 0xb6840
jmp 0xb669c
movl 0x31a9f2(%rip), %eax    # 0x3d101c
cmpl 0x31a9dc(%rip), %eax    # 0x3d100c
jne 0xb6639
callq 0xb6840
jmp 0xb669a
leaq 0x1e6f30(%rip), %rax    # 0x29d570
cmpq $0x0, (%rax)
je 0xb6698
movzbl 0x315647(%rip), %edx    # 0x3cbc94
movl 0x31a9c9(%rip), %ecx    # 0x3d101c
movl 0x31a9b2(%rip), %r8d    # 0x3d100c
leaq 0x2e4d9f(%rip), %rdi    # 0x39b400
leaq 0xcfb80(%rip), %rsi     # 0x1861e8
movb $0x0, %al
callq 0x9060
leaq 0x1e6efa(%rip), %rax    # 0x29d570
movq (%rax), %rdi
leaq 0xd277f(%rip), %rsi     # 0x188dff
leaq 0x2e4d79(%rip), %rdx    # 0x39b400
movb $0x0, %al
callq 0x9550
movl $0x0, 0x31a964(%rip)    # 0x3d0ffc
jmp 0xb669a
jmp 0xb669c
jmp 0xb66a3
callq 0xb6840
movl $0x1, 0x3147c7(%rip)    # 0x3cae74
leaq 0x1e6ebc(%rip), %rax    # 0x29d570
cmpq $0x0, (%rax)
je 0xb6788
cmpl $0x0, 0x31a943(%rip)    # 0x3d1008
je 0xb6707
leaq 0x2dfd62(%rip), %rax    # 0x396430
movb $0x0, 0xa(%rax)
leaq 0x1e6e97(%rip), %rax    # 0x29d570
movq (%rax), %rdi
movl 0x31a922(%rip), %ecx    # 0x3d1004
movl 0x31a923(%rip), %r8d    # 0x3d100c
movl 0x31a92c(%rip), %r9d    # 0x3d101c
leaq 0xcfb26(%rip), %rsi     # 0x18621d
leaq 0x2dfd32(%rip), %rdx    # 0x396430
movb $0x0, %al
callq 0x9550
jmp 0xb672c
leaq 0x1e6e62(%rip), %rax    # 0x29d570
movq (%rax), %rdi
movl 0x31a8ed(%rip), %ecx    # 0x3d1004
leaq 0xcfb3e(%rip), %rsi     # 0x18625c
leaq 0x2dfd0b(%rip), %rdx    # 0x396430
movb $0x0, %al
callq 0x9550
leaq 0x2dfcfd(%rip), %rax    # 0x396430
movzbl (%rax), %eax
cmpl $0x47, %eax
jne 0xb673d
jmp 0xb6786
leaq 0x2dfcec(%rip), %rax    # 0x396430
movzbl (%rax), %eax
cmpl $0x50, %eax
jne 0xb674e
jmp 0xb6784
leaq 0x1e6e1b(%rip), %rax    # 0x29d570
movq (%rax), %rdi
movl 0x31a8aa(%rip), %edx    # 0x3d1008
movl 0x31a8a0(%rip), %ecx    # 0x3d1004
leaq 0x2e0cc7(%rip), %rax    # 0x397432
movzwl (%rax), %r8d
movl 0x31a88a(%rip), %r9d    # 0x3d1000
leaq 0xcfafc(%rip), %rsi     # 0x186279
movb $0x0, %al
callq 0x9550
jmp 0xb6786
jmp 0xb6788
leaq 0x2e0ca3(%rip), %rax    # 0x397432
movw $0x0, (%rax)
leaq 0x2e0c9b(%rip), %rax    # 0x397436
movw $0x0, (%rax)
movl $0x0, 0x31a856(%rip)    # 0x3d1000
movl $0x0, 0x31a854(%rip)    # 0x3d1008
movl $0x0, 0x31a84e(%rip)    # 0x3d100c
movl $0x0, 0x31a854(%rip)    # 0x3d101c
movl $0x0, 0x3154f2(%rip)    # 0x3cbcc4
jmp 0xb682e
jmp 0xb67d6
leaq 0x2e0c55(%rip), %rax    # 0x397432
movw $0x0, (%rax)
leaq 0x2e0c4d(%rip), %rax    # 0x397436
movw $0x0, (%rax)
movl $0x0, 0x31a808(%rip)    # 0x3d1000
movl $0x0, 0x31a806(%rip)    # 0x3d1008
movl $0x0, 0x31a800(%rip)    # 0x3d100c
movl $0x0, 0x31a806(%rip)    # 0x3d101c
movb $0x0, 0x315478(%rip)    # 0x3cbc95
movb $0x0, 0x315470(%rip)    # 0x3cbc94
movl $0x0, 0x315496(%rip)    # 0x3cbcc4
jmp 0xb6830
jmp 0xb6832
jmp 0xb6834
jmp 0xb6836
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)