// File: /workspace/github_cpp_makefile_star2_O1/xocoder[P]m_kcptun/src/conf_kcp.cpp
// Function: conf_create(int, char const**)
conf_kcp_t*
conf_create(int argc, const char *argv[]) {

   if (argc > 1) {
      conf_kcp_t *conf = new conf_kcp_t;
      memset(conf, 0, sizeof(*conf));

      conf->rs_data = 11;       // RS(11, 2)
      conf->rs_parity = 2;
      conf->mtu = 1400;
      conf->rcv_wndsize = 256;
      conf->snd_wndsize = 256;


      for (int i=1; i<argc; i+=2) {

         chann_addr_t addr;
         string opt = argv[i];
         string value = (argc - i) > 1 ? argv[i+1] : "";

         if (conf->src_count<4 && opt=="-l") {
            int i = conf->src_count;
            mnet_parse_ipport((char*)value.c_str(), &addr);
            strncpy(conf->src_ip[i], addr.ip, sizeof(addr.ip));
            conf->src_port[i] = addr.port;
            conf->src_count = i + 1;
         }

         if (conf->dest_count<4 && opt=="-r") {
            int i = conf->dest_count;
            mnet_parse_ipport((char*)value.c_str(), &addr);
            strncpy(conf->dest_ip[i], addr.ip, sizeof(addr.ip));
            conf->dest_port[i] = addr.port;
            conf->dest_count = i + 1;
         }

         if (opt == "-nodelay") {
            conf->nodelay = atoi(value.c_str());
         }

         if (opt == "-interval") {
            conf->interval = atoi(value.c_str());
         }

         if (opt == "-resend") {
            conf->resend = atoi(value.c_str());
         }

         if (opt == "-nc") {
            conf->nc = atoi(value.c_str());
         }

         if (opt == "-rcv_wndsize") {
            conf->rcv_wndsize = atoi(value.c_str());
         }

         if (opt == "-snd_wndsize") {
            conf->snd_wndsize = atoi(value.c_str());
         }

         if (opt == "-mtu") {
            conf->mtu = atoi(value.c_str());
         }

         if (opt == "-fast") {
            conf->fast = atoi(value.c_str());
         }

         if (opt == "-rs_data") {
            conf->rs_data = atoi(value.c_str());
         }

         if (opt == "-rs_parity") {
            conf->rs_parity = atoi(value.c_str());
         }

         if (opt == "-h" || opt == "-help") {
            goto usage;
         }

         if (opt == "-key") {
            conf->crypto = 1;
            snprintf(conf->key, 32, "%s", value.c_str());
         }

         if (opt == "-tcp_cache") {
            conf->tcp_cache = atoi(value.c_str());
         }

         if (opt == "-v" || opt == "-version") {
            cerr << "mkcptun: v20180609" << endl;
            return NULL;
         }
      }

      if (conf->tcp_cache <= 0) {
         conf->tcp_cache = 2*1024*1024;
      }

      if (conf->rs_data>0 && conf->rs_parity>0) {
         conf->mtu = 1400 / (conf->rs_data + conf->rs_parity) * conf->rs_data;
      } else {
         conf->rs_data = conf->rs_parity = 0;
      }

      switch (conf->fast) {

         case 3: {
            conf->nodelay = 1;
            conf->interval = 10;
            conf->resend = 2;
            conf->nc = 1;
            conf->rcv_wndsize = 1024;
            conf->snd_wndsize = 1024;
            break;
         }

         case 2: {
            conf->nodelay = 1;
            conf->interval = 20;
            conf->resend = 4;
            conf->nc = 1;
            conf->rcv_wndsize = 512;
            conf->snd_wndsize = 512;
            break;
         }

         case 1: {
            conf->nodelay = 1;
            conf->interval = 40;
            conf->resend = 0;
            conf->nc = 1;
            conf->rcv_wndsize = 256;
            conf->snd_wndsize = 256;
            break;
         }

         default: {
            conf->nodelay = 0;
            conf->interval = 100;
            conf->resend = 0;
            conf->nc = 0;
            break;
         }
      }

      if (!_str_empty(conf->src_ip[0]) &&
          !_str_empty(conf->dest_ip[0]) &&
          conf->src_port[0] > 0 &&
          conf->dest_port[0] > 0)
      {
         // print conf
         cout << "---------- begin config ----------" << endl;
         for (int i=0; i<conf->src_count; i++) {
            cout << "listen: " << conf->src_ip[i] << ":" << conf->src_port[i] << endl;
         }
         for (int i=0; i<conf->dest_count; i++) {
            cout << "remote: " << conf->dest_ip[i] << ":" << conf->dest_port[i] << endl;
         }

         cout << "nodelay: " << conf->nodelay << endl;
         cout << "interval: " << conf->interval << endl;

         cout << "resend: " << conf->resend << endl;
         cout << "nc: " << conf->nc << endl;

         if (conf->rs_data) {
            cout << "mtu (with rs): " << conf->mtu << endl;
         } else {
            cout << "mtu: " << conf->mtu << endl;
         }
         cout << "crypto: " << conf->crypto << endl;

         cout << "rcv_wndsize: " << conf->rcv_wndsize << endl;
         cout << "snd_wndsize: " << conf->snd_wndsize << endl;
         
         cout << "fast: " << conf->fast << endl;         
         cout << "rs_data: " << conf->rs_data << endl;
         cout << "rs_parity: " << conf->rs_parity << endl;

#ifdef KCP_REMOTE
         cout << "tcp_cache: " << conf->tcp_cache << endl;
#endif
         cout << "---------- end config ----------" << endl;
         return conf;
      } else {
         cout << "invalid " << conf->src_ip << conf->src_port << endl;
      }

      delete conf;
   }

  usage:
   cerr << "Usage:" << endl;

#ifdef KCP_LOCAL
   cerr << argv[0] << ": -l LISTEN_IP:PORT -r REMOTE_IP_1:PORT -r REMOTE_IP_2:PORT -fast 3 -key 'SECRET_256bits'" << endl;
#else
   cerr << argv[0] << ": -l LISTEN_IP_1:PORT -l LISTEN_IP_2:PORT -t REMOTE_IP:PORT -fast 3 -key 'SECRET_256bits'" << endl;   
#endif

   cerr << "Optinal: \t support IP count " << IP_COUNT << endl;
   cerr << "-key     \t set communication secret" << endl;
   cerr << "-nodelay \t whether nodelay mode is enabled, 0 is not enabled; 1 enabled" <<endl;
   cerr << "-interval \t protocol internal work interval, in milliseconds" << endl;
   cerr << "-resend \t fast retransmission mode, 0 represents off by default, 2 can be set" << endl;
   cerr << "        \t (2 ACK spans will result in direct retransmission)" << endl;
   cerr << "-nc     \t whether to turn off flow control, 1 represents no flow control" << endl;
   cerr << "-snd_wndsize \t send window size" << endl;
   cerr << "-rcv_wndsize \t recv window size" << endl;
   cerr << "-fast   \t fast mode with pre defined option:" << endl;
   cerr << "        \t 3 most fast, with ikcp_nodelay  \t [1 10 2 1]" << endl;
   cerr << "        \t 2 mid fast, with ikcp_nodelay   \t [1 20 4 1]" << endl;
   cerr << "        \t 1 least fast, with ikcp_nodelay \t [1 40 0 1]" << endl;
   cerr << "        \t 0 default, with ikcp_nodelay    \t [0 100 0 0]" << endl;
   cerr << "-rs_data \t Reed-Solomon erasure codes data bytes, default 11" << endl;
   cerr << "-rs_parity \t Reed-Solomon erasure codes parity bytes, default 2" << endl;
#ifdef KCP_REMOTE
   cerr << "-tcp_cache \t TCP cache size, default 2*1024*1024" << endl;
#endif
   cerr << "-help   \t print this help" << endl;
   cerr << "-version \t print version" << endl;
   return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rsi, -0x60(%rbp)
cmpl $0x2, %edi
jl 0x7b12
movl %edi, %ebx
movl $0x178, %edi            # imm = 0x178
callq 0x2290
movq %rax, %r14
movl $0x178, %edx            # imm = 0x178
movq %rax, %rdi
xorl %esi, %esi
callq 0x2180
movabsq $0x20000000b, %rax      # imm = 0x20000000B
movq %rax, 0x14c(%r14)
movl $0x578, 0x140(%r14) # imm = 0x578
movabsq $0x10000000100, %rax    # imm = 0x10000000100
movq %rax, 0x128(%r14)
leaq 0x4(%r14), %rax
movq %rax, -0x70(%rbp)
leaq 0x98(%r14), %r12
movq %r14, -0x30(%rbp)
leaq 0x158(%r14), %rax
movq %rax, -0xa0(%rbp)
movl %ebx, -0x64(%rbp)
movl %ebx, %eax
decq %rax
movq %rax, -0xa8(%rbp)
movl $0x1, %r15d
leaq -0x98(%rbp), %r13
leaq -0xbc(%rbp), %r14
movq %r12, -0x78(%rbp)
movq -0x60(%rbp), %rax
movq (%rax,%r15,8), %rsi
movq %r13, %rdi
leaq -0x58(%rbp), %rdx
callq 0x82ec
leaq 0x3f99(%rip), %rsi      # 0xb274
cmpq -0xa8(%rbp), %r15
jge 0x72ed
movq -0x60(%rbp), %rax
movq 0x8(%rax,%r15,8), %rsi
leaq -0x58(%rbp), %rdi
leaq -0x31(%rbp), %rdx
callq 0x82ec
movq -0x30(%rbp), %rbx
cmpl $0x3, (%rbx)
jg 0x7358
movq %r13, %rdi
leaq 0x4703(%rip), %rsi      # 0xba10
callq 0x20c0
testl %eax, %eax
jne 0x7358
movslq (%rbx), %r13
movq -0x58(%rbp), %rdi
movq %r14, %rsi
callq 0x4538
movq %r13, %rdi
shlq $0x4, %rdi
addq -0x70(%rbp), %rdi
movl $0x10, %edx
movq %r14, %rsi
callq 0x2170
movl -0xac(%rbp), %eax
movl %eax, 0x84(%rbx,%r13,4)
leal 0x1(%r13), %eax
movl %eax, (%rbx)
leaq -0x98(%rbp), %r13
cmpl $0x3, 0x94(%rbx)
jg 0x73c3
movq %r13, %rdi
leaq 0x46a8(%rip), %rsi      # 0xba13
callq 0x20c0
testl %eax, %eax
jne 0x73c3
movq %rbx, %r13
movslq 0x94(%rbx), %rbx
movq -0x58(%rbp), %rdi
movq %r14, %rsi
callq 0x4538
movq %rbx, %rdi
shlq $0x4, %rdi
addq %r12, %rdi
movl $0x10, %edx
movq %r14, %rsi
callq 0x2170
movl -0xac(%rbp), %eax
movl %eax, 0x118(%r13,%rbx,4)
leal 0x1(%rbx), %eax
movl %eax, 0x94(%r13)
movq %r13, %rbx
leaq -0x98(%rbp), %r13
movq %r13, %rdi
leaq 0x4649(%rip), %rsi      # 0xba16
callq 0x20c0
testl %eax, %eax
jne 0x73e5
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x130(%rbx)
movq %r13, %rdi
leaq 0x4630(%rip), %rsi      # 0xba1f
callq 0x20c0
testl %eax, %eax
jne 0x7407
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x134(%rbx)
movq %r13, %rdi
leaq 0x4618(%rip), %rsi      # 0xba29
callq 0x20c0
testl %eax, %eax
jne 0x7429
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x138(%rbx)
movq %r13, %rdi
leaq 0x45fe(%rip), %rsi      # 0xba31
callq 0x20c0
testl %eax, %eax
jne 0x744b
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x13c(%rbx)
movq %r13, %rdi
leaq 0x45e0(%rip), %rsi      # 0xba35
callq 0x20c0
testl %eax, %eax
jne 0x746d
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x128(%rbx)
movq %r13, %rdi
leaq 0x45cb(%rip), %rsi      # 0xba42
callq 0x20c0
testl %eax, %eax
jne 0x748f
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x12c(%rbx)
movq %r13, %rdi
leaq 0x45b6(%rip), %rsi      # 0xba4f
callq 0x20c0
testl %eax, %eax
jne 0x74b1
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x140(%rbx)
movq %r13, %rdi
leaq 0x4599(%rip), %rsi      # 0xba54
callq 0x20c0
testl %eax, %eax
jne 0x74d3
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x144(%rbx)
movq %r13, %rdi
leaq 0x457d(%rip), %rsi      # 0xba5a
callq 0x20c0
testl %eax, %eax
jne 0x74f5
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x14c(%rbx)
movq %r13, %rdi
leaq 0x4564(%rip), %rsi      # 0xba63
callq 0x20c0
testl %eax, %eax
jne 0x7517
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x150(%rbx)
movq %r13, %rdi
leaq 0x454d(%rip), %rsi      # 0xba6e
callq 0x20c0
movl $0x5, %ebx
testl %eax, %eax
je 0x7627
movq %r13, %rdi
leaq 0x4534(%rip), %rsi      # 0xba71
callq 0x20c0
testl %eax, %eax
je 0x7627
movq %r13, %rdi
leaq 0x4523(%rip), %rsi      # 0xba77
callq 0x20c0
testl %eax, %eax
movq -0x30(%rbp), %rbx
jne 0x7589
movl $0x1, 0x148(%rbx)
movq -0x58(%rbp), %rcx
movl $0x20, %esi
movq -0xa0(%rbp), %rdi
leaq 0x3e85(%rip), %rdx      # 0xb407
xorl %eax, %eax
callq 0x23c0
movq %r13, %rdi
leaq 0x44e9(%rip), %rsi      # 0xba7c
callq 0x20c0
testl %eax, %eax
jne 0x75ab
movq -0x58(%rbp), %rdi
callq 0x23b0
movl %eax, 0x154(%rbx)
movq %r13, %rdi
leaq 0x44d2(%rip), %rsi      # 0xba87
callq 0x20c0
testl %eax, %eax
je 0x75d8
movq %r13, %rdi
leaq 0x44c2(%rip), %rsi      # 0xba8a
callq 0x20c0
testl %eax, %eax
je 0x75d8
xorl %ebx, %ebx
movb $0x1, %r12b
jmp 0x762a
movl $0x12, %edx
movq 0x8a0c(%rip), %rdi      # 0xfff0
leaq 0x44a8(%rip), %rsi      # 0xba93
callq 0x22e0
movq 0x89f9(%rip), %rcx      # 0xfff0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq 0x89db(%rip), %rdi      # 0xfff0
callq 0x2040
movq %rax, %rdi
callq 0x21d0
movl $0x1, %ebx
xorl %r12d, %r12d
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x7643
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x22b0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x7665
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x22b0
testb %r12b, %r12b
movq -0x78(%rbp), %r12
je 0x7681
addq $0x2, %r15
cmpl -0x64(%rbp), %r15d
jl 0x72c0
movl $0x2, %ebx
cmpl $0x2, %ebx
jne 0x7afd
movq -0x30(%rbp), %rbx
cmpl $0x0, 0x154(%rbx)
jg 0x76a1
movl $0x200000, 0x154(%rbx)  # imm = 0x200000
movl 0x14c(%rbx), %ecx
testl %ecx, %ecx
jle 0x76cb
movl 0x150(%rbx), %esi
testl %esi, %esi
jle 0x76cb
addl %ecx, %esi
movl $0x578, %eax            # imm = 0x578
xorl %edx, %edx
divl %esi
imull %ecx, %eax
movl %eax, 0x140(%rbx)
jmp 0x76d6
movq $0x0, 0x14c(%rbx)
movl 0x144(%rbx), %eax
cmpl $0x1, %eax
je 0x771f
cmpl $0x2, %eax
je 0x7705
cmpl $0x3, %eax
jne 0x7740
movaps 0x42fe(%rip), %xmm0     # 0xb9f0
movups %xmm0, 0x130(%rbx)
movabsq $0x40000000400, %rax    # imm = 0x40000000400
jmp 0x7737
movaps 0x42d4(%rip), %xmm0     # 0xb9e0
movups %xmm0, 0x130(%rbx)
movabsq $0x20000000200, %rax    # imm = 0x20000000200
jmp 0x7737
movaps 0x42aa(%rip), %xmm0     # 0xb9d0
movups %xmm0, 0x130(%rbx)
movabsq $0x10000000100, %rax    # imm = 0x10000000100
movq %rax, 0x128(%rbx)
jmp 0x774f
movsd 0x42b8(%rip), %xmm0     # 0xba00
movups %xmm0, 0x130(%rbx)
cmpb $0x0, 0x4(%rbx)
je 0x7a8b
cmpb $0x0, 0x98(%rbx)
je 0x7a8b
cmpl $0x0, 0x84(%rbx)
jle 0x7a8b
cmpl $0x0, 0x118(%rbx)
jle 0x7a8b
movq 0x8849(%rip), %r15      # 0xffd0
leaq 0x4318(%rip), %rsi      # 0xbaa6
movl $0x22, %edx
movq %r15, %rdi
callq 0x22e0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
cmpl $0x0, (%rbx)
movq %rbx, %r14
jle 0x786c
movl $0x4, %ebx
xorl %r13d, %r13d
movq 0x87f3(%rip), %r15      # 0xffd0
movl $0x8, %edx
movq %r15, %rdi
leaq 0x42dd(%rip), %rsi      # 0xbac9
callq 0x22e0
leaq (%r14,%rbx), %r12
movq %r12, %rdi
callq 0x2110
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x22e0
movl $0x1, %edx
movq %r15, %rdi
leaq 0x436b(%rip), %rsi      # 0xbb85
callq 0x22e0
movl 0x84(%r14,%r13,4), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
incq %r13
movslq (%r14), %rax
addq $0x10, %rbx
cmpq %rax, %r13
jl 0x77dd
cmpl $0x0, 0x94(%r14)
movq -0x78(%rbp), %r12
jle 0x792a
xorl %ebx, %ebx
xorl %r13d, %r13d
movl $0x8, %edx
movq 0x8741(%rip), %r15      # 0xffd0
movq %r15, %rdi
leaq 0x4239(%rip), %rsi      # 0xbad2
callq 0x22e0
movq %r12, %r14
addq %rbx, %r12
movq %r12, %rdi
callq 0x2110
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x22e0
movl $0x1, %edx
movq %r15, %rdi
leaq 0x42bc(%rip), %rsi      # 0xbb85
callq 0x22e0
movq -0x30(%rbp), %rax
movl 0x118(%rax,%r13,4), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
movq %r14, %r12
movq -0x30(%rbp), %r14
callq 0x2040
movq %rax, %rdi
callq 0x21d0
incq %r13
movslq 0x94(%r14), %rax
addq $0x10, %rbx
cmpq %rax, %r13
jl 0x7883
movq 0x869f(%rip), %r15      # 0xffd0
leaq 0x41a3(%rip), %rsi      # 0xbadb
movl $0x9, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x130(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x4160(%rip), %rsi      # 0xbae5
movl $0xa, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x134(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x411e(%rip), %rsi      # 0xbaf0
movl $0x8, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x138(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x40da(%rip), %rsi      # 0xbaf9
movl $0x4, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x13c(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
cmpl $0x0, 0x14c(%r14)
je 0x8019
movq 0x8556(%rip), %rdi      # 0xffd0
leaq 0x407d(%rip), %rsi      # 0xbafe
movl $0xf, %edx
jmp 0x802c
movq 0x853e(%rip), %r15      # 0xffd0
leaq 0x40de(%rip), %rsi      # 0xbb77
movl $0x8, %edx
movq %r15, %rdi
callq 0x22e0
movq %r15, %rdi
movq -0x70(%rbp), %rsi
callq 0x2210
movq %rbx, %rsi
addq $0x84, %rsi
movq %rax, %rdi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
movl $0x178, %esi            # imm = 0x178
movq %rbx, %rdi
callq 0x22b0
xorl %ebx, %ebx
movq $0x0, -0x30(%rbp)
cmpl $0x1, %ebx
movq -0x30(%rbp), %rax
je 0x8007
movq 0x84d7(%rip), %r14      # 0xfff0
leaq 0x4060(%rip), %rsi      # 0xbb80
movl $0x6, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
movq -0x60(%rbp), %rax
movq (%rax), %rbx
testq %rbx, %rbx
je 0x7b7c
movq %rbx, %rdi
callq 0x2110
movq 0x8481(%rip), %rdi      # 0xfff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x22e0
jmp 0x7b94
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x23f0
leaq 0x3fec(%rip), %rsi      # 0xbb87
movl $0x59, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x400b(%rip), %rsi      # 0xbbe1
movl $0x1c, %edx
movq %r14, %rdi
callq 0x22e0
movq %r14, %rdi
movl $0x8, %esi
callq 0x2400
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fdd(%rip), %rsi      # 0xbbfe
movl $0x23, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fc6(%rip), %rsi      # 0xbc22
movl $0x47, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fd3(%rip), %rsi      # 0xbc6a
movl $0x3c, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fd5(%rip), %rsi      # 0xbca7
movl $0x4d, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fe8(%rip), %rsi      # 0xbcf5
movl $0x3c, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fea(%rip), %rsi      # 0xbd32
movl $0x48, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3ff8(%rip), %rsi      # 0xbd7b
movl $0x1f, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fdd(%rip), %rsi      # 0xbd9b
movl $0x1f, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fc2(%rip), %rsi      # 0xbdbb
movl $0x2c, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fb4(%rip), %rsi      # 0xbde8
movl $0x36, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fb0(%rip), %rsi      # 0xbe1f
movl $0x36, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fac(%rip), %rsi      # 0xbe56
movl $0x36, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fa8(%rip), %rsi      # 0xbe8d
movl $0x37, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fa5(%rip), %rsi      # 0xbec5
movl $0x3c, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fa7(%rip), %rsi      # 0xbf02
movl $0x3f, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3fac(%rip), %rsi      # 0xbf42
movl $0x19, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3f8b(%rip), %rsi      # 0xbf5c
movl $0x18, %edx
movq %r14, %rdi
callq 0x22e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
xorl %eax, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x7fb0(%rip), %rdi      # 0xffd0
leaq 0x3ae7(%rip), %rsi      # 0xbb0e
movl $0x5, %edx
callq 0x22e0
movl 0x140(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %rdi
callq 0x2150
leaq 0x3ac5(%rip), %rsi      # 0xbb14
movl $0x8, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x148(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3a81(%rip), %rsi      # 0xbb1d
movl $0xd, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x128(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3a42(%rip), %rsi      # 0xbb2b
movl $0xd, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x12c(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3a03(%rip), %rsi      # 0xbb39
movl $0x6, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x144(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x39bd(%rip), %rsi      # 0xbb40
movl $0x9, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x14c(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x397a(%rip), %rsi      # 0xbb4a
movl $0xb, %edx
movq %r15, %rdi
callq 0x22e0
movl 0x150(%r14), %esi
movq %r15, %rdi
callq 0x2400
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
leaq 0x3939(%rip), %rsi      # 0xbb56
movl $0x20, %edx
movq %r15, %rdi
callq 0x22e0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2270
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x21d0
movl $0x1, %ebx
jmp 0x7b05
jmp 0x825f
jmp 0x825f
movq %rax, %rbx
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x8280
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x22b0
jmp 0x8280
movq %rax, %rbx
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x82a2
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x22b0
movq %rbx, %rdi
callq 0x2410