// File: bonetblai[P]mdp-engine/puzzle/main.cc
// Function: main
int main(int argc, const char **argv) {
    unsigned rows = 0;
    unsigned cols = 0;
    float p = 1.0;
    unsigned num_trials = 1;

    vector<string> requests;

    float start_time = Utils::read_time_in_seconds();
    cout << fixed;

    // parse arguments
    for( ++argv, --argc; (argc > 1) && (**argv == '-'); ++argv, --argc ) {
        if( string(*argv) == "--no-colors" ) {
            Utils::g_use_colors = false;
        } else if( ((*argv)[1] == 'r') || (string(*argv) == "--request") ) {
            requests.push_back(argv[1]);
            ++argv;
            --argc;
        } else if( ((*argv)[1] == 's') || (string(*argv) == "--seed") ) {
            Algorithm::g_seed = strtoul(argv[1], 0, 0);
            Online::g_seed = Algorithm::g_seed;
            ++argv;
            --argc;
        } else if( ((*argv)[1] == 't') || (string(*argv) == "--trials") ) {
            num_trials = strtoul(argv[1], 0, 0);
            ++argv;
            --argc;
        } else {
            usage(cout);
            exit(-1);
        }
    }

    // read problem parameters
    if( argc >= 3 ) {
        rows = strtoul(argv[0], 0, 0);
        cols = strtoul(argv[1], 0, 0);
        p = strtod(argv[2], 0);
    } else {
        usage(cout);
        exit(-1);
    }

    // build problem instances
    cout << "main: seed=" << Algorithm::g_seed << endl;
    Random::set_seed(Algorithm::g_seed);
    state_t init;
    init.set_goal(rows, cols);
    init.random_moves(rows, cols, 500);
    problem_t problem(rows, cols, init, p);

    // build requests
    vector<pair<string, Online::Policy::policy_t<state_t>*> > policies;
    vector<pair<string, Algorithm::algorithm_t<state_t>*> > algorithms;
    Dispatcher::dispatcher_t<state_t> dispatcher;
    dispatcher.insert_heuristic("manhattan()", new manhattan_t(problem));
    for( int i = 0; i < int(requests.size()); ++i ) {
        const string &request_str = requests[i];
        std::multimap<std::string, std::string> request;
        Utils::tokenize(request_str, request);
        for( std::multimap<std::string, std::string>::const_iterator it = request.begin(); it != request.end(); ++it ) {
            dispatcher.create_request(problem, it->first, it->second);
            if( it->first == "algorithm" ) {
                Algorithm::algorithm_t<state_t> *algorithm = dispatcher.fetch_algorithm(it->second);
                if( algorithm != 0 ) algorithms.push_back(make_pair(it->second, algorithm));
            } else if( it->first == "policy" ) {
                Online::Policy::policy_t<state_t> *policy = dispatcher.fetch_policy(it->second);
                if( policy != 0 ) policies.push_back(make_pair(it->second, policy));
            }
        }
    }

    // solve problems with requested algorithms
    vector<Dispatcher::dispatcher_t<state_t>::solve_result_t> solve_results;
    for( int i = 0; i < int(algorithms.size()); ++i ) {
        const string &request = algorithms[i].first;
        const Algorithm::algorithm_t<state_t> &algorithm = *algorithms[i].second;
        Dispatcher::dispatcher_t<state_t>::solve_result_t result;
        dispatcher.solve(request, algorithm, problem.init(), result);
        solve_results.push_back(result);
    }

    cout << Utils::warning() << "the following stats may aggregate figures when elements are shared among algorithms" << endl;
    if( !solve_results.empty() ) {
        for( int i = 0; i < int(solve_results.size()); ++i ) {
            dispatcher.print_stats(cout, solve_results[i]);
        }
    }

    // evaluate requested policies
    vector<Dispatcher::dispatcher_t<state_t>::evaluate_result_t> evaluate_results;
    for( int i = 0; i < int(policies.size()); ++i ) {
        const string &request = policies[i].first;
        const Online::Policy::policy_t<state_t> &policy = *policies[i].second;
        Dispatcher::dispatcher_t<state_t>::evaluate_result_t result;
        dispatcher.evaluate(request, policy, problem.init(), result, num_trials, 100, true);
        evaluate_results.push_back(result);
    }

    cout << Utils::warning() << "the following stats may aggregate figures when elements are shared among policies" << endl;
    if( !evaluate_results.empty() ) {
        for( int i = 0; i < int(evaluate_results.size()); ++i ) {
            dispatcher.print_stats(cout, evaluate_results[i]);
        }
    }

    cout << "main: total-time=" << Utils::read_time_in_seconds() - start_time << endl;
    return 0;
}

