// File: /workspace/github_cpp_makefile_star2_O3/davidcairuz[P]network-internet-relay-chat/server.cpp
// Function: server_thread(void*)
void* server_thread(void* arg) {    
    int failed = 0;
    bool quit = false;
    int new_client = *((int*)arg);
    int pos = active->find(new_client);
    string nome = active->clients[pos].name;
    spread_message("A new client has joined us!", new_client);

    while (!quit) {
        string message = socket_server->Read(new_client);
        cout << message << endl;
        socket_server->Check();

        if (message.empty()) {
            failed++;
            
            if (failed >= Socket::max_retries) message = "/quit";
            else continue;
        } else {
            failed = 0;
        }

        if (message == "/quit") {
            spread_message("Someone left the server", new_client);
            active->remove(new_client);
            quit = true;

        } else if (message == "/ping") {
            send_message("pong!", new_client);

        } else if(message.size() >= 10 && message.substr(0, 9) == "/nickname") {
            string new_nickname = message.substr(10, message.size());
            int pos = active->find(new_client);
            active->clients[pos].name = new_nickname;
        
        } else if (message.size() >= 6 && message.substr(0, 5) == "/join") {
            string channel_name = message.substr(6, message.size());
            
            int pos = active->find(new_client);
            bool is_admin = (channels[channel_name] == 0);
            
            // Checa se cliente tem permissão para entrar no canal
            // isto é, se ele é admin ou foi convidado. O cliente
            // só pode estar em um canal por vez
            if(channel_name[0] == '&' and !is_admin){
                auto permissions = channels_permissions[channel_name];
                auto can_join = find(permissions.begin(), permissions.end(), new_client) != permissions.end();
                if (!can_join) {
                    send_message("You're not welcome here >:(", new_client);
                    continue;
                }
            }

            active->clients[pos].channel_name = channel_name;
            active->clients[pos].is_admin = is_admin;    
            
            send_message("Joined channel " + channel_name, new_client);

            if(is_admin) {
                channels[channel_name] = 1;
                channels_permissions[channel_name] = {};
                channels_permissions[channel_name].push_back(new_client);
                send_message("You own this ****!", new_client);
            }
            
            channels[channel_name]++;

        } else if (message.size() >= 6 && message.substr(0, 5) == "/kick") {
            // O /kick só pode ser utilizado pelo admin e expulsa um client
            // momentaneamente do canal. O client pode voltar ao canal sem problemas.

            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("You can't be that bad!", new_client);
                continue;
            }

            string to_be_kicked = message.substr(6, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("Admin hates you", active->clients[pos].conn);
            active->clients[pos].channel_name = "$";
            active->clients[pos].is_admin = false;
            channels[active->clients[pos_client].channel_name]--;
            
        } else if (message.size() >= 6 && message.substr(0, 5) == "/mute") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_kicked = message.substr(6, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("Admin can't stand you anymore", active->clients[pos].conn);
            active->clients[pos].is_muted = true;
            
        } else if (message.size() >= 8 && message.substr(0, 7) == "/unmute") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            }

            string to_be_kicked = message.substr(8, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("You have your voice again, use it wisely", active->clients[pos].conn);
            active->clients[pos].is_muted = false;
               
        } else if (message.size() >= 7 && message.substr(0, 6) == "/whois") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_found = message.substr(7, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_found);
            
            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message(active->clients[pos].name + " is " + active->clients[pos].ip, new_client);
            
        } else if (message.size() >= 8 && message.substr(0, 7) == "/invite") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_found = message.substr(8, message.size());
            int pos = active->find(to_be_found);
            
            if (pos == -1) {
                send_message("This user doesn't exist", new_client);
                continue;
            }

            send_message("Admin wants to have the pleasure of your company at " + active->clients[pos_client].channel_name + ". To join this channel, type /join " + active->clients[pos_client].channel_name, active->clients[pos].conn);
            send_message("Invite sent!", new_client);
            
            // adiciona permissão para o cliente convidado entrar no canal
            // assim, ele pode entrar a qualquer momento após o convite
            channels_permissions[active->clients[pos_client].channel_name].push_back(active->clients[pos].conn);
        
        } else {
            spread_message(message, new_client);
        }

        message = "";
    }

    cout << nome << " has left us :(" << endl;
    pthread_exit(NULL);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4d8, %rsp            # imm = 0x4D8
