// File: /workspace/github_cpp_makefile_star2_O1/dechimal[P]TaggedUnion/test_sum.cpp
// Function: main
int main() {
    {
        // construct, assign, exception safety
        sum<int, double, hoge, hoge> a(_1, 10.0);
        assert(a.get(_1) == 10.0);
        auto b = a;
        assert(b.get(_1) == 10.0);
        a = { _0, 5 };
        assert(a.get(_0) == 5);
        a = { _2, hoge{42} };
        a.get(_2).b = true;
        try {
            b = a;
            assert(false);
        } catch (int) {
            assert(b.get(_1) == 10.0);
        }
        a.get(_2).b = false;
        a = { _3, hoge{24} };
        assert(a.get(_3).x == 24);
        try {
            b = { _2, hoge{36} };
            assert(b.get(_2).x == 36);
            b.get(_2).b = true;
            a = b;
            assert(false);
        } catch (int) {
            assert(a.get(_0) == 0);
        }
    }
    {
        // strong guarantee without fallback type
        sum<hoge, hoge> a(_0, hoge{42});
        sum<hoge, hoge> b(_1, hoge{24});
        b.get(_1).b = true;
        try {
            a = b;
            assert(false);
        } catch (int) {
            assert(a.get(_0).x == 42);
        }
    }
    {
        // equality
        sum<int, hoge> a(_0, 42);
        sum<int, hoge> b(_1, hoge{42});
        assert(a != b);
        a = { _1, hoge{42} };
        assert(a == b);
    }
    {
        // strong guarantee without nothrow constructible type
        sum<hoge, hoge> a(_0, hoge{42});
        sum<hoge, hoge> b(_1, hoge{42});
        b.get(_1).b = true;
        try {
            a = b;
            assert(false);
        } catch (int) {
            assert(a.get(_0) == b.get(_1));
        }
    }
    {
        // less
        sum<int, double> a(_0, 42);
        sum<int, double> b(_1, 10.0);
        assert(a < b);
    }
    {
        // move
        sum<int, std::vector<int>> a(_0, 10);
        sum<int, std::vector<int>> b(_1, {1, 2, 3});
        a = std::move(b);
        auto & v1 = a.get(_1);
        auto v2 = {1, 2, 3};
        assert(std::equal(v1.begin(), v1.end(), v2.begin(), v2.end()));
        auto & v3 = b.get(_1);
        assert(v3.empty());
    }
    {
        // recursive type using class member
        struct leaf {};
        struct node {
            node(int x, leaf l, leaf r) : x(x), l(_0, l), r(_0, r) {}
            node(int x, node l, leaf r) : x(x), l(_1, l), r(_0, r) {}
            node(int x, leaf l, node r) : x(x), l(_0, l), r(_1, r) {}
            node(int x, node l, node r) : x(x), l(_1, l), r(_1, r) {}
            int x;
            sum<leaf, rec_guard<node>> l; // rec_guard<T> prevent cyclic class definition.
            sum<leaf, rec_guard<node>> r;
        };
        node n(1,
               leaf{},
               node(2,
                    node(3,
                         leaf{},
                         leaf{}),
                    node(4,
                         node(5,
                              leaf{},
                              leaf{}),
                         leaf{})));
        auto g = ::fix(::tie(
            [] (auto, tag<0>, leaf) {
                return 0;
            }, [] (auto f, tag<1>, node const & n) -> int {
                return n.x + n.l.when(f) + n.r.when(f);
            }));
        assert(n.x + n.l.when(g) + n.r.when(g) == 15);
    }
    {
        // direct recursive type
        struct leaf {};
        using node = sum<leaf, std::tuple<int, _, _>>;
        auto make_leaf = [] () { return node(_0, leaf{}); };
        auto make_node = [] (int v, node l, node r) {
                return node(_1, std::make_tuple(v, std::move(l), std::move(r)));
            };
        auto n = make_node(1,
                           make_leaf(),
                           make_node(2,
                                     make_node(3,
                                               make_leaf(),
                                               make_leaf()),
                                     make_node(4,
                                               make_node(5,
                                                         make_leaf(),
                                                         make_leaf()),
                                               make_leaf())));
        auto g = ::fix(::tie(
            [] (auto, tag<0>, leaf) {
                return 0;
            }, [] (auto f, tag<1>, std::tuple<int, node, node> const & tup) -> int {
                return std::get<0>(tup) + std::get<1>(tup).when(f) + std::get<2>(tup).when(f);
            }));
        assert(n.when(g) == 15);
    }
    {
        // recursion with nest
        using u1 = sum<int, _>;
        using u2 = sum<_, u1, char>;
        static_assert(std::is_same<decltype(std::declval<u1&>().get(_1)), u1&>::value, "failed at recursion type 1");
        static_assert(std::is_same<decltype(std::declval<u2&>().get(_0)), u2&>::value, "failed at recursion type 2");
        u2 x = u2(_1, u1(_1, u1(_0, 42)));
        assert(x.get(_1).get(_1).get(_0) == 42);
    }
    {
        // fallback type in recursion type
        using u = sum<std::tuple<_>, char>;
        u x(_1, 'a');
        assert(x == x);
    }
    {
        // recursion with nested and outer placeholder
        using u = sum<sum<_, rec<1>, char>, int>;
        static_assert(std::is_same<decltype(std::declval<u&>().get(_0)), sum<_, u, char>&>::value, "failed at recursion with nested and outer placeholder 1");
        static_assert(std::is_same<decltype(std::declval<u&>().get(_0).get(_1)), u&>::value, "failed at recursion with nested and outer placeholder 2");
        u a(_1, 42);
        u b(_0, { _0, { _2, 'a' } });
        u c(_0, { _1, { _1, 42 } });
        u d(_0, { _2, 'a' });
        assert(a == c.get(_0).get(_1));
        assert(b.get(_0).get(_0) == d.get(_0));
        a = { _0, { _1, d } };
        assert(a.get(_0).get(_1).get(_0) == b.get(_0).get(_0));
    }
    {
        // implicit conversions
        struct unit {
            bool operator==(unit) const { return true; }
        };
        using ilist = sum<unit, std::tuple<int, _>>;
        using clist = sum<unit, std::tuple<char, _>>;

        ilist xs(_1, std::make_tuple(42, ilist(_0)));
        clist ys(_1, std::make_tuple(42, clist(_0)));
        assert(xs == ys);
    }
    {
        // recursion with non-type parameter using traits
        // (traits of std::array is already defined in this implementation)
        using ternary_tree = sum<int, std::array<_, 3>>;
        auto n = ternary_tree(_1, {{{_0, 1}, {_0, 2}, {_0, 3}}});
        n.when(::tie(
            [] (tag<0>, int) {
                assert(false);
            },
            [] (tag<1>, std::array<ternary_tree, 3> const & ar) {
                assert(ar[0].get(_0) == 1 && ar[1].get(_0) == 2 && ar[2].get(_0) == 3);
            }));
        // Following is also OK (same with above).
        n.when(
            [] (tag<0>, int) {
                assert(false);
            },
            [] (tag<1>, std::array<ternary_tree, 3> const & ar) {
                assert(ar[0].get(_0) == 1 && ar[1].get(_0) == 2 && ar[2].get(_0) == 3);
            });
    }
    {
        // recursion with non-type parameter (ad-hoc way)
        using type = type_fun<make_non_type_parameter_template<_, 2, int>>;
        using u = sum<rec_guard<type>, int>;
        // print<decltype(std::declval<u>().get(_0))>;
        u x(_1, 42);
        using expected = non_type_parameter_template<u, 2, int>;
        static_assert(std::is_same<decltype(std::declval<u>().get(_0)), expected &&>::value, "failed at recursion with non-type parameter (ad-hoc way)");
    }
    {
        // return type deduction of dispatch/when member function
        using u = sum<int, int, int, int>;
        struct hogera{};
        struct piyo{ piyo()=default; piyo(hogera){} };
        struct fuga{ fuga()=default; fuga(piyo){} };
        struct hoge{ hoge()=default; hoge(fuga){} };

        u x(_0, {});
        x.dispatch(::tie([] (tag<0>) {
            return hoge{};
        }, [] (tag<1>) {
            return fuga{};
        }, [] (tag<2>) {
            return piyo{};
        }, [] (tag<3>) {
            return hogera{};
        }));
    }
    {
        // extension
        using u = sum<int, int>;
        auto x = u(_0, 42);
        auto y = ::extend<tag<1>, char, tag<0>>(x);
        static_assert(std::is_same<decltype(y), sum<int, char, int>>::value, "failed at extension");
        assert(y.which() == 2 && y.get(_2) == 42);
        auto z = ::extend_right<short>(x);
        static_assert(std::is_same<decltype(z), sum<short, int, int>>::value, "failed at extension");
        assert(z.which() == 1 && z.get(_1) == 42);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1f8, %rsp            # imm = 0x1F8
leaq 0x20(%rsp), %r14
movl $0x1, (%r14)
movabsq $0x4024000000000000, %rax # imm = 0x4024000000000000
movq %rax, 0x8(%r14)
movq %r14, %rdi
callq 0x4b1a
movsd (%rax), %xmm0
ucomisd 0x5d6d(%rip), %xmm0     # 0x8008
jne 0x23c3
jp 0x23c3
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rsp, %rcx
movl %eax, (%rcx)
leaq 0x40(%rsp), %rdi
movq %rcx, (%rdi)
movq %r14, 0x8(%rdi)
leaq 0xb5a8(%rip), %rcx      # 0xd870
callq *(%rcx,%rax,8)
movq %rsp, %r15
movq %r15, %rdi
callq 0x4b1a
movsd (%rax), %xmm0
ucomisd 0x5d26(%rip), %xmm0     # 0x8008
jne 0x23e2
jp 0x23e2
leaq 0x40(%rsp), %r12
movl $0x0, (%r12)
movl $0x5, 0x8(%r12)
leaq 0x20(%rsp), %rdi
movq %r12, %rsi
callq 0x4bfa
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xb527(%rip), %rbp      # 0xd850
callq *(%rbp,%rax,8)
leaq 0x20(%rsp), %rdi
callq 0x516e
cmpl $0x5, (%rax)
jne 0x2401
leaq 0x80(%rsp), %rsi
movb $0x0, (%rsi)
movl $0x2a, 0x4(%rsi)
leaq 0x48(%rsp), %rdi
movl $0x2, -0x8(%rdi)
callq 0x4dd2
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %r12
movq %r12, %rsi
callq 0x4bfa
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
leaq 0x20(%rsp), %rdi
callq 0x51c8
movb $0x1, (%rax)
movq %rsp, %rdi
leaq 0x20(%rsp), %rsi
callq 0x4976
leaq 0x5cb0(%rip), %rdi      # 0x805b
leaq 0x5c70(%rip), %rsi      # 0x8022
leaq 0x5c76(%rip), %rcx      # 0x802f
movl $0x4f, %edx
callq 0x2080
leaq 0x5c46(%rip), %rdi      # 0x8010
leaq 0x5c51(%rip), %rsi      # 0x8022
leaq 0x5c57(%rip), %rcx      # 0x802f
movl $0x46, %edx
callq 0x2080
leaq 0x5c51(%rip), %rdi      # 0x803a
leaq 0x5c32(%rip), %rsi      # 0x8022
leaq 0x5c38(%rip), %rcx      # 0x802f
movl $0x48, %edx
callq 0x2080
leaq 0x5c44(%rip), %rdi      # 0x804c
leaq 0x5c13(%rip), %rsi      # 0x8022
leaq 0x5c19(%rip), %rcx      # 0x802f
movl $0x4a, %edx
callq 0x2080
movq %rax, %rbx
cmpl $0x2, %edx
jne 0x3ea7
movq %rbx, %rdi
callq 0x2050
movq %rsp, %r12
movq %r12, %rdi
callq 0x4b1a
movsd (%rax), %xmm0
ucomisd 0x5bbd(%rip), %xmm0     # 0x8008
jne 0x2556
jp 0x2556
callq 0x2110
leaq 0x20(%rsp), %rdi
callq 0x51c8
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x80(%rsp), %rsi
movb %cl, (%rsi)
movl $0x18, 0x4(%rsi)
leaq 0x48(%rsp), %rdi
movl $0x3, -0x8(%rdi)
callq 0x4dd2
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %r13
movq %r13, %rsi
callq 0x4bfa
leaq 0x70(%rsp), %rdi
movq %r13, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
leaq 0x20(%rsp), %rdi
callq 0x5820
cmpl $0x18, 0x4(%rax)
jne 0x2575
leaq 0x80(%rsp), %rsi
movb $0x0, (%rsi)
movl $0x24, 0x4(%rsi)
leaq 0x48(%rsp), %rdi
movl $0x2, -0x8(%rdi)
callq 0x4dd2
movq %rsp, %rdi
leaq 0x40(%rsp), %rsi
callq 0x4bfa
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rax
movq %rax, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
movq %rsp, %rdi
callq 0x51c8
cmpl $0x24, 0x4(%rax)
jne 0x2594
movq %rsp, %rdi
callq 0x51c8
movb $0x1, (%rax)
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0x4976
leaq 0x5b1d(%rip), %rdi      # 0x805b
leaq 0x5add(%rip), %rsi      # 0x8022
leaq 0x5ae3(%rip), %rcx      # 0x802f
movl $0x5b, %edx
callq 0x2080
leaq 0x5add(%rip), %rdi      # 0x803a
leaq 0x5abe(%rip), %rsi      # 0x8022
leaq 0x5ac4(%rip), %rcx      # 0x802f
movl $0x51, %edx
callq 0x2080
leaq 0x5ae5(%rip), %rdi      # 0x8061
leaq 0x5a9f(%rip), %rsi      # 0x8022
leaq 0x5aa5(%rip), %rcx      # 0x802f
movl $0x55, %edx
callq 0x2080
leaq 0x5ad8(%rip), %rdi      # 0x8073
leaq 0x5a80(%rip), %rsi      # 0x8022
leaq 0x5a86(%rip), %rcx      # 0x802f
movl $0x58, %edx
callq 0x2080
jmp 0x25e1
jmp 0x3eeb
movq %rdx, %r13
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rax
movq %rax, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
jmp 0x25e7
jmp 0x3eeb
movq %rdx, %r13
movq %rax, %rbx
movl $0x2, %eax
cmpl %eax, %r13d
jne 0x3ea7
movq %rbx, %rdi
callq 0x2050
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x516e
cmpl $0x0, (%rax)
jne 0x26c7
callq 0x2110
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
leaq 0x40(%rsp), %r14
movq %rbx, (%r14)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %r14, %rdi
callq *(%rbp,%rax,8)
xorl %ebp, %ebp
leaq 0x20(%rsp), %rbx
movb %bpl, (%rbx)
movl $0x2a, 0x4(%rbx)
leaq 0x48(%rsp), %rdi
movl $0x0, -0x8(%rdi)
movq %rbx, %rsi
callq 0x4dd2
movq %rsp, %rsi
movb %bpl, (%rsi)
movl $0x18, 0x4(%rsi)
movl $0x1, (%rbx)
leaq 0x28(%rsp), %rdi
callq 0x4dd2
leaq 0x20(%rsp), %r15
movq %r15, %rdi
callq 0x58ae
movb $0x1, (%rax)
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %r12
movq %r12, %rsi
callq 0x4984
leaq 0x59ac(%rip), %rdi      # 0x805b
leaq 0x596c(%rip), %rsi      # 0x8022
leaq 0x5972(%rip), %rcx      # 0x802f
movl $0x67, %edx
callq 0x2080
leaq 0x59b7(%rip), %rdi      # 0x8085
leaq 0x594d(%rip), %rsi      # 0x8022
leaq 0x5953(%rip), %rcx      # 0x802f
movl $0x5d, %edx
callq 0x2080
movq %rax, %rbx
movl $0x2, %eax
cmpl %eax, %edx
jne 0x3dd9
movq %rbx, %rdi
callq 0x2050
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
callq 0x5e8a
cmpl $0x2a, 0x4(%rax)
jne 0x27ce
callq 0x2110
movq %rsp, %r15
movq %r12, (%r15)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xb2c0(%rip), %r13      # 0xd9f0
movq %r15, %rdi
callq *(%r13,%rax,8)
leaq 0x20(%rsp), %r14
movq %rbx, (%r14)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %r14, %rdi
callq *(%r13,%rax,8)
movabsq $0x2a00000000, %rbp     # imm = 0x2A00000000
movq %rbp, 0x20(%rsp)
leaq 0x40(%rsp), %rsi
movb $0x0, (%rsi)
movl $0x2a, 0x4(%rsi)
leaq 0x4(%rsp), %rdi
movl $0x1, -0x4(%rdi)
callq 0x4dd2
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
andl (%rsp), %ecx
cmpl %ecx, %eax
jne 0x27ed
leaq 0x40(%rsp), %rdi
movq %r14, (%rdi)
movq %r15, 0x8(%rdi)
leaq 0xb338(%rip), %rcx      # 0xdae0
callq *(%rcx,%rax,8)
testb %al, %al
je 0x27ed
leaq 0x58f0(%rip), %rdi      # 0x80a6
leaq 0x5865(%rip), %rsi      # 0x8022
leaq 0x586b(%rip), %rcx      # 0x802f
movl $0x70, %edx
callq 0x2080
leaq 0x58bf(%rip), %rdi      # 0x8094
leaq 0x5846(%rip), %rsi      # 0x8022
leaq 0x584c(%rip), %rcx      # 0x802f
movl $0x69, %edx
callq 0x2080
leaq 0x80(%rsp), %rsi
movb $0x0, (%rsi)
movl $0x2a, 0x4(%rsi)
leaq 0x44(%rsp), %rdi
movl $0x1, -0x4(%rdi)
callq 0x4dd2
leaq 0x20(%rsp), %rbx
leaq 0x40(%rsp), %r12
movq %rbx, %rdi
movq %r12, %rsi
callq 0x5ef2
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xb233(%rip), %r12      # 0xda70
callq *(%r12,%rax,8)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
andl (%rsp), %ecx
cmpl %ecx, %eax
jne 0x2925
leaq 0x40(%rsp), %rdi
movq %rbx, (%rdi)
movq %r15, 0x8(%rdi)
leaq 0xb273(%rip), %rcx      # 0xdae0
callq *(%rcx,%rax,8)
testb %al, %al
je 0x2925
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r12,%rax,8)
leaq 0x40(%rsp), %r15
movq %rbx, (%r15)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %r15, %rdi
callq *(%r12,%rax,8)
xorl %r14d, %r14d
leaq 0x20(%rsp), %rbx
movb %r14b, (%rbx)
movl $0x2a, %r12d
movl %r12d, 0x4(%rbx)
leaq 0x48(%rsp), %rdi
movl $0x0, -0x8(%rdi)
movq %rbx, %rsi
callq 0x4dd2
movq %rsp, %rsi
movb %r14b, (%rsi)
movl %r12d, 0x4(%rsi)
movl $0x1, (%rbx)
leaq 0x28(%rsp), %rdi
callq 0x4dd2
leaq 0x20(%rsp), %r12
movq %r12, %rdi
callq 0x58ae
movb $0x1, (%rax)
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x4984
leaq 0x574e(%rip), %rdi      # 0x805b
leaq 0x570e(%rip), %rsi      # 0x8022
leaq 0x5714(%rip), %rcx      # 0x802f
movl $0x7b, %edx
callq 0x2080
leaq 0x5781(%rip), %rdi      # 0x80ad
leaq 0x56ef(%rip), %rsi      # 0x8022
leaq 0x56f5(%rip), %rcx      # 0x802f
movl $0x72, %edx
callq 0x2080
movq %rax, %rbx
movl $0x2, %eax
cmpl %eax, %edx
jne 0x3d04
movq %rbx, %rdi
callq 0x2050
leaq 0x40(%rsp), %rdi
callq 0x5e8a
movq %rax, %r14
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x58ae
movl 0x4(%r14), %ecx
cmpl 0x4(%rax), %ecx
jne 0x34cc
callq 0x2110
movq %rsp, %rdi
movq %rbx, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %rax
movq %rax, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
movl $0x0, 0x40(%rsp)
movl $0xa, 0x48(%rsp)
movabsq $0x200000001, %r14      # imm = 0x200000001
leaq 0x70(%rsp), %rsi
movq %r14, (%rsi)
movl $0x3, 0x8(%rsi)
movq %rsp, %rdi
leaq 0x80(%rsp), %rcx
movl $0x3, %edx
callq 0x4992
leaq 0x20(%rsp), %r15
movl $0x1, (%r15)
movq (%rsp), %rax
movq %rax, 0x8(%r15)
movupd 0x8(%rsp), %xmm0
movupd %xmm0, 0x10(%r15)
leaq 0x40(%rsp), %rdi
movq %r15, %rsi
callq 0x62ce
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
callq 0x665a
movq %r14, (%rsp)
movl $0x3, 0x8(%rsp)
movq (%rax), %rdi
movq 0x8(%rax), %rax
movq %rax, %rdx
subq %rdi, %rdx
cmpq $0xc, %rdx
jne 0x34eb
cmpq %rdi, %rax
je 0x2a67
movq %rsp, %rsi
callq 0x20d0
testl %eax, %eax
jne 0x34eb
leaq 0x20(%rsp), %r13
movq %r13, %rdi
callq 0x665a
movq (%rax), %rcx
cmpq 0x8(%rax), %rcx
jne 0x350a
movq %rsp, %rdi
movq %r13, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xb059(%rip), %r14      # 0xdaf0
callq *(%r14,%rax,8)
leaq 0x20(%rsp), %rdi
movq %rbx, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
movl $0x3, 0x158(%rsp)
xorl %eax, %eax
movl %eax, 0x160(%rsp)
movl %eax, 0x170(%rsp)
leaq 0x1d0(%rsp), %rsi
movl $0x5, (%rsi)
movl %eax, 0x8(%rsi)
movl %eax, 0x18(%rsi)
leaq 0x188(%rsp), %rdi
movl $0x4, -0x8(%rdi)
callq 0x41c2
leaq 0x180(%rsp), %rdx
movl $0x0, 0x18(%rdx)
leaq 0x1a8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x3ef4
leaq 0x40(%rsp), %r14
leaq 0x1a8(%rsp), %rsi
movq %r14, %rdi
callq 0x3f3a
leaq 0x1a8(%rsp), %rdi
callq 0x3f74
leaq 0x180(%rsp), %rdi
callq 0x3f74
leaq 0x1d0(%rsp), %rdi
callq 0x3f74
leaq 0x158(%rsp), %rdi
callq 0x3f74
movl 0x40(%rsp), %r15d
movl 0x48(%rsp), %eax
leaq 0x20(%rsp), %rdi
leaq 0x48(%rsp), %rcx
movq %rcx, (%rdi)
leaq 0x97(%rsp), %rcx
movq %rcx, 0x8(%rdi)
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xaba2(%rip), %r12      # 0xd730
callq *(%r12,%rax,8)
movl %eax, %ebx
leaq 0x58(%rsp), %rax
leaq 0x20(%rsp), %rdi
movq %rax, (%rdi)
leaq 0x96(%rsp), %rcx
movq %rcx, 0x8(%rdi)
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r12,%rax,8)
addl %r15d, %ebx
addl %eax, %ebx
cmpl $0xf, %ebx
jne 0x3529
leaq 0x40(%rsp), %rdi
callq 0x3f74
xorl %ebx, %ebx
movl %ebx, 0x118(%rsp)
leaq 0xf8(%rsp), %rdx
movl %ebx, (%rdx)
leaq 0xe8(%rsp), %rcx
movl %ebx, (%rcx)
leaq 0x108(%rsp), %rdi
movl $0x3, %esi
callq 0x3fc0
leaq 0xd8(%rsp), %rdx
movl %ebx, (%rdx)
leaq 0xc8(%rsp), %rcx
movl %ebx, (%rcx)
leaq 0xa8(%rsp), %rdi
movl $0x5, %esi
callq 0x3fc0
leaq 0x148(%rsp), %r13
movl $0x0, (%r13)
leaq 0x128(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
movl $0x4, %esi
movq %r13, %rcx
callq 0x3fc0
leaq 0x138(%rsp), %rdi
leaq 0x108(%rsp), %rbx
leaq 0x128(%rsp), %r14
movl $0x2, %esi
movq %rbx, %rdx
movq %r14, %rcx
callq 0x3fc0
leaq 0x20(%rsp), %rdi
leaq 0x118(%rsp), %rdx
leaq 0x138(%rsp), %r15
movq %rdi, %r12
movl $0x1, %esi
movq %r15, %rcx
callq 0x3fc0
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl 0x138(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xab06(%rip), %r15      # 0xd7c0
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r14, (%rdi)
movl 0x128(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r13, (%rdi)
movl 0x148(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xa8(%rsp), %rax
movq %rax, (%rdi)
movl 0xa8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xc8(%rsp), %rax
movq %rax, (%rdi)
movl 0xc8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xd8(%rsp), %rax
movq %rax, (%rdi)
movl 0xd8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
movq %rbx, (%rdi)
movl 0x108(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xe8(%rsp), %rax
movq %rax, (%rdi)
movl 0xe8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xf8(%rsp), %rax
movq %rax, (%rdi)
movl 0xf8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0x118(%rsp), %rax
movq %rax, (%rdi)
movl 0x118(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x95(%rsp), %rax
movq %rax, 0x8(%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa976(%rip), %rcx      # 0xd760
callq *(%rcx,%rax,8)
cmpl $0xf, %eax
jne 0x3548
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
leaq 0x70(%rsp), %rsi
movl $0x0, (%rsi)
movl $0x2a, 0x8(%rsi)
leaq 0x8(%rsp), %rdi
movl $0x1, -0x8(%rdi)
callq 0x6708
movl $0x1, 0x40(%rsp)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, 0x48(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x48(%rsp), %rcx
movq %rcx, (%rdi)
movq %rsp, %rcx
movq %rcx, 0x8(%rdi)
leaq 0xad13(%rip), %rcx      # 0xdb70
callq *(%rcx,%rax,8)
leaq 0x20(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xace6(%rip), %rbx      # 0xdb60
callq *(%rbx,%rax,8)
leaq 0x20(%rsp), %rdi
leaq 0x70(%rsp), %rax
movq %rax, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbx,%rax,8)
leaq 0x40(%rsp), %r14
movq %r14, %rdi
callq 0x680e
movq %rax, %rdi
callq 0x686c
movq (%rax), %rdi
callq 0x68ca
cmpl $0x2a, (%rax)
jne 0x3567
leaq 0x20(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xacac(%rip), %rcx      # 0xdb80
callq *(%rcx,%rax,8)
movl $0x1, (%rsp)
movl $0x2a, 0x8(%rsp)
leaq 0x20(%rsp), %r14
movl $0x2, (%r14)
movb $0x61, 0x8(%r14)
leaq 0x48(%rsp), %r15
movl $0x0, -0x8(%r15)
movq %r15, %rdi
movq %r14, %rsi
callq 0x69b2
leaq 0x78(%rsp), %rdi
movl $0x0, -0x8(%rdi)
leaq 0x40(%rsp), %r12
movq %r12, %rsi
callq 0x69b2
leaq 0x80(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xac6d(%rip), %r13      # 0xdbb0
callq *(%r13,%rax,8)
leaq 0x80(%rsp), %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
movl $0x1, %eax
movl %eax, 0x20(%rsp)
movl $0x2a, %ecx
movl %ecx, 0x28(%rsp)
leaq 0x40(%rsp), %r12
movl %eax, (%r12)
movl %eax, 0x8(%r12)
movl %ecx, 0x10(%r12)
leaq 0x88(%rsp), %rdi
movl $0x0, -0x8(%rdi)
movq %r12, %rsi
callq 0x69b2
leaq 0x98(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x98(%rsp), %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xabcf(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %r14
movl $0x2, (%r14)
movb $0x61, 0x8(%r14)
leaq 0xa0(%rsp), %rdi
movl $0x0, -0x8(%rdi)
movq %r14, %rsi
callq 0x69b2
leaq 0x20(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x80(%rsp), %rdi
callq 0x6aa0
movq (%rax), %rdi
callq 0x6afa
movl (%rsp), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl (%rax), %edx
cmpl %edx, %ecx
jne 0x3586
leaq 0x40(%rsp), %rdi
movq %rsp, %rdx
movq %rdx, (%rdi)
movq %rax, 0x8(%rdi)
leaq 0xabab(%rip), %rax      # 0xdc00
callq *(%rax,%rcx,8)
testb %al, %al
je 0x3586
leaq 0x70(%rsp), %rdi
callq 0x6aa0
movq (%rax), %rdi
callq 0x6bb4
movq (%rax), %rbx
leaq 0x98(%rsp), %r14
movq %r14, %rdi
callq 0x6aa0
movq (%rax), %rcx
movl (%rbx), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl (%rcx), %edx
cmpl %edx, %eax
jne 0x35a5
leaq 0x40(%rsp), %rdi
movq %rbx, (%rdi)
movq %rcx, 0x8(%rdi)
leaq 0xab5f(%rip), %rbx      # 0xdc10
callq *(%rbx,%rax,8)
testb %al, %al
je 0x35a5
movl $0x1, 0x40(%rsp)
movl 0x98(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, 0x48(%rsp)
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movq %r14, 0x8(%rdi)
leaq 0xab49(%rip), %rcx      # 0xdc30
callq *(%rcx,%rax,8)
leaq 0xc0(%rsp), %rdi
movl $0x0, -0x8(%rdi)
leaq 0x40(%rsp), %r12
movq %r12, %rsi
callq 0x69b2
movq %rsp, %rdi
leaq 0xb8(%rsp), %r15
movq %r15, %rsi
callq 0x6d9e
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movl 0xb8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xaa6c(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
movq %rsp, %r13
movq %r13, %rdi
callq 0x6aa0
movq (%rax), %rdi
callq 0x6afa
movq %rax, %rdi
callq 0x6aa0
movq (%rax), %r15
leaq 0x70(%rsp), %r12
movq %r12, %rdi
callq 0x6aa0
movq (%rax), %rdi
callq 0x6bb4
movq (%rax), %rcx
movl (%r15), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl (%rcx), %edx
cmpl %edx, %eax
jne 0x35c4
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movq %rcx, 0x8(%rdi)
callq *(%rbx,%rax,8)
testb %al, %al
je 0x35c4
leaq 0x40(%rsp), %rdi
movq %r14, (%rdi)
movl 0x98(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa9d4(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0x80(%rsp), %rax
movq %rax, (%rdi)
movl 0x80(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa9ae(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa993(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r13, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa979(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
xorl %eax, %eax
movl %eax, (%rsp)
leaq 0x40(%rsp), %r14
movl %eax, (%r14)
movl $0x2a, 0x10(%r14)
leaq 0x20(%rsp), %r15
movl $0x1, (%r15)
movq %r15, %rdi
movq %r14, %rsi
callq 0x4672
leaq 0x70(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa562(%rip), %r14      # 0xd7d0
callq *(%r14,%rax,8)
leaq 0x70(%rsp), %r12
movq %r13, (%r12)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %r12, %rdi
callq *(%r14,%rax,8)
xorl %eax, %eax
movl %eax, 0x70(%rsp)
leaq 0x40(%rsp), %r13
movl %eax, (%r13)
movl $0x2a, 0x10(%r13)
movq %rsp, %rdi
movq %r13, %rsi
callq 0x40ca
leaq 0x80(%rsp), %rdi
movq %r13, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa519(%rip), %r13      # 0xd7e0
callq *(%r13,%rax,8)
leaq 0x80(%rsp), %rbx
movq %r12, (%rbx)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq %rbx, %rdi
callq *(%r13,%rax,8)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
andl (%rsp), %ecx
cmpl %ecx, %eax
jne 0x35e3
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movq %rsp, %rcx
movq %rcx, 0x8(%rdi)
leaq 0xa4d9(%rip), %rcx      # 0xd7f0
callq *(%rcx,%rax,8)
testb %al, %al
je 0x35e3
leaq 0x40(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
xorl %eax, %eax
leaq 0x40(%rsp), %rsi
movl %eax, (%rsi)
movl $0x1, %ecx
movl %ecx, 0x8(%rsi)
movl %eax, 0x10(%rsi)
movl $0x2, 0x18(%rsi)
movl %eax, 0x20(%rsi)
movl $0x3, 0x28(%rsi)
leaq 0x28(%rsp), %rdi
movl %ecx, -0x8(%rdi)
callq 0x75e0
leaq 0x40(%rsp), %r13
movq %r13, %rdi
callq 0x49d8
movq %r15, (%r13)
leaq 0x94(%rsp), %rax
movq %rax, 0x8(%r13)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa3f2(%rip), %rcx      # 0xd7a0
leaq 0x40(%rsp), %rdi
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movq %r12, 0x8(%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa3de(%rip), %rcx      # 0xd7b0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa963(%rip), %rcx      # 0xdd50
callq *(%rcx,%rax,8)
movq %rbp, (%rsp)
movabsq $0x2a00000002, %rax     # imm = 0x2A00000002
leaq 0x70(%rsp), %r15
movq %rax, (%r15)
movq %r15, %rdi
callq 0x76ba
cmpl $0x2a, (%rax)
jne 0x3602
leaq 0x40(%rsp), %rsi
movq %rsp, %rax
movq %rax, (%rsi)
movq %rbx, 0x8(%rsi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa40b(%rip), %rcx      # 0xd840
leaq 0x20(%rsp), %rdi
callq *(%rcx,%rax,8)
movl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
andl 0x20(%rsp), %eax
cmpl $0x1, %eax
jne 0x3621
leaq 0x20(%rsp), %r12
movq %r12, %rdi
callq 0x771e
cmpl $0x2a, (%rax)
jne 0x3621
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa923(%rip), %rcx      # 0xdda0
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa8e8(%rip), %rcx      # 0xdd80
callq *(%rcx,%rax,8)
leaq 0x40(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa8bb(%rip), %rcx      # 0xdd70
callq *(%rcx,%rax,8)
xorl %eax, %eax
addq $0x1f8, %rsp            # imm = 0x1F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x4be1(%rip), %rdi      # 0x80b4
leaq 0x4b48(%rip), %rsi      # 0x8022
leaq 0x4b4e(%rip), %rcx      # 0x802f
movl $0x7d, %edx
callq 0x2080
leaq 0x4bd9(%rip), %rdi      # 0x80cb
leaq 0x4b29(%rip), %rsi      # 0x8022
leaq 0x4b2f(%rip), %rcx      # 0x802f
movl $0x8d, %edx
callq 0x2080
leaq 0x4bf1(%rip), %rdi      # 0x8102
leaq 0x4b0a(%rip), %rsi      # 0x8022
leaq 0x4b10(%rip), %rcx      # 0x802f
movl $0x8f, %edx
callq 0x2080
leaq 0x4bdd(%rip), %rdi      # 0x810d
leaq 0x4aeb(%rip), %rsi      # 0x8022
leaq 0x4af1(%rip), %rcx      # 0x802f
movl $0xae, %edx
callq 0x2080
leaq 0x4be4(%rip), %rdi      # 0x8133
leaq 0x4acc(%rip), %rsi      # 0x8022
leaq 0x4ad2(%rip), %rcx      # 0x802f
movl $0xc9, %edx
callq 0x2080
leaq 0x4bd5(%rip), %rdi      # 0x8143
leaq 0x4aad(%rip), %rsi      # 0x8022
leaq 0x4ab3(%rip), %rcx      # 0x802f
movl $0xd2, %edx
callq 0x2080
leaq 0x4bd6(%rip), %rdi      # 0x8163
leaq 0x4a8e(%rip), %rsi      # 0x8022
leaq 0x4a94(%rip), %rcx      # 0x802f
movl $0xe3, %edx
callq 0x2080
leaq 0x4bce(%rip), %rdi      # 0x817a
leaq 0x4a6f(%rip), %rsi      # 0x8022
leaq 0x4a75(%rip), %rcx      # 0x802f
movl $0xe4, %edx
callq 0x2080
leaq 0x4bce(%rip), %rdi      # 0x8199
leaq 0x4a50(%rip), %rsi      # 0x8022
leaq 0x4a56(%rip), %rcx      # 0x802f
movl $0xe6, %edx
callq 0x2080
leaq 0x4bde(%rip), %rdi      # 0x81c8
leaq 0x4a31(%rip), %rsi      # 0x8022
leaq 0x4a37(%rip), %rcx      # 0x802f
movl $0xf2, %edx
callq 0x2080
leaq 0x4bc8(%rip), %rdi      # 0x81d1
leaq 0x4a12(%rip), %rsi      # 0x8022
leaq 0x4a18(%rip), %rcx      # 0x802f
movl $0x12b, %edx            # imm = 0x12B
callq 0x2080
leaq 0x4bcb(%rip), %rdi      # 0x81f3
leaq 0x49f3(%rip), %rsi      # 0x8022
leaq 0x49f9(%rip), %rcx      # 0x802f
movl $0x12e, %edx            # imm = 0x12E
callq 0x2080
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
movq %r12, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa736(%rip), %rcx      # 0xdda0
callq *(%rcx,%rax,8)
jmp 0x3679
jmp 0x3eeb
jmp 0x3676
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa6ef(%rip), %rcx      # 0xdd80
callq *(%rcx,%rax,8)
leaq 0x20(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa6c2(%rip), %rcx      # 0xdd70
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
movq %rsp, %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa672(%rip), %rcx      # 0xdd50
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x49d8
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
jmp 0x376f
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
movq %r13, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa08f(%rip), %r13      # 0xd7e0
callq *(%r13,%rax,8)
leaq 0x80(%rsp), %rdi
movq %r12, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
movq %rsp, %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa015(%rip), %r14      # 0xd7d0
callq *(%r14,%rax,8)
leaq 0x70(%rsp), %rdi
movq %r13, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x384a
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movl 0xb8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa380(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
jmp 0x382d
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
jmp 0x384d
jmp 0x3eeb
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
leaq 0x98(%rsp), %rax
movq %rax, (%rdi)
movl 0x98(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa32d(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
jmp 0x389b
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x98(%rsp), %rdi
leaq 0x80(%rsp), %rax
movq %rax, (%rdi)
movl 0x80(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa2df(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
jmp 0x3914
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
leaq 0x98(%rsp), %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa28f(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
leaq 0x80(%rsp), %rdi
leaq 0x70(%rsp), %rax
movq %rax, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa26c(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
jmp 0x399b
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa240(%rip), %rcx      # 0xdbb0
callq *(%rcx,%rax,8)
jmp 0x397d
jmp 0x3eeb
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa218(%rip), %rcx      # 0xdbb0
callq *(%rcx,%rax,8)
leaq 0x70(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa1eb(%rip), %rcx      # 0xdba0
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa199(%rip), %rcx      # 0xdb80
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
movq %rsp, %rax
movq %rax, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa142(%rip), %rcx      # 0xdb60
callq *(%rcx,%rax,8)
jmp 0x3a2b
jmp 0x3eeb
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
leaq 0x70(%rsp), %rax
movq %rax, (%rdi)
movl 0x70(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0xa115(%rip), %rcx      # 0xdb60
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
movq %rsp, %rdi
movq %r12, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r15,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl 0x138(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9cf3(%rip), %rcx      # 0xd7c0
callq *(%rcx,%rax,8)
jmp 0x3ada
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
movq %r14, (%rdi)
movl 0x128(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9ccb(%rip), %rcx      # 0xd7c0
callq *(%rcx,%rax,8)
jmp 0x3b02
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
movq %r13, (%rdi)
movl 0x148(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9ca3(%rip), %r14      # 0xd7c0
callq *(%r14,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xa8(%rsp), %rax
movq %rax, (%rdi)
movl 0xa8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
jmp 0x3b50
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
leaq 0xc8(%rsp), %rax
movq %rax, (%rdi)
movl 0xc8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9c4d(%rip), %r14      # 0xd7c0
callq *(%r14,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xd8(%rsp), %rax
movq %rax, (%rdi)
movl 0xd8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0x108(%rsp), %rax
movq %rax, (%rdi)
movl 0x108(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
jmp 0x3bcb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
leaq 0xe8(%rsp), %rax
movq %rax, (%rdi)
movl 0xe8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9bd2(%rip), %r14      # 0xd7c0
callq *(%r14,%rax,8)
leaq 0x40(%rsp), %rdi
leaq 0xf8(%rsp), %rax
movq %rax, (%rdi)
movl 0xf8(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
leaq 0x118(%rsp), %rax
leaq 0x40(%rsp), %rdi
movq %rax, (%rdi)
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
jmp 0x3c82
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
callq 0x3f74
jmp 0x3c5b
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x3f74
jmp 0x3c6d
movq %rax, %rbx
leaq 0x1d0(%rsp), %rdi
callq 0x3f74
leaq 0x158(%rsp), %r14
movq %r14, %rdi
callq 0x3f74
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3c9d
jmp 0x3c9d
movq %rax, %rbx
movq %rsp, %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9e3a(%rip), %rcx      # 0xdaf0
callq *(%rcx,%rax,8)
jmp 0x3cc3
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %rax
movq %rax, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9e10(%rip), %rcx      # 0xdaf0
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
callq 0x2110
jmp 0x3d04
movq %rax, %rbx
movq %rsp, %rdi
movq %r12, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
jmp 0x3d22
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r13,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9d04(%rip), %rcx      # 0xda70
callq *(%rcx,%rax,8)
jmp 0x3d7b
jmp 0x3eeb
jmp 0x3d78
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r15, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9cde(%rip), %rcx      # 0xda70
callq *(%rcx,%rax,8)
jmp 0x3d9f
jmp 0x3eeb
movq %rax, %rbx
movq %rsp, %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9cbb(%rip), %rcx      # 0xda70
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
movq %rax, %rbx
callq 0x2110
jmp 0x3dd9
movq %rax, %rbx
movq %rsp, %rdi
movq %r15, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9c01(%rip), %rcx      # 0xd9f0
callq *(%rcx,%rax,8)
jmp 0x3dfc
jmp 0x3eeb
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
movq %r14, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9bdc(%rip), %rcx      # 0xd9f0
callq *(%rcx,%rax,8)
jmp 0x3ee3
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3eeb
jmp 0x3e53
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r13, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
jmp 0x3ea7
jmp 0x3eeb
jmp 0x3ea4
movq %rax, %rbx
callq 0x2110
jmp 0x3ea7
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%rbp,%rax,8)
jmp 0x3ea7
jmp 0x3eeb
jmp 0x3ea4
jmp 0x3eeb
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
movq %r12, (%rdi)
movl 0x40(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x99b3(%rip), %rcx      # 0xd850
callq *(%rcx,%rax,8)
jmp 0x3ea7
jmp 0x3eeb
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
movq %r15, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9992(%rip), %rcx      # 0xd850
callq *(%rcx,%rax,8)
jmp 0x3eca
jmp 0x3eeb
jmp 0x3ec7
movq %rax, %rbx
movq %rsp, %rdi
movq %r14, (%rdi)
movl 0x20(%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x9970(%rip), %rcx      # 0xd850
callq *(%rcx,%rax,8)
movq %rbx, %rdi
callq 0x2130
movq %rax, %rdi
callq 0x4a50
nop