// Assembly:
subq $0x5d8, %rsp            # imm = 0x5D8
movl $0x0, 0x5d4(%rsp)
movl %edi, 0x5d0(%rsp)
movq %rsi, 0x5c8(%rsp)
movl $0x0, 0x5c4(%rsp)
movl $0x0, 0x5c0(%rsp)
movl $0x3f800000, 0x5bc(%rsp) # imm = 0x3F800000
movl $0x1, 0x5b8(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0x7b40
callq 0x7b50
movss %xmm0, 0x180(%rsp)
jmp 0x66fa
movss 0x180(%rsp), %xmm0
movss %xmm0, 0x59c(%rsp)
movq 0x6b8bd(%rip), %rdi     # 0x71fd0
leaq 0x14b6(%rip), %rsi      # 0x7bd0
callq 0x60e0
jmp 0x6721
movq 0x5c8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x5c8(%rsp)
movl 0x5d0(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x5d0(%rsp)
xorl %eax, %eax
cmpl $0x1, 0x5d0(%rsp)
movb %al, 0x17f(%rsp)
jle 0x6774
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
sete %al
movb %al, 0x17f(%rsp)
movb 0x17f(%rsp), %al
testb $0x1, %al
jne 0x6784
jmp 0x6e83
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x168(%rsp)
leaq 0x567(%rsp), %rdi
movq %rdi, 0x170(%rsp)
callq 0x6490
movq 0x168(%rsp), %rsi
movq 0x170(%rsp), %rdx
leaq 0x568(%rsp), %rdi
callq 0x63c0
jmp 0x67cb
leaq 0x4a92a(%rip), %rsi     # 0x510fc
leaq 0x568(%rsp), %rdi
callq 0x7bf0
movb %al, 0x167(%rsp)
jmp 0x67e8
leaq 0x568(%rsp), %rdi
callq 0x6190
leaq 0x567(%rsp), %rdi
callq 0x6310
movb 0x167(%rsp), %al
testb $0x1, %al
jne 0x680f
jmp 0x687d
movb $0x0, 0x6ba7a(%rip)     # 0x72290
jmp 0x6e57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x7b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x686b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x568(%rsp), %rdi
callq 0x6190
leaq 0x567(%rsp), %rdi
callq 0x6310
jmp 0x7b1f
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x53e(%rsp)
movb $0x0, 0x53d(%rsp)
movb $0x1, %al
cmpl $0x72, %ecx
movb %al, 0x166(%rsp)
je 0x6932
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x150(%rsp)
leaq 0x53f(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0x6490
movq 0x150(%rsp), %rsi
movq 0x158(%rsp), %rdx
movb $0x1, 0x53e(%rsp)
leaq 0x540(%rsp), %rdi
callq 0x63c0
jmp 0x68fd
movb $0x1, 0x53d(%rsp)
leaq 0x4a7fc(%rip), %rsi     # 0x51108
leaq 0x540(%rsp), %rdi
callq 0x7bf0
movb %al, 0x14f(%rsp)
jmp 0x6922
movb 0x14f(%rsp), %al
movb %al, 0x166(%rsp)
jmp 0x6932
movb 0x166(%rsp), %al
movb %al, 0x14e(%rsp)
testb $0x1, 0x53d(%rsp)
jne 0x694c
jmp 0x6959
leaq 0x540(%rsp), %rdi
callq 0x6190
testb $0x1, 0x53e(%rsp)
jne 0x6965
jmp 0x6972
leaq 0x53f(%rsp), %rdi
callq 0x6310
movb 0x14e(%rsp), %al
testb $0x1, %al
jne 0x6982
jmp 0x6ad1
movq 0x5c8(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x138(%rsp)
leaq 0x517(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0x6490
movq 0x138(%rsp), %rsi
movq 0x140(%rsp), %rdx
leaq 0x518(%rsp), %rdi
callq 0x63c0
jmp 0x69ca
leaq 0x5a0(%rsp), %rdi
leaq 0x518(%rsp), %rsi
callq 0x7c20
jmp 0x69e1
leaq 0x518(%rsp), %rdi
callq 0x6190
leaq 0x517(%rsp), %rdi
callq 0x6310
movq 0x5c8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x5c8(%rsp)
movl 0x5d0(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x5d0(%rsp)
jmp 0x6e55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x6a6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
testb $0x1, 0x53d(%rsp)
jne 0x6a5b
jmp 0x6a68
leaq 0x540(%rsp), %rdi
callq 0x6190
jmp 0x6a6a
testb $0x1, 0x53e(%rsp)
jne 0x6a76
jmp 0x6a83
leaq 0x53f(%rsp), %rdi
callq 0x6310
jmp 0x7b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x6abf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x518(%rsp), %rdi
callq 0x6190
leaq 0x517(%rsp), %rdi
callq 0x6310
jmp 0x7b1f
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x4ee(%rsp)
movb $0x0, 0x4ed(%rsp)
movb $0x1, %al
cmpl $0x73, %ecx
movb %al, 0x137(%rsp)
je 0x6b86
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x120(%rsp)
leaq 0x4ef(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x6490
movq 0x120(%rsp), %rsi
movq 0x128(%rsp), %rdx
movb $0x1, 0x4ee(%rsp)
leaq 0x4f0(%rsp), %rdi
callq 0x63c0
jmp 0x6b51
movb $0x1, 0x4ed(%rsp)
leaq 0x4a5b2(%rip), %rsi     # 0x51112
leaq 0x4f0(%rsp), %rdi
callq 0x7bf0
movb %al, 0x11f(%rsp)
jmp 0x6b76
movb 0x11f(%rsp), %al
movb %al, 0x137(%rsp)
jmp 0x6b86
movb 0x137(%rsp), %al
movb %al, 0x11e(%rsp)
testb $0x1, 0x4ed(%rsp)
jne 0x6ba0
jmp 0x6bad
leaq 0x4f0(%rsp), %rdi
callq 0x6190
testb $0x1, 0x4ee(%rsp)
jne 0x6bb9
jmp 0x6bc6
leaq 0x4ef(%rsp), %rdi
callq 0x6310
movb 0x11e(%rsp), %al
testb $0x1, %al
jne 0x6bd6
jmp 0x6c8c
movq 0x5c8(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x6b6b5(%rip)     # 0x722a8
movl 0x6b6af(%rip), %eax     # 0x722a8
movl %eax, 0x6b6ad(%rip)     # 0x722ac
movq 0x5c8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x5c8(%rsp)
movl 0x5d0(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x5d0(%rsp)
jmp 0x6e53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x6c6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
testb $0x1, 0x4ed(%rsp)
jne 0x6c5f
jmp 0x6c6c
leaq 0x4f0(%rsp), %rdi
callq 0x6190
jmp 0x6c6e
testb $0x1, 0x4ee(%rsp)
jne 0x6c7a
jmp 0x6c87
leaq 0x4ef(%rsp), %rdi
callq 0x6310
jmp 0x7b1f
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x4c6(%rsp)
movb $0x0, 0x4c5(%rsp)
movb $0x1, %al
cmpl $0x74, %ecx
movb %al, 0x11d(%rsp)
je 0x6d41
movq 0x5c8(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x108(%rsp)
leaq 0x4c7(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x6490
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %rdx
movb $0x1, 0x4c6(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x63c0
jmp 0x6d0c
movb $0x1, 0x4c5(%rsp)
leaq 0x4a3fe(%rip), %rsi     # 0x51119
leaq 0x4c8(%rsp), %rdi
callq 0x7bf0
movb %al, 0x107(%rsp)
jmp 0x6d31
movb 0x107(%rsp), %al
movb %al, 0x11d(%rsp)
jmp 0x6d41
movb 0x11d(%rsp), %al
movb %al, 0x106(%rsp)
testb $0x1, 0x4c5(%rsp)
jne 0x6d5b
jmp 0x6d68
leaq 0x4c8(%rsp), %rdi
callq 0x6190
testb $0x1, 0x4c6(%rsp)
jne 0x6d74
jmp 0x6d81
leaq 0x4c7(%rsp), %rdi
callq 0x6310
movb 0x106(%rsp), %al
testb $0x1, %al
jne 0x6d91
jmp 0x6e39
movq 0x5c8(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x5b8(%rsp)
movq 0x5c8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x5c8(%rsp)
movl 0x5d0(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x5d0(%rsp)
jmp 0x6e51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x6e1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
testb $0x1, 0x4c5(%rsp)
jne 0x6e0c
jmp 0x6e19
leaq 0x4c8(%rsp), %rdi
callq 0x6190
jmp 0x6e1b
testb $0x1, 0x4c6(%rsp)
jne 0x6e27
jmp 0x6e34
leaq 0x4c7(%rsp), %rdi
callq 0x6310
jmp 0x7b1f
movq 0x6b190(%rip), %rdi     # 0x71fd0
callq 0x6660
jmp 0x6e47
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x6360
jmp 0x6e53
jmp 0x6e55
jmp 0x6e57
jmp 0x6e59
movq 0x5c8(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x5c8(%rsp)
movl 0x5d0(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x5d0(%rsp)
jmp 0x6746
cmpl $0x3, 0x5d0(%rsp)
jl 0x6eec
movq 0x5c8(%rsp), %rax
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x5c4(%rsp)
movq 0x5c8(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x5c0(%rsp)
movq 0x5c8(%rsp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6210
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x5bc(%rsp)
jmp 0x6f04
movq 0x6b0dd(%rip), %rdi     # 0x71fd0
callq 0x6660
jmp 0x6efa
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x6360
movq 0x6b0c5(%rip), %rdi     # 0x71fd0
leaq 0x4a210(%rip), %rsi     # 0x51122
callq 0x62b0
movq %rax, 0xf8(%rsp)
jmp 0x6f21
movq 0xf8(%rsp), %rdi
movl 0x6b379(%rip), %esi     # 0x722a8
callq 0x63a0
movq %rax, 0xf0(%rsp)
jmp 0x6f3e
movq 0xf0(%rsp), %rdi
movq 0x6b06b(%rip), %rsi     # 0x71fb8
callq 0x62f0
jmp 0x6f54
movl 0x6b34e(%rip), %edi     # 0x722a8
callq 0x7c50
jmp 0x6f61
leaq 0x4b8(%rsp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
movl %ecx, %edx
callq 0x7c90
jmp 0x6f76
movl 0x5c4(%rsp), %esi
movl 0x5c0(%rsp), %edx
leaq 0x4b8(%rsp), %rdi
callq 0x7cc0
jmp 0x6f93
movl 0x5c4(%rsp), %esi
movl 0x5c0(%rsp), %edx
leaq 0x4b8(%rsp), %rdi
movl $0x1f4, %ecx            # imm = 0x1F4
callq 0x7d50
jmp 0x6fb5
movl 0x5c4(%rsp), %esi
movl 0x5c0(%rsp), %edx
movss 0x5bc(%rsp), %xmm0
leaq 0x478(%rsp), %rdi
leaq 0x4b8(%rsp), %rcx
callq 0x7e10
jmp 0x6fe3
leaq 0x460(%rsp), %rdi
callq 0x7f20
leaq 0x448(%rsp), %rdi
callq 0x7f30
leaq 0x3b0(%rsp), %rdi
callq 0x7f40
jmp 0x700c
leaq 0x38f(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x6490
movq 0xe8(%rsp), %rdx
leaq 0x4a0fe(%rip), %rsi     # 0x5112e
leaq 0x390(%rsp), %rdi
callq 0x63c0
jmp 0x703f
movl $0x20, %edi
callq 0x62c0
movq %rax, 0xe0(%rsp)
jmp 0x7053
movq 0xe0(%rsp), %rdi
leaq 0x478(%rsp), %rsi
callq 0x8040
jmp 0x706a
movq 0xe0(%rsp), %rdx
leaq 0x3b0(%rsp), %rdi
leaq 0x390(%rsp), %rsi
callq 0x7f90
jmp 0x7089
leaq 0x390(%rsp), %rdi
callq 0x6190
leaq 0x38f(%rsp), %rdi
callq 0x6310
movl $0x0, 0x388(%rsp)
movl 0x388(%rsp), %eax
movl %eax, 0xdc(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0x8080
movq %rax, %rcx
movl 0xdc(%rsp), %eax
cmpl %ecx, %eax
jge 0x74dc
movslq 0x388(%rsp), %rsi
leaq 0x5a0(%rsp), %rdi
callq 0x80a0
movq %rax, 0x380(%rsp)
leaq 0x350(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x80c0
movq 0xd0(%rsp), %rsi
movq 0x380(%rsp), %rdi
movl $0x2c, %edx
callq 0x80d0
jmp 0x7129
leaq 0x350(%rsp), %rdi
callq 0x8460
movq %rax, 0x340(%rsp)
leaq 0x348(%rsp), %rdi
leaq 0x340(%rsp), %rsi
callq 0x8490
leaq 0x350(%rsp), %rdi
callq 0x84d0
movq %rax, 0x330(%rsp)
leaq 0x338(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x8490
leaq 0x348(%rsp), %rdi
leaq 0x338(%rsp), %rsi
callq 0x84b0
testb $0x1, %al
jne 0x719b
jmp 0x74a7
leaq 0x348(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x98f0
movq 0xc0(%rsp), %rdi
movq %rax, 0xc8(%rsp)
callq 0x98f0
movq 0xc8(%rsp), %rdx
movq %rax, %rcx
addq $0x20, %rcx
leaq 0x3b0(%rsp), %rdi
leaq 0x478(%rsp), %rsi
callq 0x8500
jmp 0x71eb
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rdi
leaq 0x49f38(%rip), %rsi     # 0x5113a
callq 0x7bf0
movb %al, 0xbf(%rsp)
jmp 0x7210
movb 0xbf(%rsp), %al
testb $0x1, %al
jne 0x7220
jmp 0x73a0
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x3b0(%rsp), %rdi
callq 0x9910
movq %rax, 0xb0(%rsp)
jmp 0x724b
movq 0xb0(%rsp), %rax
movq %rax, 0x328(%rsp)
cmpq $0x0, 0x328(%rsp)
je 0x739b
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x300(%rsp), %rdi
leaq 0x328(%rsp), %rdx
callq 0x99e0
jmp 0x7295
leaq 0x448(%rsp), %rdi
leaq 0x300(%rsp), %rsi
callq 0x99b0
jmp 0x72ac
leaq 0x300(%rsp), %rdi
callq 0x9a20
jmp 0x739b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x7b12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x7aeb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x734a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x733d
movq 0xe0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
callq 0x6290
leaq 0x390(%rsp), %rdi
callq 0x6190
leaq 0x38f(%rsp), %rdi
callq 0x6310
jmp 0x7ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x74ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x300(%rsp), %rdi
callq 0x9a20
jmp 0x74ca
jmp 0x7493
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rdi
leaq 0x49d8d(%rip), %rsi     # 0x51144
callq 0x7bf0
movb %al, 0xaf(%rsp)
jmp 0x73c5
movb 0xaf(%rsp), %al
testb $0x1, %al
jne 0x73d5
jmp 0x7491
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x3b0(%rsp), %rdi
callq 0x9a30
movq %rax, 0xa0(%rsp)
jmp 0x7400
movq 0xa0(%rsp), %rax
movq %rax, 0x2f8(%rsp)
cmpq $0x0, 0x2f8(%rsp)
je 0x748f
leaq 0x348(%rsp), %rdi
callq 0x98f0
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x2d0(%rsp), %rdi
leaq 0x2f8(%rsp), %rdx
callq 0x9b00
jmp 0x7446
leaq 0x460(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
callq 0x9ad0
jmp 0x745d
leaq 0x2d0(%rsp), %rdi
callq 0x9b40
jmp 0x748f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x2d0(%rsp), %rdi
callq 0x9b40
jmp 0x74ca
jmp 0x7491
jmp 0x7493
jmp 0x7495
leaq 0x348(%rsp), %rdi
callq 0x9b50
jmp 0x7153
leaq 0x350(%rsp), %rdi
callq 0x9b80
movl 0x388(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x388(%rsp)
jmp 0x70ae
leaq 0x350(%rsp), %rdi
callq 0x9b80
jmp 0x7ade
leaq 0x2b8(%rsp), %rdi
callq 0x9b90
movl $0x0, 0x2b4(%rsp)
movl 0x2b4(%rsp), %eax
movl %eax, 0x9c(%rsp)
leaq 0x448(%rsp), %rdi
callq 0x9ba0
movq %rax, %rcx
movl 0x9c(%rsp), %eax
cmpl %ecx, %eax
jge 0x764f
movslq 0x2b4(%rsp), %rsi
leaq 0x448(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x9bc0
movq 0x90(%rsp), %rdi
movq %rax, 0x2a8(%rsp)
movslq 0x2b4(%rsp), %rsi
callq 0x9bc0
movq 0x20(%rax), %rax
movq %rax, 0x2a0(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x9be0
jmp 0x7576
movq 0x2a8(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x2a0(%rsp), %rax
movq %rax, 0x80(%rsp)
leaq 0x478(%rsp), %rdi
callq 0x9d90
movq %rax, 0x88(%rsp)
jmp 0x75aa
movq 0x88(%rsp), %rcx
movq 0x80(%rsp), %rdx
movq 0x78(%rsp), %rsi
leaq 0x3b0(%rsp), %rdi
leaq 0x248(%rsp), %r8
callq 0x9c20
jmp 0x75d6
leaq 0x2b8(%rsp), %rdi
leaq 0x248(%rsp), %rsi
callq 0x9da0
jmp 0x75ed
leaq 0x248(%rsp), %rdi
callq 0x9e10
movl 0x2b4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2b4(%rsp)
jmp 0x74f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x7ad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x9e10
jmp 0x7ad1
leaq 0x228(%rsp), %rdi
callq 0x9e40
jmp 0x765e
movq 0x6a96b(%rip), %rdi     # 0x71fd0
leaq 0x228(%rsp), %rsi
callq 0x6270
movq %rax, 0x70(%rsp)
jmp 0x7679
movq 0x70(%rsp), %rdi
leaq 0x49ac6(%rip), %rsi     # 0x5114b
callq 0x62b0
movq %rax, 0x68(%rsp)
jmp 0x7691
movq 0x68(%rsp), %rdi
movq 0x6a91b(%rip), %rsi     # 0x71fb8
callq 0x62f0
jmp 0x76a4
leaq 0x228(%rsp), %rdi
callq 0x6190
leaq 0x2b8(%rsp), %rdi
callq 0x9ee0
testb $0x1, %al
jne 0x775f
movl $0x0, 0x224(%rsp)
movl 0x224(%rsp), %eax
movl %eax, 0x64(%rsp)
leaq 0x2b8(%rsp), %rdi
callq 0x9f30
movq %rax, %rcx
movl 0x64(%rsp), %eax
cmpl %ecx, %eax
jge 0x775d
movslq 0x224(%rsp), %rsi
leaq 0x2b8(%rsp), %rdi
callq 0xac00
movq %rax, %rdx
movq 0x6a8bd(%rip), %rsi     # 0x71fd0
leaq 0x3b0(%rsp), %rdi
callq 0x9f50
jmp 0x7722
jmp 0x7724
movl 0x224(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x224(%rsp)
jmp 0x76d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x228(%rsp), %rdi
callq 0x6190
jmp 0x7ad1
jmp 0x775f
leaq 0x208(%rsp), %rdi
callq 0xac20
movl $0x0, 0x204(%rsp)
movl 0x204(%rsp), %eax
movl %eax, 0x60(%rsp)
leaq 0x460(%rsp), %rdi
callq 0xac30
movq %rax, %rcx
movl 0x60(%rsp), %eax
cmpl %ecx, %eax
jge 0x78b7
movslq 0x204(%rsp), %rsi
leaq 0x460(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0xac50
movq 0x40(%rsp), %rdi
movq %rax, 0x1f8(%rsp)
movslq 0x204(%rsp), %rsi
callq 0xac50
movq 0x20(%rax), %rax
movq %rax, 0x1f0(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0xac70
movq 0x1f8(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x1f0(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0x478(%rsp), %rdi
callq 0x9d90
movq %rax, 0x58(%rsp)
jmp 0x7819
movq 0x58(%rsp), %rcx
movq 0x50(%rsp), %rdx
movq 0x48(%rsp), %rsi
movl 0x5b8(%rsp), %r9d
movq %rsp, %rax
movl $0x1, 0x8(%rax)
movl $0x64, (%rax)
leaq 0x3b0(%rsp), %rdi
leaq 0x1a8(%rsp), %r8
callq 0xac80
jmp 0x7857
leaq 0x208(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0xade0
jmp 0x786e
leaq 0x1a8(%rsp), %rdi
callq 0xae50
movl 0x204(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x204(%rsp)
jmp 0x7777
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0xae50
jmp 0x7ac4
leaq 0x188(%rsp), %rdi
callq 0x9e40
jmp 0x78c6
movq 0x6a703(%rip), %rdi     # 0x71fd0
leaq 0x188(%rsp), %rsi
callq 0x6270
movq %rax, 0x38(%rsp)
jmp 0x78e1
movq 0x38(%rsp), %rdi
leaq 0x498b2(%rip), %rsi     # 0x5119f
callq 0x62b0
movq %rax, 0x30(%rsp)
jmp 0x78f9
movq 0x30(%rsp), %rdi
movq 0x6a6b3(%rip), %rsi     # 0x71fb8
callq 0x62f0
jmp 0x790c
leaq 0x188(%rsp), %rdi
callq 0x6190
leaq 0x208(%rsp), %rdi
callq 0xae60
testb $0x1, %al
jne 0x79e4
movl $0x0, 0x184(%rsp)
movl 0x184(%rsp), %eax
movl %eax, 0x2c(%rsp)
leaq 0x208(%rsp), %rdi
callq 0xaeb0
movq %rax, %rcx
movl 0x2c(%rsp), %eax
cmpl %ecx, %eax
jge 0x79e2
movslq 0x184(%rsp), %rsi
leaq 0x208(%rsp), %rdi
callq 0xb380
movq %rax, %rdx
movq 0x6a651(%rip), %rsi     # 0x71fd0
leaq 0x3b0(%rsp), %rdi
callq 0xaed0
jmp 0x798e
jmp 0x7990
movl 0x184(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x184(%rsp)
jmp 0x7939
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0x7ac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x188(%rsp), %rdi
callq 0x6190
jmp 0x7ac4
jmp 0x79e4
movq 0x6a5e5(%rip), %rdi     # 0x71fd0
leaq 0x497ff(%rip), %rsi     # 0x511f1
callq 0x62b0
movq %rax, 0x20(%rsp)
jmp 0x79fe
callq 0x7b50
movss %xmm0, 0x1c(%rsp)
jmp 0x7a0b
movq 0x20(%rsp), %rdi
movss 0x1c(%rsp), %xmm0
movss 0x59c(%rsp), %xmm1
subss %xmm1, %xmm0
callq 0x61f0
movq %rax, 0x10(%rsp)
jmp 0x7a2f
movq 0x10(%rsp), %rdi
movq 0x6a57d(%rip), %rsi     # 0x71fb8
callq 0x62f0
jmp 0x7a42
movl $0x0, 0x5d4(%rsp)
leaq 0x208(%rsp), %rdi
callq 0xb3a0
leaq 0x2b8(%rsp), %rdi
callq 0xb400
leaq 0x3b0(%rsp), %rdi
callq 0xb460
leaq 0x448(%rsp), %rdi
callq 0xb660
leaq 0x460(%rsp), %rdi
callq 0xb6c0
leaq 0x478(%rsp), %rdi
callq 0xb720
leaq 0x4b8(%rsp), %rdi
callq 0xb760
leaq 0x5a0(%rsp), %rdi
callq 0xb770
movl 0x5d4(%rsp), %eax
addq $0x5d8, %rsp            # imm = 0x5D8
retq
leaq 0x208(%rsp), %rdi
callq 0xb3a0
leaq 0x2b8(%rsp), %rdi
callq 0xb400
leaq 0x3b0(%rsp), %rdi
callq 0xb460
leaq 0x448(%rsp), %rdi
callq 0xb660
leaq 0x460(%rsp), %rdi
callq 0xb6c0
leaq 0x478(%rsp), %rdi
callq 0xb720
leaq 0x4b8(%rsp), %rdi
callq 0xb760
leaq 0x5a0(%rsp), %rdi
callq 0xb770
movq 0x590(%rsp), %rdi
callq 0x6480
nopl (%rax)