movl (%rdi), %ecx
movl %ecx, -0x2c(%rbp)
movq 0x7693(%rip), %rdx      # 0xb2a8
movq (%rdx), %rax
movq 0x8(%rdx), %rdx
movq $-0x1, %rsi
subq %rax, %rdx
je 0x3c55
sarq $0x3, %rdx
movabsq $-0x1111111111111111, %rsi # imm = 0xEEEEEEEEEEEEEEEF
imulq %rsi, %rdx
xorl %esi, %esi
imulq $0x78, %rsi, %rdi
cmpl %ecx, 0x4(%rax,%rdi)
je 0x3c52
incl %esi
cmpq %rsi, %rdx
ja 0x3c3c
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
movslq %esi, %rsi
imulq $0x78, %rsi, %rcx
leaq -0x468(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq 0x28(%rax,%rcx), %rsi
movq 0x30(%rax,%rcx), %rdx
addq %rsi, %rdx
leaq -0x478(%rbp), %rdi
callq 0x2810
leaq -0x448(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x44db(%rip), %rsi      # 0x816a
leaq 0x44ef(%rip), %rdx      # 0x8185
leaq -0x458(%rbp), %rdi
callq 0x28ae
movl -0x2c(%rbp), %esi
leaq -0x458(%rbp), %rdi
callq 0x32a0
movq -0x458(%rbp), %rdi
cmpq %r14, %rdi
je 0x3ccc
movq -0x448(%rbp), %rsi
incq %rsi
callq 0x2250
leaq -0x90(%rbp), %r15
leaq -0x488(%rbp), %r14
leaq -0x4a8(%rbp), %rbx
xorl %r12d, %r12d
movq 0x752d(%rip), %rsi      # 0xb218
movl -0x2c(%rbp), %edx
leaq -0x80(%rbp), %rdi
callq 0x2e72
movq -0x80(%rbp), %rsi
movq -0x78(%rbp), %rdx
movq 0x72d2(%rip), %rdi      # 0xafd8
callq 0x22b0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2220
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x74dc(%rip), %rdi      # 0xb218
callq 0x305e
movl $0x0, -0xa4(%rbp)
cmpq $0x0, -0x78(%rbp)
jne 0x3d81
leal 0x1(%r12), %eax
movl %eax, -0xa4(%rbp)
cmpl $0x4, %r12d
jl 0x4ed0
movl $0x5, %r8d
leaq -0x80(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x440a(%rip), %rcx      # 0x8186
callq 0x2330
leaq -0x80(%rbp), %r12
movq %r12, %rdi
leaq 0x43f7(%rip), %rsi      # 0x8186
callq 0x20a0
testl %eax, %eax
sete %al
movl %eax, -0x30(%rbp)
je 0x4076
movq %r12, %rdi
leaq 0x43f8(%rip), %rsi      # 0x81a4
callq 0x20a0
testl %eax, %eax
je 0x40e2
movq -0x78(%rbp), %rcx
cmpq $0xa, %rcx
leaq -0x50(%rbp), %rdi
jb 0x3e16
movl $0x9, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x43cc(%rip), %rsi      # 0x81b0
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3e05
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x413b
movq -0x78(%rbp), %rcx
leaq -0x50(%rbp), %rdi
cmpq $0x6, %rcx
jb 0x4020
movl $0x5, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x437d(%rip), %rsi      # 0x81ba
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3e5e
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x78(%rbp), %rcx
testl %r13d, %r13d
je 0x419a
cmpq $0x6, %rcx
leaq -0x50(%rbp), %rdi
jb 0x4020
movl $0x5, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x4369(%rip), %rsi      # 0x81ff
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3eb7
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x445d
movq -0x78(%rbp), %rcx
cmpq $0x6, %rcx
leaq -0x50(%rbp), %rdi
jb 0x4020
movl $0x5, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x4353(%rip), %rsi      # 0x8242
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3f10
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x471f
movq -0x78(%rbp), %rcx
cmpq $0x8, %rcx
leaq -0x50(%rbp), %rdi
jb 0x3f76
movl $0x7, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x433e(%rip), %rsi      # 0x8282
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3f65
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x4a2f
movq -0x78(%rbp), %rcx
leaq -0x50(%rbp), %rdi
cmpq $0x7, %rcx
jb 0x4020
movl $0x6, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x4316(%rip), %rsi      # 0x82b3
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3fbe
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x4a82
movq -0x78(%rbp), %rcx
cmpq $0x8, %rcx
leaq -0x50(%rbp), %rdi
jb 0x4020
movl $0x7, %ecx
movq %rdi, %r12
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r12, %rdi
leaq 0x42cd(%rip), %rsi      # 0x82bf
callq 0x20a0
movl %eax, %r13d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4013
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
je 0x4f56
movq -0x78(%rbp), %rcx
leaq -0x108(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x80(%rbp), %rsi
addq %rsi, %rcx
leaq -0x118(%rbp), %rdi
movq %rcx, %rdx
callq 0x2810
movl -0x2c(%rbp), %esi
leaq -0x118(%rbp), %rdi
callq 0x32a0
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0x4231
movq -0x108(%rbp), %rsi
jmp 0x4229
leaq -0x388(%rbp), %rax
movq %rax, -0x398(%rbp)
leaq -0x398(%rbp), %r12
movq %r12, %rdi
leaq 0x40f7(%rip), %rsi      # 0x818c
leaq 0x4107(%rip), %rdx      # 0x81a3
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x32a0
movq -0x398(%rbp), %rdi
leaq -0x388(%rbp), %rax
cmpq %rax, %rdi
je 0x40ce
movq -0x388(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x71d3(%rip), %rdi      # 0xb2a8
movl -0x2c(%rbp), %esi
callq 0x5e4e
jmp 0x4231
leaq -0x368(%rbp), %rax
movq %rax, -0x378(%rbp)
leaq -0x378(%rbp), %r12
movq %r12, %rdi
leaq 0x40a9(%rip), %rsi      # 0x81aa
leaq 0x40a7(%rip), %rdx      # 0x81af
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x378(%rbp), %rdi
leaq -0x368(%rbp), %rax
cmpq %rax, %rdi
je 0x4231
movq -0x368(%rbp), %rsi
jmp 0x4229
movq -0x78(%rbp), %rcx
movl $0xa, %edx
leaq -0x50(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x7150(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
je 0x41fc
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4195
incl %edx
cmpq %rdx, %rcx
ja 0x417f
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4203
movl $0x6, %edx
leaq -0x50(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x2270
leaq -0x3b8(%rbp), %r13
movq 0x70ee(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
je 0x424f
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x41f7
incl %edx
cmpq %rdx, %rcx
ja 0x41e1
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %r12
jmp 0x4256
movq $-0x1, %rcx
leaq -0x50(%rbp), %rsi
imulq $0x78, %rcx, %rcx
leaq (%rax,%rcx), %rdi
addq $0x28, %rdi
callq 0x2150
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4231
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x78(%rbp), %rdx
leaq -0x80(%rbp), %rdi
xorl %esi, %esi
leaq 0x3ebd(%rip), %rcx      # 0x80ff
xorl %r8d, %r8d
callq 0x2330
jmp 0x4ed7
movq $-0x1, %r12
leaq -0x50(%rbp), %rsi
leaq 0x6fe7(%rip), %rdi      # 0xb248
callq 0x5f26
movq %r12, -0x60(%rbp)
movl (%rax), %eax
movl %eax, -0xb4(%rbp)
testl %eax, %eax
sete %cl
movq -0x50(%rbp), %rax
cmpb $0x26, (%rax)
setne %al
movb %cl, -0x58(%rbp)
orb %cl, %al
testb $0x1, %al
jne 0x4374
leaq 0x6fe3(%rip), %rdi      # 0xb278
leaq -0x50(%rbp), %rsi
callq 0x5fa6
leaq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x6026
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
leaq -0x2c(%rbp), %rdx
callq 0x73d5
movq %rax, %r13
movq -0x98(%rbp), %rax
xorl %r12d, %r12d
cmpq %rax, %r13
movq %rax, -0xb0(%rbp)
jne 0x4342
leaq -0x348(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x358(%rbp), %r12
movq %r12, %rdi
leaq 0x3ec4(%rip), %rsi      # 0x81c0
leaq 0x3ed8(%rip), %rdx      # 0x81db
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x358(%rbp), %rdi
movl $0x2, %r12d
leaq -0x348(%rbp), %rax
cmpq %rax, %rdi
je 0x433b
movq -0x348(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0xb0(%rbp), %rax
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x4364
movq -0x90(%rbp), %rsi
subq %rdi, %rsi
callq 0x2250
movq -0xb0(%rbp), %rax
cmpq %rax, %r13
leaq -0x3b8(%rbp), %r13
je 0x46f8
movq 0x6f2d(%rip), %rax      # 0xb2a8
movq (%rax), %rax
imulq $0x78, -0x60(%rbp), %r12
leaq (%rax,%r12), %rdi
addq $0x50, %rdi
leaq -0x50(%rbp), %rsi
callq 0x2150
movq 0x6f0d(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb -0x58(%rbp), %cl
movb %cl, 0x70(%rax,%r12)
leaq -0x3d8(%rbp), %rdi
leaq 0x3e28(%rip), %rsi      # 0x81dc
leaq -0x50(%rbp), %rdx
callq 0x60a6
movl -0x2c(%rbp), %esi
leaq -0x3d8(%rbp), %rdi
callq 0x3170
movq -0x3d8(%rbp), %rdi
leaq -0x3c8(%rbp), %rax
cmpq %rax, %rdi
je 0x43ee
movq -0x3c8(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $0x0, -0xb4(%rbp)
jne 0x46e3
leaq 0x6e46(%rip), %rdi      # 0xb248
leaq -0x50(%rbp), %rsi
callq 0x5f26
movl $0x1, (%rax)
leaq 0x6e60(%rip), %rdi      # 0xb278
leaq -0x50(%rbp), %rsi
callq 0x5fa6
movq %rax, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x7484
leaq 0x6e44(%rip), %rdi      # 0xb278
leaq -0x50(%rbp), %rsi
callq 0x5fa6
movq 0x8(%rax), %rsi
cmpq 0x10(%rax), %rsi
je 0x468d
movl -0x2c(%rbp), %ecx
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rax)
jmp 0x4699
movq 0x6e44(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x338(%rbp), %r12
je 0x44a9
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x44a4
incl %edx
cmpq %rdx, %rcx
ja 0x448e
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x44b0
movq $-0x1, %rcx
leaq -0x50(%rbp), %rdi
imulq $0x78, %rcx, %r13
cmpb $0x0, 0x70(%rax,%r13)
je 0x463b
movq -0x78(%rbp), %rcx
movl $0x6, %edx
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x6dcb(%rip), %r12      # 0xb2a8
movq (%r12), %rax
leaq -0x188(%rbp), %rcx
movq %rcx, -0x198(%rbp)
movq 0x50(%rax,%r13), %rsi
movq %r13, -0x60(%rbp)
movq 0x58(%rax,%r13), %rdx
addq %rsi, %rdx
leaq -0x198(%rbp), %rdi
callq 0x2810
movq %r12, -0x58(%rbp)
leaq -0x4e8(%rbp), %r12
movq %r12, -0x4f8(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4f8(%rbp), %r13
movq %r13, %rdi
callq 0x2810
movq -0x58(%rbp), %rdi
leaq -0x198(%rbp), %rsi
movq %r13, %rdx
callq 0x6138
movl %eax, %r13d
movq -0x4f8(%rbp), %rdi
cmpq %r12, %rdi
je 0x4569
movq -0x4e8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
leaq -0x318(%rbp), %r12
je 0x4592
movq -0x188(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6d0f(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r13
movq 0x58(%rax,%r13), %rdx
movq -0x60(%rbp), %rcx
cmpq 0x58(%rax,%rcx), %rdx
jne 0x45e2
testq %rdx, %rdx
je 0x4772
leaq (%rax,%r13), %rcx
addq $0x50, %rcx
movq -0x60(%rbp), %rsi
addq %rsi, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x4772
leaq -0x428(%rbp), %r12
movq %r12, -0x438(%rbp)
leaq -0x438(%rbp), %r13
movq %r13, %rdi
leaq 0x3c1b(%rip), %rsi      # 0x821c
leaq 0x3c29(%rip), %rdx      # 0x8231
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r13, %rdi
callq 0x3170
movq -0x438(%rbp), %rdi
cmpq %r12, %rdi
je 0x4633
movq -0x428(%rbp), %rsi
incq %rsi
callq 0x2250
xorl %r12d, %r12d
jmp 0x4826
leaq -0x328(%rbp), %rax
movq %rax, -0x338(%rbp)
movq %r12, %rdi
leaq 0x3bb2(%rip), %rsi      # 0x8205
leaq 0x3bc1(%rip), %rdx      # 0x821b
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x338(%rbp), %rdi
leaq -0x328(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x328(%rbp), %rsi
jmp 0x4ec8
movq %rax, %rdi
leaq -0x2c(%rbp), %rdx
callq 0x6b94
leaq -0x3a8(%rbp), %r12
movq %r12, -0x3b8(%rbp)
movq %r13, %rdi
leaq 0x3b3b(%rip), %rsi      # 0x81ec
leaq 0x3b46(%rip), %rdx      # 0x81fe
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r13, %rdi
callq 0x3170
movq -0x3b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x46e3
movq -0x3a8(%rbp), %rsi
incq %rsi
callq 0x2250
leaq 0x6b5e(%rip), %rdi      # 0xb248
leaq -0x50(%rbp), %rsi
callq 0x5f26
incl (%rax)
xorl %r12d, %r12d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4711
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r12d, %r12d
jne 0x4ed0
jmp 0x4231
movq 0x6b82(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x2f8(%rbp), %r12
je 0x484d
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x476a
incl %edx
cmpq %rdx, %rcx
ja 0x4754
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4854
leaq -0x308(%rbp), %rax
movq %rax, -0x318(%rbp)
movq %r12, %rdi
leaq 0x3aa8(%rip), %rsi      # 0x8232
leaq 0x3ab0(%rip), %rdx      # 0x8241
callq 0x28ae
movq 0x6b0b(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%r13), %esi
movq %r12, %rdi
callq 0x3170
movq -0x318(%rbp), %rdi
leaq -0x308(%rbp), %rax
cmpq %rax, %rdi
je 0x47cf
movq -0x308(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6ad2(%rip), %rax      # 0xb2a8
movq (%rax), %rax
leaq (%rax,%r13), %rdi
addq $0x50, %rdi
movq 0x8(%rdi), %rdx
movl $0x1, %r8d
xorl %esi, %esi
leaq 0x3938(%rip), %rcx      # 0x812c
callq 0x2330
movq 0x6aa8(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x0, 0x70(%rax,%r13)
movq -0x60(%rbp), %rcx
leaq (%rax,%rcx), %rsi
addq $0x50, %rsi
leaq 0x6a2c(%rip), %rdi      # 0xb248
callq 0x5f26
decl (%rax)
movb $0x1, %r12b
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x483f
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r12b, %r12b
jne 0x4231
jmp 0x4ed0
movq $-0x1, %rcx
leaq -0x50(%rbp), %rdi
imulq $0x78, %rcx, %r13
cmpb $0x0, 0x70(%rax,%r13)
je 0x49dd
movq -0x78(%rbp), %rcx
movl $0x6, %edx
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x6a27(%rip), %rax      # 0xb2a8
movq %rax, -0x60(%rbp)
movq (%rax), %rax
leaq -0x168(%rbp), %rcx
movq %rcx, -0x178(%rbp)
movq 0x50(%rax,%r13), %rsi
movq %r13, -0x58(%rbp)
movq 0x58(%rax,%r13), %rdx
addq %rsi, %rdx
leaq -0x178(%rbp), %rdi
callq 0x2810
leaq -0x4c8(%rbp), %r12
movq %r12, -0x4d8(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4d8(%rbp), %r13
movq %r13, %rdi
callq 0x2810
movq -0x60(%rbp), %rdi
leaq -0x178(%rbp), %rsi
movq %r13, %rdx
callq 0x6138
movl %eax, %r13d
movq -0x4d8(%rbp), %rdi
cmpq %r12, %rdi
je 0x490c
movq -0x4c8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x492e
movq -0x168(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x4984
movq 0x696d(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r13
movq 0x58(%rax,%r13), %rdx
movq -0x58(%rbp), %rcx
cmpq 0x58(%rax,%rcx), %rdx
jne 0x4984
testq %rdx, %rdx
je 0x4ad5
leaq (%rax,%r13), %rcx
addq $0x50, %rcx
movq -0x58(%rbp), %rsi
addq %rsi, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x4ad5
leaq -0x2c8(%rbp), %rax
movq %rax, -0x2d8(%rbp)
leaq -0x2d8(%rbp), %r12
movq %r12, %rdi
leaq 0x3879(%rip), %rsi      # 0x821c
leaq 0x3887(%rip), %rdx      # 0x8231
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x2d8(%rbp), %rdi
leaq -0x2c8(%rbp), %rax
cmpq %rax, %rdi
je 0x4eb7
movq -0x2c8(%rbp), %rsi
jmp 0x4eaf
leaq -0x2e8(%rbp), %rax
movq %rax, -0x2f8(%rbp)
movq %r12, %rdi
leaq 0x3853(%rip), %rsi      # 0x8248
leaq 0x3867(%rip), %rdx      # 0x8263
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x2f8(%rbp), %rdi
leaq -0x2e8(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x2e8(%rbp), %rsi
jmp 0x4ec8
movq 0x6872(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x298(%rbp), %r12
je 0x4b4e
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4a7a
incl %edx
cmpq %rdx, %rcx
ja 0x4a64
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4b55
movq 0x681f(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x238(%rbp), %r12
je 0x4d2c
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4acd
incl %edx
cmpq %rdx, %rcx
ja 0x4ab7
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4d33
leaq -0x2a8(%rbp), %rax
movq %rax, -0x2b8(%rbp)
leaq -0x2b8(%rbp), %r12
movq %r12, %rdi
leaq 0x3770(%rip), %rsi      # 0x8264
leaq 0x3786(%rip), %rdx      # 0x8281
callq 0x28ae
movq 0x67a1(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%r13), %esi
movq %r12, %rdi
callq 0x3170
movq -0x2b8(%rbp), %rdi
leaq -0x2a8(%rbp), %rax
cmpq %rax, %rdi
je 0x4b39
movq -0x2a8(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6768(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x1, 0x71(%rax,%r13)
jmp 0x4218
movq $-0x1, %rcx
leaq -0x50(%rbp), %rdi
imulq $0x78, %rcx, %r13
cmpb $0x0, 0x70(%rax,%r13)
je 0x4cda
movq -0x78(%rbp), %rcx
movl $0x8, %edx
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x6726(%rip), %rax      # 0xb2a8
movq %rax, -0x60(%rbp)
movq (%rax), %rax
leaq -0x148(%rbp), %rcx
movq %rcx, -0x158(%rbp)
movq 0x50(%rax,%r13), %rsi
movq %r13, -0x58(%rbp)
movq 0x58(%rax,%r13), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %rdi
callq 0x2810
movq %rbx, %r12
movq %rbx, -0x4b8(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4b8(%rbp), %r13
movq %r13, %rdi
callq 0x2810
movq -0x60(%rbp), %rdi
leaq -0x158(%rbp), %rsi
movq %r13, %rdx
callq 0x6138
movl %eax, %r13d
movq -0x4b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x4c09
movq -0x4a8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x158(%rbp), %rdi
leaq -0x148(%rbp), %rax
cmpq %rax, %rdi
je 0x4c2b
movq -0x148(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x4c81
movq 0x6670(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r13
movq 0x58(%rax,%r13), %rdx
movq -0x58(%rbp), %rcx
cmpq 0x58(%rax,%rcx), %rdx
jne 0x4c81
testq %rdx, %rdx
je 0x4fa9
leaq (%rax,%r13), %rcx
addq $0x50, %rcx
movq -0x58(%rbp), %rsi
addq %rsi, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x4fa9
leaq -0x268(%rbp), %rax
movq %rax, -0x278(%rbp)
leaq -0x278(%rbp), %r12
movq %r12, %rdi
leaq 0x357c(%rip), %rsi      # 0x821c
leaq 0x358a(%rip), %rdx      # 0x8231
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x278(%rbp), %rdi
leaq -0x268(%rbp), %rax
cmpq %rax, %rdi
je 0x4eb7
movq -0x268(%rbp), %rsi
jmp 0x4eaf
leaq -0x288(%rbp), %rax
movq %rax, -0x298(%rbp)
movq %r12, %rdi
leaq 0x3556(%rip), %rsi      # 0x8248
leaq 0x356a(%rip), %rdx      # 0x8263
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x298(%rbp), %rdi
leaq -0x288(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x288(%rbp), %rsi
jmp 0x4ec8
movq $-0x1, %rcx
leaq -0x50(%rbp), %rdi
imulq $0x78, %rcx, %r13
cmpb $0x0, 0x70(%rax,%r13)
je 0x4f08
movq -0x78(%rbp), %rcx
movl $0x7, %edx
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x6548(%rip), %rax      # 0xb2a8
movq %rax, -0x60(%rbp)
movq (%rax), %rax
leaq -0x128(%rbp), %rcx
movq %rcx, -0x138(%rbp)
movq 0x50(%rax,%r13), %rsi
movq %r13, -0x58(%rbp)
movq 0x58(%rax,%r13), %rdx
addq %rsi, %rdx
leaq -0x138(%rbp), %rdi
callq 0x2810
movq %r14, %r12
movq %r14, -0x498(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x498(%rbp), %r13
movq %r13, %rdi
callq 0x2810
movq -0x60(%rbp), %rdi
leaq -0x138(%rbp), %rsi
movq %r13, %rdx
callq 0x6138
movl %eax, %r13d
movq -0x498(%rbp), %rdi
cmpq %r12, %rdi
je 0x4de7
movq -0x488(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0x4e09
movq -0x128(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x4e5f
movq 0x6492(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %r13
imulq $0x78, %rcx, %r12
movq 0x58(%r13,%r12), %rdx
movq -0x58(%rbp), %rax
cmpq 0x58(%r13,%rax), %rdx
jne 0x4e5f
testq %rdx, %rdx
je 0x5022
leaq (%r12,%r13), %rax
addq $0x50, %rax
movq -0x58(%rbp), %rcx
addq %r13, %rcx
addq $0x50, %rcx
movq (%rcx), %rsi
movq (%rax), %rdi
callq 0x2260
testl %eax, %eax
je 0x5022
leaq -0x208(%rbp), %rax
movq %rax, -0x218(%rbp)
leaq -0x218(%rbp), %r12
movq %r12, %rdi
leaq 0x339e(%rip), %rsi      # 0x821c
leaq 0x33ac(%rip), %rdx      # 0x8231
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
je 0x4eb7
movq -0x208(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
movl $0x0, -0x30(%rbp)
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0x4ef0
movq -0x70(%rbp), %rsi
incq %rsi
callq 0x2250
movl -0xa4(%rbp), %eax
movl %eax, %r12d
cmpb $0x0, -0x30(%rbp)
je 0x3ce4
jmp 0x54d2
leaq -0x228(%rbp), %rax
movq %rax, -0x238(%rbp)
movq %r12, %rdi
leaq 0x3328(%rip), %rsi      # 0x8248
leaq 0x333c(%rip), %rdx      # 0x8263
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x238(%rbp), %rdi
leaq -0x228(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x228(%rbp), %rsi
jmp 0x4ec8
movq 0x634b(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x1f8(%rbp), %r12
je 0x50aa
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4fa1
incl %edx
cmpq %rdx, %rcx
ja 0x4f8b
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x50b1
leaq -0x248(%rbp), %rax
movq %rax, -0x258(%rbp)
leaq -0x258(%rbp), %r12
movq %r12, %rdi
leaq 0x32c2(%rip), %rsi      # 0x828a
leaq 0x32e3(%rip), %rdx      # 0x82b2
callq 0x28ae
movq 0x62cd(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%r13), %esi
movq %r12, %rdi
callq 0x3170
movq -0x258(%rbp), %rdi
leaq -0x248(%rbp), %rax
cmpq %rax, %rdi
je 0x500d
movq -0x248(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6294(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x0, 0x71(%rax,%r13)
jmp 0x4218
movq %r15, -0xa0(%rbp)
movq 0x28(%r13,%r12), %rsi
movq 0x30(%r13,%r12), %rdx
addq %rsi, %rdx
leaq -0xa0(%rbp), %r13
movq %r13, %rdi
callq 0x2810
movq %r13, %rdi
leaq 0x326b(%rip), %rsi      # 0x82ba
callq 0x23c0
movq 0x624d(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq 0x8(%rax,%r12), %rsi
movq 0x10(%rax,%r12), %rdx
movq %r13, %rdi
movq %r15, %r12
callq 0x20b0
leaq -0xe8(%rbp), %rsi
movq %rsi, -0xf8(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x545d
movq %rdx, -0xf8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xe8(%rbp)
jmp 0x5463
movq $-0x1, %rcx
leaq -0x50(%rbp), %rdi
imulq $0x78, %rcx, %rcx
movq %rcx, -0x60(%rbp)
cmpb $0x0, 0x70(%rax,%rcx)
je 0x51bd
movq -0x78(%rbp), %rcx
movl $0x8, %edx
leaq -0x80(%rbp), %rsi
callq 0x2270
movq 0x61c7(%rip), %r13      # 0xb2a8
leaq -0x408(%rbp), %rax
movq %rax, -0x418(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x418(%rbp), %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x418(%rbp), %rsi
callq 0x61f2
movl %eax, %r12d
movq -0x418(%rbp), %rdi
leaq -0x408(%rbp), %rax
cmpq %rax, %rdi
je 0x513a
movq -0x408(%rbp), %rsi
incq %rsi
callq 0x2250
movl %r12d, -0x58(%rbp)
cmpl $-0x1, %r12d
leaq -0x1d8(%rbp), %r13
je 0x520f
movq %r15, %r12
movq 0x614f(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x60(%rbp), %rcx
leaq (%rax,%rcx), %rdx
addq $0x50, %rdx
leaq -0x3f8(%rbp), %r13
movq %r13, %rdi
leaq 0x3166(%rip), %rsi      # 0x82df
callq 0x60a6
movq %r13, %rdi
leaq 0x318c(%rip), %rsi      # 0x8314
callq 0x23c0
movq %r12, -0xa0(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x526d
movq %rdx, -0xa0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x90(%rbp)
jmp 0x5275
leaq -0x1e8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq %r12, %rdi
leaq 0x3073(%rip), %rsi      # 0x8248
leaq 0x3087(%rip), %rdx      # 0x8263
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed0
movq -0x1e8(%rbp), %rsi
jmp 0x4ec8
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq %r13, %rdi
leaq 0x30a0(%rip), %rsi      # 0x82c7
leaq 0x30b0(%rip), %rdx      # 0x82de
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r13, %rdi
callq 0x3170
movl -0x58(%rbp), %r12d
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x5435
movq -0x1c8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5435
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x98(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x6012(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x50(%rax,%rcx), %rsi
movq 0x58(%rax,%rcx), %rdx
leaq -0xa0(%rbp), %rdi
callq 0x20b0
leaq -0xc8(%rbp), %rsi
movq %rsi, -0xd8(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x52e3
movq %rdx, -0xd8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xc8(%rbp)
jmp 0x52e9
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xd0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x5f9e(%rip), %rax      # 0xb2a8
movslq -0x58(%rbp), %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r13
movl 0x4(%rax,%r13), %esi
leaq -0xd8(%rbp), %rdi
callq 0x3170
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0x5348
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0xa0(%rbp), %rdi
cmpq %r12, %rdi
je 0x5363
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x3f8(%rbp), %rdi
leaq -0x3e8(%rbp), %rax
cmpq %rax, %rdi
je 0x5385
movq -0x3e8(%rbp), %rsi
incq %rsi
callq 0x2250
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x1b8(%rbp), %r12
movq %r12, %rdi
leaq 0x2f94(%rip), %rsi      # 0x8338
leaq 0x2f99(%rip), %rdx      # 0x8344
callq 0x28ae
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3170
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
movl -0x58(%rbp), %r12d
je 0x53e1
movq -0x1a8(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x5ec0(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x60(%rbp), %rcx
leaq (%rax,%rcx), %rsi
addq $0x50, %rsi
leaq 0x5e7a(%rip), %rdi      # 0xb278
callq 0x5fa6
movq 0x5e9e(%rip), %rcx      # 0xb2a8
movq (%rcx), %rcx
leaq (%rcx,%r13), %rdx
addq $0x4, %rdx
movq 0x8(%rax), %rsi
cmpq 0x10(%rax), %rsi
je 0x542d
movl (%rdx), %ecx
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rax)
jmp 0x5435
movq %rax, %rdi
callq 0x6b94
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x544e
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r12d
jne 0x4231
jmp 0x4ed0
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xf0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl -0x2c(%rbp), %esi
leaq -0xf8(%rbp), %rdi
callq 0x3170
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
cmpq %rax, %rdi
je 0x54ae
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0xa0(%rbp), %rdi
cmpq %r12, %rdi
je 0x4218
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x4218
movq -0x478(%rbp), %rsi
movq -0x470(%rbp), %rdx
movq 0x5af1(%rip), %rdi      # 0xafd8
callq 0x22b0
movq %rax, %rbx
leaq 0x2e4f(%rip), %rsi      # 0x8345
movl $0xf, %edx
movq %rax, %rdi
callq 0x22b0
movq %rbx, %rdi
callq 0x2130
xorl %edi, %edi
callq 0x2390
jmp 0x59ec
movq %rax, %rbx
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x1c8(%rbp), %rsi
jmp 0x5985
jmp 0x5a2f
movq %rax, %rbx
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x1e8(%rbp), %rsi
jmp 0x5a1f
movq %rax, %rbx
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
cmpq %rax, %rdi
je 0x5594
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5594
jmp 0x5591
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
cmpq %r15, %rdi
je 0x59ef
movq -0x90(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
jmp 0x59ec
movq %rax, %rbx
jmp 0x560f
jmp 0x59ec
movq %rax, %rbx
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x1a8(%rbp), %rsi
jmp 0x5985
movq %rax, %rbx
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0x560f
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0xa0(%rbp), %rdi
cmpq %r15, %rdi
je 0x562f
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x562f
movq %rax, %rbx
movq -0x3f8(%rbp), %rdi
leaq -0x3e8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x3e8(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
movq %rax, %rbx
movq -0x258(%rbp), %rdi
leaq -0x248(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x248(%rbp), %rsi
jmp 0x5985
jmp 0x5a2f
jmp 0x59ec
movq %rax, %rbx
movq -0x238(%rbp), %rdi
leaq -0x228(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x228(%rbp), %rsi
jmp 0x5a1f
jmp 0x5a2f
movq %rax, %rbx
movq -0x298(%rbp), %rdi
leaq -0x288(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x288(%rbp), %rsi
jmp 0x5a1f
jmp 0x5a2f
movq %rax, %rbx
movq -0x2b8(%rbp), %rdi
leaq -0x2a8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x2a8(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
movq %rax, %rbx
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x208(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
jmp 0x59ec
movq %rax, %rbx
movq -0x278(%rbp), %rdi
leaq -0x268(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x268(%rbp), %rsi
jmp 0x5985
movq %rax, %rbx
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x128(%rbp), %rsi
jmp 0x5985
jmp 0x5a2f
jmp 0x59ec
movq %rax, %rbx
movq -0x158(%rbp), %rdi
leaq -0x148(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x148(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
jmp 0x5a2f
jmp 0x5a2f
movq %rax, %rbx
movq -0x2f8(%rbp), %rdi
leaq -0x2e8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x2e8(%rbp), %rsi
jmp 0x5a1f
jmp 0x5a2f
jmp 0x59ec
movq %rax, %rbx
movq -0x2d8(%rbp), %rdi
leaq -0x2c8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x2c8(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
movq %rax, %rbx
movq -0x318(%rbp), %rdi
leaq -0x308(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x308(%rbp), %rsi
jmp 0x5985
movq %rax, %rbx
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x168(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
jmp 0x5a2f
jmp 0x5a2f
jmp 0x5a2f
movq %rax, %rbx
movq -0x338(%rbp), %rdi
leaq -0x328(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x328(%rbp), %rsi
jmp 0x5a1f
jmp 0x5a2f
movq %rax, %rbx
movq -0x438(%rbp), %rdi
cmpq %r12, %rdi
je 0x59ef
movq -0x428(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
movq %rax, %rbx
movq -0x358(%rbp), %rdi
leaq -0x348(%rbp), %rax
cmpq %rax, %rdi
je 0x594c
movq -0x348(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x594c
jmp 0x5949
movq %rax, %rbx
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x188(%rbp), %rsi
jmp 0x5985
jmp 0x5a2f
jmp 0x5a2f
movq %rax, %rbx
movq -0x3b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x59ef
movq -0x3a8(%rbp), %rsi
jmp 0x5985
jmp 0x59ec
jmp 0x59ec
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x59ef
movq -0x90(%rbp), %rsi
subq %rdi, %rsi
jmp 0x5988
movq %rax, %rbx
movq -0x3d8(%rbp), %rdi
leaq -0x3c8(%rbp), %rax
cmpq %rax, %rdi
je 0x59ef
movq -0x3c8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x59ef
jmp 0x5a2f
jmp 0x59ec
jmp 0x5a2f
jmp 0x59ec
jmp 0x5a2f
jmp 0x5a2f
jmp 0x5a2f
movq %rax, %rbx
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x108(%rbp), %rsi
jmp 0x5a1f
movq %rax, %rbx
movq -0x378(%rbp), %rdi
leaq -0x368(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x368(%rbp), %rsi
jmp 0x5a1f
jmp 0x5a2f
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x40(%rbp), %rsi
jmp 0x5a1f
movq %rax, %rbx
movq -0x398(%rbp), %rdi
leaq -0x388(%rbp), %rax
cmpq %rax, %rdi
je 0x5a32
movq -0x388(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5a32
jmp 0x5a2f
jmp 0x5a65
jmp 0x5a65
movq %rax, %rbx
movq -0x80(%rbp), %rdi
leaq -0x70(%rbp), %rax
cmpq %rax, %rdi
je 0x5a68
movq -0x70(%rbp), %rsi
jmp 0x5a5b
movq %rax, %rbx
movq -0x458(%rbp), %rdi
cmpq %r14, %rdi
je 0x5a68
movq -0x448(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5a68
movq %rax, %rbx
movq -0x478(%rbp), %rdi
leaq -0x468(%rbp), %rax
cmpq %rax, %rdi
je 0x5a8a
movq -0x468(%rbp), %rsi
incq %rsi
callq 0x2250
movq %rbx, %rdi
callq 0x2380