// File: fjamour[P]icentral/src/bc.cc
// Function: brandes_delta_iter(graph_t&, unsigned int, unsigned int, unsigned int, int, int, std::vector<double, std::allocator<double>>&)
void brandes_delta_iter(graph_t& graph_in,
        node_id_t s,
        node_id_t src,
        node_id_t dst,
        int d_src,
        int d_dst,
        vector<double>& bc_vec)
{
    //make sure that @src is the closer to source node
    if(d_src > d_dst) {
        node_id_t       tmp_v;
        int             tmp_i;
        tmp_v = src; src = dst; dst = tmp_v;
        tmp_i = d_src; d_src = d_dst; d_dst = tmp_i;
        
    }
    
    //case 1: d_dst - d_src = 1 (the sort of easier case)
    if(d_dst - d_src == 1) {//if(d_dst - d_src == 1) {
        stack<node_id_t> S;
        vector<vector<node_id_t> > P;
        vector<int> old_path_cnt_vec;
        vector<int> new_path_cnt_vec; //NEW
        vector<int> dist_vec;
        queue<node_id_t> Q;
        vector<double> old_pair_dep_vec;
        vector<double> new_pair_dep_vec;//NEW

        P.resize(graph_in.size());
        new_path_cnt_vec.resize(graph_in.size());
        old_path_cnt_vec.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        fill(old_path_cnt_vec.begin(), old_path_cnt_vec.end(), 0);
        fill(new_path_cnt_vec.begin(), new_path_cnt_vec.end(), 0);
        fill(dist_vec.begin(), dist_vec.end(), -1);
        old_path_cnt_vec[s] = 1;
        new_path_cnt_vec[s] = 1;
        dist_vec[s] = 0;
        old_pair_dep_vec.resize(graph_in.size());
        new_pair_dep_vec.resize(graph_in.size());
        fill(old_pair_dep_vec.begin(), old_pair_dep_vec.end(), 0.0);
        fill(new_pair_dep_vec.begin(), new_pair_dep_vec.end(), 0.0);

        Q.push(s);

        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            S.push(v);
            if(v == dst) {//NEW
                new_path_cnt_vec[v] += old_path_cnt_vec[src];
            }
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    old_path_cnt_vec[w] += old_path_cnt_vec[v];
                    new_path_cnt_vec[w] += new_path_cnt_vec[v];//NEW
                    P[w].push_back(v);
                }
            }
        }

        while (!S.empty()) {
            node_id_t w = S.top();
            S.pop();
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                old_pair_dep_vec[v] += (((double) old_path_cnt_vec[v] / old_path_cnt_vec[w]) * (1 + old_pair_dep_vec[w]));
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            //IMP: this is the only change that happens to P, @src should be added as parent for dst
            if(w == dst) {
                node_id_t v = src;
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += (new_pair_dep_vec[w] - old_pair_dep_vec[w])/2.0;
                //bc_vec[w] += (0 - old_pair_dep_vec[w])/2.0;
            }
        }
    } else {
        vector<vector<node_id_t> > P;
        vector<int> path_cnt_vec;
        vector<int> path_cnt_inc_vec;
        vector<int> dist_vec;
        vector<double> pair_dep_vec;
        vector<bool>& visited_vec = graph_in.tmp_bool_vec;
        queue<node_id_t> Q;
        vector<node_id_t> S;
        
        P.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        path_cnt_vec.resize(graph_in.size());
        pair_dep_vec.resize(graph_in.size());
        path_cnt_inc_vec.resize(graph_in.size());
        
        fill(path_cnt_vec.begin(), path_cnt_vec.end(), 0);
        path_cnt_vec[s] = 1;
        fill(dist_vec.begin(), dist_vec.end(), -1);
        dist_vec[s] = 0;
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        fill(path_cnt_inc_vec.begin(), path_cnt_inc_vec.end(), 0);
        
        Q.push(s);
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            S.push_back(v);
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    path_cnt_vec[w] += path_cnt_vec[v];
                    P[w].push_back(v);
                }
            }
        }

        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] -= pair_dep_vec[w]/2.0;
            }
        }

        //vector<int> old_dist_vec = dist_vec;    
        Q.push(dst);
        dist_vec[dst] = dist_vec[src] + 1;
        P[dst].clear();
        P[dst].push_back(src);
        path_cnt_inc_vec[dst] = path_cnt_vec[src];
        path_cnt_vec[dst] = path_cnt_inc_vec[dst];
        //tr1::unordered_set<node_id_t> visited_set;
        
        //visited_vec.resize(graph_in.size());
        fill(visited_vec.begin(), visited_vec.end(), false);
        visited_vec[dst] = true;
        //visited_set.insert(dst);
        
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] > (dist_vec[v] + 1)) {
                    dist_vec[w] = dist_vec[v] + 1;
                    P[w].clear();
                    P[w].push_back(v);
                    path_cnt_vec[w] = 0;
                    path_cnt_inc_vec[w] = path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[w];
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                } else if (dist_vec[w] == (dist_vec[v] + 1)) {
                    path_cnt_inc_vec[w] += path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[v];
                    //if(old_dist_vec[w] == old_dist_vec[v] || v == dst) {
                    if(find(P[w].begin(), P[w].end(), v) == P[w].end()) {
                        P[w].push_back(v);
                    } 
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                }
                if(!visited_vec[w]) {
                    visited_vec[w] = true;
                    Q.push(w);
                }
            }
        }
        
        
        //IMP::THIS CAN BE MADE MUCH BETTER!
        //HEAP FOR EXAMPLE
        //EVEN THE SWAPPING CAN BE DONE MORE EFFICIENTLY
        for(int i = 1; i < S.size(); ++i) {
            if(dist_vec[S[i-1]] > dist_vec[S[i]]) {
                int j = i;
                while(dist_vec[S[j-1]] > dist_vec[S[j]]) {
                    node_id_t tmp = S[j-1];
                    S[j-1] = S[j];
                    S[j] = tmp;
                    --j;
                }
            }
        }
        
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += pair_dep_vec[w]/2.0;
            }
        }
    }
}

