// File: /workspace/github_c_makefile_star2_O3/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, 0x1c(%rsp)
xorl %r14d, %r14d
movb %r14b, 0x7(%rsp)
movb %r14b, 0x5(%rsp)
movb %r14b, 0x6(%rsp)
callq 0xee32
movq %rax, %rbx
movq 0x2235d(%rip), %r15     # 0x2a706
movq $0x0, 0x68(%rsp)
cmpb %r14b, 0x221e3(%rip)    # 0x2a59c
je 0x83d5
leaq 0x2201e(%rip), %rdi     # 0x2a3e0
callq 0x17928
testl %eax, %eax
jne 0x83d5
movl $0x2, %edi
callq 0x5540
leaq 0x223d8(%rip), %rcx     # 0x2a7b4
movl $0x1, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x5300
testl %eax, %eax
js 0x8522
leaq 0x21fdc(%rip), %rcx     # 0x2a3d8
xorl %r14d, %r14d
movl $0x1, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x5300
testl %eax, %eax
js 0x85a3
cmpl $0x1, 0x220cb(%rip)     # 0x2a4ea
ja 0x8485
cmpb $0x0, 0x21fe0(%rip)     # 0x2a408
jne 0x8485
leaq 0x70(%rsp), %rsi
movq %rsi, 0x20(%rsp)
leaq 0x2202f(%rip), %rax     # 0x2a46a
movq %rax, 0x28(%rsp)
leaq 0x1693c(%rip), %rdi     # 0x1ed83
movl $0x100, %edx            # imm = 0x100
callq 0x50d0
testl %eax, %eax
jle 0x8485
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movb $0x0, 0x70(%rsp,%rax)
leaq 0x1692c(%rip), %rdi     # 0x1ed92
leaq 0x1301(%rip), %rsi      # 0x976e
leaq 0x20(%rsp), %rdx
callq 0x967f
testl %eax, %eax
je 0x8485
movl $0x1, %edi
callq 0x5540
leaq 0x21f54(%rip), %rcx     # 0x2a3e0
movq 0x2226b(%rip), %rax     # 0x2a6fe
movq 0x18(%rax), %rdx
xorl %r14d, %r14d
leaq 0x68(%rsp), %rdi
xorl %esi, %esi
callq 0x53d0
testl %eax, %eax
je 0x8617
movq 0x21b0b(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xea3b
movq %rax, %r12
callq 0x5070
movq %rax, %rbx
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16754(%rip), %rsi     # 0x1ec2c
leaq 0x16706(%rip), %rcx     # 0x1ebe5
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x227af(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x8767
callq 0xea3b
movq %rax, %r12
movl (%rbx), %ebx
movl %ebx, %edi
callq 0x5530
leaq 0x1670f(%rip), %rsi     # 0x1ec2c
jmp 0x874a
movq 0x21a97(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xea3b
movq %rax, %r15
callq 0x5070
movq %rax, %rbx
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16667(%rip), %rsi     # 0x1ebb3
leaq 0x16692(%rip), %rcx     # 0x1ebe5
movq %r14, %rdi
movq %r15, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x2273b(%rip), %rax     # 0x2aca8
movq (%rax), %r15
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testq %r15, %r15
je 0x8767
callq 0xea3b
movq %rax, %r12
movl (%rbx), %ebx
movl %ebx, %edi
callq 0x5530
leaq 0x1661c(%rip), %rsi     # 0x1ebb3
leaq 0x16647(%rip), %rcx     # 0x1ebe5
jmp 0x8754
movq 0x21a16(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xea3b
movq %rax, %r12
callq 0x5070
movq %rax, %rbx
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16621(%rip), %rsi     # 0x1ebee
leaq 0x16611(%rip), %rcx     # 0x1ebe5
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x226ba(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x8767
callq 0xea3b
movq %rax, %r12
movl (%rbx), %ebx
movl %ebx, %edi
callq 0x5530
leaq 0x165dc(%rip), %rsi     # 0x1ebee
jmp 0x874a
movl 0x21dbb(%rip), %edi     # 0x2a3d8
leaq 0x1c(%rsp), %rsi
movl $0x4, %edx
callq 0x5250
cmpq $0x4, %rax
jne 0x86dc
cmpl $0x1002, 0x1c(%rsp)     # imm = 0x1002
jne 0x86dc
movq 0x220b3(%rip), %rax     # 0x2a6fe
movq (%rax), %rax
testq %rax, %rax
je 0x877c
leaq 0x21d82(%rip), %rdi     # 0x2a3e0
callq *%rax
testl %eax, %eax
je 0x877c
movq 0x21951(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xea3b
movq %rax, %r12
callq 0x5070
movq %rax, %rbx
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x165f2(%rip), %rsi     # 0x1ec84
leaq 0x1654c(%rip), %rcx     # 0x1ebe5
xorl %r14d, %r14d
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x225f2(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x8767
callq 0xea3b
movq %rax, %r12
movl (%rbx), %ebx
movl %ebx, %edi
callq 0x5530
leaq 0x165aa(%rip), %rsi     # 0x1ec84
jmp 0x874a
movq 0x218dd(%rip), %rax     # 0x29fc0
movq (%rax), %r15
callq 0xea3b
movq %rax, %r12
callq 0x5070
movq %rax, %rbx
movl (%rax), %ebp
movl %ebp, %edi
callq 0x5530
leaq 0x16553(%rip), %rsi     # 0x1ec59
leaq 0x164d8(%rip), %rcx     # 0x1ebe5
xorl %r14d, %r14d
movq %r15, %rdi
movq %r12, %rdx
movl %ebp, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
leaq 0x2257e(%rip), %rax     # 0x2aca8
movq (%rax), %r15
testq %r15, %r15
je 0x8767
callq 0xea3b
movq %rax, %r12
movl (%rbx), %ebx
movl %ebx, %edi
callq 0x5530
leaq 0x1650f(%rip), %rsi     # 0x1ec59
leaq 0x16494(%rip), %rcx     # 0x1ebe5
xorl %r14d, %r14d
movq %r15, %rdi
movq %r12, %rdx
movl %ebx, %r8d
movq %rax, %r9
xorl %eax, %eax
callq 0x52c0
movl %r14d, %eax
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%r15), %rax
testq %rax, %rax
je 0x878d
leaq 0x21c55(%rip), %rdi     # 0x2a3e0
callq *%rax
movq 0x8(%r15), %rax
testq %rax, %rax
je 0x879f
leaq 0x21c43(%rip), %rdi     # 0x2a3e0
callq *%rax
movq 0x10(%r15), %rax
testq %rax, %rax
je 0x87c4
movb 0x21e47(%rip), %cl      # 0x2a5f5
testb %cl, %cl
je 0x87c4
movl 0x21cae(%rip), %esi     # 0x2a466
movzbl %cl, %edi
callq *%rax
movb $0x0, 0x21e31(%rip)     # 0x2a5f5
movq 0x18(%r15), %rax
testq %rax, %rax
je 0x8814
leaq 0x34(%rsp), %rdi
callq *%rax
cmpl $0x19, %eax
jne 0x87f4
leaq 0x34(%rsp), %r14
movl $0x1, %edi
callq 0x5540
movq %r14, %rdi
callq *0x18(%r15)
cmpl $0x19, %eax
je 0x87de
movl 0x34(%rsp), %eax
cmpl $0x3, %eax
jne 0x8818
movq 0x21bfc(%rip), %rdi     # 0x2a400
testq %rdi, %rdi
je 0x8833
movq 0x20(%r15), %rax
testq %rax, %rax
je 0x8814
callq *%rax
movl 0x34(%rsp), %eax
cmpl $0x2, %eax
jne 0x8833
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x8828
callq *%rax
movq 0x78(%r15), %rax
testq %rax, %rax
je 0x8833
callq *%rax
movq 0x30(%r15), %rax
testq %rax, %rax
je 0x8845
leaq 0x21b9d(%rip), %rdi     # 0x2a3e0
callq *%rax
movq %rbx, 0x38(%rsp)
movq 0x28(%r15), %rax
testq %rax, %rax
je 0x887a
cmpq $0x0, 0x21b85(%rip)     # 0x2a3e0
jne 0x8871
cmpq $0x0, 0x21b83(%rip)     # 0x2a3e8
jne 0x8871
cmpq $0x0, 0x21b81(%rip)     # 0x2a3f0
je 0x887a
leaq 0x21b68(%rip), %rdi     # 0x2a3e0
callq *%rax
leaq 0x78(%rsp), %r14
leaq 0x7(%rsp), %rdi
movq %r15, 0x8(%rsp)
callq *0x38(%r15)
movl $0x1, -0x8(%r14)
movl 0x21f19(%rip), %edi     # 0x2a7b4
leaq 0x70(%rsp), %r15
movl $0x4, %edx
movq %r15, %rsi
callq 0x5100
movl $0x1, %ecx
leaq 0x16406(%rip), %r13     # 0x1ecbf
leaq 0x16325(%rip), %rbp     # 0x1ebe5
movl $0x0, 0x14(%rsp)
movl 0x21eea(%rip), %eax     # 0x2a7b8
movl %eax, 0x70(%rsp)
movl %ecx, 0x74(%rsp)
movl 0x21afc(%rip), %eax     # 0x2a3d8
movl %eax, 0x78(%rsp)
movl %ecx, 0x7c(%rsp)
movl $0x2, %esi
movq %r15, %rdi
movl $0x3a98, %edx           # imm = 0x3A98
callq 0x53c0
testl %eax, %eax
jns 0x890c
movl %eax, %r14d
callq 0x5070
cmpl $0x4, (%rax)
je 0x88e4
jmp 0x9237
je 0x920b
movb $0x1, %r15b
leaq 0x70(%rsp), %rax
movl (%rax), %r12d
movswl 0x6(%rax), %r14d
testb $0x38, %r14b
je 0x8a0f
movl %r15d, 0x18(%rsp)
movq %r13, %rbx
movq 0x21685(%rip), %rax     # 0x29fc0
movq (%rax), %r13
callq 0xea3b
movq %r13, %rdi
movq %rbp, %r15
leaq 0x16359(%rip), %rbp     # 0x1eca9
movq %rbp, %rsi
movq %rax, %rdx
movq %r15, %rcx
xorl %eax, %eax
callq 0x52c0
leaq 0x22341(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x8987
callq 0xea3b
movq %r13, %rdi
movq %rbp, %rsi
movq %rax, %rdx
movq %r15, %rcx
xorl %eax, %eax
callq 0x52c0
movq %r15, %rbp
movq 0x2162f(%rip), %rax     # 0x29fc0
movq (%rax), %r13
callq 0xea3b
movq %r13, %rdi
leaq 0x159f3(%rip), %r15     # 0x1e396
movq %r15, %rsi
movq %rax, %rdx
movl %r12d, %ecx
movl %r14d, %r8d
xorl %eax, %eax
callq 0x52c0
leaq 0x222eb(%rip), %rax     # 0x2aca8
movq (%rax), %r13
testq %r13, %r13
je 0x89e0
callq 0xea3b
movq %r13, %rdi
movq %r15, %rsi
movq %rax, %rdx
movl %r12d, %ecx
movl %r14d, %r8d
xorl %eax, %eax
callq 0x52c0
movl $0x1000, 0x20(%rsp)     # imm = 0x1000
movl 0x219ea(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
leaq 0x20(%rsp), %rsi
callq 0x5100
testb $0x10, %r14b
movq %rbx, %r13
movl 0x18(%rsp), %r15d
jne 0x92d5
testb $0x1, %r14b
je 0x91cc
cmpl 0x21d98(%rip), %r12d    # 0x2a7b8
jne 0x902d
movl $0x4, %edx
movl %r12d, %edi
leaq 0x58(%rsp), %rsi
callq 0x5250
cmpq $0x4, %rax
jne 0x902d
xorl %edi, %edi
callq 0x5220
movl 0x58(%rsp), %eax
testl %eax, %eax
je 0x8af6
cmpl $0x1, %eax
je 0x8a68
cmpl $0x2, %eax
jne 0x902d
jmp 0x9450
movq 0x8(%rsp), %rax
movq 0x60(%rax), %rax
testq %rax, %rax
je 0x8a78
callq *%rax
movq 0x8(%rsp), %rax
movq 0x68(%rax), %rax
testq %rax, %rax
je 0x8a88
callq *%rax
cmpb $0x0, 0x219a1(%rip)     # 0x2a430
je 0x8ab2
cmpb $0x1, 0x5(%rsp)
je 0x8ab2
leaq 0x5(%rsp), %rdi
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x48(%rax)
testl %eax, %eax
je 0x8cf9
movb $0x1, 0x5(%rsp)
cmpb $0x0, 0x21973(%rip)     # 0x2a431
je 0x8b54
cmpb $0x1, 0x6(%rsp)
je 0x8b54
cmpb $0x0, 0x2195a(%rip)     # 0x2a430
je 0x8b5d
leaq 0x2085d(%rip), %rax     # 0x29340
cmpq %rax, 0x21c1c(%rip)     # 0x2a706
je 0x8b5d
movb 0x5(%rsp), %al
movb %al, 0x6(%rsp)
jmp 0x8b73
cmpb $0x1, 0x7(%rsp)
je 0x8b0a
cmpb $0x0, 0x21af1(%rip)     # 0x2a5f5
je 0x902d
callq 0xee32
movq 0x38(%rsp), %rbx
cmpq %rax, %rbx
jbe 0x8c53
callq 0xee32
movq %rbx, %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 0x902d
movb $0x1, 0x6(%rsp)
movb $0x1, %al
jmp 0x8b73
leaq 0x6(%rsp), %rdi
movl $0x6, %esi
movq 0x8(%rsp), %rax
callq *0x48(%rax)
movb 0x6(%rsp), %al
movb 0x5(%rsp), %cl
movl %ecx, %edx
xorb $0x1, %dl
movl %eax, %esi
xorb $0x1, %sil
orb %dl, %sil
jne 0x8bdc
cmpl $0x0, 0x21766(%rip)     # 0x2a2f4
je 0x8c09
movl $0x0, 0x2175a(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x21962(%rip)    # 0x2a506
movups %xmm0, 0x2196b(%rip)    # 0x2a516
movups %xmm0, 0x21974(%rip)    # 0x2a526
movups %xmm0, 0x2197d(%rip)    # 0x2a536
movups %xmm0, 0x21986(%rip)    # 0x2a546
movups %xmm0, 0x2198f(%rip)    # 0x2a556
movups %xmm0, 0x21996(%rip)    # 0x2a564
leaq 0x2180b(%rip), %rdi     # 0x2a3e0
callq 0x1d244
jmp 0x8c09
cmpb $0x2, %cl
sete %dl
cmpb $0x2, %al
sete %sil
orb %dl, %sil
cmpb $0x1, %sil
jne 0x8c09
xorl %edx, %edx
cmpb $0x2, %cl
sete %dl
shll $0x4, %edx
leal 0x40(%rdx), %edi
cmpb $0x2, %al
cmovnel %edx, %edi
callq 0x9602
cmpb $0x0, 0x21820(%rip)     # 0x2a430
je 0x8c19
cmpb $0x1, 0x5(%rsp)
je 0x8c31
cmpb $0x0, 0x21811(%rip)     # 0x2a431
je 0x902d
cmpb $0x1, 0x6(%rsp)
jne 0x902d
movl $0x0, 0x20(%rsp)
movl 0x21b75(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x20(%rsp), %rsi
callq 0x5100
jmp 0x902d
cmpb $0x0, 0x217d6(%rip)     # 0x2a430
je 0x8f0a
cmpb $0x2, 0x5(%rsp)
je 0x8f0a
leaq 0x2176e(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x40(%rax)
testl %eax, %eax
jle 0x8eeb
movq 0x2175a(%rip), %rax     # 0x2a3e8
testq %rax, %rax
je 0x8f0a
cmpb $0x0, (%rax)
je 0x8f0a
movq 0x21749(%rip), %rax     # 0x2a3f0
testq %rax, %rax
je 0x8f0a
cmpb $0x0, (%rax)
je 0x8f0a
movl 0x21738(%rip), %r14d    # 0x2a3f8
xorl %eax, %eax
cmpl $0x1, %r14d
sete %al
incl %eax
movl %eax, 0x21727(%rip)     # 0x2a3f8
leaq 0x21708(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x40(%rax)
testl %eax, %eax
je 0x8eed
movl %r14d, 0x21704(%rip)    # 0x2a3f8
jmp 0x8f0a
movb 0x5(%rsp), %al
cmpb $0x2, %al
jne 0x8d2a
cmpl $0x0, 0x217fe(%rip)     # 0x2a506
jne 0x8d2a
leaq 0x216cf(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x58(%rax)
testl %eax, %eax
jne 0x8ab2
movb 0x5(%rsp), %al
cmpb $0x2, %al
jne 0x8ab7
movq 0x219cd(%rip), %rax     # 0x2a706
cmpq 0x212a8(%rip), %rax     # 0x29fe8
sete %cl
cmpq 0x2127e(%rip), %rax     # 0x29fc8
sete %dl
orb %cl, %dl
jne 0x8ab7
movl 0x217ab(%rip), %ebx     # 0x2a506
leaq 0x2167e(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x58(%rax)
testl %eax, %eax
jne 0x8ed2
movl %ebx, %r13d
shrl $0x8, %r13d
movl %ebx, %r14d
shrl $0x10, %r14d
movl %ebx, %eax
andl $0xff000000, %eax       # imm = 0xFF000000
movl $0xff, %edx
andl %edx, %r14d
movl %r14d, %ecx
shll $0x10, %ecx
orl %eax, %ecx
andl %edx, %r13d
movl %r13d, 0x18(%rsp)
shll $0x8, %r13d
orl %ecx, %r13d
movl %ebx, %eax
andl %edx, %eax
movq %rax, 0x60(%rsp)
orl %eax, %r13d
cmpl %r13d, 0x2174d(%rip)    # 0x2a506
jne 0x8dc8
cmpl $0x0, 0x2160e(%rip)     # 0x2a3d0
je 0x8ebe
shrl $0x18, %ebx
movq 0x211ee(%rip), %rax     # 0x29fc0
movq (%rax), %rax
movq %rax, 0x40(%rsp)
callq 0xea3b
movzbl 0x21723(%rip), %ecx     # 0x2a509
movq %rcx, 0x50(%rsp)
movzbl 0x21716(%rip), %ecx     # 0x2a508
movq %rcx, 0x48(%rsp)
movzbl 0x21708(%rip), %r10d    # 0x2a507
movzbl 0x216ff(%rip), %r11d    # 0x2a506
subq $0x8, %rsp
movq 0x48(%rsp), %rdi
leaq 0x16010(%rip), %rsi     # 0x1ee27
movq %rax, %rdx
movl %ebx, %ecx
movl %r14d, %r8d
movl 0x20(%rsp), %r9d
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x60(%rsp)
pushq 0x70(%rsp)
pushq 0x88(%rsp)
callq 0x52c0
addq $0x30, %rsp
leaq 0x21e5f(%rip), %rax     # 0x2aca8
movq (%rax), %rax
movq %rax, 0x50(%rsp)
testq %rax, %rax
je 0x8ebe
callq 0xea3b
movzbl 0x216a7(%rip), %ecx     # 0x2a509
movq %rcx, 0x48(%rsp)
movzbl 0x2169a(%rip), %ecx     # 0x2a508
movq %rcx, 0x40(%rsp)
movzbl 0x2168c(%rip), %r10d    # 0x2a507
movzbl 0x21683(%rip), %r11d    # 0x2a506
subq $0x8, %rsp
movq 0x58(%rsp), %rdi
leaq 0x15f94(%rip), %rsi     # 0x1ee27
movq %rax, %rdx
movl %ebx, %ecx
movl %r14d, %r8d
movl 0x20(%rsp), %r9d
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x58(%rsp)
pushq 0x68(%rsp)
pushq 0x88(%rsp)
callq 0x52c0
addq $0x30, %rsp
cmpl %r13d, 0x21641(%rip)    # 0x2a506
leaq 0x15df3(%rip), %r13     # 0x1ecbf
je 0x8ab7
leaq 0x21507(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x50(%rax)
jmp 0x8ab2
jne 0x8f0a
leaq 0x214ec(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
movq 0x8(%rsp), %rax
callq *0x58(%rax)
testl %eax, %eax
jne 0x8f0a
movb $0x2, 0x5(%rsp)
cmpb $0x0, 0x21520(%rip)     # 0x2a431
je 0x8f72
cmpb $0x2, 0x6(%rsp)
je 0x8f72
cmpb $0x0, 0x2150f(%rip)     # 0x2a430
je 0x8f3d
leaq 0x20416(%rip), %rax     # 0x29340
cmpq %rax, 0x217d5(%rip)     # 0x2a706
je 0x8f3d
movb 0x5(%rsp), %al
movb %al, 0x6(%rsp)
jmp 0x8f72
leaq 0x2149c(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
movq 0x8(%rsp), %rax
callq *0x40(%rax)
testl %eax, %eax
jne 0x8f72
leaq 0x21484(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
movq 0x8(%rsp), %rax
callq *0x58(%rax)
testl %eax, %eax
jne 0x8f72
movb $0x2, 0x6(%rsp)
cmpb $0x0, 0x214b7(%rip)     # 0x2a430
setne %cl
movb 0x5(%rsp), %al
cmpb $0x1, %al
sete %dl
testb %dl, %cl
jne 0x8fab
cmpb $0x0, 0x214a1(%rip)     # 0x2a431
setne %dl
movb 0x6(%rsp), %cl
cmpb $0x1, %cl
sete %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x91e3
movl $0x3c, %ebx
cmpl $0x4, 0x14(%rsp)
ja 0x8fc5
movl 0x14(%rsp), %eax
leaq 0x154ce(%rip), %rcx     # 0x1e490
movl (%rcx,%rax,4), %ebx
movq 0x20ff4(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xea3b
movq %r14, %rdi
movq %r13, %rsi
movq %rax, %rdx
movq %rbx, %rcx
xorl %eax, %eax
callq 0x52c0
leaq 0x21cba(%rip), %rax     # 0x2aca8
movq (%rax), %r14
testq %r14, %r14
je 0x900e
callq 0xea3b
movq %r14, %rdi
movq %r13, %rsi
movq %rax, %rdx
movq %rbx, %rcx
xorl %eax, %eax
callq 0x52c0
incl 0x14(%rsp)
movl %ebx, %edi
callq 0x5220
imulq $0x3e8, %rbx, %r14      # imm = 0x3E8
callq 0xee32
addq %r14, %rax
movq %rax, 0x38(%rsp)
cmpl 0x213a4(%rip), %r12d    # 0x2a3d8
jne 0x91cc
movl $0x4, %edx
movl %r12d, %edi
leaq 0x1c(%rsp), %rsi
callq 0x5250
cmpq $0x4, %rax
jne 0x91cc
movl 0x1c(%rsp), %eax
movl $0xffffeffd, %ecx       # imm = 0xFFFFEFFD
addl %ecx, %eax
cmpl $0x4, %eax
ja 0x91cc
leaq 0x15403(%rip), %rcx     # 0x1e474
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x7(%rsp), %rdi
movq 0x8(%rsp), %rax
callq *0x38(%rax)
cmpb $0x1, 0x7(%rsp)
jne 0x91c2
cmpb $0x0, 0x21397(%rip)     # 0x2a430
je 0x90a2
cmpb $0x1, 0x5(%rsp)
je 0x90ba
cmpb $0x0, 0x21388(%rip)     # 0x2a431
je 0x91cc
cmpb $0x1, 0x6(%rsp)
jne 0x91cc
movl $0x0, 0x20(%rsp)
jmp 0x91ab
movl $0xf, %edx
movl %r12d, %edi
leaq 0x20(%rsp), %rsi
callq 0x5250
cmpq $0xf, %rax
jne 0x91cc
movb 0x27(%rsp), %al
movb %al, 0x21508(%rip)      # 0x2a5f5
movl 0x2b(%rsp), %edi
callq 0xee76
movl %eax, 0x2136a(%rip)     # 0x2a466
movq 0x20ebd(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xea3b
movzbl 0x214e3(%rip), %ecx     # 0x2a5f5
movl 0x2134d(%rip), %r8d     # 0x2a466
movq %r14, %rdi
leaq 0x15bf2(%rip), %rbx     # 0x1ed15
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x21b71(%rip), %rax     # 0x2aca8
movq (%rax), %r14
testq %r14, %r14
je 0x9162
callq 0xea3b
movzbl 0x214aa(%rip), %ecx     # 0x2a5f5
movl 0x21314(%rip), %r8d     # 0x2a466
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
cmpb $0x0, 0x2148c(%rip)     # 0x2a5f5
je 0x91cc
movl $0x0, 0x5c(%rsp)
movl 0x2163b(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x5c(%rsp), %rsi
jmp 0x91bb
cmpb $0x2, 0x5(%rsp)
je 0x9193
cmpb $0x2, 0x6(%rsp)
jne 0x91a3
callq 0xee32
addq $0x3e8, %rax            # imm = 0x3E8
movq %rax, 0x38(%rsp)
movl $0x1, 0x20(%rsp)
movl 0x21603(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x20(%rsp), %rsi
callq 0x5100
jmp 0x91cc
callq 0xee32
movq %rax, 0x38(%rsp)
leaq 0x78(%rsp), %rax
testb $0x1, %r15b
movl $0x0, %r15d
jne 0x891a
jmp 0x9228
cmpb $0x2, %al
sete %al
cmpb $0x2, %cl
sete %cl
orb %al, %cl
cmpb $0x1, %cl
jne 0x902d
movl $0x0, 0x14(%rsp)
callq 0xee32
jmp 0x9028
movl $0x1, 0x20(%rsp)
movl 0x2159b(%rip), %edi     # 0x2a7b4
movl $0x4, %edx
leaq 0x20(%rsp), %rsi
callq 0x5100
leaq 0x70(%rsp), %r15
movl $0x1, %ecx
jmp 0x88c8
movq %rax, %r12
movq 0x20d7f(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xea3b
movq %rax, %r15
movl (%r12), %ebp
movl %ebp, %edi
callq 0x5530
movq %rax, %r10
subq $0x8, %rsp
leaq 0x14f12(%rip), %rsi     # 0x1e177
leaq 0x15979(%rip), %rcx     # 0x1ebe5
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %r8d
movl %ebp, %r9d
xorl %eax, %eax
pushq %r10
callq 0x52c0
addq $0x10, %rsp
leaq 0x21a1c(%rip), %rax     # 0x2aca8
movq (%rax), %rbx
testq %rbx, %rbx
je 0x92d5
callq 0xea3b
movq %rax, %r15
movl (%r12), %ebp
movl %ebp, %edi
callq 0x5530
movq %rax, %r10
subq $0x8, %rsp
leaq 0x14ec2(%rip), %rsi     # 0x1e177
leaq 0x15929(%rip), %rcx     # 0x1ebe5
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %r8d
movl %ebp, %r9d
xorl %eax, %eax
pushq %r10
callq 0x52c0
addq $0x10, %rsp
cmpl $0x0, 0x21018(%rip)     # 0x2a2f4
je 0x9328
movl $0x0, 0x2100c(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x21214(%rip)    # 0x2a506
movups %xmm0, 0x2121d(%rip)    # 0x2a516
movups %xmm0, 0x21226(%rip)    # 0x2a526
movups %xmm0, 0x2122f(%rip)    # 0x2a536
movups %xmm0, 0x21238(%rip)    # 0x2a546
movups %xmm0, 0x21241(%rip)    # 0x2a556
movups %xmm0, 0x21248(%rip)    # 0x2a564
leaq 0x210bd(%rip), %rdi     # 0x2a3e0
callq 0x1d244
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x93bc
xorl %esi, %esi
callq 0x5510
testl %eax, %eax
je 0x93bc
movq 0x20c78(%rip), %rax     # 0x29fc0
movq (%rax), %r14
callq 0xea3b
movq %rax, %r15
callq 0x5070
movq %rax, %rbx
movl (%rax), %edi
callq 0x5530
leaq 0x159eb(%rip), %rsi     # 0x1ed54
leaq 0x15875(%rip), %rcx     # 0x1ebe5
movq %r14, %rdi
movq %r15, %rdx
movq %rax, %r8
xorl %eax, %eax
callq 0x52c0
leaq 0x21921(%rip), %rax     # 0x2aca8
movq (%rax), %r14
testq %r14, %r14
je 0x93bc
callq 0xea3b
movq %rax, %r15
movl (%rbx), %edi
callq 0x5530
leaq 0x159af(%rip), %rsi     # 0x1ed54
leaq 0x15839(%rip), %rcx     # 0x1ebe5
movq %r14, %rdi
movq %r15, %rdx
movq %rax, %r8
xorl %eax, %eax
callq 0x52c0
movl 0x213f2(%rip), %edi     # 0x2a7b4
callq 0x5230
movl 0x213eb(%rip), %edi     # 0x2a7b8
callq 0x5230
movl 0x21000(%rip), %edi     # 0x2a3d8
callq 0x5230
movl 0x20ff9(%rip), %edi     # 0x2a3dc
callq 0x5230
movq 0x20bd1(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xea3b
leaq 0x14e2a(%rip), %rsi     # 0x1e228
leaq 0x157e0(%rip), %rcx     # 0x1ebe5
xorl %r14d, %r14d
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x2188c(%rip), %rax     # 0x2aca8
movq (%rax), %rbx
testq %rbx, %rbx
je 0x8767
callq 0xea3b
leaq 0x14df4(%rip), %rsi     # 0x1e228
leaq 0x157aa(%rip), %rcx     # 0x1ebe5
xorl %r14d, %r14d
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
jmp 0x8767
cmpb $0x0, 0x20fd9(%rip)     # 0x2a430
movq 0x8(%rsp), %rbx
je 0x9474
cmpb $0x2, 0x5(%rsp)
jne 0x9474
leaq 0x20f74(%rip), %rdi     # 0x2a3e0
movl $0x4, %esi
callq *0x50(%rbx)
cmpb $0x0, 0x20fb6(%rip)     # 0x2a431
je 0x94ac
cmpb $0x2, 0x6(%rsp)
jne 0x94ac
cmpb $0x0, 0x20fa5(%rip)     # 0x2a430
je 0x949d
movq 0x21272(%rip), %rax     # 0x2a706
cmpq 0x20b3d(%rip), %rax     # 0x29fd8
jne 0x94ac
leaq 0x20f3c(%rip), %rdi     # 0x2a3e0
movl $0x6, %esi
callq *0x50(%rbx)
cmpl $0x0, 0x20e41(%rip)     # 0x2a2f4
je 0x94ff
movl $0x0, 0x20e35(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x2103d(%rip)    # 0x2a506
movups %xmm0, 0x21046(%rip)    # 0x2a516
movups %xmm0, 0x2104f(%rip)    # 0x2a526
movups %xmm0, 0x21058(%rip)    # 0x2a536
movups %xmm0, 0x21061(%rip)    # 0x2a546
movups %xmm0, 0x2106a(%rip)    # 0x2a556
movups %xmm0, 0x21071(%rip)    # 0x2a564
leaq 0x20ee6(%rip), %rdi     # 0x2a3e0
callq 0x1d244
movq 0x211f8(%rip), %rax     # 0x2a6fe
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x9511
callq *%rax
leaq 0x20(%rsp), %rsi
movl $0x1000, (%rsi)         # imm = 0x1000
movl 0x20eb6(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
callq 0x5100
jmp 0x92d5
cmpl $0x0, 0x20dbc(%rip)     # 0x2a2f4
je 0x9328
movl $0x0, 0x20dac(%rip)     # 0x2a2f4
xorps %xmm0, %xmm0
movups %xmm0, 0x20fb4(%rip)    # 0x2a506
movups %xmm0, 0x20fbd(%rip)    # 0x2a516
movups %xmm0, 0x20fc6(%rip)    # 0x2a526
movups %xmm0, 0x20fcf(%rip)    # 0x2a536
movups %xmm0, 0x20fd8(%rip)    # 0x2a546
movups %xmm0, 0x20fe1(%rip)    # 0x2a556
movups %xmm0, 0x20fe8(%rip)    # 0x2a564
leaq 0x20e5d(%rip), %rdi     # 0x2a3e0
callq 0x1d244
jmp 0x92d5
movq 0x20a2c(%rip), %rax     # 0x29fc0
movq (%rax), %rbx
callq 0xea3b
leaq 0x1574f(%rip), %rsi     # 0x1ecf2
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x216f1(%rip), %rax     # 0x2aca8
movq (%rax), %rbx
testq %rbx, %rbx
je 0x95d8
callq 0xea3b
leaq 0x15727(%rip), %rsi     # 0x1ecf2
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x52c0
leaq 0x20(%rsp), %rsi
movl $0x1000, (%rsi)         # imm = 0x1000
movl 0x20def(%rip), %edi     # 0x2a3d8
movl $0x4, %edx
callq 0x5100
movl $0x1, 0x20dd7(%rip)     # 0x2a3d4
jmp 0x92d5