// File: /workspace/github_c_makefile_star2_O1/Carton32[P]quectel-CM/main.c
// Function: qmi_main
static int qmi_main(PROFILE_T *profile)
{
    int triger_event = 0;
    int signo;
#ifdef CONFIG_SIM
    SIM_Status SIMStatus;
#endif
    UCHAR PSAttachedState = 0;
    UCHAR  IPv4ConnectionStatus = QWDS_PKT_DATA_UNKNOW;
    UCHAR  IPv6ConnectionStatus = QWDS_PKT_DATA_UNKNOW; 
    unsigned SetupCallFail = 0;
    unsigned long SetupCallAllowTime = clock_msec();
    int qmierr = 0;
    const struct request_ops *request_ops = profile ->request_ops;
    pthread_t gQmiThreadID = 0;

//sudo apt-get install udhcpc
//sudo apt-get remove ModemManager
    if (profile->reattach_flag) {
        if (!reattach_driver(profile)) 
            sleep(2);
    }

    /* try to recreate FDs*/
    if (socketpair( AF_LOCAL, SOCK_STREAM, 0, signal_control_fd) < 0 ) {
        dbg_time("%s Faild to create main_control_fd: %d (%s)", __func__, errno, strerror(errno));
        return -1;
    }

    if ( socketpair( AF_LOCAL, SOCK_STREAM, 0, qmidevice_control_fd ) < 0 ) {
        dbg_time("%s Failed to create thread control socket pair: %d (%s)", __func__, errno, strerror(errno));
        return 0;
    }

    if ((profile->qmap_mode == 0 || profile->qmap_mode == 1) && (!profile->proxy[0])) {
        kill_brothers(profile->qmichannel);
     }

    if (pthread_create( &gQmiThreadID, 0, profile->qmi_ops->read, (void *)profile) != 0) {
        dbg_time("%s Failed to create QMIThread: %d (%s)", __func__, errno, strerror(errno));
        return 0;
    }

    if ((read(qmidevice_control_fd[0], &triger_event, sizeof(triger_event)) != sizeof(triger_event))
        || (triger_event != RIL_INDICATE_DEVICE_CONNECTED)) {
        dbg_time("%s Failed to init QMIThread: %d (%s)", __func__, errno, strerror(errno));
        return 0;
    }

    if (profile->qmi_ops->init && profile->qmi_ops->init(profile)) {
        dbg_time("%s Failed to qmi init: %d (%s)", __func__, errno, strerror(errno));
        return 0;
    }

    if (request_ops->requestBaseBandVersion)
        request_ops->requestBaseBandVersion(profile);

    if (request_ops->requestSetEthMode)
        request_ops->requestSetEthMode(profile);

    if (request_ops->requestSetLoopBackState && profile->loopback_state) {
    	request_ops->requestSetLoopBackState(profile->loopback_state, profile->replication_factor);
    	profile->loopback_state = 0;
    }

    if (request_ops->requestGetSIMStatus) {
        qmierr = request_ops->requestGetSIMStatus(&SIMStatus);

        while (qmierr == QMI_ERR_OP_DEVICE_UNSUPPORTED) {
            sleep(1);
            qmierr = request_ops->requestGetSIMStatus(&SIMStatus);
        }

        if ((SIMStatus == SIM_PIN) && profile->pincode && request_ops->requestEnterSimPin) {
            request_ops->requestEnterSimPin(profile->pincode);
        }
    }

    if (SIMStatus == SIM_READY) {
        if (request_ops->requestGetICCID)
            request_ops->requestGetICCID();

        if (request_ops->requestGetIMSI)
            request_ops->requestGetIMSI();
    }

    if (request_ops->requestGetProfile)
        request_ops->requestGetProfile(profile);

    if (request_ops->requestSetProfile && (profile->apn || profile->user || profile->password)) {
        request_ops->requestSetProfile(profile);
    }

    request_ops->requestRegistrationState(&PSAttachedState);

    send_signo_to_main(SIG_EVENT_CHECK);

    while (1)
    {
        struct pollfd pollfds[] = {{signal_control_fd[1], POLLIN, 0}, {qmidevice_control_fd[0], POLLIN, 0}};
        int ne, ret, nevents = sizeof(pollfds)/sizeof(pollfds[0]);

        do {
            ret = poll(pollfds, nevents,  15*1000);
        } while ((ret < 0) && (errno == EINTR));

        if (ret == 0)
        {
            send_signo_to_main(SIG_EVENT_CHECK);
            continue;
        }

        if (ret <= 0) {
            dbg_time("%s poll=%d, errno: %d (%s)", __func__, ret, errno, strerror(errno));
            goto __main_quit;
        }

        for (ne = 0; ne < nevents; ne++) {
            int fd = pollfds[ne].fd;
            short revents = pollfds[ne].revents;

            if (revents & (POLLERR | POLLHUP | POLLNVAL)) {
                dbg_time("%s poll err/hup", __func__);
                dbg_time("epoll fd = %d, events = 0x%04x", fd, revents);
                main_send_event_to_qmidevice(RIL_REQUEST_QUIT);
                if (revents & POLLHUP)
                    goto __main_quit;
            }

            if ((revents & POLLIN) == 0)
                continue;

            if (fd == signal_control_fd[1])
            {
                if (read(fd, &signo, sizeof(signo)) == sizeof(signo))
                {
                    alarm(0);
                    switch (signo)
                    {
                        case SIG_EVENT_START:
                            if (PSAttachedState != 1 && profile->loopback_state == 0)
                                break;
                            
                            if (SetupCallAllowTime > clock_msec()) {
                                alarm((SetupCallAllowTime - clock_msec()+999)/1000);
                                break;
                            }

                            if (profile->enable_ipv4 && IPv4ConnectionStatus !=  QWDS_PKT_DATA_CONNECTED) {
                                qmierr = request_ops->requestSetupDataCall(profile, IpFamilyV4);

                                if ((qmierr > 0) && profile->user && profile->user[0] && profile->password && profile->password[0]) {
                                    int old_auto =  profile->auth;

                                    //may be fail because wrong auth mode, try pap->chap, or chap->pap
                                    profile->auth = (profile->auth == 1) ? 2 : 1;
                                	qmierr = request_ops->requestSetupDataCall(profile, IpFamilyV4);

                                    if (qmierr)
                                        profile->auth = old_auto; //still fail, restore old auth moe
                                }

                                if (!qmierr) {
                                    qmierr = request_ops->requestGetIPAddress(profile, IpFamilyV4);
                                    if (!qmierr)
                                        IPv4ConnectionStatus = QWDS_PKT_DATA_CONNECTED;
                                }
                                        
                            }

                            if (profile->enable_ipv6 && IPv6ConnectionStatus !=  QWDS_PKT_DATA_CONNECTED) {
                                if (profile->enable_ipv4 && profile->request_ops != &qmi_request_ops) {
                                    IPv6ConnectionStatus = IPv4ConnectionStatus;
                                }
                                else {
                                    qmierr = request_ops->requestSetupDataCall(profile, IpFamilyV6);

                                    if (!qmierr) {
                                        qmierr = request_ops->requestGetIPAddress(profile, IpFamilyV6);
                                        if (!qmierr)
                                            IPv6ConnectionStatus = QWDS_PKT_DATA_CONNECTED;
                                    }
                                }
                            }
                                
                            if ((profile->enable_ipv4 && IPv4ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)
                                    || (profile->enable_ipv6 && IPv6ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)) {
                                const unsigned allow_time[] = {5, 10, 20, 40, 60};

                                if (SetupCallFail < (sizeof(allow_time)/sizeof(unsigned)))
                                    SetupCallAllowTime = allow_time[SetupCallFail];
                                else
                                    SetupCallAllowTime = 60;
                                SetupCallFail++;
                                dbg_time("try to requestSetupDataCall %ld second later", SetupCallAllowTime);
                                alarm(SetupCallAllowTime);
                                SetupCallAllowTime = SetupCallAllowTime*1000 + clock_msec();
                            }
                            else if (IPv4ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED || IPv6ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED) {
                                SetupCallFail = 0;
                                SetupCallAllowTime = clock_msec();
                            }
                        break;

                        case SIG_EVENT_CHECK:
                            if (request_ops->requestGetSignalInfo)
                                request_ops->requestGetSignalInfo();
                            
                            if (request_ops->requestGetCellInfoList)
                                request_ops->requestGetCellInfoList();

                            if (profile->enable_ipv4 && IPv4ConnectionStatus != QWDS_PKT_DATA_DISCONNECTED
                                && !request_ops->requestQueryDataCall(&IPv4ConnectionStatus, IpFamilyV4))
                            {
                                if (QWDS_PKT_DATA_CONNECTED == IPv4ConnectionStatus && profile->ipv4.Address == 0) {
                                    //killall -9 quectel-CM for MBIM and ATC call
                                    qmierr = request_ops->requestGetIPAddress(profile, IpFamilyV4);
                                    if (qmierr)
                                        IPv4ConnectionStatus = QWDS_PKT_DATA_DISCONNECTED;
                                }

                                //local ip is different with remote ip
                                if (QWDS_PKT_DATA_CONNECTED == IPv4ConnectionStatus && check_ipv4_address(profile) == 0) {
                                    request_ops->requestDeactivateDefaultPDP(profile, IpFamilyV4);
                                    IPv4ConnectionStatus = QWDS_PKT_DATA_DISCONNECTED;
                                }
                            }
                            else {
                                IPv4ConnectionStatus = QWDS_PKT_DATA_DISCONNECTED;
                            }

                            if (profile->enable_ipv6 && IPv6ConnectionStatus != QWDS_PKT_DATA_DISCONNECTED) {
                                if (profile->enable_ipv4 && profile->request_ops != &qmi_request_ops) {
                                    IPv6ConnectionStatus = IPv4ConnectionStatus;
                                }
                                else {
                                    request_ops->requestQueryDataCall(&IPv6ConnectionStatus, IpFamilyV6);
                                }
                            }
                            else {
                                IPv6ConnectionStatus = QWDS_PKT_DATA_DISCONNECTED;
                            }

                            if (IPv4ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED && IPv6ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED) {
                                usbnet_link_change(0, profile);
                            }
                            else if (IPv4ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED || IPv6ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED) {
                                int link = 0;
                                if (IPv4ConnectionStatus == QWDS_PKT_DATA_CONNECTED)
                                    link |= (1<<IpFamilyV4);
                                if (IPv6ConnectionStatus == QWDS_PKT_DATA_CONNECTED)
                                    link |= (1<<IpFamilyV6);
                                usbnet_link_change(link, profile);
                            }
                            
                            if ((profile->enable_ipv4 && IPv4ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)
                                || (profile->enable_ipv6 && IPv6ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)) {
                                send_signo_to_main(SIG_EVENT_START);
                            }
                        break;

                        case SIG_EVENT_STOP:
                            if (profile->enable_ipv4 && IPv4ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED) {
                                request_ops->requestDeactivateDefaultPDP(profile, IpFamilyV4);
                            }
                            if (profile->enable_ipv6 && IPv6ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED) {
                                if (profile->enable_ipv4 && profile->request_ops != &qmi_request_ops) {
                                    
                                }
                                else {
                                    request_ops->requestDeactivateDefaultPDP(profile, IpFamilyV6);
                                }
                            }
                            usbnet_link_change(0, profile);
                            if (profile->qmi_ops->deinit)
                                profile->qmi_ops->deinit();
                            main_send_event_to_qmidevice(RIL_REQUEST_QUIT);
                            goto __main_quit;
                        break;

                        default:
                        break;
                    }
                }
            }

            if (fd == qmidevice_control_fd[0]) {
                if (read(fd, &triger_event, sizeof(triger_event)) == sizeof(triger_event)) {
                    switch (triger_event) {
                        case RIL_INDICATE_DEVICE_DISCONNECTED:
                            usbnet_link_change(0, profile);                            
                            goto __main_quit;
                        break;

                        case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
                            request_ops->requestRegistrationState(&PSAttachedState);
                            if (PSAttachedState == 1) {
                                if ((profile->enable_ipv4 && IPv4ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)
                                    || (profile->enable_ipv6 && IPv6ConnectionStatus ==  QWDS_PKT_DATA_DISCONNECTED)) {
                                    send_signo_to_main(SIG_EVENT_START);
                                }
                             } else {
                                SetupCallAllowTime = clock_msec();
                             }
                        break;

                        case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
                            if (IPv4ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED || IPv6ConnectionStatus ==  QWDS_PKT_DATA_CONNECTED) {
                                SetupCallAllowTime = clock_msec() + 1000; //from connect -> disconnect, do not re-dail immediately, wait network stable
                            }
                            send_signo_to_main(SIG_EVENT_CHECK);
                        break;

                        case MODEM_REPORT_RESET_EVENT:
                        {
                            dbg_time("main recv MODEM RESET SIGNAL");
                            main_send_event_to_qmidevice(RIL_REQUEST_QUIT);
                            g_donot_exit_when_modem_hangup = 1;
                            goto __main_quit;
                        }
                        break;

                    	case RIL_UNSOL_LOOPBACK_CONFIG_IND:
                        {
                        	QMI_WDA_SET_LOOPBACK_CONFIG_IND_MSG SetLoopBackInd;
                        	if (read(fd, &SetLoopBackInd, sizeof(SetLoopBackInd)) == sizeof(SetLoopBackInd)) {
                            	profile->loopback_state = SetLoopBackInd.loopback_state.TLVVaule;
                            	profile->replication_factor = le32_to_cpu(SetLoopBackInd.replication_factor.TLVVaule);
                            	dbg_time("SetLoopBackInd: loopback_state=%d, replication_factor=%u",
                                	profile->loopback_state, profile->replication_factor);
                            	if (profile->loopback_state)
                                	send_signo_to_main(SIG_EVENT_START);
                            }
                        }
                    	break;
                        default:
                        break;
                    }
                }
            }
        }
    }

__main_quit:
    usbnet_link_change(0, profile);
    if (gQmiThreadID && pthread_join(gQmiThreadID, NULL)) {
        dbg_time("%s Error joining to listener thread (%s)", __func__, strerror(errno));
    }

    close(signal_control_fd[0]);
    close(signal_control_fd[1]);
    close(qmidevice_control_fd[0]);
    close(qmidevice_control_fd[1]);
    dbg_time("%s exit", __func__);

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movl $0x0, 0x28(%rsp)
xorl %ebx, %ebx
movb %bl, 0xf(%rsp)
movb %bl, 0xd(%rsp)
movb %bl, 0xe(%rsp)
callq 0xef20
movq %rax, %r15
movq 0x222b3(%rip), %r14     # 0x2a706
movq $0x0, 0x68(%rsp)
cmpb %bl, 0x2213a(%rip)      # 0x2a59c
je 0x847e
leaq 0x21f75(%rip), %rdi     # 0x2a3e0
callq 0x17b5a
testl %eax, %eax
jne 0x847e
movl $0x2, %edi
callq 0x5540
leaq 0x2232f(%rip), %rcx     # 0x2a7b4
movl $0x1, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x5300
testl %eax, %eax
js 0x85ca
leaq 0x21f33(%rip), %rcx     # 0x2a3d8
xorl %ebx, %ebx
movl $0x1, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x5300
testl %eax, %eax
js 0x864b
cmpl $0x1, 0x22023(%rip)     # 0x2a4ea
ja 0x852d
cmpb $0x0, 0x21f38(%rip)     # 0x2a408
jne 0x852d
leaq 0x70(%rsp), %rsi
movq %rsi, 0x10(%rsp)
leaq 0x21f87(%rip), %rax     # 0x2a46a
movq %rax, 0x18(%rsp)
leaq 0x16896(%rip), %rdi     # 0x1ed85
movl $0x100, %edx            # imm = 0x100
callq 0x50d0
testl %eax, %eax
jle 0x852d
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movb $0x0, 0x70(%rsp,%rax)
leaq 0x16886(%rip), %rdi     # 0x1ed94
leaq 0x1301(%rip), %rsi      # 0x9816
leaq 0x10(%rsp), %rdx
callq 0x9727
testl %eax, %eax
je 0x852d
movl $0x1, %edi
callq 0x5540
leaq 0x21eac(%rip), %rcx     # 0x2a3e0
movq 0x221c3(%rip), %rax     # 0x2a6fe
movq 0x18(%rax), %rdx
xorl %ebx, %ebx
leaq 0x68(%rsp), %rdi
xorl %esi, %esi
callq 0x53d0
testl %eax, %eax
je 0x86c0
movq 0x21a64(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xeb2f
movq %rax, %r12
callq 0x5070
movq %rax, %r14
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x166af(%rip), %rsi     # 0x1ec2e
leaq 0x16661(%rip), %rcx     # 0x1ebe7
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x22708(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x880f
callq 0xeb2f
movq %rax, %r12
movl (%r14), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16669(%rip), %rsi     # 0x1ec2e
jmp 0x87f3
movq 0x219ef(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xeb2f
movq %rax, %r15
callq 0x5070
movq %rax, %r14
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x165c1(%rip), %rsi     # 0x1ebb5
leaq 0x165ec(%rip), %rcx     # 0x1ebe7
movq %rbx, %rdi
movq %r15, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x22693(%rip), %rax     # 0x2aca8
movq (%rax), %r15
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
testq %r15, %r15
je 0x880f
callq 0xeb2f
movq %rax, %r12
movl (%r14), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16576(%rip), %rsi     # 0x1ebb5
leaq 0x165a1(%rip), %rcx     # 0x1ebe7
jmp 0x87fc
movq 0x2196e(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xeb2f
movq %rax, %r12
callq 0x5070
movq %rax, %r14
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x1657b(%rip), %rsi     # 0x1ebf0
leaq 0x1656b(%rip), %rcx     # 0x1ebe7
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x22612(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x880f
callq 0xeb2f
movq %rax, %r12
movl (%r14), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16535(%rip), %rsi     # 0x1ebf0
jmp 0x87f3
movl 0x21d12(%rip), %edi     # 0x2a3d8
leaq 0x28(%rsp), %rsi
movl $0x4, %edx
callq 0x5250
cmpq $0x4, %rax
jne 0x8785
cmpl $0x1002, 0x28(%rsp)     # imm = 0x1002
jne 0x8785
movq 0x2200a(%rip), %rax     # 0x2a6fe
movq (%rax), %rax
testq %rax, %rax
je 0x8823
leaq 0x21cd9(%rip), %rdi     # 0x2a3e0
callq *%rax
testl %eax, %eax
je 0x8823
movq 0x218a8(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xeb2f
movq %rax, %r12
callq 0x5070
movq %rax, %r14
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x1654b(%rip), %rsi     # 0x1ec86
leaq 0x164a5(%rip), %rcx     # 0x1ebe7
xorl %ebx, %ebx
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x2254a(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x880f
callq 0xeb2f
movq %rax, %r12
movl (%r14), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16503(%rip), %rsi     # 0x1ec86
jmp 0x87f3
movq 0x21834(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xeb2f
movq %rax, %r12
callq 0x5070
movq %rax, %r14
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x164ac(%rip), %rsi     # 0x1ec5b
leaq 0x16431(%rip), %rcx     # 0x1ebe7
xorl %ebx, %ebx
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x224d6(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x880f
callq 0xeb2f
movq %rax, %r12
movl (%r14), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16468(%rip), %rsi     # 0x1ec5b
leaq 0x163ed(%rip), %rcx     # 0x1ebe7
xorl %ebx, %ebx
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
movl %ebx, %eax
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%r14), %rax
testq %rax, %rax
je 0x8834
leaq 0x21bae(%rip), %rdi     # 0x2a3e0
callq *%rax
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x8846
leaq 0x21b9c(%rip), %rdi     # 0x2a3e0
callq *%rax
movq 0x10(%r14), %rax
testq %rax, %rax
je 0x886b
movb 0x21da0(%rip), %cl      # 0x2a5f5
testb %cl, %cl
je 0x886b
movl 0x21c07(%rip), %esi     # 0x2a466
movzbl %cl, %edi
callq *%rax
movb $0x0, 0x21d8a(%rip)     # 0x2a5f5
movq 0x18(%r14), %rax
testq %rax, %rax
je 0x88b9
leaq 0x2c(%rsp), %rdi
callq *%rax
cmpl $0x19, %eax
jne 0x889b
leaq 0x2c(%rsp), %rbx
movl $0x1, %edi
callq 0x5540
movq %rbx, %rdi
callq *0x18(%r14)
cmpl $0x19, %eax
je 0x8885
cmpl $0x3, 0x2c(%rsp)
jne 0x88b9
movq 0x21b57(%rip), %rdi     # 0x2a400
testq %rdi, %rdi
je 0x88b9
movq 0x20(%r14), %rax
testq %rax, %rax
je 0x88b9
callq *%rax
cmpl $0x2, 0x2c(%rsp)
jne 0x88d6
movq 0x70(%r14), %rax
testq %rax, %rax
je 0x88cb
callq *%rax
movq 0x78(%r14), %rax
testq %rax, %rax
je 0x88d6
callq *%rax
movq 0x30(%r14), %rax
testq %rax, %rax
je 0x88e8
leaq 0x21afa(%rip), %rdi     # 0x2a3e0
callq *%rax
movq %r15, 0x30(%rsp)
movq 0x28(%r14), %rax
testq %rax, %rax
je 0x891d
cmpq $0x0, 0x21ae2(%rip)     # 0x2a3e0
jne 0x8914
cmpq $0x0, 0x21ae0(%rip)     # 0x2a3e8
jne 0x8914
cmpq $0x0, 0x21ade(%rip)     # 0x2a3f0
je 0x891d
leaq 0x21ac5(%rip), %rdi     # 0x2a3e0
callq *%rax
leaq 0xf(%rsp), %rdi
movq %r14, 0x58(%rsp)
callq *0x38(%r14)
leaq 0x70(%rsp), %r14
movl $0x1, (%r14)
movl 0x21e77(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
movq %r14, %rsi
callq 0x5100
movl $0x0, 0x24(%rsp)
movl 0x21e60(%rip), %eax     # 0x2a7b8
movl %eax, 0x70(%rsp)
movl $0x1, %ecx
movl %ecx, 0x74(%rsp)
movl 0x21a6d(%rip), %eax     # 0x2a3d8
movl %eax, 0x78(%rsp)
movl %ecx, 0x7c(%rsp)
movl $0x2, %esi
movq %r14, %rdi
movl $0x3a98, %edx           # imm = 0x3A98
callq 0x53c0
movl %eax, %ebx
testl %eax, %eax
jns 0x8995
callq 0x5070
cmpl $0x4, (%rax)
je 0x8973
testl %ebx, %ebx
je 0x942f
jle 0x945f
xorl %ebp, %ebp
movl 0x70(%rsp,%rbp,8), %ebx
movswl 0x76(%rsp,%rbp,8), %r12d
testb $0x38, %r12b
je 0x8a91
movq 0x21600(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xeb2f
movq %r14, %rdi
leaq 0x162d9(%rip), %r15     # 0x1ecab
movq %r15, %rsi
movq %rax, %rdx
leaq 0x16208(%rip), %r14     # 0x1ebe7
movq %r14, %rcx
xorl %eax, %eax
callq 0x52c0
leaq 0x222b8(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x8a10
callq 0xeb2f
movq %r13, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %r14, %rcx
xorl %eax, %eax
callq 0x52c0
movq 0x215a9(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xeb2f
movq %r14, %rdi
leaq 0x1596d(%rip), %r14     # 0x1e396
movq %r14, %rsi
movq %rax, %rdx
movl %ebx, %ecx
movl %r12d, %r8d
xorl %eax, %eax
callq 0x52c0
leaq 0x22266(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x8a64
callq 0xeb2f
movq %r13, %rdi
movq %r14, %rsi
movq %rax, %rdx
movl %ebx, %ecx
movl %r12d, %r8d
xorl %eax, %eax
callq 0x52c0
movl $0x1000, 0x10(%rsp)     # imm = 0x1000
movl 0x21966(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
movl $0x14, %r15d
testb $0x10, %r12b
jne 0x93e9
movl $0x17, %r15d
testb $0x1, %r12b
je 0x93e9
cmpl 0x21d11(%rip), %ebx     # 0x2a7b8
jne 0x9174
movl $0x4, %edx
movl %ebx, %edi
leaq 0x60(%rsp), %rsi
callq 0x5250
cmpq $0x4, %rax
jne 0x9174
xorl %edi, %edi
callq 0x5220
movl 0x60(%rsp), %eax
cmpl $0x2, %eax
movq 0x58(%rsp), %r15
je 0x8bd3
cmpl $0x1, %eax
je 0x8b4c
testl %eax, %eax
jne 0x9174
cmpb $0x1, 0xf(%rsp)
je 0x8b02
cmpb $0x0, 0x21af9(%rip)     # 0x2a5f5
je 0x9174
callq 0xef20
movq 0x30(%rsp), %r14
cmpq %rax, %r14
jbe 0x8dac
callq 0xef20
movq %r14, %rcx
subq %rax, %rcx
addq $0x3e7, %rcx            # imm = 0x3E7
shrq $0x3, %rcx
movq %rcx, %rax
movabsq $0x20c49ba5e353f7cf, %rcx # imm = 0x20C49BA5E353F7CF
mulq %rcx
movq %rdx, %rdi
shrq $0x4, %rdi
callq 0x5220
jmp 0x9174
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x8b57
callq *%rax
movq 0x68(%r15), %rax
testq %rax, %rax
je 0x8b62
callq *%rax
cmpb $0x0, 0x218c7(%rip)     # 0x2a430
je 0x8b88
cmpb $0x1, 0xd(%rsp)
je 0x8b88
leaq 0xd(%rsp), %rdi
movl $0x4, %esi
callq *0x48(%r15)
testl %eax, %eax
je 0x8e50
movb $0x1, 0xd(%rsp)
cmpb $0x0, 0x2189d(%rip)     # 0x2a431
je 0x8cb3
cmpb $0x1, 0xe(%rsp)
je 0x8cb3
cmpb $0x0, 0x21884(%rip)     # 0x2a430
je 0x8cba
leaq 0x20787(%rip), %rax     # 0x29340
cmpq %rax, 0x21b46(%rip)     # 0x2a706
je 0x8cba
movb 0xd(%rsp), %al
movb %al, 0xe(%rsp)
jmp 0x8cc8
cmpb $0x0, 0x21856(%rip)     # 0x2a430
je 0x8bf3
cmpb $0x2, 0xd(%rsp)
jne 0x8bf3
leaq 0x217f6(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x50(%r15)
cmpb $0x0, 0x21837(%rip)     # 0x2a431
je 0x8c2c
cmpb $0x2, 0xe(%rsp)
jne 0x8c2c
cmpb $0x0, 0x21826(%rip)     # 0x2a430
je 0x8c1c
leaq 0x2072d(%rip), %rax     # 0x29340
cmpq %rax, 0x21aec(%rip)     # 0x2a706
jne 0x8c2c
leaq 0x217bd(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
callq *0x50(%r15)
cmpl $0x0, 0x216c1(%rip)     # 0x2a2f4
je 0x8c7f
movl $0x0, 0x216b5(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x218bd(%rip)    # 0x2a506
movups %xmm0, 0x218c6(%rip)    # 0x2a516
movups %xmm0, 0x218cf(%rip)    # 0x2a526
movups %xmm0, 0x218d8(%rip)    # 0x2a536
movups %xmm0, 0x218e1(%rip)    # 0x2a546
movups %xmm0, 0x218ea(%rip)    # 0x2a556
movups %xmm0, 0x218f1(%rip)    # 0x2a564
leaq 0x21766(%rip), %rdi     # 0x2a3e0
callq 0x1d552
movq 0x21a78(%rip), %rax     # 0x2a6fe
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x8c91
callq *%rax
movl $0x1000, 0x10(%rsp)     # imm = 0x1000
movl 0x21739(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
jmp 0x9384
movb $0x1, 0xe(%rsp)
jmp 0x8cc8
leaq 0xe(%rsp), %rdi
movl $0x6, %esi
callq *0x48(%r15)
movb 0xd(%rsp), %cl
movl %ecx, %edx
xorb $0x1, %dl
movb 0xe(%rsp), %al
movl %eax, %esi
xorb $0x1, %sil
orb %dl, %sil
jne 0x8d35
cmpl $0x0, 0x2160d(%rip)     # 0x2a2f4
je 0x8d62
movl $0x0, 0x21601(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x21809(%rip)    # 0x2a506
movups %xmm0, 0x21812(%rip)    # 0x2a516
movups %xmm0, 0x2181b(%rip)    # 0x2a526
movups %xmm0, 0x21824(%rip)    # 0x2a536
movups %xmm0, 0x2182d(%rip)    # 0x2a546
movups %xmm0, 0x21836(%rip)    # 0x2a556
movups %xmm0, 0x2183d(%rip)    # 0x2a564
leaq 0x216b2(%rip), %rdi     # 0x2a3e0
callq 0x1d552
jmp 0x8d62
cmpb $0x2, %cl
sete %dl
cmpb $0x2, %al
sete %sil
orb %dl, %sil
cmpb $0x1, %sil
jne 0x8d62
xorl %edx, %edx
cmpb $0x2, %cl
sete %dl
shll $0x4, %edx
leal 0x40(%rdx), %edi
cmpb $0x2, %al
cmovnel %edx, %edi
callq 0x96aa
cmpb $0x0, 0x216c7(%rip)     # 0x2a430
je 0x8d72
cmpb $0x1, 0xd(%rsp)
je 0x8d8a
cmpb $0x0, 0x216b8(%rip)     # 0x2a431
je 0x9174
cmpb $0x1, 0xe(%rsp)
jne 0x9174
movl $0x0, 0x10(%rsp)
movl 0x21a1c(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
jmp 0x9174
cmpb $0x0, 0x2167d(%rip)     # 0x2a430
je 0x904f
cmpb $0x2, 0xd(%rsp)
je 0x904f
leaq 0x21615(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x40(%r15)
testl %eax, %eax
jle 0x902e
movq 0x21605(%rip), %rax     # 0x2a3e8
movl $0x1, %r12d
testq %rax, %rax
je 0x9031
cmpb $0x0, (%rax)
je 0x9031
movq 0x215ee(%rip), %rax     # 0x2a3f0
testq %rax, %rax
je 0x9031
cmpb $0x0, (%rax)
je 0x9031
movl 0x215dd(%rip), %r14d    # 0x2a3f8
xorl %eax, %eax
cmpl $0x1, %r14d
sete %al
incl %eax
movl %eax, 0x215cc(%rip)     # 0x2a3f8
leaq 0x215ad(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x40(%r15)
testl %eax, %eax
je 0x902e
movl %r14d, 0x215ad(%rip)    # 0x2a3f8
jmp 0x9031
cmpb $0x2, 0xd(%rsp)
jne 0x8e79
cmpl $0x0, 0x216a8(%rip)     # 0x2a506
jne 0x8e79
leaq 0x21579(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x58(%r15)
testl %eax, %eax
je 0x8e79
movb $0x1, 0xd(%rsp)
cmpb $0x2, 0xd(%rsp)
jne 0x8b8d
movq 0x2187b(%rip), %rax     # 0x2a706
cmpq 0x21156(%rip), %rax     # 0x29fe8
sete %cl
cmpq 0x2112c(%rip), %rax     # 0x29fc8
sete %dl
orb %cl, %dl
jne 0x8b8d
movl 0x21658(%rip), %r14d    # 0x2a506
leaq 0x2152b(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x58(%rax)
testl %eax, %eax
jne 0x9019
movl %r14d, %r15d
shrl $0x8, %r15d
movl %r14d, %r12d
shrl $0x10, %r12d
movl %r14d, %eax
andl $0xff000000, %eax       # imm = 0xFF000000
movl $0xff, %edx
andl %edx, %r12d
movl %r12d, %ecx
shll $0x10, %ecx
orl %eax, %ecx
andl %edx, %r15d
movl %r15d, 0x38(%rsp)
shll $0x8, %r15d
orl %ecx, %r15d
movl %r14d, %r13d
andl %edx, %r14d
orl %r14d, %r15d
cmpl %r15d, 0x215fc(%rip)    # 0x2a506
jne 0x8f19
cmpl $0x0, 0x214bd(%rip)     # 0x2a3d0
je 0x9007
shrl $0x18, %r13d
movq 0x2109c(%rip), %rax     # 0x29fc0
movq (%rax), %rax
movq %rax, 0x40(%rsp)
callq 0xeb2f
movzbl 0x215d1(%rip), %ecx     # 0x2a509
movq %rcx, 0x50(%rsp)
movzbl 0x215c4(%rip), %ecx     # 0x2a508
movq %rcx, 0x48(%rsp)
movzbl 0x215b6(%rip), %r10d    # 0x2a507
movzbl 0x215ad(%rip), %r11d    # 0x2a506
subq $0x8, %rsp
movq 0x48(%rsp), %rdi
leaq 0x15ec0(%rip), %rsi     # 0x1ee29
movq %rax, %rdx
movl %r13d, 0x48(%rsp)
movl %r13d, %ecx
movl %r12d, %r8d
movl 0x40(%rsp), %r9d
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x60(%rsp)
pushq 0x70(%rsp)
pushq %r14
callq 0x52c0
addq $0x30, %rsp
leaq 0x21d0c(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x9007
callq 0xeb2f
movzbl 0x21559(%rip), %ecx     # 0x2a509
movq %rcx, 0x50(%rsp)
movzbl 0x2154c(%rip), %ecx     # 0x2a508
movq %rcx, 0x48(%rsp)
movzbl 0x2153e(%rip), %r10d    # 0x2a507
movzbl 0x21535(%rip), %r11d    # 0x2a506
subq $0x8, %rsp
movq %r13, %rdi
leaq 0x15e4a(%rip), %rsi     # 0x1ee29
movq %rax, %rdx
movl 0x48(%rsp), %ecx
movl %r12d, %r8d
movl 0x40(%rsp), %r9d
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x60(%rsp)
pushq 0x70(%rsp)
pushq %r14
callq 0x52c0
addq $0x30, %rsp
cmpl %r15d, 0x214f8(%rip)    # 0x2a506
movq 0x58(%rsp), %r15
je 0x8b8d
leaq 0x213c0(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x50(%r15)
jmp 0x8b88
movl %eax, %r12d
testl %r12d, %r12d
jne 0x904f
leaq 0x213a3(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x58(%r15)
testl %eax, %eax
jne 0x904f
movb $0x2, 0xd(%rsp)
cmpb $0x0, 0x213db(%rip)     # 0x2a431
je 0x90af
cmpb $0x2, 0xe(%rsp)
je 0x90af
cmpb $0x0, 0x213ca(%rip)     # 0x2a430
je 0x9082
leaq 0x202d1(%rip), %rax     # 0x29340
cmpq %rax, 0x21690(%rip)     # 0x2a706
je 0x9082
movb 0xd(%rsp), %al
movb %al, 0xe(%rsp)
jmp 0x90af
leaq 0x21357(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
callq *0x40(%r15)
testl %eax, %eax
jne 0x90af
leaq 0x21343(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
callq *0x58(%r15)
testl %eax, %eax
jne 0x90af
movb $0x2, 0xe(%rsp)
cmpb $0x0, 0x2137a(%rip)     # 0x2a430
setne %cl
movb 0xd(%rsp), %al
cmpb $0x1, %al
sete %dl
testb %dl, %cl
jne 0x90e8
cmpb $0x0, 0x21364(%rip)     # 0x2a431
setne %dl
movb 0xe(%rsp), %cl
cmpb $0x1, %cl
sete %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x9407
movl $0x3c, %r12d
cmpl $0x4, 0x24(%rsp)
ja 0x9104
movl 0x24(%rsp), %eax
leaq 0x15390(%rip), %rcx     # 0x1e490
movl (%rcx,%rax,4), %r12d
movq 0x20eb5(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xeb2f
movq %r14, %rdi
leaq 0x15ba4(%rip), %r14     # 0x1ecc1
movq %r14, %rsi
movq %rax, %rdx
movq %r12, %rcx
xorl %eax, %eax
callq 0x52c0
leaq 0x21b74(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x9154
callq 0xeb2f
movq %r13, %rdi
movq %r14, %rsi
movq %rax, %rdx
movq %r12, %rcx
xorl %eax, %eax
callq 0x52c0
incl 0x24(%rsp)
movl %r12d, %edi
callq 0x5220
imulq $0x3e8, %r12, %r14      # imm = 0x3E8
callq 0xef20
addq %r14, %rax
movq %rax, 0x30(%rsp)
xorl %r15d, %r15d
cmpl 0x2125b(%rip), %ebx     # 0x2a3d8
jne 0x93e9
movl $0x4, %edx
movl %ebx, %edi
leaq 0x28(%rsp), %rsi
callq 0x5250
cmpq $0x4, %rax
jne 0x93e9
movl 0x28(%rsp), %eax
movl $0xffffeffd, %ecx       # imm = 0xFFFFEFFD
addl %ecx, %eax
cmpl $0x4, %eax
ja 0x93e9
leaq 0x152bb(%rip), %rcx     # 0x1e474
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x14, %r15d
cmpl $0x0, 0x21125(%rip)     # 0x2a2f4
je 0x93e9
movl $0x0, 0x21115(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x2131d(%rip)    # 0x2a506
movups %xmm0, 0x21326(%rip)    # 0x2a516
movups %xmm0, 0x2132f(%rip)    # 0x2a526
movups %xmm0, 0x21338(%rip)    # 0x2a536
movups %xmm0, 0x21341(%rip)    # 0x2a546
movups %xmm0, 0x2134a(%rip)    # 0x2a556
movups %xmm0, 0x21351(%rip)    # 0x2a564
leaq 0x211c6(%rip), %rdi     # 0x2a3e0
callq 0x1d552
jmp 0x93e9
movl $0xf, %edx
movl %ebx, %edi
leaq 0x10(%rsp), %rsi
callq 0x5250
cmpq $0xf, %rax
jne 0x93e9
movb 0x17(%rsp), %al
movb %al, 0x213ac(%rip)      # 0x2a5f5
movl 0x1b(%rsp), %edi
callq 0xef64
movl %eax, 0x2120e(%rip)     # 0x2a466
movq 0x20d61(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xeb2f
movzbl 0x21387(%rip), %ecx     # 0x2a5f5
movl 0x211f1(%rip), %r8d     # 0x2a466
movq %rbx, %rdi
leaq 0x15a98(%rip), %r14     # 0x1ed17
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x21a15(%rip), %rax     # 0x2aca8
movq (%rax), %rbx
testq %rbx, %rbx
je 0x92be
callq 0xeb2f
movzbl 0x2134e(%rip), %ecx     # 0x2a5f5
movl 0x211b8(%rip), %r8d     # 0x2a466
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
cmpb $0x0, 0x21330(%rip)     # 0x2a5f5
je 0x93e9
movl $0x0, 0x64(%rsp)
movl 0x214db(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x64(%rsp), %rsi
jmp 0x93d8
cmpb $0x2, 0xd(%rsp)
je 0x92f6
cmpb $0x2, 0xe(%rsp)
jne 0x9306
callq 0xef20
addq $0x3e8, %rax            # imm = 0x3E8
movq %rax, 0x30(%rsp)
movl $0x1, 0x10(%rsp)
jmp 0x93c8
movq 0x20ca6(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xeb2f
movq %rbx, %rdi
leaq 0x159c8(%rip), %r14     # 0x1ecf4
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x21968(%rip), %rax     # 0x2aca8
movq (%rax), %rbx
testq %rbx, %rbx
je 0x935d
callq 0xeb2f
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
movl $0x1000, 0x10(%rsp)     # imm = 0x1000
movl 0x2106d(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
movl $0x1, 0x21050(%rip)     # 0x2a3d4
movl $0x14, %r15d
jmp 0x93e9
leaq 0xf(%rsp), %rdi
movq 0x58(%rsp), %rax
callq *0x38(%rax)
cmpb $0x1, 0xf(%rsp)
jne 0x93df
cmpb $0x0, 0x21089(%rip)     # 0x2a430
je 0x93b0
cmpb $0x1, 0xd(%rsp)
je 0x93c0
cmpb $0x0, 0x2107a(%rip)     # 0x2a431
je 0x93e9
cmpb $0x1, 0xe(%rsp)
jne 0x93e9
movl $0x0, 0x10(%rsp)
movl 0x213e6(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
jmp 0x93e9
callq 0xef20
movq %rax, 0x30(%rsp)
cmpl $0x17, %r15d
je 0x93f8
testl %r15d, %r15d
jne 0x950a
incq %rbp
cmpq $0x1, %rbp
je 0x89a5
jmp 0x9457
cmpb $0x2, %al
sete %al
cmpb $0x2, %cl
sete %cl
orb %al, %cl
cmpb $0x1, %cl
jne 0x9174
movl $0x0, 0x24(%rsp)
callq 0xef20
jmp 0x916f
movl $0x1, 0x10(%rsp)
movl 0x21377(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x10(%rsp), %rsi
callq 0x5100
movl $0xe, %r15d
jmp 0x950f
xorl %r15d, %r15d
jmp 0x950a
movq 0x20b5a(%rip), %rax     # 0x29fc0
movq (%rax), %r13
callq 0xeb2f
movq %rax, %r14
callq 0x5070
movq %rax, 0x38(%rsp)
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
movq %rax, %r10
subq $0x8, %rsp
movq %r13, %rdi
leaq 0x14ce2(%rip), %r12     # 0x1e177
movq %r12, %rsi
movq %r14, %rdx
leaq 0x15745(%rip), %rcx     # 0x1ebe7
movl %ebx, %r8d
movl %ebp, %r9d
xorl %eax, %eax
pushq %r10
callq 0x52c0
addq $0x10, %rsp
leaq 0x217ec(%rip), %rax     # 0x2aca8
movq (%rax), %r13
movl $0x14, %r15d
testq %r13, %r13
je 0x950a
callq 0xeb2f
movq %rax, %r14
movq 0x38(%rsp), %rax
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
movq %rax, %r10
subq $0x8, %rsp
movq %r13, %rdi
movq %r12, %rsi
movq %r14, %rdx
leaq 0x156f0(%rip), %rcx     # 0x1ebe7
movl %ebx, %r8d
movl %ebp, %r9d
xorl %eax, %eax
pushq %r10
callq 0x52c0
addq $0x10, %rsp
leaq 0x70(%rsp), %r14
testl %r15d, %r15d
je 0x8952
cmpl $0xe, %r15d
je 0x8952
cmpl $0x14, %r15d
jne 0x96a5
cmpl $0x0, 0x20dc1(%rip)     # 0x2a2f4
je 0x957f
movl $0x0, 0x20db5(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x20fbd(%rip)    # 0x2a506
movups %xmm0, 0x20fc6(%rip)    # 0x2a516
movups %xmm0, 0x20fcf(%rip)    # 0x2a526
movups %xmm0, 0x20fd8(%rip)    # 0x2a536
movups %xmm0, 0x20fe1(%rip)    # 0x2a546
movups %xmm0, 0x20fea(%rip)    # 0x2a556
movups %xmm0, 0x20ff1(%rip)    # 0x2a564
leaq 0x20e66(%rip), %rdi     # 0x2a3e0
callq 0x1d552
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x9613
xorl %esi, %esi
callq 0x5510
testl %eax, %eax
je 0x9613
movq 0x20a21(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xeb2f
movq %rax, %r15
callq 0x5070
movq %rax, %rbx
movl (%rax), %edi
callq 0x5530
leaq 0x15796(%rip), %rsi     # 0x1ed56
leaq 0x15620(%rip), %rcx     # 0x1ebe7
movq %r14, %rdi
movq %r15, %rdx
movq %rax, %r8
xorl %eax, %eax
callq 0x52c0
leaq 0x216ca(%rip), %rax     # 0x2aca8
movq (%rax), %r14
testq %r14, %r14
je 0x9613
callq 0xeb2f
movq %rax, %r15
movl (%rbx), %edi
callq 0x5530
leaq 0x1575a(%rip), %rsi     # 0x1ed56
leaq 0x155e4(%rip), %rcx     # 0x1ebe7
movq %r14, %rdi
movq %r15, %rdx
movq %rax, %r8
xorl %eax, %eax
callq 0x52c0
movl 0x2119b(%rip), %edi     # 0x2a7b4
callq 0x5230
movl 0x21194(%rip), %edi     # 0x2a7b8
callq 0x5230
movl 0x20da9(%rip), %edi     # 0x2a3d8
callq 0x5230
movl 0x20da2(%rip), %edi     # 0x2a3dc
callq 0x5230
movq 0x2097a(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xeb2f
leaq 0x14bd3(%rip), %rsi     # 0x1e228
leaq 0x1558b(%rip), %rcx     # 0x1ebe7
xorl %ebx, %ebx
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x21636(%rip), %rax     # 0x2aca8
movq (%rax), %r14
testq %r14, %r14
je 0x880f
callq 0xeb2f
leaq 0x14b9e(%rip), %rsi     # 0x1e228
leaq 0x15556(%rip), %rcx     # 0x1ebe7
xorl %ebx, %ebx
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
jmp 0x880f
jmp 0x880f