// File: Cell-veto[P]postlhc/main.cpp
// Function: main
int main (int, const char **argv)
{
    buffer_cerr ();
    AbstractStorage *stor = 0;
    AbstractChainRunner *cr = 0;
    AbstractCorrelator *gofr = 0;

    string inter, prefix = "out/";
    string in_prefix;
    bool probe_test = false;
    bool skip_calib = false;
    bool recover = false;
    bool redirect_log = false;
    bool write_gofr = false;
    double snap_disp = 100;
    unsigned long random_seed = 42;
    unsigned long snap_target = 100000;
    long recover_from = -1;
    bool dont_optimize_sr_lr_split = false;

    // parse command line, initializing our tools along the way
    for (++argv; *argv; argv += 2)
    {
        string kw = *argv;

        if (kw == "load")
        {
            in_prefix = read_arg <string> (argv);
            in_prefix += '/';
        }
        else if (kw == "addprefix")
        {
            prefix += boost::str (format ("%s/") % read_arg <string> (argv));
        }
        else if (kw == "setprefix")
        {
            prefix = read_arg <string> (argv);
        }
        else if (kw == "log")
        {
            redirect_log = true;
            --argv; // no argument
        }
        else if (kw == "seed")
        {
            random_seed = read_arg <unsigned long> (argv);
        }
        else if (kw == "snap")
        {
            snap_target = read_arg <unsigned long> (argv);
        }
        else if (kw == "snap_disp")
        {
            snap_disp = read_arg <double> (argv);
        }
        else if (kw == "recover")
        {
            recover = true;
            --argv; // no argument
        }
        else if (kw == "recover_from")
        {
            recover_from = static_cast <long> (read_arg <unsigned long> (argv));
            recover = true;
        }
        else if (kw == "skip_calib")
        {
            skip_calib = true;
            --argv; // no argument
        }
        else if (kw == "probe_test")
        {
            probe_test = true;
            --argv; // no argument
        }
        else if (!stor)
        {
            // create storage
            if (kw == "stor")
                stor = make_storage (read_arg <string> (argv));
            else
                rt_error ("First set storage mechanism with keyword stor");

            prefix += boost::str (format ("%s/") % read_arg <string> (argv));
        }
        else if (kw == "gofr")
        {
            // we will write a density/density pair correlator
            write_gofr = true;
            --argv; // no argument
        }
        else if (!cr)
        {
            // as soon as we encounter 'inter', instantiate the ECMC algorithm
            if (kw == "inter")
            {
                inter = read_arg <string> (argv);
                cr = make_chainrunner (inter, stor);
                prefix += inter + '/';
            }
            else
                rt_error ("First set interaction type with keyword inter");
        }
        else if (kw == "sr_lr_split")
        {
            // we don't want a subdirectory for this parameter.
            double value = read_arg <double> (argv);
            cr->set_parameter (kw, value);
            dont_optimize_sr_lr_split = true;
        }
        else
        {
            // unrecognized argument -- assume it's an interaction parameter
            double value = read_arg <double> (argv);
            prefix += boost::str (format ("%s%f/") % kw % value);
            std::cerr << "inter_param " << kw << " " << value << "\n";
            cr->set_parameter (kw, value);
        }
    }

    if (!stor)
        rt_error ("Missing stor");
    if (!cr)
        rt_error ("Missing inter");
    if (in_prefix == "")
        rt_error ("Missing load");

    // make the output directory
    shell ("mkdir -p " + prefix);

    prefix += boost::str (format ("seed%lu_") % random_seed);

    // redirect std::cerr to logfile
    // (append if recovering)
    if (redirect_log)
        redirect_cerr (prefix + "log", recover);
    else
        dont_redirect_cerr ();

    std::cerr << "hostname " << hostname () << '\n';

    // load data
    stor->load_periods (in_prefix + "periods");
    unsigned snap = 0;
    string in_filename = in_prefix + "coords.dat";
    if (recover_from != -1)
    {
        // check if final snapshot exists already
        if (file_is_readable (format_out (prefix, snap_target)))
        {
            std::cerr << "recover: the final target snapshot already exists.  exiting.\n";
            return 0;
        }

        if (file_is_readable (format_out (prefix, recover_from)))
        {
            snap = recover_from + 1u;
            std::cerr << "recover: attempting to load snapshot " << (snap-1u) << "\n";
            in_filename = format_out (prefix, snap-1u);
        }
        else
        {
            std::cerr << "recover snapshot not found; aborting\n";
            return -1;
        }
    }
    else if (recover)
    {
        // check if final snapshot exists already
        if (file_is_readable (format_out (prefix, snap_target)))
        {
            std::cerr << "recover: the final target snapshot already exists.  exiting.\n";
            return 0;
        }

        // find the first snapshot which is _not_ on disk
        if (file_is_readable (format_out (prefix, 0)))
        {
            // bisection-style algorithm
            // loop invariant is: low is present, high is missing
            unsigned low = 0, high = snap_target;
            while (high - low > 1)
            {
                unsigned mid = (low+high) / 2;
                std::cerr << "recover: checking " << low << " "
                    << mid << " " << high << "\n";
                if (file_is_readable (format_out (prefix, mid)))
                    low = mid;
                else
                    high = mid;
            }

            snap = high;
            std::cerr << "recover: attempting to load snapshot " << (snap-1u) << "\n";
            in_filename = format_out (prefix, snap-1u);
        }
        else
        {
            std::cerr << "recover: no snapshots found, starting clean slate\n";
        }
    }
    stor->add_data (in_filename);
    stor->dump_statistics (std::cerr);

    if (write_gofr)
        gofr = make_correlator ("density", stor, 0.01, 0.);

    if (!recover)
    {
        stor->periods ().savetxt (prefix + "periods");
        stor->save_data (prefix + "init-coords.dat");
    }

    // init chainrunner
    std::cerr << "inter " << inter << '\n';
    cr->seed_random (random_seed);

    if (probe_test)
    {
        cr->probe_test_pattern (stor);
        return 0;
    }

    if (inter == "lj" && !dont_optimize_sr_lr_split)
    {
        cr->optimize_sr_lr_split (stor);
    }

    if (!skip_calib)
    {
        cr->calibrate (stor);
    }

    // warm-up
    cr->collide (stor, 1.);
    cr->dump_statistics (std::cerr);
    unsigned jmany = 1, gofr_samples = 1;
    for (; snap != snap_target; ++snap)
    {
    redo_snap:
        for (unsigned j = 0; !sigterm_caught () && j != jmany; ++j)
        {
            cr->collide (stor, 1.);
            if (gofr) gofr->sample (stor, gofr_samples);
        }

        stor->dump_statistics (std::cerr);
        cr->dump_statistics (std::cerr);
        cr->save_histograms (prefix);
        if (gofr) gofr->savetxt (format_out (prefix, snap, "gofr"));
        stor->save_data (format_out (prefix, snap));

        if (sigterm_caught ())
        {
            std::cerr << "exit caught SIGTERM, exiting\n";
            return 1;
        }

        if (jmany == 1)
        {
            // now for real
            jmany = snap_disp;
            gofr_samples = 1000;
            goto redo_snap;
        }
    }

    std::cerr << "exit number of snapshots reached\n";
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xcf0, %rsp            # imm = 0xCF0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
callq 0x46d730
movq $0x0, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x4f1d30
leaq -0x69(%rbp), %rdi
movq %rdi, -0xa80(%rbp)
callq 0x4771f0
movq -0xa80(%rbp), %rdx
leaq 0x1f57a7(%rip), %rsi    # 0x5fb324
leaq -0x68(%rbp), %rdi
callq 0x407bd0
jmp 0x405b88
leaq -0x69(%rbp), %rdi
callq 0x477210
leaq -0xa0(%rbp), %rdi
callq 0x4f1d30
movb $0x0, -0xa1(%rbp)
movb $0x0, -0xa2(%rbp)
movb $0x0, -0xa3(%rbp)
movb $0x0, -0xa4(%rbp)
movb $0x0, -0xa5(%rbp)
movsd 0x1f5440(%rip), %xmm0   # 0x5fb008
movsd %xmm0, -0xb0(%rbp)
movq $0x2a, -0xb8(%rbp)
movq $0x186a0, -0xc0(%rbp) # imm = 0x186A0
movq $-0x1, -0xc8(%rbp)
movb $0x0, -0xc9(%rbp)
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x406697
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa90(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0xa88(%rbp)
callq 0x4771f0
movq -0xa90(%rbp), %rsi
movq -0xa88(%rbp), %rdx
leaq -0xf0(%rbp), %rdi
callq 0x407bd0
jmp 0x405c4f
leaq -0xf1(%rbp), %rdi
callq 0x477210
leaq 0x1f57c0(%rip), %rsi    # 0x5fb422
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xa91(%rbp)
jmp 0x405c76
movb -0xa91(%rbp), %al
testb $0x1, %al
jne 0x405c85
jmp 0x405d24
movq -0x10(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0x46da70
jmp 0x405c97
leaq -0xa0(%rbp), %rdi
movq %rdi, -0xaa0(%rbp)
leaq -0x118(%rbp), %rsi
movq %rsi, -0xaa8(%rbp)
callq 0x4f1e90
movq -0xaa8(%rbp), %rdi
callq 0x4f1e40
movq -0xaa0(%rbp), %rdi
movl $0x2f, %esi
callq 0x4f2450
jmp 0x405cd7
jmp 0x406669
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x69(%rbp), %rdi
callq 0x477210
jmp 0x407a6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xf1(%rbp), %rdi
callq 0x477210
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406686
leaq 0x1f55fe(%rip), %rsi    # 0x5fb329
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xaa9(%rbp)
jmp 0x405d3f
movb -0xaa9(%rbp), %al
testb $0x1, %al
jne 0x405d4e
jmp 0x405e32
leaq 0x1f55de(%rip), %rsi    # 0x5fb333
leaq -0x218(%rbp), %rdi
callq 0x407ce0
jmp 0x405d63
movq -0x10(%rbp), %rsi
leaq -0x238(%rbp), %rdi
callq 0x46da70
jmp 0x405d75
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x407e60
movq %rax, -0xab8(%rbp)
jmp 0x405d91
movq -0xab8(%rbp), %rsi
leaq -0x138(%rbp), %rdi
callq 0x407cb0
jmp 0x405da6
leaq -0x68(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x4f3560
jmp 0x405db8
leaq -0x138(%rbp), %rdi
callq 0x4f1e40
leaq -0x238(%rbp), %rdi
callq 0x4f1e40
leaq -0x218(%rbp), %rdi
callq 0x407e90
jmp 0x406667
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x405e21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x405e15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x4f1e40
leaq -0x238(%rbp), %rdi
callq 0x4f1e40
leaq -0x218(%rbp), %rdi
callq 0x407e90
jmp 0x406686
leaq 0x1f54fe(%rip), %rsi    # 0x5fb337
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xab9(%rbp)
jmp 0x405e4d
movb -0xab9(%rbp), %al
testb $0x1, %al
jne 0x405e59
jmp 0x405e8c
movq -0x10(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0x46da70
jmp 0x405e6b
leaq -0x68(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x4f1e90
leaq -0x258(%rbp), %rdi
callq 0x4f1e40
jmp 0x406665
leaq 0x1f54ae(%rip), %rsi    # 0x5fb341
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xaba(%rbp)
jmp 0x405ea7
movb -0xaba(%rbp), %al
testb $0x1, %al
jne 0x405eb3
jmp 0x405ecb
movb $0x1, -0xa4(%rbp)
movq -0x10(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x406663
leaq 0x200746(%rip), %rsi    # 0x606618
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xabb(%rbp)
jmp 0x405ee6
movb -0xabb(%rbp), %al
testb $0x1, %al
jne 0x405ef2
jmp 0x405f17
movq -0x10(%rbp), %rdi
callq 0x46dd30
movq %rax, -0xac8(%rbp)
jmp 0x405f04
movq -0xac8(%rbp), %rax
movq %rax, -0xb8(%rbp)
jmp 0x406661
leaq 0x1f5427(%rip), %rsi    # 0x5fb345
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xac9(%rbp)
jmp 0x405f32
movb -0xac9(%rbp), %al
testb $0x1, %al
jne 0x405f3e
jmp 0x405f63
movq -0x10(%rbp), %rdi
callq 0x46dd30
movq %rax, -0xad8(%rbp)
jmp 0x405f50
movq -0xad8(%rbp), %rax
movq %rax, -0xc0(%rbp)
jmp 0x40665f
leaq 0x1f53e0(%rip), %rsi    # 0x5fb34a
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xad9(%rbp)
jmp 0x405f7e
movb -0xad9(%rbp), %al
testb $0x1, %al
jne 0x405f8a
jmp 0x405fb2
movq -0x10(%rbp), %rdi
callq 0x46df20
movsd %xmm0, -0xae8(%rbp)
jmp 0x405f9d
movsd -0xae8(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
jmp 0x40665d
leaq 0x1f539b(%rip), %rsi    # 0x5fb354
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xae9(%rbp)
jmp 0x405fcd
movb -0xae9(%rbp), %al
testb $0x1, %al
jne 0x405fd9
jmp 0x405ff1
movb $0x1, -0xa3(%rbp)
movq -0x10(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x40665b
leaq 0x1f5364(%rip), %rsi    # 0x5fb35c
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xaea(%rbp)
jmp 0x40600c
movb -0xaea(%rbp), %al
testb $0x1, %al
jne 0x406018
jmp 0x406044
movq -0x10(%rbp), %rdi
callq 0x46dd30
movq %rax, -0xaf8(%rbp)
jmp 0x40602a
movq -0xaf8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movb $0x1, -0xa3(%rbp)
jmp 0x406659
leaq 0x1f531e(%rip), %rsi    # 0x5fb369
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xaf9(%rbp)
jmp 0x40605f
movb -0xaf9(%rbp), %al
testb $0x1, %al
jne 0x40606b
jmp 0x406083
movb $0x1, -0xa2(%rbp)
movq -0x10(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x406657
leaq 0x1f52ea(%rip), %rsi    # 0x5fb374
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xafa(%rbp)
jmp 0x40609e
movb -0xafa(%rbp), %al
testb $0x1, %al
jne 0x4060aa
jmp 0x4060c2
movb $0x1, -0xa1(%rbp)
movq -0x10(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x406655
cmpq $0x0, -0x18(%rbp)
jne 0x4062ac
leaq 0x1f52d4(%rip), %rsi    # 0x5fb3a8
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xafb(%rbp)
jmp 0x4060e8
movb -0xafb(%rbp), %al
testb $0x1, %al
jne 0x4060f4
jmp 0x406154
movq -0x10(%rbp), %rsi
leaq -0x278(%rbp), %rdi
callq 0x46da70
jmp 0x406106
leaq -0x278(%rbp), %rdi
callq 0x45f830
movq %rax, -0xb08(%rbp)
jmp 0x40611b
movq -0xb08(%rbp), %rax
movq %rax, -0x18(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x4f1e40
jmp 0x4061c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x4f1e40
jmp 0x406686
leaq -0x299(%rbp), %rdi
movq %rdi, -0xb10(%rbp)
callq 0x4771f0
movq -0xb10(%rbp), %rdx
leaq 0x1f520a(%rip), %rsi    # 0x5fb37f
leaq -0x298(%rbp), %rdi
callq 0x407bd0
jmp 0x406183
leaq -0x298(%rbp), %rdi
callq 0x46d330
jmp 0x406191
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4061b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x4f1e40
leaq -0x299(%rbp), %rdi
callq 0x477210
jmp 0x406686
leaq 0x1f5164(%rip), %rsi    # 0x5fb333
leaq -0x3a0(%rbp), %rdi
callq 0x407ce0
jmp 0x4061dd
movq -0x10(%rbp), %rsi
leaq -0x3c0(%rbp), %rdi
callq 0x46da70
jmp 0x4061ef
leaq -0x3a0(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0x407e60
movq %rax, -0xb18(%rbp)
jmp 0x40620b
movq -0xb18(%rbp), %rsi
leaq -0x2c0(%rbp), %rdi
callq 0x407cb0
jmp 0x406220
leaq -0x68(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x4f3560
jmp 0x406232
leaq -0x2c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x3c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x3a0(%rbp), %rdi
callq 0x407e90
jmp 0x406653
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40629b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40628f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x3c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x3a0(%rbp), %rdi
callq 0x407e90
jmp 0x406686
leaq 0x1f50fa(%rip), %rsi    # 0x5fb3ad
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xb19(%rbp)
jmp 0x4062c7
movb -0xb19(%rbp), %al
testb $0x1, %al
jne 0x4062d3
jmp 0x4062eb
movb $0x1, -0xa5(%rbp)
movq -0x10(%rbp), %rax
addq $-0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x406651
cmpq $0x0, -0x20(%rbp)
jne 0x406450
leaq 0x1f50dd(%rip), %rsi    # 0x5fb3da
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xb1a(%rbp)
jmp 0x406311
movb -0xb1a(%rbp), %al
testb $0x1, %al
jne 0x406320
jmp 0x4063d7
movq -0x10(%rbp), %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x46da70
jmp 0x406332
leaq -0x48(%rbp), %rdi
movq %rdi, -0xb30(%rbp)
leaq -0x3e0(%rbp), %rsi
movq %rsi, -0xb38(%rbp)
callq 0x4f1e90
movq -0xb38(%rbp), %rdi
callq 0x4f1e40
movq -0xb30(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x45f890
movq %rax, -0xb28(%rbp)
jmp 0x406375
movq -0xb28(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x400(%rbp), %rdi
leaq -0x48(%rbp), %rsi
movl $0x2f, %edx
callq 0x407ef0
jmp 0x406397
leaq -0x68(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x4f3560
jmp 0x4063a9
leaq -0x400(%rbp), %rdi
callq 0x4f1e40
jmp 0x40644b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x4f1e40
jmp 0x406686
leaq -0x421(%rbp), %rdi
movq %rdi, -0xb40(%rbp)
callq 0x4771f0
movq -0xb40(%rbp), %rdx
leaq 0x1f4fba(%rip), %rsi    # 0x5fb3b2
leaq -0x420(%rbp), %rdi
callq 0x407bd0
jmp 0x406406
leaq -0x420(%rbp), %rdi
callq 0x46d330
jmp 0x406414
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40643a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x420(%rbp), %rdi
callq 0x4f1e40
leaq -0x421(%rbp), %rdi
callq 0x477210
jmp 0x406686
jmp 0x40664f
leaq 0x1f4f89(%rip), %rsi    # 0x5fb3e0
leaq -0xf0(%rbp), %rdi
callq 0x407c80
movb %al, -0xb41(%rbp)
jmp 0x40646b
movb -0xb41(%rbp), %al
testb $0x1, %al
jne 0x406477
jmp 0x4064c4
movq -0x10(%rbp), %rdi
callq 0x46df20
movsd %xmm0, -0xb50(%rbp)
jmp 0x40648a
movsd -0xb50(%rbp), %xmm0
movsd %xmm0, -0x430(%rbp)
movq -0x20(%rbp), %rdi
movsd -0x430(%rbp), %xmm0
movq (%rdi), %rax
movq 0x18(%rax), %rax
leaq -0xf0(%rbp), %rsi
callq *%rax
jmp 0x4064b8
movb $0x1, -0xc9(%rbp)
jmp 0x40664d
movq -0x10(%rbp), %rdi
callq 0x46df20
movsd %xmm0, -0xb58(%rbp)
jmp 0x4064d7
movsd -0xb58(%rbp), %xmm0
movsd %xmm0, -0x438(%rbp)
leaq 0x1f4efe(%rip), %rsi    # 0x5fb3ec
leaq -0x538(%rbp), %rdi
callq 0x407ce0
jmp 0x4064fc
leaq -0x538(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x407f70
movq %rax, -0xb60(%rbp)
jmp 0x406518
movq -0xb60(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x407fa0
movq %rax, -0xb68(%rbp)
jmp 0x406534
movq -0xb68(%rbp), %rsi
leaq -0x458(%rbp), %rdi
callq 0x407cb0
jmp 0x406549
leaq -0x68(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0x4f3560
jmp 0x40655b
leaq -0x458(%rbp), %rdi
callq 0x4f1e40
leaq -0x538(%rbp), %rdi
callq 0x407e90
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f4e71(%rip), %rsi    # 0x5fb3f2
callq 0x4e1b60
movq %rax, -0xb70(%rbp)
jmp 0x40658f
movq -0xb70(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x4f4680
movq %rax, -0xb78(%rbp)
jmp 0x4065ab
movq -0xb78(%rbp), %rdi
leaq 0x1fd2f4(%rip), %rsi    # 0x6038ad
callq 0x4e1b60
movq %rax, -0xb80(%rbp)
jmp 0x4065c7
movq -0xb80(%rbp), %rdi
movsd -0x438(%rbp), %xmm0
callq 0x4e2ad0
movq %rax, -0xb88(%rbp)
jmp 0x4065e4
movq -0xb88(%rbp), %rdi
leaq 0x207e18(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x4065f9
movq -0x20(%rbp), %rdi
movsd -0x438(%rbp), %xmm0
movq (%rdi), %rax
movq 0x18(%rax), %rax
leaq -0xf0(%rbp), %rsi
callq *%rax
jmp 0x406617
jmp 0x40664d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40663f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x4f1e40
leaq -0x538(%rbp), %rdi
callq 0x407e90
jmp 0x406686
jmp 0x40664f
jmp 0x406651
jmp 0x406653
jmp 0x406655
jmp 0x406657
jmp 0x406659
jmp 0x40665b
jmp 0x40665d
jmp 0x40665f
jmp 0x406661
jmp 0x406663
jmp 0x406665
jmp 0x406667
jmp 0x406669
leaq -0xf0(%rbp), %rdi
callq 0x4f1e40
movq -0x10(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x10(%rbp)
jmp 0x405c04
leaq -0xf0(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a57
cmpq $0x0, -0x18(%rbp)
jne 0x406712
leaq -0x559(%rbp), %rdi
movq %rdi, -0xb90(%rbp)
callq 0x4771f0
movq -0xb90(%rbp), %rdx
leaq 0x1f4d40(%rip), %rsi    # 0x5fb3ff
leaq -0x558(%rbp), %rdi
callq 0x407bd0
jmp 0x4066cd
leaq -0x558(%rbp), %rdi
callq 0x46d330
jmp 0x4066db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406701
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x4f1e40
leaq -0x559(%rbp), %rdi
callq 0x477210
jmp 0x407a57
cmpq $0x0, -0x20(%rbp)
jne 0x40678d
leaq -0x581(%rbp), %rdi
movq %rdi, -0xb98(%rbp)
callq 0x4771f0
movq -0xb98(%rbp), %rdx
leaq 0x1f4cd2(%rip), %rsi    # 0x5fb40c
leaq -0x580(%rbp), %rdi
callq 0x407bd0
jmp 0x406748
leaq -0x580(%rbp), %rdi
callq 0x46d330
jmp 0x406756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40677c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x4f1e40
leaq -0x581(%rbp), %rdi
callq 0x477210
jmp 0x407a57
leaq 0x21f0de(%rip), %rsi    # 0x625872
leaq -0xa0(%rbp), %rdi
callq 0x407c80
movb %al, -0xb99(%rbp)
jmp 0x4067a8
movb -0xb99(%rbp), %al
testb $0x1, %al
jne 0x4067b7
jmp 0x40683c
leaq -0x5a9(%rbp), %rdi
movq %rdi, -0xba8(%rbp)
callq 0x4771f0
movq -0xba8(%rbp), %rdx
leaq 0x1f4c42(%rip), %rsi    # 0x5fb41a
leaq -0x5a8(%rbp), %rdi
callq 0x407bd0
jmp 0x4067e6
leaq -0x5a8(%rbp), %rdi
callq 0x46d330
jmp 0x4067f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40682b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x5a8(%rbp), %rdi
callq 0x4f1e40
leaq -0x5a9(%rbp), %rdi
callq 0x477210
jmp 0x407a57
leaq 0x1f4be4(%rip), %rsi    # 0x5fb427
leaq -0x5d0(%rbp), %rdi
leaq -0x68(%rbp), %rdx
callq 0x407fd0
jmp 0x406855
leaq -0x5d0(%rbp), %rdi
callq 0x46d2c0
jmp 0x406863
leaq -0x5d0(%rbp), %rdi
callq 0x4f1e40
leaq 0x1f4bbb(%rip), %rsi    # 0x5fb431
leaq -0x6d0(%rbp), %rdi
callq 0x407ce0
jmp 0x406884
leaq -0x6d0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x4080e0
movq %rax, -0xbb0(%rbp)
jmp 0x4068a0
movq -0xbb0(%rbp), %rsi
leaq -0x5f0(%rbp), %rdi
callq 0x407cb0
jmp 0x4068b5
leaq -0x68(%rbp), %rdi
leaq -0x5f0(%rbp), %rsi
callq 0x4f3560
jmp 0x4068c7
leaq -0x5f0(%rbp), %rdi
callq 0x4f1e40
leaq -0x6d0(%rbp), %rdi
callq 0x407e90
testb $0x1, -0xa4(%rbp)
je 0x40699c
leaq 0x1f4a4e(%rip), %rdx    # 0x5fb341
leaq -0x6f0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x408110
jmp 0x406905
movzbl -0xa3(%rbp), %esi
andl $0x1, %esi
leaq -0x6f0(%rbp), %rdi
callq 0x46d7b0
jmp 0x40691d
leaq -0x6f0(%rbp), %rdi
callq 0x4f1e40
jmp 0x4069a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x5d0(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40696e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x4f1e40
leaq -0x6d0(%rbp), %rdi
callq 0x407e90
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x6f0(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a57
callq 0x46d950
jmp 0x4069a3
jmp 0x4069a5
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f4a87(%rip), %rsi    # 0x5fb43a
callq 0x4e1b60
movq %rax, -0xbb8(%rbp)
jmp 0x4069c1
leaq -0x710(%rbp), %rdi
callq 0x46d5b0
jmp 0x4069cf
movq -0xbb8(%rbp), %rdi
leaq -0x710(%rbp), %rsi
callq 0x4f4680
movq %rax, -0xbc0(%rbp)
jmp 0x4069eb
movq -0xbc0(%rbp), %rdi
movl $0xa, %esi
callq 0x4e1a90
jmp 0x4069fe
leaq -0x710(%rbp), %rdi
callq 0x4f1e40
movq -0x18(%rbp), %rax
movq %rax, -0xbc8(%rbp)
leaq 0x1f4a28(%rip), %rdx    # 0x5fb444
leaq -0x730(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x408110
jmp 0x406a31
movq -0xbc8(%rbp), %rdi
leaq -0x730(%rbp), %rsi
callq 0x45f790
jmp 0x406a46
leaq -0x730(%rbp), %rdi
callq 0x4f1e40
movl $0x0, -0x734(%rbp)
leaq 0x1f4acd(%rip), %rdx    # 0x5fb530
leaq -0x758(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x408110
jmp 0x406a78
cmpq $-0x1, -0xc8(%rbp)
je 0x406e3b
movl -0xc0(%rbp), %eax
movl %eax, -0xbd4(%rbp)
leaq -0x799(%rbp), %rdi
movq %rdi, -0xbd0(%rbp)
callq 0x4771f0
movq -0xbd0(%rbp), %rdx
leaq 0x1f4999(%rip), %rsi    # 0x5fb44c
leaq -0x798(%rbp), %rdi
callq 0x407bd0
jmp 0x406ac1
movl -0xbd4(%rbp), %edx
leaq -0x778(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x798(%rbp), %rcx
callq 0x407a80
jmp 0x406ae0
leaq -0x778(%rbp), %rdi
callq 0x46d390
movb %al, -0xbd5(%rbp)
jmp 0x406af4
leaq -0x778(%rbp), %rdi
callq 0x4f1e40
leaq -0x798(%rbp), %rdi
callq 0x4f1e40
leaq -0x799(%rbp), %rdi
callq 0x477210
movb -0xbd5(%rbp), %al
testb $0x1, %al
jne 0x406b27
jmp 0x406bee
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f491e(%rip), %rsi    # 0x5fb453
callq 0x4e1b60
jmp 0x406b3c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x7a0(%rbp)
jmp 0x407a15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x710(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x730(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406bcc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406bc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x778(%rbp), %rdi
callq 0x4f1e40
leaq -0x798(%rbp), %rdi
callq 0x4f1e40
leaq -0x799(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407a4b
movl -0xc8(%rbp), %eax
movl %eax, -0xbe4(%rbp)
leaq -0x7e1(%rbp), %rdi
movq %rdi, -0xbe0(%rbp)
callq 0x4771f0
movq -0xbe0(%rbp), %rdx
leaq 0x1f4831(%rip), %rsi    # 0x5fb44c
leaq -0x7e0(%rbp), %rdi
callq 0x407bd0
jmp 0x406c29
movl -0xbe4(%rbp), %edx
leaq -0x7c0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x7e0(%rbp), %rcx
callq 0x407a80
jmp 0x406c48
leaq -0x7c0(%rbp), %rdi
callq 0x46d390
movb %al, -0xbe5(%rbp)
jmp 0x406c5c
leaq -0x7c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x7e0(%rbp), %rdi
callq 0x4f1e40
leaq -0x7e1(%rbp), %rdi
callq 0x477210
movb -0xbe5(%rbp), %al
testb $0x1, %al
jne 0x406c8f
jmp 0x406e0b
movl -0xc8(%rbp), %eax
incl %eax
movl %eax, -0x734(%rbp)
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f47e6(%rip), %rsi    # 0x5fb491
callq 0x4e1b60
movq %rax, -0xbf0(%rbp)
jmp 0x406cb9
movq -0xbf0(%rbp), %rdi
movl -0x734(%rbp), %esi
decl %esi
callq 0x4e2190
movq %rax, -0xbf8(%rbp)
jmp 0x406cd6
movq -0xbf8(%rbp), %rdi
leaq 0x207726(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x406ceb
movl -0x734(%rbp), %eax
decl %eax
movl %eax, -0xc04(%rbp)
leaq -0x829(%rbp), %rdi
movq %rdi, -0xc00(%rbp)
callq 0x4771f0
movq -0xc00(%rbp), %rdx
leaq 0x1f4732(%rip), %rsi    # 0x5fb44c
leaq -0x828(%rbp), %rdi
callq 0x407bd0
jmp 0x406d28
movl -0xc04(%rbp), %edx
leaq -0x808(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x828(%rbp), %rcx
callq 0x407a80
jmp 0x406d47
leaq -0x758(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x4f1e90
leaq -0x808(%rbp), %rdi
callq 0x4f1e40
leaq -0x828(%rbp), %rdi
callq 0x4f1e40
leaq -0x829(%rbp), %rdi
callq 0x477210
jmp 0x406e36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406dc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406db7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x7c0(%rbp), %rdi
callq 0x4f1e40
leaq -0x7e0(%rbp), %rdi
callq 0x4f1e40
leaq -0x7e1(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406dfa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x828(%rbp), %rdi
callq 0x4f1e40
leaq -0x829(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f469e(%rip), %rsi    # 0x5fb4b7
callq 0x4e1b60
jmp 0x406e20
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x7a0(%rbp)
jmp 0x407a15
jmp 0x407395
testb $0x1, -0xa3(%rbp)
je 0x407393
movl -0xc0(%rbp), %eax
movl %eax, -0xc14(%rbp)
leaq -0x871(%rbp), %rdi
movq %rdi, -0xc10(%rbp)
callq 0x4771f0
movq -0xc10(%rbp), %rdx
leaq 0x1f45d7(%rip), %rsi    # 0x5fb44c
leaq -0x870(%rbp), %rdi
callq 0x407bd0
jmp 0x406e83
movl -0xc14(%rbp), %edx
leaq -0x850(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x870(%rbp), %rcx
callq 0x407a80
jmp 0x406ea2
leaq -0x850(%rbp), %rdi
callq 0x46d390
movb %al, -0xc15(%rbp)
jmp 0x406eb6
leaq -0x850(%rbp), %rdi
callq 0x4f1e40
leaq -0x870(%rbp), %rdi
callq 0x4f1e40
leaq -0x871(%rbp), %rdi
callq 0x477210
movb -0xc15(%rbp), %al
testb $0x1, %al
jne 0x406ee6
jmp 0x406f62
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f455f(%rip), %rsi    # 0x5fb453
callq 0x4e1b60
jmp 0x406efb
movl $0x0, -0x4(%rbp)
movl $0x1, -0x7a0(%rbp)
jmp 0x407a15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406f51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x406f45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x850(%rbp), %rdi
callq 0x4f1e40
leaq -0x870(%rbp), %rdi
callq 0x4f1e40
leaq -0x871(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
leaq -0x8b9(%rbp), %rdi
movq %rdi, -0xc20(%rbp)
callq 0x4771f0
movq -0xc20(%rbp), %rdx
leaq 0x1f44c9(%rip), %rsi    # 0x5fb44c
leaq -0x8b8(%rbp), %rdi
callq 0x407bd0
jmp 0x406f91
leaq -0x898(%rbp), %rdi
leaq -0x68(%rbp), %rsi
xorl %edx, %edx
leaq -0x8b8(%rbp), %rcx
callq 0x407a80
jmp 0x406fac
leaq -0x898(%rbp), %rdi
callq 0x46d390
movb %al, -0xc21(%rbp)
jmp 0x406fc0
leaq -0x898(%rbp), %rdi
callq 0x4f1e40
leaq -0x8b8(%rbp), %rdi
callq 0x4f1e40
leaq -0x8b9(%rbp), %rdi
callq 0x477210
movb -0xc21(%rbp), %al
testb $0x1, %al
jne 0x406ff3
jmp 0x40737a
movl $0x0, -0x8c0(%rbp)
movq -0xc0(%rbp), %rax
movl %eax, -0x8c4(%rbp)
movl -0x8c4(%rbp), %eax
subl -0x8c0(%rbp), %eax
cmpl $0x1, %eax
jbe 0x407254
movl -0x8c0(%rbp), %eax
movl -0x8c4(%rbp), %ecx
addl %ecx, %eax
shrl %eax
movl %eax, -0x8c8(%rbp)
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f449a(%rip), %rsi    # 0x5fb4dd
callq 0x4e1b60
movq %rax, -0xc30(%rbp)
jmp 0x407051
movq -0xc30(%rbp), %rdi
movl -0x8c0(%rbp), %esi
callq 0x4e2190
movq %rax, -0xc38(%rbp)
jmp 0x40706c
movq -0xc38(%rbp), %rdi
leaq 0x1fc833(%rip), %rsi    # 0x6038ad
callq 0x4e1b60
movq %rax, -0xc40(%rbp)
jmp 0x407088
movq -0xc40(%rbp), %rdi
movl -0x8c8(%rbp), %esi
callq 0x4e2190
movq %rax, -0xc48(%rbp)
jmp 0x4070a3
movq -0xc48(%rbp), %rdi
leaq 0x1fc7fc(%rip), %rsi    # 0x6038ad
callq 0x4e1b60
movq %rax, -0xc50(%rbp)
jmp 0x4070bf
movq -0xc50(%rbp), %rdi
movl -0x8c4(%rbp), %esi
callq 0x4e2190
movq %rax, -0xc58(%rbp)
jmp 0x4070da
movq -0xc58(%rbp), %rdi
leaq 0x207322(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x4070ef
movl -0x8c8(%rbp), %eax
movl %eax, -0xc64(%rbp)
leaq -0x909(%rbp), %rdi
movq %rdi, -0xc60(%rbp)
callq 0x4771f0
movq -0xc60(%rbp), %rdx
leaq 0x1f4330(%rip), %rsi    # 0x5fb44c
leaq -0x908(%rbp), %rdi
callq 0x407bd0
jmp 0x40712a
movl -0xc64(%rbp), %edx
leaq -0x8e8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x908(%rbp), %rcx
callq 0x407a80
jmp 0x407149
leaq -0x8e8(%rbp), %rdi
callq 0x46d390
movb %al, -0xc65(%rbp)
jmp 0x40715d
leaq -0x8e8(%rbp), %rdi
callq 0x4f1e40
leaq -0x908(%rbp), %rdi
callq 0x4f1e40
leaq -0x909(%rbp), %rdi
callq 0x477210
movb -0xc65(%rbp), %al
testb $0x1, %al
jne 0x407190
jmp 0x407243
movl -0x8c8(%rbp), %eax
movl %eax, -0x8c0(%rbp)
jmp 0x40724f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4071e1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4071d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x898(%rbp), %rdi
callq 0x4f1e40
leaq -0x8b8(%rbp), %rdi
callq 0x4f1e40
leaq -0x8b9(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407232
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407226
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x8e8(%rbp), %rdi
callq 0x4f1e40
leaq -0x908(%rbp), %rdi
callq 0x4f1e40
leaq -0x909(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movl -0x8c8(%rbp), %eax
movl %eax, -0x8c4(%rbp)
jmp 0x40700a
movl -0x8c4(%rbp), %eax
movl %eax, -0x734(%rbp)
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f4223(%rip), %rsi    # 0x5fb491
callq 0x4e1b60
movq %rax, -0xc70(%rbp)
jmp 0x40727c
movq -0xc70(%rbp), %rdi
movl -0x734(%rbp), %esi
decl %esi
callq 0x4e2190
movq %rax, -0xc78(%rbp)
jmp 0x407299
movq -0xc78(%rbp), %rdi
leaq 0x207163(%rip), %rsi    # 0x60e40a
callq 0x4e1b60
jmp 0x4072ae
movl -0x734(%rbp), %eax
decl %eax
movl %eax, -0xc84(%rbp)
leaq -0x951(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x4771f0
movq -0xc80(%rbp), %rdx
leaq 0x1f416f(%rip), %rsi    # 0x5fb44c
leaq -0x950(%rbp), %rdi
callq 0x407bd0
jmp 0x4072eb
movl -0xc84(%rbp), %edx
leaq -0x930(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x950(%rbp), %rcx
callq 0x407a80
jmp 0x40730a
leaq -0x758(%rbp), %rdi
leaq -0x930(%rbp), %rsi
callq 0x4f1e90
leaq -0x930(%rbp), %rdi
callq 0x4f1e40
leaq -0x950(%rbp), %rdi
callq 0x4f1e40
leaq -0x951(%rbp), %rdi
callq 0x477210
jmp 0x407391
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x950(%rbp), %rdi
callq 0x4f1e40
leaq -0x951(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f4168(%rip), %rsi    # 0x5fb4f0
callq 0x4e1b60
jmp 0x40738f
jmp 0x407391
jmp 0x407393
jmp 0x407395
movq -0x18(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0x45f7d0
jmp 0x4073a7
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
movq $0x698ac0, %rsi         # imm = 0x698AC0
callq *%rax
jmp 0x4073bd
testb $0x1, -0xa5(%rbp)
je 0x407479
leaq -0x979(%rbp), %rdi
movq %rdi, -0xc90(%rbp)
callq 0x4771f0
movq -0xc90(%rbp), %rdx
leaq 0x1f4138(%rip), %rsi    # 0x5fb523
leaq -0x978(%rbp), %rdi
callq 0x407bd0
jmp 0x4073f9
movq -0x18(%rbp), %rsi
leaq -0x978(%rbp), %rdi
movsd 0x1f3c04(%rip), %xmm0   # 0x5fb010
xorps %xmm1, %xmm1
callq 0x468720
movq %rax, -0xc98(%rbp)
jmp 0x40741d
movq -0xc98(%rbp), %rax
movq %rax, -0x28(%rbp)
leaq -0x978(%rbp), %rdi
callq 0x4f1e40
leaq -0x979(%rbp), %rdi
callq 0x477210
jmp 0x407479
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407468
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x978(%rbp), %rdi
callq 0x4f1e40
leaq -0x979(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
testb $0x1, -0xa3(%rbp)
jne 0x407557
movq -0x18(%rbp), %rsi
movq (%rsi), %rax
movq 0x28(%rax), %rax
leaq -0x998(%rbp), %rdi
callq *%rax
jmp 0x40749c
leaq 0x1f3fa1(%rip), %rdx    # 0x5fb444
leaq -0x9b8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x408110
jmp 0x4074b5
leaq -0x998(%rbp), %rdi
leaq -0x9b8(%rbp), %rsi
callq 0x463dd0
jmp 0x4074ca
leaq -0x9b8(%rbp), %rdi
callq 0x4f1e40
movq -0x18(%rbp), %rax
movq %rax, -0xca0(%rbp)
leaq 0x1f4043(%rip), %rdx    # 0x5fb52b
leaq -0x9d8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x408110
jmp 0x4074fa
movq -0xca0(%rbp), %rdi
leaq -0x9d8(%rbp), %rsi
callq 0x45f800
jmp 0x40750f
leaq -0x9d8(%rbp), %rdi
callq 0x4f1e40
jmp 0x407557
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x9b8(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x9d8(%rbp), %rdi
callq 0x4f1e40
jmp 0x407a4b
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f3fd6(%rip), %rsi    # 0x5fb53b
callq 0x4e1b60
movq %rax, -0xca8(%rbp)
jmp 0x407573
movq -0xca8(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4f4680
movq %rax, -0xcb0(%rbp)
jmp 0x40758c
movq -0xcb0(%rbp), %rdi
movl $0xa, %esi
callq 0x4e1a90
jmp 0x40759f
movq -0x20(%rbp), %rdi
movl -0xb8(%rbp), %esi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
jmp 0x4075b4
testb $0x1, -0xa1(%rbp)
je 0x4075e8
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq (%rdi), %rax
movq 0x50(%rax), %rax
xorl %edx, %edx
callq *%rax
jmp 0x4075d2
movl $0x0, -0x4(%rbp)
movl $0x1, -0x7a0(%rbp)
jmp 0x407a15
leaq 0x1f3f53(%rip), %rsi    # 0x5fb542
leaq -0x48(%rbp), %rdi
callq 0x407c80
movb %al, -0xcb1(%rbp)
jmp 0x407600
movb -0xcb1(%rbp), %al
testb $0x1, %al
jne 0x40760c
jmp 0x40762a
testb $0x1, -0xc9(%rbp)
jne 0x40762a
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq (%rdi), %rax
movq 0x38(%rax), %rax
callq *%rax
jmp 0x407628
jmp 0x40762a
testb $0x1, -0xa2(%rbp)
jne 0x407648
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq (%rdi), %rax
movq 0x40(%rax), %rax
callq *%rax
jmp 0x407646
jmp 0x407648
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq (%rdi), %rax
movq 0x48(%rax), %rax
movsd 0x1f39b9(%rip), %xmm0   # 0x5fb018
callq *%rax
jmp 0x407663
movq -0x20(%rbp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
movq $0x698ac0, %rsi         # imm = 0x698AC0
callq *%rax
jmp 0x407679
movl $0x1, -0x9dc(%rbp)
movl $0x1, -0x9e0(%rbp)
movl -0x734(%rbp), %eax
cmpq -0xc0(%rbp), %rax
je 0x4079ef
jmp 0x4076a2
movl $0x0, -0x9e4(%rbp)
callq 0x46d270
movb %al, -0xcb2(%rbp)
jmp 0x4076b9
movb -0xcb2(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xcb3(%rbp)
jne 0x4076e3
jmp 0x4076ce
movl -0x9e4(%rbp), %eax
cmpl -0x9dc(%rbp), %eax
setne %al
movb %al, -0xcb3(%rbp)
movb -0xcb3(%rbp), %al
testb $0x1, %al
jne 0x4076ef
jmp 0x407744
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq (%rdi), %rax
movq 0x48(%rax), %rax
movsd 0x1f3912(%rip), %xmm0   # 0x5fb018
callq *%rax
jmp 0x40770a
cmpq $0x0, -0x28(%rbp)
je 0x40772e
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x9e0(%rbp), %eax
movl %eax, %edx
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
jmp 0x40772c
jmp 0x40772e
jmp 0x407730
movl -0x9e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9e4(%rbp)
jmp 0x4076ac
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rax
movq $0x698ac0, %rsi         # imm = 0x698AC0
callq *%rax
jmp 0x40775a
movq -0x20(%rbp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
movq $0x698ac0, %rsi         # imm = 0x698AC0
callq *%rax
jmp 0x407770
movq -0x20(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x68(%rbp), %rsi
callq *%rax
jmp 0x407783
cmpq $0x0, -0x28(%rbp)
je 0x40787f
movq -0x28(%rbp), %rax
movq %rax, -0xcd0(%rbp)
movl -0x734(%rbp), %eax
movl %eax, -0xcc4(%rbp)
leaq -0xa29(%rbp), %rdi
movq %rdi, -0xcc0(%rbp)
callq 0x4771f0
movq -0xcc0(%rbp), %rdx
leaq 0x1f3be7(%rip), %rsi    # 0x5fb3ad
leaq -0xa28(%rbp), %rdi
callq 0x407bd0
jmp 0x4077d4
movl -0xcc4(%rbp), %edx
leaq -0xa08(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xa28(%rbp), %rcx
callq 0x407a80
jmp 0x4077f3
movq -0xcd0(%rbp), %rdi
leaq -0xa08(%rbp), %rsi
callq 0x468520
jmp 0x407808
leaq -0xa08(%rbp), %rdi
callq 0x4f1e40
leaq -0xa28(%rbp), %rdi
callq 0x4f1e40
leaq -0xa29(%rbp), %rdi
callq 0x477210
jmp 0x40787f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40786e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407862
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xa08(%rbp), %rdi
callq 0x4f1e40
leaq -0xa28(%rbp), %rdi
callq 0x4f1e40
leaq -0xa29(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
movq -0x18(%rbp), %rax
movq %rax, -0xce8(%rbp)
movl -0x734(%rbp), %eax
movl %eax, -0xcdc(%rbp)
leaq -0xa71(%rbp), %rdi
movq %rdi, -0xcd8(%rbp)
callq 0x4771f0
movq -0xcd8(%rbp), %rdx
leaq 0x1f3b95(%rip), %rsi    # 0x5fb44c
leaq -0xa70(%rbp), %rdi
callq 0x407bd0
jmp 0x4078c5
movl -0xcdc(%rbp), %edx
leaq -0xa50(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0xa70(%rbp), %rcx
callq 0x407a80
jmp 0x4078e4
movq -0xce8(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
callq 0x45f800
jmp 0x4078f9
leaq -0xa50(%rbp), %rdi
callq 0x4f1e40
leaq -0xa70(%rbp), %rdi
callq 0x4f1e40
leaq -0xa71(%rbp), %rdi
callq 0x477210
callq 0x46d270
movb %al, -0xce9(%rbp)
jmp 0x40792a
movb -0xce9(%rbp), %al
testb $0x1, %al
jne 0x407936
jmp 0x4079b2
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f3c01(%rip), %rsi    # 0x5fb545
callq 0x4e1b60
jmp 0x40794b
movl $0x1, -0x4(%rbp)
movl $0x1, -0x7a0(%rbp)
jmp 0x407a15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4079a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x407995
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x4f1e40
leaq -0xa70(%rbp), %rdi
callq 0x4f1e40
leaq -0xa71(%rbp), %rdi
callq 0x477210
jmp 0x407a4b
cmpl $0x1, -0x9dc(%rbp)
jne 0x4079d9
cvttsd2si -0xb0(%rbp), %rax
movl %eax, -0x9dc(%rbp)
movl $0x3e8, -0x9e0(%rbp)    # imm = 0x3E8
jmp 0x4076a2
jmp 0x4079db
movl -0x734(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x734(%rbp)
jmp 0x40768d
movq $0x698ac0, %rdi         # imm = 0x698AC0
leaq 0x1f3b66(%rip), %rsi    # 0x5fb563
callq 0x4e1b60
jmp 0x407a04
movl $0x0, -0x4(%rbp)
movl $0x1, -0x7a0(%rbp)
leaq -0x758(%rbp), %rdi
callq 0x4f1e40
leaq -0xa0(%rbp), %rdi
callq 0x4f1e40
leaq -0x68(%rbp), %rdi
callq 0x4f1e40
leaq -0x48(%rbp), %rdi
callq 0x4f1e40
movl -0x4(%rbp), %eax
addq $0xcf0, %rsp            # imm = 0xCF0
popq %rbp
retq
leaq -0x758(%rbp), %rdi
callq 0x4f1e40
leaq -0xa0(%rbp), %rdi
callq 0x4f1e40
leaq -0x68(%rbp), %rdi
callq 0x4f1e40
leaq -0x48(%rbp), %rdi
callq 0x4f1e40
movq -0x78(%rbp), %rdi
callq 0x5283c0
nop