// Assembly:
subq $0x778, %rsp            # imm = 0x778
movq 0x780(%rsp), %rax
movq %rdi, 0x770(%rsp)
movl %esi, 0x76c(%rsp)
movl %edx, 0x768(%rsp)
movl %ecx, 0x764(%rsp)
movl %r8d, 0x760(%rsp)
movl %r9d, 0x75c(%rsp)
movl 0x760(%rsp), %eax
cmpl 0x75c(%rsp), %eax
jle 0x29fb0
movl 0x768(%rsp), %eax
movl %eax, 0x758(%rsp)
movl 0x764(%rsp), %eax
movl %eax, 0x768(%rsp)
movl 0x758(%rsp), %eax
movl %eax, 0x764(%rsp)
movl 0x760(%rsp), %eax
movl %eax, 0x754(%rsp)
movl 0x75c(%rsp), %eax
movl %eax, 0x760(%rsp)
movl 0x754(%rsp), %eax
movl %eax, 0x75c(%rsp)
movl 0x75c(%rsp), %eax
subl 0x760(%rsp), %eax
cmpl $0x1, %eax
jne 0x2ab88
leaq 0x700(%rsp), %rdi
callq 0x21da0
leaq 0x6e8(%rsp), %rdi
callq 0x10030
leaq 0x6d0(%rsp), %rdi
callq 0xfc40
leaq 0x6b8(%rsp), %rdi
callq 0xfc40
leaq 0x6a0(%rsp), %rdi
callq 0xfc40
leaq 0x650(%rsp), %rdi
callq 0x10580
jmp 0x2a017
leaq 0x628(%rsp), %rdi
callq 0xfa00
leaq 0x610(%rsp), %rdi
callq 0xfa00
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2e8(%rsp)
jmp 0x2a048
movq 0x2e8(%rsp), %rsi
leaq 0x6e8(%rsp), %rdi
callq 0x10040
jmp 0x2a05f
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2e0(%rsp)
jmp 0x2a076
movq 0x2e0(%rsp), %rsi
leaq 0x6b8(%rsp), %rdi
callq 0x2cfc0
jmp 0x2a08d
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2d8(%rsp)
jmp 0x2a0a4
movq 0x2d8(%rsp), %rsi
leaq 0x6d0(%rsp), %rdi
callq 0x2cfc0
jmp 0x2a0bb
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2d0(%rsp)
jmp 0x2a0d2
movq 0x2d0(%rsp), %rsi
leaq 0x6a0(%rsp), %rdi
callq 0x2cfc0
jmp 0x2a0e9
leaq 0x6d0(%rsp), %rdi
movq %rdi, 0x2c8(%rsp)
callq 0x109f0
movq 0x2c8(%rsp), %rdi
movq %rax, 0x608(%rsp)
callq 0x10a20
movq %rax, 0x600(%rsp)
movl $0x0, 0x5fc(%rsp)
movq 0x608(%rsp), %rdi
movq 0x600(%rsp), %rsi
leaq 0x5fc(%rsp), %rdx
callq 0x21f20
jmp 0x2a145
leaq 0x6b8(%rsp), %rdi
movq %rdi, 0x2c0(%rsp)
callq 0x109f0
movq 0x2c0(%rsp), %rdi
movq %rax, 0x5f0(%rsp)
callq 0x10a20
movq %rax, 0x5e8(%rsp)
movl $0x0, 0x5e4(%rsp)
movq 0x5f0(%rsp), %rdi
movq 0x5e8(%rsp), %rsi
leaq 0x5e4(%rsp), %rdx
callq 0x21f20
jmp 0x2a1a1
leaq 0x6a0(%rsp), %rdi
movq %rdi, 0x2b8(%rsp)
callq 0x109f0
movq 0x2b8(%rsp), %rdi
movq %rax, 0x5d8(%rsp)
callq 0x10a20
movq %rax, 0x5d0(%rsp)
movl $0xffffffff, 0x5cc(%rsp) # imm = 0xFFFFFFFF
movq 0x5d8(%rsp), %rdi
movq 0x5d0(%rsp), %rsi
leaq 0x5cc(%rsp), %rdx
callq 0x21f20
jmp 0x2a1fd
movl 0x76c(%rsp), %eax
movl %eax, %esi
leaq 0x6d0(%rsp), %rdi
callq 0xfc50
movl $0x1, (%rax)
movl 0x76c(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
movl $0x1, (%rax)
movl 0x76c(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
movl $0x0, (%rax)
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2b0(%rsp)
jmp 0x2a268
movq 0x2b0(%rsp), %rsi
leaq 0x628(%rsp), %rdi
callq 0xf680
jmp 0x2a27f
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x2a8(%rsp)
jmp 0x2a296
movq 0x2a8(%rsp), %rsi
leaq 0x610(%rsp), %rdi
callq 0xf680
jmp 0x2a2ad
leaq 0x628(%rsp), %rdi
movq %rdi, 0x2a0(%rsp)
callq 0xf760
movq 0x2a0(%rsp), %rdi
movq %rax, 0x5c0(%rsp)
callq 0xf790
movq %rax, 0x5b8(%rsp)
movq $0x0, 0x5b0(%rsp)
movq 0x5c0(%rsp), %rdi
movq 0x5b8(%rsp), %rsi
leaq 0x5b0(%rsp), %rdx
callq 0xf720
jmp 0x2a30a
leaq 0x610(%rsp), %rdi
movq %rdi, 0x298(%rsp)
callq 0xf760
movq 0x298(%rsp), %rdi
movq %rax, 0x5a8(%rsp)
callq 0xf790
movq %rax, 0x5a0(%rsp)
movq $0x0, 0x598(%rsp)
movq 0x5a8(%rsp), %rdi
movq 0x5a0(%rsp), %rsi
leaq 0x598(%rsp), %rdx
callq 0xf720
jmp 0x2a367
leaq 0x650(%rsp), %rdi
leaq 0x76c(%rsp), %rsi
callq 0x105b0
jmp 0x2a37e
jmp 0x2a380
leaq 0x650(%rsp), %rdi
callq 0x105e0
movb %al, 0x297(%rsp)
jmp 0x2a396
movb 0x297(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2a3a8
jmp 0x2a6dc
leaq 0x650(%rsp), %rdi
callq 0x10600
movq %rax, 0x288(%rsp)
jmp 0x2a3bf
movq 0x288(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x594(%rsp)
leaq 0x650(%rsp), %rdi
callq 0x10610
jmp 0x2a3df
leaq 0x700(%rsp), %rdi
leaq 0x594(%rsp), %rsi
callq 0x21d50
jmp 0x2a3f6
movl 0x594(%rsp), %eax
cmpl 0x764(%rsp), %eax
jne 0x2a47a
movl 0x768(%rsp), %eax
movl %eax, %esi
leaq 0x6d0(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x284(%rsp)
movl 0x594(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
movl 0x284(%rsp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
jmp 0x2a47a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
jmp 0x2ab42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
jmp 0x2ab1b
movq 0x770(%rsp), %rdi
movl 0x594(%rsp), %esi
callq 0x566f0
movq %rax, 0x278(%rsp)
jmp 0x2a498
movq 0x278(%rsp), %rsi
leaq 0x578(%rsp), %rdi
callq 0x10b20
jmp 0x2a4af
movl $0x0, 0x574(%rsp)
movslq 0x574(%rsp), %rax
movq %rax, 0x270(%rsp)
leaq 0x578(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x270(%rsp), %rax
cmpq %rcx, %rax
jae 0x2a6ca
movslq 0x574(%rsp), %rsi
leaq 0x578(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x570(%rsp)
movl 0x570(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
cmpl $0x0, (%rax)
jge 0x2a5a8
leaq 0x650(%rsp), %rdi
leaq 0x570(%rsp), %rsi
callq 0x105b0
jmp 0x2a53f
movl 0x594(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x26c(%rsp)
movl 0x570(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
movl 0x26c(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x2a5a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
leaq 0x578(%rsp), %rdi
callq 0x10520
jmp 0x2ab1b
movl 0x570(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x268(%rsp)
movl 0x594(%rsp), %eax
movl %eax, %esi
leaq 0x6a0(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0x268(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x2a6b2
movl 0x594(%rsp), %eax
movl %eax, %esi
leaq 0x6d0(%rsp), %rdi
movq %rdi, 0x248(%rsp)
callq 0xfc50
movq 0x248(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x254(%rsp)
movl 0x570(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x254(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movl 0x594(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
movq %rdi, 0x258(%rsp)
callq 0xfc50
movq 0x258(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x264(%rsp)
movl 0x570(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x264(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movl 0x570(%rsp), %eax
movl %eax, %esi
leaq 0x6e8(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
leaq 0x594(%rsp), %rsi
callq 0xfce0
jmp 0x2a6b0
jmp 0x2a6b2
jmp 0x2a6b4
movl 0x574(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x574(%rsp)
jmp 0x2a4ba
leaq 0x578(%rsp), %rdi
callq 0x10520
jmp 0x2a380
jmp 0x2a6de
leaq 0x700(%rsp), %rdi
callq 0x21ee0
movb %al, 0x247(%rsp)
jmp 0x2a6f4
movb 0x247(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2a706
jmp 0x2aaae
leaq 0x700(%rsp), %rdi
callq 0x21f00
movq %rax, 0x238(%rsp)
jmp 0x2a71d
movq 0x238(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x56c(%rsp)
leaq 0x700(%rsp), %rdi
callq 0x21f10
jmp 0x2a73d
movl $0x0, 0x568(%rsp)
movslq 0x568(%rsp), %rax
movq %rax, 0x230(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x6e8(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x230(%rsp), %rax
cmpq %rcx, %rax
jae 0x2a93b
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x6e8(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
movslq 0x568(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x564(%rsp)
movl 0x564(%rsp), %eax
movl %eax, %esi
leaq 0x6d0(%rsp), %rdi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x200(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x6d0(%rsp), %rdi
callq 0xfc50
movsd 0x200(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x208(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x628(%rsp), %rdi
callq 0xfa30
movsd 0x507e6(%rip), %xmm0    # 0x7b010
addsd (%rax), %xmm0
movsd %xmm0, 0x210(%rsp)
movl 0x564(%rsp), %eax
movl %eax, %esi
leaq 0x628(%rsp), %rdi
callq 0xfa30
movsd 0x208(%rsp), %xmm0
movsd 0x210(%rsp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x564(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x218(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
movsd 0x218(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x220(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x610(%rsp), %rdi
callq 0xfa30
movsd 0x50730(%rip), %xmm0    # 0x7b010
addsd (%rax), %xmm0
movsd %xmm0, 0x228(%rsp)
movl 0x564(%rsp), %eax
movl %eax, %esi
leaq 0x610(%rsp), %rdi
callq 0xfa30
movsd 0x220(%rsp), %xmm0
movsd 0x228(%rsp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x568(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x568(%rsp)
jmp 0x2a748
movl 0x56c(%rsp), %eax
cmpl 0x764(%rsp), %eax
jne 0x2aa13
movl 0x768(%rsp), %eax
movl %eax, 0x560(%rsp)
movl 0x560(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x1e8(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x6b8(%rsp), %rdi
callq 0xfc50
movsd 0x1e8(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x1f0(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x610(%rsp), %rdi
callq 0xfa30
movsd 0x50642(%rip), %xmm0    # 0x7b010
addsd (%rax), %xmm0
movsd %xmm0, 0x1f8(%rsp)
movl 0x560(%rsp), %eax
movl %eax, %esi
leaq 0x610(%rsp), %rdi
callq 0xfa30
movsd 0x1f0(%rsp), %xmm0
movsd 0x1f8(%rsp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x56c(%rsp), %eax
cmpl 0x76c(%rsp), %eax
je 0x2aaa9
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x610(%rsp), %rdi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x1d8(%rsp)
movl 0x56c(%rsp), %eax
movl %eax, %esi
leaq 0x628(%rsp), %rdi
callq 0xfa30
movsd 0x1d8(%rsp), %xmm0
subsd (%rax), %xmm0
movsd 0x50593(%rip), %xmm1    # 0x7b008
divsd %xmm1, %xmm0
movsd %xmm0, 0x1e0(%rsp)
movq 0x780(%rsp), %rdi
movl 0x56c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x1e0(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
jmp 0x2a6de
leaq 0x610(%rsp), %rdi
callq 0xfa50
leaq 0x628(%rsp), %rdi
callq 0xfa50
leaq 0x650(%rsp), %rdi
callq 0x10620
leaq 0x6a0(%rsp), %rdi
callq 0xfc70
leaq 0x6b8(%rsp), %rdi
callq 0xfc70
leaq 0x6d0(%rsp), %rdi
callq 0xfc70
leaq 0x6e8(%rsp), %rdi
callq 0x104c0
leaq 0x700(%rsp), %rdi
callq 0x21e40
jmp 0x2bfa4
leaq 0x610(%rsp), %rdi
callq 0xfa50
leaq 0x628(%rsp), %rdi
callq 0xfa50
leaq 0x650(%rsp), %rdi
callq 0x10620
leaq 0x6a0(%rsp), %rdi
callq 0xfc70
leaq 0x6b8(%rsp), %rdi
callq 0xfc70
leaq 0x6d0(%rsp), %rdi
callq 0xfc70
leaq 0x6e8(%rsp), %rdi
callq 0x104c0
leaq 0x700(%rsp), %rdi
callq 0x21e40
jmp 0x2bfac
leaq 0x548(%rsp), %rdi
callq 0x10030
leaq 0x530(%rsp), %rdi
callq 0xfc40
leaq 0x518(%rsp), %rdi
callq 0xfc40
leaq 0x500(%rsp), %rdi
callq 0xfc40
leaq 0x4e8(%rsp), %rdi
callq 0xfa00
movq 0x770(%rsp), %rax
addq $0x90, %rax
movq %rax, 0x4e0(%rsp)
leaq 0x490(%rsp), %rdi
callq 0x10580
jmp 0x2abee
leaq 0x478(%rsp), %rdi
callq 0xfcd0
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x1d0(%rsp)
jmp 0x2ac12
movq 0x1d0(%rsp), %rsi
leaq 0x548(%rsp), %rdi
callq 0x10040
jmp 0x2ac29
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x1c8(%rsp)
jmp 0x2ac40
movq 0x1c8(%rsp), %rsi
leaq 0x500(%rsp), %rdi
callq 0x2cfc0
jmp 0x2ac57
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x1c0(%rsp)
jmp 0x2ac6e
movq 0x1c0(%rsp), %rsi
leaq 0x530(%rsp), %rdi
callq 0x2cfc0
jmp 0x2ac85
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x1b8(%rsp)
jmp 0x2ac9c
movq 0x1b8(%rsp), %rsi
leaq 0x4e8(%rsp), %rdi
callq 0xf680
jmp 0x2acb3
movq 0x770(%rsp), %rdi
callq 0x56b40
movq %rax, 0x1b0(%rsp)
jmp 0x2acca
movq 0x1b0(%rsp), %rsi
leaq 0x518(%rsp), %rdi
callq 0x2cfc0
jmp 0x2ace1
leaq 0x530(%rsp), %rdi
movq %rdi, 0x1a8(%rsp)
callq 0x109f0
movq 0x1a8(%rsp), %rdi
movq %rax, 0x470(%rsp)
callq 0x10a20
movq %rax, 0x468(%rsp)
movl $0x0, 0x464(%rsp)
movq 0x470(%rsp), %rdi
movq 0x468(%rsp), %rsi
leaq 0x464(%rsp), %rdx
callq 0x21f20
jmp 0x2ad3d
movl 0x76c(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movl $0x1, (%rax)
leaq 0x500(%rsp), %rdi
movq %rdi, 0x1a0(%rsp)
callq 0x109f0
movq 0x1a0(%rsp), %rdi
movq %rax, 0x458(%rsp)
callq 0x10a20
movq %rax, 0x450(%rsp)
movl $0xffffffff, 0x44c(%rsp) # imm = 0xFFFFFFFF
movq 0x458(%rsp), %rdi
movq 0x450(%rsp), %rsi
leaq 0x44c(%rsp), %rdx
callq 0x21f20
jmp 0x2adb5
movl 0x76c(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl $0x0, (%rax)
leaq 0x4e8(%rsp), %rdi
movq %rdi, 0x198(%rsp)
callq 0xf760
movq 0x198(%rsp), %rdi
movq %rax, 0x440(%rsp)
callq 0xf790
movq %rax, 0x438(%rsp)
movq $0x0, 0x430(%rsp)
movq 0x440(%rsp), %rdi
movq 0x438(%rsp), %rsi
leaq 0x430(%rsp), %rdx
callq 0xf720
jmp 0x2ae2e
leaq 0x518(%rsp), %rdi
movq %rdi, 0x190(%rsp)
callq 0x109f0
movq 0x190(%rsp), %rdi
movq %rax, 0x428(%rsp)
callq 0x10a20
movq %rax, 0x420(%rsp)
movl $0x0, 0x41c(%rsp)
movq 0x428(%rsp), %rdi
movq 0x420(%rsp), %rsi
leaq 0x41c(%rsp), %rdx
callq 0x21f20
jmp 0x2ae8a
leaq 0x490(%rsp), %rdi
leaq 0x76c(%rsp), %rsi
callq 0x105b0
jmp 0x2aea1
jmp 0x2aea3
leaq 0x490(%rsp), %rdi
callq 0x105e0
movb %al, 0x18f(%rsp)
jmp 0x2aeb9
movb 0x18f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2aecb
jmp 0x2b15f
leaq 0x490(%rsp), %rdi
callq 0x10600
movq %rax, 0x180(%rsp)
jmp 0x2aee2
movq 0x180(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x418(%rsp)
leaq 0x490(%rsp), %rdi
callq 0x10610
jmp 0x2af02
leaq 0x478(%rsp), %rdi
leaq 0x418(%rsp), %rsi
callq 0xfce0
jmp 0x2af19
movq 0x770(%rsp), %rdi
movl 0x418(%rsp), %esi
callq 0x566f0
movq %rax, 0x178(%rsp)
jmp 0x2af37
movq 0x178(%rsp), %rsi
leaq 0x400(%rsp), %rdi
callq 0x10b20
jmp 0x2af4e
movl $0x0, 0x3fc(%rsp)
movslq 0x3fc(%rsp), %rax
movq %rax, 0x170(%rsp)
leaq 0x400(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x170(%rsp), %rax
cmpq %rcx, %rax
jae 0x2b14d
movslq 0x3fc(%rsp), %rsi
leaq 0x400(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x3f8(%rsp)
movl 0x3f8(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
cmpl $0x0, (%rax)
jge 0x2b079
leaq 0x490(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
callq 0x105b0
jmp 0x2afde
movl 0x418(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x16c(%rsp)
movl 0x3f8(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl 0x16c(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x2b079
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
jmp 0x2bf61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
jmp 0x2bf47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
leaq 0x400(%rsp), %rdi
callq 0x10520
jmp 0x2bf47
movl 0x3f8(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x168(%rsp)
movl 0x418(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0x168(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x2b135
movl 0x418(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0xfc50
movq 0x158(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x164(%rsp)
movl 0x3f8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x164(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movl 0x3f8(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
leaq 0x418(%rsp), %rsi
callq 0xfce0
jmp 0x2b133
jmp 0x2b135
jmp 0x2b137
movl 0x3fc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3fc(%rsp)
jmp 0x2af59
leaq 0x400(%rsp), %rdi
callq 0x10520
jmp 0x2aea3
leaq 0x478(%rsp), %rdi
callq 0xfd50
subq $0x1, %rax
movl %eax, 0x3f4(%rsp)
cmpl $0x0, 0x3f4(%rsp)
jl 0x2b36d
movslq 0x3f4(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x3f0(%rsp)
movl $0x0, 0x3ec(%rsp)
movslq 0x3ec(%rsp), %rax
movq %rax, 0x150(%rsp)
movl 0x3f0(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x150(%rsp), %rax
cmpq %rcx, %rax
jae 0x2b2eb
movl 0x3f0(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
movslq 0x3ec(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x3e8(%rsp)
movl 0x3e8(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x138(%rsp)
movl 0x3f0(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movsd 0x138(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x140(%rsp)
movl 0x3f0(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd 0x4fd80(%rip), %xmm0    # 0x7b010
addsd (%rax), %xmm0
movsd %xmm0, 0x148(%rsp)
movl 0x3e8(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd 0x140(%rsp), %xmm0
movsd 0x148(%rsp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x3ec(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3ec(%rsp)
jmp 0x2b1ae
movl 0x3f0(%rsp), %eax
cmpl 0x76c(%rsp), %eax
je 0x2b355
movl 0x3f0(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd (%rax), %xmm0
movsd 0x4fceb(%rip), %xmm1    # 0x7b008
divsd %xmm1, %xmm0
movsd %xmm0, 0x130(%rsp)
movq 0x780(%rsp), %rdi
movl 0x3f0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x130(%rsp), %xmm1
movsd (%rax), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, (%rax)
jmp 0x2b357
movl 0x3f4(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3f4(%rsp)
jmp 0x2b177
leaq 0x490(%rsp), %rdi
leaq 0x764(%rsp), %rsi
callq 0x105b0
jmp 0x2b384
movl 0x768(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0xfc50
movq 0x118(%rsp), %rdi
movl (%rax), %eax
incl %eax
movl %eax, 0x124(%rsp)
movl 0x764(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x124(%rsp), %ecx
movl %ecx, (%rax)
movl 0x764(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x100e0
movq %rax, %rdi
callq 0x10a50
movq 0x128(%rsp), %rdi
movl 0x764(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x768(%rsp), %rsi
callq 0xfce0
jmp 0x2b41a
movl 0x768(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0xfc50
movl (%rax), %eax
movl %eax, 0xfc(%rsp)
movl 0x764(%rsp), %eax
movl %eax, %esi
leaq 0x518(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0xfc50
movl 0xfc(%rsp), %ecx
movq 0x100(%rsp), %rdi
movl %ecx, (%rax)
movl 0x764(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq 0x108(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x114(%rsp)
movl 0x764(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x114(%rsp), %ecx
movl %ecx, (%rax)
movq 0x4e0(%rsp), %rdi
callq 0x1f400
movl %edx, 0x3d0(%rsp)
movq %rax, 0x3c8(%rsp)
movl 0x3d0(%rsp), %eax
movl %eax, 0x3e0(%rsp)
movq 0x3c8(%rsp), %rax
movq %rax, 0x3d8(%rsp)
movq 0x4e0(%rsp), %rdi
callq 0x21fd0
movl %edx, 0x3b0(%rsp)
movq %rax, 0x3a8(%rsp)
movl 0x3b0(%rsp), %eax
movl %eax, 0x3c0(%rsp)
movq 0x3a8(%rsp), %rax
movq %rax, 0x3b8(%rsp)
movb $0x0, 0x3a7(%rsp)
movq 0x3d8(%rsp), %rdi
movl 0x3e0(%rsp), %esi
movq 0x3b8(%rsp), %rdx
movl 0x3c0(%rsp), %ecx
leaq 0x3a7(%rsp), %r8
callq 0x21f60
jmp 0x2b54f
movq 0x4e0(%rsp), %rdi
movl 0x764(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0xe8(%rsp)
movq %rax, 0xf0(%rsp)
jmp 0x2b577
movq 0xe8(%rsp), %rax
movq 0xf0(%rsp), %rcx
movq %rcx, 0x390(%rsp)
movq %rax, 0x398(%rsp)
leaq 0x390(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
leaq 0x490(%rsp), %rdi
callq 0x105e0
movb %al, 0xe7(%rsp)
jmp 0x2b5bf
movb 0xe7(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2b5d1
jmp 0x2bae3
leaq 0x490(%rsp), %rdi
callq 0x10600
movq %rax, 0xd8(%rsp)
jmp 0x2b5e8
movq 0xd8(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x38c(%rsp)
leaq 0x490(%rsp), %rdi
callq 0x10610
jmp 0x2b608
movq 0x770(%rsp), %rdi
movl 0x38c(%rsp), %esi
callq 0x566f0
movq %rax, 0xd0(%rsp)
jmp 0x2b626
movq 0xd0(%rsp), %rsi
leaq 0x370(%rsp), %rdi
callq 0x10b20
jmp 0x2b63d
movl $0x0, 0x36c(%rsp)
movslq 0x36c(%rsp), %rax
movq %rax, 0xc8(%rsp)
leaq 0x370(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0xc8(%rsp), %rax
cmpq %rcx, %rax
jae 0x2bad1
movslq 0x36c(%rsp), %rsi
leaq 0x370(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x368(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0xc4(%rsp)
movl 0x38c(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0xc4(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jle 0x2b83e
movl 0x38c(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0xfc50
movq 0xa8(%rsp), %rdi
movl (%rax), %eax
incl %eax
movl %eax, 0xb4(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0xb4(%rsp), %ecx
movl %ecx, (%rax)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x100e0
movq %rax, %rdi
callq 0x10a50
movq 0xb8(%rsp), %rdi
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x38c(%rsp), %rsi
callq 0xfce0
jmp 0x2b779
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movl $0x0, (%rax)
movl 0x38c(%rsp), %eax
movl %eax, %esi
leaq 0x518(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0xa0(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x518(%rsp), %rdi
callq 0xfc50
movl 0xa0(%rsp), %ecx
movl %ecx, (%rax)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x518(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0xa4(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movl 0xa4(%rsp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
jmp 0x2ba01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x648(%rsp)
movl %eax, 0x644(%rsp)
leaq 0x370(%rsp), %rdi
callq 0x10520
jmp 0x2bf47
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x9c(%rsp)
movl 0x38c(%rsp), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0x9c(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x2b9ff
movl 0x38c(%rsp), %eax
movl %eax, %esi
leaq 0x518(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0xfc50
movq 0x78(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x74(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x74(%rsp), %edx
movq 0x78(%rsp), %rdi
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movl 0x38c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x84(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movl 0x84(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x100e0
movq %rax, %rdi
callq 0x10cf0
movq 0x88(%rsp), %rdi
movq %rax, 0x358(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10d20
movq %rax, 0x350(%rsp)
movq 0x358(%rsp), %rdi
movq 0x350(%rsp), %rsi
leaq 0x38c(%rsp), %rdx
callq 0x10c90
movq %rax, 0x90(%rsp)
jmp 0x2b982
movq 0x90(%rsp), %rax
movq %rax, 0x360(%rsp)
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
callq 0x10d20
movq %rax, 0x348(%rsp)
leaq 0x360(%rsp), %rdi
leaq 0x348(%rsp), %rsi
callq 0x10c50
testb $0x1, %al
jne 0x2b9d3
jmp 0x2b9fd
movl 0x368(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
leaq 0x38c(%rsp), %rsi
callq 0xfce0
jmp 0x2b9fb
jmp 0x2b9fd
jmp 0x2b9ff
jmp 0x2ba01
movq 0x4e0(%rsp), %rdi
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x60(%rsp)
movq %rax, 0x68(%rsp)
jmp 0x2ba23
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rcx
movq %rcx, 0x338(%rsp)
movq %rax, 0x340(%rsp)
leaq 0x338(%rsp), %rdi
callq 0x10c20
xorb $-0x1, %al
testb $0x1, %al
jne 0x2ba52
jmp 0x2bab9
movq 0x4e0(%rsp), %rdi
movl 0x368(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x50(%rsp)
movq %rax, 0x58(%rsp)
jmp 0x2ba74
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
movq %rcx, 0x328(%rsp)
movq %rax, 0x330(%rsp)
leaq 0x328(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
leaq 0x490(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x105b0
jmp 0x2bab7
jmp 0x2bab9
jmp 0x2babb
movl 0x36c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x36c(%rsp)
jmp 0x2b648
leaq 0x370(%rsp), %rdi
callq 0x10520
jmp 0x2b5a9
movl $0x1, 0x324(%rsp)
movslq 0x324(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x478(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x48(%rsp), %rax
cmpq %rcx, %rax
jae 0x2bca7
movl 0x324(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x44(%rsp)
movslq 0x324(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0x44(%rsp), %eax
cmpl (%rcx), %eax
jle 0x2bc8f
movl 0x324(%rsp), %eax
movl %eax, 0x320(%rsp)
movl 0x320(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x40(%rsp)
movslq 0x320(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, %esi
leaq 0x500(%rsp), %rdi
callq 0xfc50
movq %rax, %rcx
movl 0x40(%rsp), %eax
cmpl (%rcx), %eax
jle 0x2bc8d
movl 0x320(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x31c(%rsp)
movslq 0x320(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x38(%rsp)
movl 0x320(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl 0x38(%rsp), %ecx
movl %ecx, (%rax)
movl 0x31c(%rsp), %eax
movl %eax, 0x3c(%rsp)
movslq 0x320(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl 0x3c(%rsp), %ecx
movl %ecx, (%rax)
movl 0x320(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x320(%rsp)
jmp 0x2bb8d
jmp 0x2bc8f
jmp 0x2bc91
movl 0x324(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x324(%rsp)
jmp 0x2baee
leaq 0x4e8(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xf760
movq 0x30(%rsp), %rdi
movq %rax, 0x310(%rsp)
callq 0xf790
movq %rax, 0x308(%rsp)
movq $0x0, 0x300(%rsp)
movq 0x310(%rsp), %rdi
movq 0x308(%rsp), %rsi
leaq 0x300(%rsp), %rdx
callq 0xf720
jmp 0x2bcfe
leaq 0x478(%rsp), %rdi
callq 0xfd50
subq $0x1, %rax
movl %eax, 0x2fc(%rsp)
cmpl $0x0, 0x2fc(%rsp)
jl 0x2beea
movslq 0x2fc(%rsp), %rsi
leaq 0x478(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x2f8(%rsp)
movl $0x0, 0x2f4(%rsp)
movslq 0x2f4(%rsp), %rax
movq %rax, 0x28(%rsp)
movl 0x2f8(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
jae 0x2be72
movl 0x2f8(%rsp), %eax
movl %eax, %esi
leaq 0x548(%rsp), %rdi
callq 0x100e0
movq %rax, %rdi
movslq 0x2f4(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x2f0(%rsp)
movl 0x2f0(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movl 0x2f8(%rsp), %eax
movl %eax, %esi
leaq 0x530(%rsp), %rdi
callq 0xfc50
movsd 0x10(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x18(%rsp)
movl 0x2f8(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd 0x4f1f0(%rip), %xmm0    # 0x7b010
addsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movl 0x2f0(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd 0x18(%rsp), %xmm0
movsd 0x20(%rsp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x2f4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2f4(%rsp)
jmp 0x2bd4d
movl 0x2f8(%rsp), %eax
cmpl 0x76c(%rsp), %eax
je 0x2bed2
movl 0x2f8(%rsp), %eax
movl %eax, %esi
leaq 0x4e8(%rsp), %rdi
callq 0xfa30
movsd (%rax), %xmm0
movsd 0x4f164(%rip), %xmm1    # 0x7b008
divsd %xmm1, %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x780(%rsp), %rdi
movl 0x2f8(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x8(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
jmp 0x2bed4
movl 0x2fc(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x2fc(%rsp)
jmp 0x2bd16
leaq 0x478(%rsp), %rdi
callq 0x10520
leaq 0x490(%rsp), %rdi
callq 0x10620
leaq 0x4e8(%rsp), %rdi
callq 0xfa50
leaq 0x500(%rsp), %rdi
callq 0xfc70
leaq 0x518(%rsp), %rdi
callq 0xfc70
leaq 0x530(%rsp), %rdi
callq 0xfc70
leaq 0x548(%rsp), %rdi
callq 0x104c0
jmp 0x2bfa4
leaq 0x478(%rsp), %rdi
callq 0x10520
leaq 0x490(%rsp), %rdi
callq 0x10620
leaq 0x4e8(%rsp), %rdi
callq 0xfa50
leaq 0x500(%rsp), %rdi
callq 0xfc70
leaq 0x518(%rsp), %rdi
callq 0xfc70
leaq 0x530(%rsp), %rdi
callq 0xfc70
leaq 0x548(%rsp), %rdi
callq 0x104c0
jmp 0x2bfac
addq $0x778, %rsp            # imm = 0x778
retq
movq 0x648(%rsp), %rdi
callq 0x9cf0
nopl (%rax)