// File: /workspace/github_cpp_makefile_star2_O1/kmyk[P]procon26/beam_search.cpp
// Function: beam_search_solver::operator()(board const&, std::vector<block, std::allocator<block>> const&)
vector<placement_t> operator () (board const & a_brd, vector<block> const & blks) {
        // 初期化
        n = blks.size();
        repeat (j,2) remaining_small_blks[j].resize(n);
        repeat_reverse (i,n-1) {
            repeat (j,2) {
                remaining_small_blks[j][i] = remaining_small_blks[j][i+1];
            }
            if (blks[i+1].area() <= 2) {
                remaining_small_blks[blks[i+1].area() - 1][i] += 1;
            }
        }
        highscore = a_brd.area();
        if (make_pair(a_brd.area(), 0) < make_pair(g_best_score, g_best_stone)) {
            g_best_score = a_brd.area();
            g_best_stone = 0;
        }
        // ビームサーチ 初期状態
        vector<photon_ptr> beam;
        for (auto && brd : a_brd.split()) { // 初期の非連結成分同士は真に独立
            photon_ptr ppho = make_shared<photon_t>();
            photon_t & pho = *ppho;
            pho.brd = brd;
            pho.score = a_brd.area();
            pho.stone_count = 0;
            pho.circumference = 0; // 相対的なもののみ気にするので0でよい
            pho.remaining_stone = 0;
            for (auto && blk : blks) pho.remaining_stone += blk.area();
            pho.plc.resize(n, { false });
            pho.bix = 0;
            for (int & it : pho.isolated) it = 0;
            pho.solver = this;
            beam.push_back(ppho);
        }
int nthbeam = 0;
        // ビーム発射
        vector<photon_ptr> next;
        unordered_set<bitset<board_size*board_size> > used_board;
        while (not beam.empty()) {
            for (auto && ppho : beam) {
                photon_t const & pho = *ppho;
                // ハイスコアの更新
                if (make_pair(pho.score, pho.stone_count) < make_pair(highscore, least_stone)) {
                    highscore = pho.score;
                    least_stone = pho.stone_count;
                    result = pho.plc;
                }
                // 石を置く
                int bix = pho.bix;
                while (bix < n and pho.plc[bix].used) bix += 1;
                if (bix < n) {
                    block const & blk = blks[bix];
                    { // 置かなかった場合
                        photon_ptr npho = make_shared<photon_t>();
                        *npho = pho;
                        npho->bix = bix + 1;
                        npho->dead_stone += blk.area();
                        npho->remaining_stone -= blk.area();
                        next.push_back(npho);
                    }
                    bool is_just_used = false; // ぴったり嵌るような使われ方をしたか // used_componentsと処理が被っている
                    set<vector<int> > used_components;
                    int pushed_count = 0;
                    placement_t p = initial_placement(blk, pho.brd.stone_offset());
                    do {
                        int skip;
                        if (pho.brd.is_puttable(blk, p, 2+bix, &skip)) {
                            photon_ptr pnpho = make_shared<photon_t>();
                            *pnpho = pho;
                            photon_t & npho = *pnpho;
                            npho.plc[bix] = p;
                            npho.stone_count += 1;
                            npho.bix = bix + 1;
                            npho.score -= blk.area();
                            npho.remaining_stone -= blk.area();
                            // circumference 更新
                            repeat (j, blk.area()) {
                                point_t q = blk.stones(p.f,p.r)[j] + p.p;
                                repeat (i,4) {
                                    auto r = q + dp[i];
                                    npho.circumference +=
                                        not is_on_board(r) ? -1 :
                                        npho.brd.at(r) == 0 ? 1 :
                                        -1;
                                }
                                npho.brd.put(q, 2+bix);
                            }
                            // ぴったり嵌まる場合
                            if (pho.circumference - npho.circumference == blk.circumference()) {
                                if (is_just_used) continue;
                                is_just_used = true;
                                if (1 <= blk.area() and blk.area() <= 4) {
                                    npho.isolated[blk.area() - 1] -= 1;
                                }
                            }
                            npho.brd.update();
                            // 接続する空白
                            vector<point_t> neighbors;
                            repeat (j, blk.area()) {
                                point_t q = blk.stones(p.f,p.r)[j] + p.p;
                                repeat (i,4) {
                                    auto r = q + dp[i];
                                    if (is_on_board(r) and npho.brd.at(r) == 0) {
                                        neighbors.push_back(r);
                                    }
                                }
                            }
                            // cache
                            if (used_board.count(npho.brd.packed())) continue;
                            if (2 <= n and cache and cache->count(npho.brd.packed())) continue;
                            used_board.insert(npho.brd.packed());
                            // 周囲の孤立した空白の探索
                            set<point_t> looked_cell;
                            vector<int> components;
                            bool is_diverged = false; // there are some too large components
                            for (point_t q : neighbors) {
                                if (looked_cell.count(q)) continue;
                                set<point_t> current;
                                current.insert(q);
                                int n = 1; // 空白の大きさ
                                stack<point_t> stk;
                                stk.push(q);
                                // dfs
                                while (not stk.empty()) {
                                    point_t r = stk.top(); stk.pop();
                                    repeat (i,4) {
                                        auto s = r + dp[i];
                                        if (looked_cell.count(s)) {
                                            n = 1000000007;
                                            break;
                                        }
                                        if (not current.count(s) and is_on_board(s) and npho.brd.at(s) == 0) {
                                            current.insert(s);
                                            stk.push(s);
                                            n += 1;
                                        }
                                    }
                                    if (5 <= n) break;
                                }
                                if (1 <= n and n <= 4) {
                                    npho.isolated[n-1] += 1;
                                }
                                if (5 <= n) is_diverged = true;
                                if (not is_diverged) {
                                    // 空白の種類の判別
                                    if (n == 1 or n == 2) {
                                        components.push_back(n);
                                    } else if (n == 3) {
                                        vector<point_t> ps(current.begin(), current.end());
                                        components.push_back(3 + (cross(ps[1] - ps[0], ps[2] - ps[0]) == 0 ? 0 : 1));
                                    } else if (n == 4) {
                                        vector<point_t> ps(current.begin(), current.end());
                                        int sy = abs(ps[3].y + ps[2].y + ps[1].y - 3 * ps[0].y);
                                        int sx = abs(ps[3].x + ps[2].x + ps[1].x - 3 * ps[0].x);
                                        components.push_back(component_pack_table[min(sy, sx) + max(sy, sx) * 10]);
                                    }
                                }
                                copy(current.begin(), current.end(), inserter(looked_cell, looked_cell.begin()));
                            }
                            if (not is_diverged) { // 小さい空白だけに分割する場合の重複排除
                                sort(components.begin(), components.end());
                                if (used_components.count(components)) continue;
                                used_components.insert(components);
                            }
                            if (is_just_used) {
                                repeat (i,pushed_count) next.pop_back();
                                next.push_back(pnpho);
                                break; // justなら必ずそれを使うことにする
                            }
                            next.push_back(pnpho);
                            pushed_count += 1;
                        }
                        p.p.x += skip - 1;
                    } while (next_placement(p, blk, pho.brd.stone_offset(), pho.brd.stone_offset() + pho.brd.stone_size()));
                }
                if (beam_width * 10 < next.size()) { // 全部貯めてるとoom killerさん
                    sort(next.rbegin(), next.rend(), &photon_ptr_comparator);
                    next.resize(beam_width);
                }
            }
            sort(next.rbegin(), next.rend(), &photon_ptr_comparator);
            if (beam_width < next.size()) next.resize(beam_width);
            for (auto && ppho : next) ppho->brd.shrink();
            if (cache) for (auto && ppho : next) cache->insert(ppho->brd.packed());
            next.swap(beam);
            next.clear();
            used_board.clear();
            // ここからその石に関して終わったので出力
cerr << "beam " << (nthbeam ++) << " : " << beam.size() << endl;
if (cache) cerr << "cache " << cache->size() << endl;
            // 全体のハイスコアの更新と出力
            if (make_pair(highscore, least_stone) < make_pair(g_best_score, g_best_stone)) {
                g_provisional_result = { result };
                g_best_score = highscore;
                g_best_stone = least_stone;
#ifdef NPRACTICE
                cout << g_provisional_result;
#endif
                cerr << g_best_score << " " << g_best_stone << endl;
            }
            // 石ごとに途中経過を出力
repeat (i, min<int>(3, beam.size())) {
    cerr << beam[i]->brd;
    cerr << "score: " << beam[i]->score << endl;
    cerr << "evaluate: " << evaluate(*beam[i]) << endl;
    cerr << "circumference: " << beam[i]->circumference << endl;
}
        }
        // ビーム終了
        return result;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2c8, %rsp            # imm = 0x2C8
movq %rdx, 0x10(%rsp)
movq %rsi, %r14
movq %rdi, %r12
movq 0x8(%rcx), %rax
movq %rcx, 0xd0(%rsp)
subq (%rcx), %rax
shrq $0x3, %rax
imull $0xc9484e2b, %eax, %eax # imm = 0xC9484E2B
movl %eax, 0x20ec(%rsi)
movl $0x2120, %ebx           # imm = 0x2120
leaq (%r14,%rbx), %rdi
movslq 0x20ec(%r14), %rsi
callq 0x48a0
addq $0x18, %rbx
cmpq $0x2138, %rbx           # imm = 0x2138
je 0x2b9c
movl 0x20ec(%r14), %ebx
cmpl $0x2, %ebx
movq %r14, 0x8(%rsp)
jl 0x2c45
addl $-0x2, %ebx
leaq 0x2120(%r14), %r15
xorl %eax, %eax
movq 0x2120(%r14,%rax), %rcx
movl 0x4(%rcx,%rbx,4), %edx
movl %edx, (%rcx,%rbx,4)
addq $0x18, %rax
cmpq $0x18, %rax
je 0x2bd6
leaq 0x1(%rbx), %rax
imulq $0x418, %rax, %r14      # imm = 0x418
movq 0xd0(%rsp), %rax
movq (%rax), %rdi
addq %r14, %rdi
callq 0x7c78
cmpl $0x3, %eax
jge 0x2c34
movq 0xd0(%rsp), %rax
addq (%rax), %r14
movq %r14, %rdi
callq 0x7c78
decl %eax
cltq
leaq (%rax,%rax,2), %rax
movq (%r15,%rax,8), %rax
incl (%rax,%rbx,4)
leaq -0x1(%rbx), %rax
testq %rbx, %rbx
movq %rax, %rbx
movq 0x8(%rsp), %r14
jg 0x2bd4
movq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x7b4c
movl %eax, 0x20e0(%r14)
movq %rbx, %rdi
callq 0x7b4c
leaq 0xd508(%rip), %rcx      # 0x10170
movl (%rcx), %ecx
cmpl %ecx, %eax
jl 0x2c7c
jg 0x2c9c
leaq 0xd4fd(%rip), %rax      # 0x10174
cmpl $0x0, (%rax)
jle 0x2c9c
movq 0x10(%rsp), %rdi
callq 0x7b4c
leaq 0xd4e3(%rip), %rcx      # 0x10170
movl %eax, (%rcx)
leaq 0xd4de(%rip), %rax      # 0x10174
movl $0x0, (%rax)
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
leaq 0x150(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0x7ede
movq 0x150(%rsp), %r14
movq 0x158(%rsp), %rbx
cmpq %rbx, %r14
movq %r12, 0xa0(%rsp)
je 0x2e02
leaq 0x110(%rsp), %r13
movq $0x0, 0x110(%rsp)
leaq 0x118(%rsp), %rdi
movq %r13, %rsi
leaq 0x290(%rsp), %rdx
callq 0x4d34
movq 0x110(%rsp), %r15
movl $0x20b0, %edx           # imm = 0x20B0
movq %r15, %rdi
movq %r14, %rsi
callq 0x2140
movq 0x10(%rsp), %rdi
callq 0x7b4c
movl %eax, 0x20b0(%r15)
movq $0x0, 0x20b4(%r15)
movl $0x0, 0x20c0(%r15)
movq 0xd0(%rsp), %rax
movq (%rax), %rbp
movq 0x8(%rax), %r12
cmpq %r12, %rbp
je 0x2d77
movq %rbp, %rdi
callq 0x7c78
addl %eax, 0x20c0(%r15)
addq $0x418, %rbp            # imm = 0x418
jmp 0x2d5a
leaq 0x20c8(%r15), %rdi
movq 0x8(%rsp), %r12
movslq 0x20ec(%r12), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, 0x290(%rsp)
movl $0x0, 0x2a0(%rsp)
leaq 0x290(%rsp), %rdx
callq 0x48d2
xorps %xmm0, %xmm0
movups %xmm0, 0x20e0(%r15)
movl $0x0, 0x20f0(%r15)
movq %r12, 0x20f8(%r15)
leaq 0x50(%rsp), %rdi
movq %r13, %rsi
callq 0x4918
movq 0xa0(%rsp), %r12
movq 0x118(%rsp), %rdi
testq %rdi, %rdi
je 0x2df2
callq 0x52a8
addq $0x20b0, %r14           # imm = 0x20B0
cmpq %rbx, %r14
jne 0x2ce8
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
movq 0x8(%rsp), %r14
je 0x2e24
movq 0x160(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
leaq 0x2c0(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movq 0x50(%rsp), %rcx
movq 0x58(%rsp), %rax
movq %rax, 0x238(%rsp)
cmpq %rax, %rcx
je 0x42c3
leaq 0x20c8(%r14), %rax
movq %rax, 0x230(%rsp)
leaq 0x20f0(%r14), %rax
movq %rax, 0x250(%rsp)
movl $0x0, 0xb4(%rsp)
movq %rcx, 0x270(%rsp)
movq (%rcx), %rcx
movl 0x20b0(%rcx), %eax
movq %rcx, 0x40(%rsp)
movl 0x20b4(%rcx), %ecx
movl 0x20e0(%r14), %edx
cmpl %edx, %eax
jl 0x2ece
jg 0x2ef5
cmpl 0x20e4(%r14), %ecx
jge 0x2ef5
movl %eax, 0x20e0(%r14)
movl %ecx, 0x20e4(%r14)
movq 0x40(%rsp), %rax
leaq 0x20c8(%rax), %rsi
movq 0x230(%rsp), %rdi
callq 0x4958
movq 0x40(%rsp), %rax
movslq 0x20e0(%rax), %rdi
movslq 0x20ec(%r14), %rax
cmpl %eax, %edi
setl %cl
jge 0x3caf
movq 0x40(%rsp), %rdx
movq 0x20c8(%rdx), %rdx
leaq (%rdi,%rdi,4), %rsi
cmpb $0x1, (%rdx,%rsi,4)
jne 0x2f50
leaq (%rdx,%rsi,4), %rdx
addq $0x14, %rdx
leaq -0x1(%rax), %rcx
cmpq %rdi, %rcx
je 0x3caf
incq %rdi
cmpb $0x1, (%rdx)
leaq 0x14(%rdx), %rdx
je 0x2f35
cmpq %rax, %rdi
setl %cl
testb %cl, %cl
je 0x3caf
movq %rdi, 0xa8(%rsp)
movslq %edi, %rcx
movq %rcx, 0x260(%rsp)
imulq $0x418, %rcx, %rbp      # imm = 0x418
movq 0xd0(%rsp), %rax
addq (%rax), %rbp
movq $0x0, 0x150(%rsp)
leaq 0x158(%rsp), %rdi
leaq 0x150(%rsp), %rsi
leaq 0x110(%rsp), %rdx
callq 0x4d34
movq 0x150(%rsp), %rbx
movl $0x20c4, %edx           # imm = 0x20C4
movq %rbx, %rdi
movq 0x40(%rsp), %r14
movq %r14, %rsi
callq 0x2140
movl $0x20c8, %eax           # imm = 0x20C8
leaq (%rbx,%rax), %rdi
leaq (%r14,%rax), %rsi
movq %rsi, 0x268(%rsp)
callq 0x4958
leaq 0x20e0(%r14), %rax
movups (%rax), %xmm0
movq %rax, 0x258(%rsp)
movups 0x10(%rax), %xmm1
movups %xmm1, 0x20f0(%rbx)
movups %xmm0, 0x20e0(%rbx)
movq 0xa8(%rsp), %rax
leal 0x1(%rax), %ecx
movq 0x150(%rsp), %rax
movl %ecx, 0x144(%rsp)
movl %ecx, 0x20e0(%rax)
movq %rbp, %rdi
callq 0x7c78
movq 0x150(%rsp), %rcx
addl %eax, 0x20bc(%rcx)
movq %rbp, %rdi
callq 0x7c78
movq 0x150(%rsp), %rcx
subl %eax, 0x20c0(%rcx)
leaq 0x20(%rsp), %rdi
leaq 0x150(%rsp), %rsi
callq 0x4918
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x3071
callq 0x52a8
movl $0x0, 0x118(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x120(%rsp)
leaq 0x118(%rsp), %rax
movq %rax, 0x128(%rsp)
movq %rax, 0x130(%rsp)
movq %rcx, 0x138(%rsp)
movq %r14, %rdi
callq 0x7afe
movq %rax, 0x150(%rsp)
leaq 0xbc(%rsp), %rdi
movq %rbp, %rsi
leaq 0x150(%rsp), %rdx
callq 0x8cf6
movq 0xa8(%rsp), %rax
addl $0x2, %eax
movq %rax, 0xa8(%rsp)
leaq 0x290(%rbp), %rax
movq %rax, 0x240(%rsp)
movl $0x0, 0xb8(%rsp)
movl $0x0, 0x48(%rsp)
movq %rbp, 0x10(%rsp)
movq 0x40(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
leaq 0xbc(%rsp), %rdx
movq 0xa8(%rsp), %rcx
leaq 0x14c(%rsp), %r8
callq 0x7c9e
testb %al, %al
je 0x3c08
movq $0x0, 0xe0(%rsp)
leaq 0xe8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
leaq 0x150(%rsp), %r12
movq %r12, %rdx
callq 0x4d34
movq 0xe0(%rsp), %rbx
movl $0x20c4, %edx           # imm = 0x20C4
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2140
leaq 0x20c8(%rbx), %rdi
movq 0x268(%rsp), %rsi
callq 0x4958
movq 0x258(%rsp), %rax
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x20f0(%rbx)
movups %xmm0, 0x20e0(%rbx)
movq 0xe0(%rsp), %r15
movq 0x20c8(%r15), %rax
movq 0x260(%rsp), %rcx
leaq (%rcx,%rcx,4), %rcx
movl 0xcc(%rsp), %edx
movl %edx, 0x10(%rax,%rcx,4)
movups 0xbc(%rsp), %xmm0
movups %xmm0, (%rax,%rcx,4)
incl 0x20b4(%r15)
movl 0x144(%rsp), %eax
movl %eax, 0x20e0(%r15)
movq %rbp, %rdi
callq 0x7c78
subl %eax, 0x20b0(%r15)
movq 0x10(%rsp), %rdi
callq 0x7c78
subl %eax, 0x20c0(%r15)
xorl %r14d, %r14d
movq 0x10(%rsp), %rdi
callq 0x7c78
cltq
cmpq %rax, %r14
jge 0x3302
movl 0xc8(%rsp), %eax
movl 0xcc(%rsp), %ecx
leaq (%rax,%rax,2), %rax
shlq $0x5, %rax
addq 0x240(%rsp), %rax
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %rax
movl 0xc0(%rsp), %ebp
movl 0xc4(%rsp), %r13d
addl (%rax,%r14,8), %ebp
addl 0x4(%rax,%r14,8), %r13d
movq %r13, %rbx
shlq $0x20, %rbx
xorl %r12d, %r12d
leaq 0x7de5(%rip), %rcx      # 0xb060
movl (%rcx,%r12,8), %eax
addl %ebp, %eax
movl 0x4(%rcx,%r12,8), %ecx
addl %r13d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x150(%rsp)
leaq 0x150(%rsp), %rdi
callq 0x9f30
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testb %al, %al
je 0x32ca
movq 0x150(%rsp), %rsi
movq %r15, %rdi
callq 0x7b3a
negl %eax
movl $0x0, %ecx
sbbl %ecx, %ecx
orl $0x1, %ecx
addl %ecx, 0x20b8(%r15)
incq %r12
cmpq $0x4, %r12
jne 0x3274
movl %ebp, %eax
orq %rax, %rbx
movq %r15, %rdi
movq %rbx, %rsi
movq 0xa8(%rsp), %rdx
callq 0x7e1e
incq %r14
leaq 0x150(%rsp), %r12
jmp 0x3217
movq 0x40(%rsp), %rax
movl 0x20b8(%rax), %ebx
movl 0x20b8(%r15), %ebp
movq 0x10(%rsp), %rdi
callq 0x8b3c
subl %ebp, %ebx
cmpl %eax, %ebx
jne 0x337a
movl $0x18, %r14d
testb $0x1, 0x48(%rsp)
je 0x3343
movq 0xa0(%rsp), %r12
movq 0x10(%rsp), %rbp
jmp 0x3bf1
movq 0x10(%rsp), %rdi
callq 0x7c78
movb $0x1, %cl
movl %ecx, 0x48(%rsp)
testl %eax, %eax
jle 0x337a
movq 0x10(%rsp), %rdi
callq 0x7c78
cmpl $0x4, %eax
jg 0x337a
movq 0x10(%rsp), %rdi
callq 0x7c78
cltq
decl 0x20e0(%r15,%rax,4)
movq %r15, %rdi
callq 0x7a76
xorps %xmm0, %xmm0
movaps %xmm0, 0xf0(%rsp)
movq $0x0, 0x100(%rsp)
xorl %ebx, %ebx
movq 0x10(%rsp), %rbp
movq %rbp, %rdi
callq 0x7c78
cltq
cmpq %rax, %rbx
jge 0x3484
movl 0xc8(%rsp), %eax
movl 0xcc(%rsp), %ecx
leaq (%rax,%rax,2), %rax
shlq $0x5, %rax
addq 0x240(%rsp), %rax
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %rax
movl 0xc0(%rsp), %ebp
addl (%rax,%rbx,8), %ebp
movl 0xc4(%rsp), %r14d
addl 0x4(%rax,%rbx,8), %r14d
xorl %r13d, %r13d
leaq 0x7c66(%rip), %rcx      # 0xb060
movl (%rcx,%r13,8), %eax
addl %ebp, %eax
movl 0x4(%rcx,%r13,8), %ecx
addl %r14d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x150(%rsp)
movq %r12, %rdi
callq 0x9f30
testb %al, %al
je 0x346f
movq 0x150(%rsp), %rsi
movq %r15, %rdi
callq 0x7b3a
testl %eax, %eax
jne 0x346f
movq 0xf8(%rsp), %rsi
cmpq 0x100(%rsp), %rsi
je 0x345f
movq 0x150(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0xf8(%rsp)
jmp 0x346f
leaq 0xf0(%rsp), %rdi
movq %r12, %rdx
callq 0x5318
incq %r13
cmpq $0x4, %r13
jne 0x33f3
incq %rbx
jmp 0x339b
movq %r12, %rdi
movq %r15, %rsi
callq 0x8304
leaq 0x290(%rsp), %rdi
movq %r12, %rsi
callq 0x5454
movl $0x18, %r14d
testq %rax, %rax
je 0x34b7
movq 0xa0(%rsp), %r12
jmp 0x3bd4
movq 0x8(%rsp), %rax
cmpl $0x2, 0x20ec(%rax)
movq 0xa0(%rsp), %r12
jl 0x3505
movq 0x8(%rsp), %rax
movq 0x2150(%rax), %rbx
testq %rbx, %rbx
je 0x3505
leaq 0x150(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0x8304
movq %rbx, %rdi
movq %r13, %rsi
callq 0x5454
testq %rax, %rax
jne 0x3bd4
leaq 0x150(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x8304
leaq 0x290(%rsp), %rdi
movq %rdi, 0x1d0(%rsp)
movq %rbx, %rsi
leaq 0x1d0(%rsp), %rdx
callq 0x5556
movl $0x0, 0x1d8(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x1e0(%rsp)
leaq 0x1d8(%rsp), %rax
movq %rax, 0x1e8(%rsp)
movq %rax, 0x1f0(%rsp)
movq %rcx, 0x1f8(%rsp)
movq %rcx, 0x80(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
movq 0xf0(%rsp), %rax
movq 0xf8(%rsp), %rcx
movq %rcx, 0x278(%rsp)
cmpq %rcx, %rax
je 0x3ad0
movl $0x0, 0x4c(%rsp)
movq %rax, 0x280(%rsp)
movq (%rax), %rax
movq %rax, 0xd8(%rsp)
leaq 0x1d0(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x5862
leaq 0x1d8(%rsp), %rcx
cmpq %rcx, %rax
jne 0x3aaf
movl $0x0, 0x208(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x210(%rsp)
leaq 0x208(%rsp), %rax
movq %rax, 0x218(%rsp)
movq %rax, 0x220(%rsp)
movq %rcx, 0x228(%rsp)
leaq 0x200(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x58ca
movl $0x1, 0x1c(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x190(%rsp)
movaps %xmm0, 0x180(%rsp)
movaps %xmm0, 0x170(%rsp)
movaps %xmm0, 0x160(%rsp)
movaps %xmm0, 0x150(%rsp)
leaq 0x150(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x59fa
movq 0x180(%rsp), %rax
movq 0x190(%rsp), %rcx
addq $-0x8, %rcx
cmpq %rcx, %rax
je 0x369d
movq 0xd8(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, 0x180(%rsp)
jmp 0x36ad
movq %rbx, %rdi
leaq 0xd8(%rsp), %rsi
callq 0x5b70
leaq 0x208(%rsp), %r12
movq 0x180(%rsp), %rax
cmpq 0x160(%rsp), %rax
je 0x386e
movq 0x188(%rsp), %rdi
movq %rax, %rcx
cmpq %rdi, %rax
jne 0x36ef
movq 0x198(%rsp), %rcx
movq -0x8(%rcx), %rcx
movl $0x200, %edx            # imm = 0x200
addq %rdx, %rcx
movq -0x8(%rcx), %rbp
cmpq %rdi, %rax
je 0x36fe
addq $-0x8, %rax
jmp 0x373d
movl $0x200, %esi            # imm = 0x200
callq 0x2190
movq 0x198(%rsp), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x198(%rsp)
movq -0x8(%rax), %rax
movq %rax, 0x188(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x190(%rsp)
addq $0x1f8, %rax            # imm = 0x1F8
movq %rbp, %r14
shrq $0x20, %r14
movq %rax, 0x180(%rsp)
xorl %r13d, %r13d
leaq 0x790a(%rip), %rcx      # 0xb060
movl (%rcx,%r13,8), %eax
addl %ebp, %eax
movl 0x4(%rcx,%r13,8), %ecx
addl %r14d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x88(%rsp)
leaq 0x1d0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x5862
movq %rax, %rbx
leaq 0x1d8(%rsp), %rax
cmpq %rax, %rbx
je 0x37a5
movl $0x3b9aca07, 0x1c(%rsp) # imm = 0x3B9ACA07
jmp 0x3845
leaq 0x200(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x5862
cmpq %r12, %rax
jne 0x3845
leaq 0x88(%rsp), %rdi
callq 0x9f30
testb %al, %al
je 0x3845
movq 0x88(%rsp), %rsi
movq %r15, %rdi
callq 0x7b3a
testl %eax, %eax
jne 0x3845
leaq 0x200(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x58ca
movq 0x180(%rsp), %rax
movq 0x190(%rsp), %rcx
addq $-0x8, %rcx
cmpq %rcx, %rax
je 0x382c
movq 0x88(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, 0x180(%rsp)
jmp 0x3841
leaq 0x150(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x5b70
incl 0x1c(%rsp)
leaq 0x1d8(%rsp), %rax
cmpq %rax, %rbx
jne 0x3863
leaq 0x1(%r13), %rax
cmpq $0x3, %r13
movq %rax, %r13
jb 0x374f
cmpl $0x5, 0x1c(%rsp)
jl 0x36b5
movl 0x1c(%rsp), %eax
decl %eax
cmpl $0x3, %eax
ja 0x3883
movl %eax, %eax
incl 0x20e4(%r15,%rax,4)
movl 0x1c(%rsp), %eax
cmpl $0x5, %eax
movl 0x4c(%rsp), %edx
movzbl %dl, %edx
movl $0x1, %ecx
cmovgel %ecx, %edx
movl %edx, 0x4c(%rsp)
testb $0x1, %dl
movq 0xa0(%rsp), %r12
leaq 0x248(%rsp), %rbx
movq 0x10(%rsp), %rbp
jne 0x3a70
leal -0x1(%rax), %ecx
cmpl $0x1, %ecx
ja 0x38e6
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
je 0x3996
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x78(%rsp)
jmp 0x3a70
cmpl $0x4, %eax
je 0x39aa
cmpl $0x3, %eax
jne 0x3a70
movq 0x218(%rsp), %rsi
leaq 0x88(%rsp), %rdi
leaq 0x208(%rsp), %rdx
movq %rbx, %rcx
callq 0x4a3c
movq 0x88(%rsp), %rsi
leaq 0x8(%rsi), %rdi
callq 0x9cfe
movq %rax, 0x248(%rsp)
movq 0x88(%rsp), %rsi
leaq 0x10(%rsi), %rdi
callq 0x9cfe
movq %rax, 0x288(%rsp)
movq %rbx, %rdi
leaq 0x288(%rsp), %rsi
callq 0x9f78
cmpl $0x1, %eax
movl $0x4, %eax
sbbl $0x0, %eax
movl %eax, 0x148(%rsp)
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
jne 0x3a39
leaq 0x70(%rsp), %rdi
leaq 0x148(%rsp), %rdx
callq 0x5efe
jmp 0x3a53
leaq 0x70(%rsp), %rdi
leaq 0x1c(%rsp), %rdx
callq 0x5d84
jmp 0x3a70
movq 0x218(%rsp), %rsi
leaq 0x88(%rsp), %rdi
leaq 0x208(%rsp), %rdx
movq %rbx, %rcx
callq 0x4a3c
movq 0x88(%rsp), %rax
movl 0x14(%rax), %ecx
addl 0x1c(%rax), %ecx
addl 0xc(%rax), %ecx
movl (%rax), %edx
movl 0x4(%rax), %esi
leal (%rsi,%rsi,2), %esi
subl %esi, %ecx
movl %ecx, %esi
negl %esi
cmovsl %ecx, %esi
movl 0x10(%rax), %ecx
addl 0x18(%rax), %ecx
addl 0x8(%rax), %ecx
leal (%rdx,%rdx,2), %eax
subl %eax, %ecx
movl %ecx, %eax
negl %eax
cmovsl %ecx, %eax
cmpl %esi, %eax
movl %esi, %ecx
cmovbl %eax, %ecx
cmovbl %esi, %eax
leal (%rax,%rax,4), %eax
leal (%rcx,%rax,2), %eax
movl %eax, 0x248(%rsp)
movq 0x250(%rsp), %rdi
movq %rbx, %rsi
callq 0x4538
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
je 0x3a46
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x78(%rsp)
jmp 0x3a53
leaq 0x70(%rsp), %rdi
movq %rax, %rdx
callq 0x5d84
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x3a70
movq 0x98(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
movq 0x218(%rsp), %rdi
movq 0x1e8(%rsp), %rcx
leaq 0x208(%rsp), %rsi
leaq 0x1d0(%rsp), %rdx
callq 0x5fda
leaq 0x150(%rsp), %rdi
callq 0x6174
leaq 0x200(%rsp), %rdi
callq 0x61c4
movq 0x280(%rsp), %rax
addq $0x8, %rax
cmpq 0x278(%rsp), %rax
jne 0x35a6
testb $0x1, 0x4c(%rsp)
jne 0x3b43
movq 0x70(%rsp), %rbx
movq 0x78(%rsp), %r15
cmpq %r15, %rbx
je 0x3b0c
movq %r15, %rax
subq %rbx, %rax
sarq $0x2, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x6213
movq %rbx, %rdi
movq %r15, %rsi
callq 0x62f6
leaq 0x110(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x6566
movl $0x18, %r14d
leaq 0x118(%rsp), %rcx
cmpq %rcx, %rax
jne 0x3bad
leaq 0x110(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x665a
testb $0x1, 0x48(%rsp)
je 0x3b91
movl 0xb8(%rsp), %eax
movl %eax, %ebx
testl %eax, %eax
jle 0x3b77
movq 0x28(%rsp), %rax
leaq -0x10(%rax), %rcx
movq %rcx, 0x28(%rsp)
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0x3b73
callq 0x52a8
decl %ebx
jne 0x3b57
movl $0x17, %r14d
leaq 0x20(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x4918
jmp 0x3bad
leaq 0x20(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x4918
incl 0xb8(%rsp)
xorl %r14d, %r14d
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x3bc7
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
leaq 0x1d0(%rsp), %rdi
callq 0x61c4
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x3bf1
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x3c03
callq 0x52a8
testl %r14d, %r14d
jne 0x3c24
movl 0x14c(%rsp), %eax
movl 0xc0(%rsp), %ecx
addl %ecx, %eax
decl %eax
movl %eax, 0xc0(%rsp)
xorl %r14d, %r14d
cmpl $0x17, %r14d
movq 0x8(%rsp), %r14
je 0x3ca2
movq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x7afe
movq %rax, 0x150(%rsp)
movq %r15, %rdi
callq 0x7afe
movq %rax, %rbx
movq %r15, %rdi
callq 0x7b06
movq %rax, %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
andq %rdx, %rcx
addl %ebx, %eax
addq %rbx, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, 0x1d0(%rsp)
leaq 0xbc(%rsp), %rdi
movq %rbp, %rsi
leaq 0x150(%rsp), %rdx
leaq 0x1d0(%rsp), %rcx
callq 0x8d09
testb %al, %al
jne 0x3108
leaq 0x110(%rsp), %rdi
callq 0x6920
movslq 0x20e8(%r14), %rax
addq %rax, %rax
leaq (%rax,%rax,4), %rcx
movq 0x20(%rsp), %rbx
movq 0x28(%rsp), %r14
movq %r14, %rax
subq %rbx, %rax
sarq $0x4, %rax
cmpq %rcx, %rax
jbe 0x3d5a
cmpq %rbx, %r14
je 0x3d44
movq %r14, 0x150(%rsp)
movq %rbx, 0x110(%rsp)
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
leaq 0x150(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq -0x175d(%rip), %rcx     # 0x25b6
callq 0x6995
movq %r14, 0x1d0(%rsp)
movq %rbx, 0x200(%rsp)
leaq 0x1d0(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq -0x1789(%rip), %rdx     # 0x25b6
callq 0x6b17
movq 0x8(%rsp), %rax
movslq 0x20e8(%rax), %rsi
leaq 0x20(%rsp), %rdi
callq 0x4a7e
movq 0x270(%rsp), %rcx
addq $0x10, %rcx
cmpq 0x238(%rsp), %rcx
movq 0x8(%rsp), %r14
jne 0x2e9c
movq 0x20(%rsp), %rbx
movq 0x28(%rsp), %r14
movq %r14, %rax
subq %rbx, %rax
je 0x3df4
movq %r14, 0x150(%rsp)
movq %rbx, 0x110(%rsp)
sarq $0x4, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
leaq 0x150(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq -0x180d(%rip), %rcx     # 0x25b6
callq 0x6995
movq %r14, 0x1d0(%rsp)
movq %rbx, 0x200(%rsp)
leaq 0x1d0(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq -0x1839(%rip), %rdx     # 0x25b6
callq 0x6b17
movq 0x8(%rsp), %rax
movslq 0x20e8(%rax), %rsi
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x4, %rax
cmpq %rsi, %rax
jbe 0x3e1d
leaq 0x20(%rsp), %rdi
callq 0x4a7e
movq 0x20(%rsp), %rbx
movq 0x28(%rsp), %r14
cmpq %r14, %rbx
je 0x3e3a
movq (%rbx), %rdi
callq 0x780c
addq $0x10, %rbx
jmp 0x3e27
movq 0x8(%rsp), %rax
cmpq $0x0, 0x2150(%rax)
je 0x3e98
movq 0x20(%rsp), %r14
movq 0x28(%rsp), %r15
cmpq %r15, %r14
je 0x3e98
movq 0x8(%rsp), %rax
movq 0x2150(%rax), %rbx
movq (%r14), %rsi
leaq 0x150(%rsp), %r13
movq %r13, %rdi
callq 0x8304
movq %rbx, 0x110(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x110(%rsp), %rdx
callq 0x5556
addq $0x10, %r14
jmp 0x3e53
movaps 0x20(%rsp), %xmm0
movq 0x30(%rsp), %rax
movq 0x50(%rsp), %rbx
movq 0x58(%rsp), %r14
movq %rbx, 0x20(%rsp)
movq %r14, 0x28(%rsp)
movq 0x60(%rsp), %rcx
movq %rcx, 0x30(%rsp)
movaps %xmm0, 0x50(%rsp)
movq %rax, 0x60(%rsp)
cmpq %rbx, %r14
je 0x3eee
movq %rbx, %r15
movq 0x8(%r15), %rdi
testq %rdi, %rdi
je 0x3ee0
callq 0x52a8
addq $0x10, %r15
cmpq %r14, %r15
jne 0x3ed2
movq %rbx, 0x28(%rsp)
movq 0x2a0(%rsp), %rdi
testq %rdi, %rdi
je 0x3f10
movq (%rdi), %rbx
movl $0x88, %esi
callq 0x2190
movq %rbx, %rdi
testq %rbx, %rbx
jne 0x3efb
movq 0x290(%rsp), %rdi
movq 0x298(%rsp), %rdx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x20c0
xorps %xmm0, %xmm0
leaq 0x2a0(%rsp), %rax
movups %xmm0, (%rax)
movl $0x5, %edx
movq 0xc0ab(%rip), %rdi      # 0xfff0
leaq 0x713c(%rip), %rsi      # 0xb088
callq 0x21b0
movq 0xc098(%rip), %rdi      # 0xfff0
movl 0xb4(%rsp), %esi
callq 0x2290
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0x7118(%rip), %rsi      # 0xb08e
callq 0x21b0
movq 0x58(%rsp), %rsi
subq 0x50(%rsp), %rsi
sarq $0x4, %rsi
movq %rbx, %rdi
callq 0x2100
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x8(%rsp), %rax
cmpq $0x0, 0x2150(%rax)
je 0x4028
movl $0x6, %edx
movq 0xc01a(%rip), %rdi      # 0xfff0
leaq 0x70b5(%rip), %rsi      # 0xb092
callq 0x21b0
movq 0x8(%rsp), %rax
movq 0x2150(%rax), %rax
movq 0x18(%rax), %rsi
movq 0xbff7(%rip), %rdi      # 0xfff0
callq 0x2100
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x8(%rsp), %rax
movl 0x20e0(%rax), %eax
leaq 0xc136(%rip), %rcx      # 0x10170
movl (%rcx), %ecx
cmpl %ecx, %eax
jl 0x4060
jg 0x4125
leaq 0xc127(%rip), %rax      # 0x10174
movl (%rax), %eax
movq 0x8(%rsp), %rcx
cmpl %eax, 0x20e4(%rcx)
jge 0x4125
leaq 0x150(%rsp), %rbx
movq %rbx, %rdi
movq 0x230(%rsp), %rsi
callq 0x4af2
leaq 0xc109(%rip), %rdi      # 0x10188
movq %rbx, %rsi
callq 0x762a
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
movq 0x8(%rsp), %rbx
je 0x40a9
movq 0x160(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
movl 0x20e0(%rbx), %esi
leaq 0xc0ba(%rip), %rax      # 0x10170
movl %esi, (%rax)
movl 0x20e4(%rbx), %eax
leaq 0xc0af(%rip), %rcx      # 0x10174
movl %eax, (%rcx)
movq 0xbf22(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x7294(%rip), %rsi      # 0xb379
callq 0x21b0
leaq 0xc083(%rip), %rax      # 0x10174
movl (%rax), %esi
movq %rbx, %rdi
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
shrq $0x4, %rcx
testl %ecx, %ecx
movq 0x8(%rsp), %r14
jle 0x42a1
xorl %r15d, %r15d
xorl %r13d, %r13d
movq (%rax,%r15), %rsi
movq 0xbe9c(%rip), %rdi      # 0xfff0
callq 0x8e06
movl $0x7, %edx
movq 0xbe8b(%rip), %rdi      # 0xfff0
leaq 0x6f2d(%rip), %rsi      # 0xb099
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r15), %rax
movl 0x20b0(%rax), %esi
movq 0xbe69(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl $0xa, %edx
movq 0xbe2e(%rip), %rdi      # 0xfff0
leaq 0x6ed8(%rip), %rsi      # 0xb0a1
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r15), %rsi
movq %r14, %rdi
callq 0x27c0
movq 0xbe0a(%rip), %rdi      # 0xfff0
callq 0x2260
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl $0xf, %edx
movq 0xbdcf(%rip), %rdi      # 0xfff0
leaq 0x6e84(%rip), %rsi      # 0xb0ac
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r15), %rax
movl 0x20b8(%rax), %esi
movq 0xbdad(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
incq %r13
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
shrq $0x4, %rcx
cmpl $0x3, %ecx
movl $0x3, %edx
cmovgel %edx, %ecx
movslq %ecx, %rcx
addq $0x10, %r15
cmpq %rcx, %r13
jl 0x4149
incl 0xb4(%rsp)
movq 0x50(%rsp), %rcx
movq 0x58(%rsp), %rax
movq %rax, 0x238(%rsp)
cmpq %rax, %rcx
jne 0x2e9c
addq $0x20c8, %r14           # imm = 0x20C8
movq %r12, %rdi
movq %r14, %rsi
callq 0x4af2
leaq 0x290(%rsp), %rdi
callq 0x766a
leaq 0x20(%rsp), %rdi
callq 0x4b84
leaq 0x50(%rsp), %rdi
callq 0x4b84
movq %r12, %rax
addq $0x2c8, %rsp            # imm = 0x2C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4409
movq %rax, %rbx
jmp 0x44b8
jmp 0x4409
jmp 0x4409
jmp 0x441c
jmp 0x441c
jmp 0x4349
jmp 0x43bf
movq %rax, %rbx
jmp 0x43d4
jmp 0x4417
jmp 0x4349
jmp 0x43fa
jmp 0x43bf
movq %rax, %rbx
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x441f
movq 0x98(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x441f
jmp 0x4409
jmp 0x4409
jmp 0x4417
movq %rax, %rbx
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x44a1
callq 0x52a8
jmp 0x44a1
jmp 0x4409
jmp 0x4409
jmp 0x4404
jmp 0x4409
jmp 0x447f
jmp 0x43fa
jmp 0x4417
jmp 0x43b2
movq %rax, %rbx
jmp 0x442c
jmp 0x43fa
jmp 0x43fa
jmp 0x43fa
jmp 0x441c
movq %rax, %rbx
movq 0x118(%rsp), %rdi
testq %rdi, %rdi
je 0x43d4
callq 0x52a8
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
je 0x44b8
movq 0x160(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x44b8
movq %rax, %rbx
jmp 0x4494
jmp 0x447f
movq %rax, %rbx
jmp 0x4439
movq %rax, %rbx
jmp 0x44a1
jmp 0x4417
jmp 0x447f
jmp 0x447f
movq %rax, %rbx
jmp 0x4460
movq %rax, %rbx
leaq 0x150(%rsp), %rdi
callq 0x6174
leaq 0x200(%rsp), %rdi
callq 0x61c4
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x4453
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
leaq 0x1d0(%rsp), %rdi
callq 0x61c4
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x4482
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x4482
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x4494
callq 0x52a8
leaq 0x110(%rsp), %rdi
callq 0x6920
leaq 0x290(%rsp), %rdi
callq 0x766a
leaq 0x20(%rsp), %rdi
callq 0x4b84
leaq 0x50(%rsp), %rdi
callq 0x4b84
movq %rbx, %rdi
callq 0x22a0