// File: /workspace/github_cpp_makefile_star2_O3/pfnet-research[P]pml/src/simple_type.cpp
// Function: simty::simple_typing[abi:cxx11](ast::expr_t const&, environment_t<simty::type_t> const&)
result_t simple_typing(ast::expr_t const& expr, type_env_t const& env) {
    using namespace ast;
    switch (expr.kind()) {
    case expr_kind_t::LetFun: {
        auto const& letfun = cast<letfun_expr_t>(expr);
        auto const& simty = type_t::from(letfun.type);
        auto const& fun_simty = cast<fun_type_t>(*simty);
        auto init_env = env.append(letfun.name, simty);
        for (size_t i=0; i<fun_simty.args.size(); ++i)
            init_env = init_env.append(letfun.type.args[i].name, fun_simty.args[i]);
        auto init_typing_result = simple_typing(*letfun.init, init_env);
        if (init_typing_result.is_error())
            return init_typing_result;
        auto body_env = env.append(letfun.name, simty);
        return simple_typing(*letfun.body, body_env);
        }
    case expr_kind_t::App: {
        auto const& f_typing_result = simple_typing(*cast<app_expr_t>(expr).f, env);
        if (f_typing_result.is_error())
            return f_typing_result;
        auto const& fun_ty = cast<fun_type_t>(*f_typing_result.ok());
        auto const& args = cast<app_expr_t>(expr).args;
        if (fun_ty.args.size() != args.size()) {
            return result_t::error(format(
                        "not match numbers of parameters and arguments (param {} vs arg {}) in \"{}\"",
                        fun_ty.args.size(), args.size(), to_debug_string(expr)));
        }
        for (size_t i=0; i<args.size(); ++i) {
            auto arg_ty_result = simple_typing(*args[i], env);
            if (arg_ty_result.is_error())
                return arg_ty_result;
            if (*arg_ty_result.ok() != *fun_ty.args[i]) {
                return result_t::error(format(
                        "not match {}th parameter and arguments ({} vs {}) in \"{}\"",
                        to_debug_string(*arg_ty_result.ok()), to_debug_string(*fun_ty.args[i]),
                        to_debug_string(expr)));
            }
        }
        return fun_ty.ret;
        }
    case expr_kind_t::Fun:
        // do not appear in syntax
        throw std::logic_error{"fun expr can not appear"};
    case expr_kind_t::Let: {
            auto init_result = simple_typing(*cast<let_expr_t>(expr).init, env);
            if (init_result.is_error())
                return init_result;
            auto new_env = env.append(cast<let_expr_t>(expr).name, init_result.ok());
            return simple_typing(*cast<let_expr_t>(expr).body, new_env);
        }
    case expr_kind_t::If: {
        auto const& cond_result = simple_typing(*cast<if_expr_t>(expr).cond_expr, env);
        auto const& tr_result = simple_typing(*cast<if_expr_t>(expr).true_expr, env);
        auto const& fl_result = simple_typing(*cast<if_expr_t>(expr).false_expr, env);
        auto sub_result = cond_result && tr_result && fl_result;
        if (sub_result.is_error())
            return sub_result;
        if (*cond_result.ok() != simty::bool_type_t{})
            return result_t::error(format("condition of if expr must be boolean in \"{}\"", to_debug_string(expr)));
        if (*tr_result.ok() != *fl_result.ok())
            return result_t::error(format("not match types of branches of if expr in \"{}\"", to_debug_string(expr)));
        return tr_result;
        }
    case expr_kind_t::Rand:
        return result_t::ok(make<simty::int_type_t>());
    case expr_kind_t::Typed: {
        auto const& inner = *cast<typed_expr_t>(expr).expr;
        auto const& expr_ty_result = simple_typing(inner, env);
        if (expr_ty_result.is_error())
            return expr_ty_result;
        auto const& ty = type_t::from(cast<typed_expr_t>(expr).type);
        if (*expr_ty_result.ok() == *ty)
            return expr_ty_result;
        else
            return result_t::error(format("{} has simple type {}, but expected {}",
                        to_debug_string(inner),
                        to_debug_string(*expr_ty_result.ok()), to_debug_string(*ty)));
        }
    case expr_kind_t::Add:
    case expr_kind_t::Sub:
    case expr_kind_t::Mul:
    case expr_kind_t::Div: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto const& sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::int_type_t{} || *rhs_result.ok() != simty::int_type_t{}) {
            return result_t::error(format(
                    "can not apply arithmetic binary operation to non-integer expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::int_type_t>());
        }
    case expr_kind_t::Neg: {
        auto const& inner_result = simple_typing(*cast<neg_expr_t>(expr).inner, env);
        if (inner_result.is_error())
            return inner_result;
        if (*inner_result.ok() != simty::bool_type_t{}) {
            return result_t::error(format(
                    "can not apply negation operator to non-boolean expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::Eq:
    case expr_kind_t::Neq:
    case expr_kind_t::Leq:
    case expr_kind_t::Geq: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::int_type_t{} || *rhs_result.ok() != simty::int_type_t{}) {
            return result_t::error(format(
                    "can not apply comparison operation to non-boolean expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::And:
    case expr_kind_t::Or: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto const& sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::bool_type_t{} || *rhs_result.ok() != simty::bool_type_t{}) {
            return result_t::error(format(
                        "can not apply logical binary operation to non-boolean expression in {}",
                        to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::Int:
        return result_t::ok(make<simty::int_type_t>());
    case expr_kind_t::Bool:
        return result_t::ok(make<simty::bool_type_t>());
    case expr_kind_t::Var:
        return result_t::ok(env.lookup(cast<var_expr_t>(expr).name));
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, (%rsp)
movq (%rsi), %rax
movq %rsi, %rdi
callq *(%rax)
movl %eax, %eax
leaq 0x2028a(%rip), %rcx     # 0x48d10
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x37002(%rip), %rsi     # 0x5fa98
leaq 0x3718b(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
leaq 0x36fd0(%rip), %rsi     # 0x5fa98
leaq 0x37159(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f72
movq 0x18(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x1, 0x50(%rsp)
jne 0x28d03
leaq 0x88(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x2bba6
jmp 0x28d1d
leaq 0x36f7c(%rip), %rsi     # 0x5fa98
leaq 0x37105(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
leaq 0x36f4a(%rip), %rsi     # 0x5fa98
leaq 0x370d3(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f6d
movq 0x18(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x1, 0x50(%rsp)
jne 0x28c53
leaq 0x88(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x2bba6
jmp 0x28c6d
leaq 0x36ef6(%rip), %rsi     # 0x5fa98
leaq 0x3707f(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
leaq 0x36ec4(%rip), %rsi     # 0x5fa98
leaq 0x3704d(%rip), %rdx     # 0x5fc28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f77
movq 0x18(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x1, 0x50(%rsp)
jne 0x2951d
leaq 0x88(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x2bba6
jmp 0x29537
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x387a0(%rip), %rcx     # 0x613e0
movq %rcx, (%rax)
leaq 0x10(%rax), %rcx
leaq 0x38912(%rip), %rdx     # 0x61560
jmp 0x28f6e
leaq 0x30(%rsp), %rdi
callq 0x19b0c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d398
movb 0xa8(%rsp), %al
testb %al, %al
je 0x28d9d
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x388d0(%rip), %rbx     # 0x61560
leaq 0x8(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x28dea
leaq 0x60(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0xb0(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x28dea
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38747(%rip), %rcx     # 0x61430
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
leaq 0x38826(%rip), %rdx     # 0x61520
movq %rdx, 0x10(%rax)
jmp 0x295c0
leaq 0x30(%rsp), %rdi
callq 0x19b0c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d398
cmpb $0x0, 0xa8(%rsp)
je 0x28dd4
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x38821(%rip), %r15     # 0x61560
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x28e40
leaq 0x60(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0xb0(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x28e40
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38648(%rip), %rcx     # 0x613e0
jmp 0x295b2
movq (%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x295ea
movq %rdx, (%rsi)
movq 0x98(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x295f0
leaq 0x88(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29cb3
leaq 0xc0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x20111(%rip), %rsi     # 0x48f0e
leaq 0x2014c(%rip), %rdx     # 0x48f50
leaq 0xb0(%rsp), %rdi
callq 0x116f8
leaq 0xd8(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x2b5e3
jmp 0x2966e
leaq 0xc0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x20031(%rip), %rsi     # 0x48e84
leaq 0x20073(%rip), %rdx     # 0x48ecd
leaq 0xb0(%rsp), %rdi
callq 0x116f8
leaq 0xd8(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x2b5e3
jmp 0x2966e
leaq 0x36bfb(%rip), %rsi     # 0x5fa98
leaq 0x36d9c(%rip), %rdx     # 0x5fc40
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x0, 0x20(%r12)
je 0x29702
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x38635(%rip), %rbx     # 0x61520
leaq 0x60(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x298a1
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38511(%rip), %rcx     # 0x61430
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %rbx, 0x10(%rax)
movq (%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29cca
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x384d0(%rip), %rcx     # 0x61430
movq %rcx, (%rax)
leaq 0x10(%rax), %rcx
leaq 0x385b2(%rip), %rdx     # 0x61520
movq %rdx, 0x10(%rax)
movq (%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29cd4
leaq 0x36b0b(%rip), %rsi     # 0x5fa98
leaq 0x36c7c(%rip), %rdx     # 0x5fc10
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
leaq 0x36ad9(%rip), %rsi     # 0x5fa98
leaq 0x36c4a(%rip), %rdx     # 0x5fc10
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f7c
movq 0x18(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
leaq 0x36aa7(%rip), %rsi     # 0x5fa98
leaq 0x36c18(%rip), %rdx     # 0x5fc10
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f86
movq 0x28(%rax), %rsi
leaq 0x88(%rsp), %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x1, 0x50(%rsp)
jne 0x2976c
leaq 0xb0(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x2bba6
jmp 0x29786
leaq 0x36a50(%rip), %rsi     # 0x5fa98
leaq 0x36c21(%rip), %rdx     # 0x5fc70
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %rsi
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x0, 0x20(%r12)
je 0x29715
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x38452(%rip), %rsi     # 0x614e8
leaq 0x3845b(%rip), %rdx     # 0x614f8
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29fc7
movq %rax, %r15
leaq 0x369e1(%rip), %rsi     # 0x5fa98
leaq 0x36bb2(%rip), %rdx     # 0x5fc70
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29fcc
movq %rax, %r13
movq 0x10(%r15), %rdx
subq 0x8(%r15), %rdx
movq 0x18(%rax), %rax
movq 0x20(%r13), %rcx
movq %rcx, %rsi
subq %rax, %rsi
cmpq %rsi, %rdx
jne 0x298f1
movq %r15, 0xf8(%rsp)
cmpq %rax, %rcx
je 0x29176
xorl %r12d, %r12d
leaq 0x60(%rsp), %rdi
xorl %ebp, %ebp
movq (%rax,%r12), %rsi
movq %rdi, %r15
movq %rbx, %rdx
callq 0x28a5a
movb 0x80(%rsp), %al
testb %al, %al
je 0x29d93
movq %r15, %rdi
callq 0x2bbf2
movq (%rax), %rdi
movq 0xf8(%rsp), %rax
movq 0x8(%rax), %rax
movq (%rax,%r12), %rsi
callq 0x2b9aa
testb %al, %al
je 0x29dc4
movq %r15, %rdi
callq 0x19b66
movq %r15, %rdi
incq %rbp
movq 0x18(%r13), %rax
movq 0x20(%r13), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
addq $0x10, %r12
cmpq %rcx, %rbp
jb 0x2910a
movq (%rsp), %rcx
movb $0x1, 0x20(%rcx)
movq 0xf8(%rsp), %rdx
movq 0x20(%rdx), %rax
movq %rax, (%rcx)
movq 0x28(%rdx), %rax
movq %rax, 0x8(%rcx)
testq %rax, %rax
je 0x29cca
movq 0x38e0b(%rip), %rcx     # 0x61fb0
cmpb $0x0, (%rcx)
je 0x29e87
incl 0x8(%rax)
jmp 0x29cca
leaq 0x368db(%rip), %rsi     # 0x5fa98
leaq 0x3698c(%rip), %rdx     # 0x5fb50
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x28(%rax), %rsi
leaq 0x30(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28a5a
movb 0x20(%r12), %al
testb %al, %al
je 0x29728
leaq 0x36899(%rip), %rsi     # 0x5fa98
leaq 0x3694a(%rip), %rdx     # 0x5fb50
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29fbd
movq %rax, %r12
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
addq $0x8, %r12
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
movq %r12, %rdx
movq %rax, %rcx
callq 0x2bb28
leaq 0x36854(%rip), %rsi     # 0x5fa98
leaq 0x36905(%rip), %rdx     # 0x5fb50
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29fd1
movq 0x38(%rax), %rsi
leaq 0x60(%rsp), %rdx
movq (%rsp), %rdi
callq 0x28a5a
leaq 0x60(%rsp), %rdi
callq 0x2c148
jmp 0x29cca
leaq 0x36812(%rip), %rsi     # 0x5fa98
leaq 0x368db(%rip), %rdx     # 0x5fb68
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq %rax, %r15
leaq 0x28(%rax), %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rsi, 0xf8(%rsp)
callq 0x288b0
movq (%r14), %rdi
leaq 0x38222(%rip), %rsi     # 0x614e8
leaq 0x3822b(%rip), %rdx     # 0x614f8
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f81
movq %rax, %rbp
movq %r15, 0x130(%rsp)
leaq 0x8(%r15), %rdx
leaq 0x60(%rsp), %rdi
leaq 0x8(%rsp), %rcx
movq %rbx, 0x128(%rsp)
movq %rbx, %rsi
movq %rdx, 0x120(%rsp)
callq 0x2bb28
movq 0x8(%rbp), %rcx
cmpq %rcx, 0x10(%rbp)
je 0x29378
xorl %ebx, %ebx
leaq 0x30(%rsp), %r12
leaq 0x60(%rsp), %r14
xorl %r15d, %r15d
xorl %r13d, %r13d
movq 0xf8(%rsp), %rax
movq (%rax), %rdx
addq %r15, %rdx
addq %rbx, %rcx
movq %r12, %rdi
movq %r14, %rsi
callq 0x2bb28
movq %r14, %rdi
movq %r12, %rsi
callq 0x2c012
movq %r12, %rdi
callq 0x2c148
incq %r13
movq 0x8(%rbp), %rcx
movq 0x10(%rbp), %rax
subq %rcx, %rax
sarq $0x4, %rax
addq $0x38, %r15
addq $0x10, %rbx
cmpq %rax, %r13
jb 0x2932a
movq 0x130(%rsp), %rbx
movq 0x78(%rbx), %rsi
leaq 0x30(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x28a5a
movb 0x50(%rsp), %al
testb %al, %al
movq 0x128(%rsp), %rsi
je 0x29870
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rcx
movq 0x120(%rsp), %rdx
callq 0x2bb28
movq 0x88(%rbx), %rsi
leaq 0x88(%rsp), %rdx
movq (%rsp), %rdi
callq 0x28a5a
leaq 0x88(%rsp), %rdi
callq 0x2c148
jmp 0x29b8c
leaq 0x366a6(%rip), %rsi     # 0x5fa98
leaq 0x368a7(%rip), %rdx     # 0x5fca0
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
movq 0x8(%rax), %r12
leaq 0x30(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x28a5a
cmpb $0x0, 0x20(%r13)
je 0x29759
leaq 0x36663(%rip), %rsi     # 0x5fa98
leaq 0x36864(%rip), %rdx     # 0x5fca0
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29fc2
movl 0x38(%rax), %ebx
movl $0x18, %edi
callq 0x92d0
movq %rax, %r14
testl %ebx, %ebx
movabsq $0x100000001, %rax      # imm = 0x100000001
movq %rax, 0x8(%r14)
leaq 0x37f6a(%rip), %rax     # 0x613e0
leaq 0x37fb3(%rip), %rcx     # 0x61430
cmoveq %rax, %rcx
leaq 0x380d8(%rip), %rax     # 0x61560
leaq 0x38091(%rip), %rdx     # 0x61520
cmoveq %rax, %rdx
movq %rcx, (%r14)
movq %rdx, 0x10(%r14)
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq %r14, %r15
addq $0x10, %r15
movq (%rax), %rdi
movq %r15, %rsi
callq 0x2b9aa
testb %al, %al
je 0x299a9
leaq 0x30(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29d86
leaq 0x365c0(%rip), %rsi     # 0x5fa98
leaq 0x36779(%rip), %rdx     # 0x5fc58
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x29f68
addq $0x8, %rax
leaq 0x30(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x2bc4e
movq (%rsp), %rax
movb $0x1, 0x20(%rax)
movaps (%r14), %xmm0
movups %xmm0, (%rax)
jmp 0x29cd4
leaq 0x30(%rsp), %rdi
callq 0x19b0c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d398
cmpb $0x0, 0xa8(%rsp)
je 0x295d4
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x37fc7(%rip), %r15     # 0x61520
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x2961d
leaq 0x60(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0xb0(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x2961d
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x37e7e(%rip), %rcx     # 0x61430
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r15, 0x10(%rax)
movq (%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29cb3
leaq 0x88(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29cb3
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x90(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x88(%rsp)
movq $0x0, 0x90(%rsp)
movb $0x0, 0x98(%rsp)
jmp 0x29cb3
leaq 0xc0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f921(%rip), %rsi     # 0x48f51
leaq 0x1f960(%rip), %rdx     # 0x48f97
leaq 0xb0(%rsp), %rdi
callq 0x116f8
leaq 0xd8(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x2b5e3
movq (%rsp), %rsi
movb $0x0, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29699
movq %rdx, (%rsi)
movq 0x18(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x2969f
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x10(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x296dc
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0xb0(%rsp), %rdi
cmpq %r15, %rdi
je 0x29cb3
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29cb3
leaq 0x30(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29cca
leaq 0x30(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29cca
movq (%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29ab9
movq %rdx, (%rsi)
movq 0x40(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29abf
leaq 0x30(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29cca
leaq 0x30(%rsp), %rdi
callq 0x19b0c
leaq 0xb0(%rsp), %rdi
movq %rax, %rsi
callq 0x2d398
cmpb $0x1, 0xd0(%rsp)
jne 0x297a4
leaq 0x8(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x2bba6
jmp 0x297be
leaq 0xb0(%rsp), %rdi
callq 0x19b0c
leaq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x2d398
leaq 0xb0(%rsp), %rdi
callq 0x19b66
movb 0x28(%rsp), %al
testb %al, %al
je 0x2983f
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rdi
leaq 0x37d39(%rip), %rax     # 0x61520
leaq 0xb0(%rsp), %rsi
movq %rax, (%rsi)
callq 0x2b9aa
testb %al, %al
je 0x29a60
leaq 0x60(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %r15
leaq 0x88(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rsi
movq %r15, %rdi
callq 0x2b9aa
testb %al, %al
je 0x29bb8
leaq 0x60(%rsp), %rsi
movq (%rsp), %rdi
callq 0x2bba6
jmp 0x29ca9
movq (%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29b43
movq %rdx, (%rsi)
movq 0x18(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29b49
movq (%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29b6a
movq %rdx, (%rsi)
movq 0x40(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29b70
leaq 0x98(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f61a(%rip), %rsi     # 0x48ece
leaq 0x1f652(%rip), %rdx     # 0x48f0d
leaq 0x88(%rsp), %rdi
callq 0x116f8
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x60(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x8(%rsp), %rdx
callq 0x2b5e3
jmp 0x29977
movq %r15, %rbx
leaq 0x98(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f45d(%rip), %rsi     # 0x48d64
leaq 0x1f4a0(%rip), %rdx     # 0x48dae
leaq 0x88(%rsp), %rdi
callq 0x116f8
movq 0x10(%rbx), %rax
subq 0x8(%rbx), %rax
sarq $0x4, %rax
movq %rax, 0xb0(%rsp)
movq 0x20(%r13), %rax
subq 0x18(%r13), %rax
sarq $0x4, %rax
movq %rax, 0xd8(%rsp)
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x60(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
leaq 0xd8(%rsp), %rcx
leaq 0x8(%rsp), %r8
callq 0x2a35b
movq (%rsp), %rsi
movb $0x0, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29ae0
movq %rdx, (%rsi)
movq 0x70(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29ae6
leaq 0x98(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x1f4a1(%rip), %rsi     # 0x48e5d
leaq 0x1f4c0(%rip), %rdx     # 0x48e83
leaq 0x88(%rsp), %rdi
callq 0x116f8
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0xe95c
leaq 0x30(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x2b2f9
leaq 0xd8(%rsp), %rdi
movq %r15, %rsi
callq 0x2b2f9
leaq 0x60(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
leaq 0xd8(%rsp), %r8
callq 0x2ab26
movq (%rsp), %rsi
movb $0x0, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29cea
movq %rdx, (%rsi)
movq 0x70(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29cf0
leaq 0xe8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f38e(%rip), %rsi     # 0x48e01
leaq 0x1f3b3(%rip), %rdx     # 0x48e2d
leaq 0xd8(%rsp), %rdi
callq 0x116f8
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0xb0(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq 0x2b5e3
jmp 0x29c0c
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x38(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x30(%rsp)
movq $0x0, 0x38(%rsp)
movb $0x0, 0x40(%rsp)
jmp 0x29cca
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x68(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x60(%rsp)
movq $0x0, 0x68(%rsp)
movb $0x0, 0x70(%rsp)
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29b1d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x29cca
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29cca
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x10(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
jmp 0x29ca9
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x38(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x30(%rsp)
movq $0x0, 0x38(%rsp)
movb $0x0, 0x40(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x19b66
leaq 0x60(%rsp), %rdi
callq 0x2c148
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x29cd4
callq 0xa946
jmp 0x29cd4
leaq 0xe8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f263(%rip), %rsi     # 0x48e2e
leaq 0x1f28a(%rip), %rdx     # 0x48e5c
leaq 0xd8(%rsp), %rdi
callq 0x116f8
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0xb0(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq 0x2b5e3
movq (%rsp), %rsi
movb $0x0, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29c3d
movq %rdx, (%rsi)
movq 0xc0(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29c43
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0xb8(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0xb0(%rsp)
movq $0x0, 0xb8(%rsp)
movb $0x0, 0xc0(%rsp)
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29c8c
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x29ca9
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0x8(%rsp), %rdi
callq 0x19b66
leaq 0x88(%rsp), %rdi
callq 0x19b66
leaq 0x60(%rsp), %rdi
callq 0x19b66
leaq 0x30(%rsp), %rdi
callq 0x19b66
movq (%rsp), %rax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x68(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x60(%rsp)
movq $0x0, 0x68(%rsp)
movb $0x0, 0x70(%rsp)
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29d2d
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29d4e
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29d69
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r13, %rdi
je 0x29d86
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
movq %r14, %rdi
callq 0xa946
jmp 0x29cca
movq (%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29e90
movq %rdx, (%rsi)
movq 0x70(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29e96
movq 0xf8(%rsp), %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1efd3(%rip), %rsi     # 0x48daf
leaq 0x1f005(%rip), %rdx     # 0x48de8
leaq 0x8(%rsp), %rdi
callq 0x116f8
leaq 0x60(%rsp), %rdi
callq 0x2bbf2
movq (%rax), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x2b2f9
movq 0x8(%rbx), %rax
movq (%rax,%r12), %rsi
leaq 0xd8(%rsp), %rdi
callq 0x2b2f9
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xe95c
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
leaq 0xd8(%rsp), %rcx
leaq 0x100(%rsp), %r8
callq 0x2ab26
movq (%rsp), %rsi
movb $0x0, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29eb7
movq %rdx, (%rsi)
movq 0x98(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29ebd
lock
incl 0x8(%rax)
jmp 0x29cca
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x68(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x60(%rsp)
movq $0x0, 0x68(%rsp)
movb $0x0, 0x70(%rsp)
jmp 0x29cc0
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x90(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x88(%rsp)
movq $0x0, 0x90(%rsp)
movb $0x0, 0x98(%rsp)
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29f06
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29f27
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29f48
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x29cc0
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29cc0
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
movl $0x10, %edi
callq 0x9150
movq %rax, %r14
leaq 0x1ee4a(%rip), %rsi     # 0x48de9
movq %rax, %rdi
callq 0x93c0
movq 0x38022(%rip), %rsi     # 0x61fd0
movq 0x37ff3(%rip), %rdx     # 0x61fa8
movq %r14, %rdi
callq 0x94b0
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
movq %rax, %rbx
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29fff
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29fff
movq %rax, %rbx
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a025
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a025
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a050
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a050
jmp 0x2a317
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a31a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a31a
jmp 0x2a079
jmp 0x2a09f
jmp 0x2a27d
movq %rax, %rbx
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a0a2
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a0a2
movq %rax, %rbx
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a280
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a280
jmp 0x2a27d
movq %rax, %rbx
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a0f6
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a0f6
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a1d4
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a1d4
jmp 0x2a301
movq %rax, %rbx
jmp 0x2a1ef
jmp 0x2a136
jmp 0x2a26d
jmp 0x2a15b
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a15e
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a15e
jmp 0x2a328
movq %rax, %rbx
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a32b
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a32b
jmp 0x2a328
jmp 0x2a328
movq %rax, %rbx
movq %r14, %rdi
callq 0x9200
jmp 0x2a335
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x2c148
jmp 0x2a1b3
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x19b66
jmp 0x2a340
jmp 0x2a27d
jmp 0x2a301
jmp 0x2a301
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a1ef
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r13, %rdi
je 0x2a270
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a270
jmp 0x2a301
jmp 0x2a328
jmp 0x2a328
jmp 0x2a328
jmp 0x2a328
jmp 0x2a289
jmp 0x2a2b1
jmp 0x2a301
jmp 0x2a33d
jmp 0x2a301
jmp 0x2a301
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x2c148
jmp 0x2a32b
jmp 0x2a260
jmp 0x2a328
jmp 0x2a328
movq %rax, %rbx
jmp 0x2a34a
jmp 0x2a328
movq %rax, %rbx
movq %r14, %rdi
callq 0xa946
jmp 0x2a32b
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0x2a2e2
jmp 0x2a289
movq %rax, %rbx
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a2b4
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a2b4
jmp 0x2a2b1
movq %rax, %rbx
movq 0xb0(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a304
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a304
jmp 0x2a301
jmp 0x2a301
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x19b66
jmp 0x2a304
jmp 0x2a301
jmp 0x2a301
jmp 0x2a328
jmp 0x2a328
jmp 0x2a301
jmp 0x2a301
jmp 0x2a317
jmp 0x2a328
jmp 0x2a301
jmp 0x2a301
jmp 0x2a317
jmp 0x2a317
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x19b66
jmp 0x2a31a
jmp 0x2a328
jmp 0x2a317
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x19b66
jmp 0x2a32b
jmp 0x2a328
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x19b66
movq %rbx, %rdi
callq 0x94e0
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x2c148
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x2a335
callq 0xa946
jmp 0x2a335