// File: yahoo[P]UDPing/src/client.cc
// Function: main
int main( int argc, char **argv ) {
    if (getuid()) {
        cerr << "udping_client must run as root" << endl;
        exit (-1);
    }
    struct timespec iter_start;
    double wall_elapsed = 0;
    setOptions(new Options(argc, argv, "l:r:p:d:i:s:n:m:a:vhq"));
    
    /* Parse command line options */
    stringstream usage;
    usage << "Usage:  udping_client -r <remote hostname> -p <remote port> -d <delay> -l <local IP> -s <starting port>|<source port descriptor> [-n <number of ports>] -i <measurement interval seconds> -m <max packet size> -a <next-hop MAC,...> [-v] [-q]" << endl <<
    "  Source port descriptor should be a set of ranges separated by commas.\n  Each range can either be a port, or a range of ports separated by a dash.\n  For example:" << endl <<
    "    5000 -> port 5000" << endl <<
    "    5000-5009 -> ports 5000,5001,...,5009" << endl <<
    "    5000,5005,5010 -> ports 5000,5005,5010" << endl <<
    "    5000-5001,5005-5006 -> ports 5000,5001,5005,5006" << endl <<
    "  If a single port is specified AND a number of ports is specified, then source traffic\n  from the count specified starting with the starting port" << endl;
    if (getOptions()->getFlagOption('h')) {
        cerr << usage.str() << endl;
        exit (0);
    }
    string dstHost = getOptions()->getStringOption ('r', 1, usage.str(), "No remote hostname provided\n");
    int dstPort = getOptions()->parseIntOption('p', 1, 1024, 65536, usage.str(), "Port number is out of range 1024-65532\n");
    string srcIp = getOptions()->getStringOption ('l', 1, usage.str(), "No local IP provided\n");
    string srcPorts = getOptions()->getStringOption('s', 1, usage.str(), "Please define a valid source port");
    int numPorts = getOptions()->parseIntOption('n', 0, 1, MAX_SOCKETS, usage.str(), "Number of ports is out of range 1-MAX_SOCKETS\n");
    if ((atoi(srcPorts.c_str()) > 0) && (numPorts > 0) && (string::npos == srcPorts.find_first_not_of("1234567890"))) {
        int startingPort = atoi(srcPorts.c_str());
        if ((startingPort > MAX_PORT) || (startingPort < MIN_PORT)) {
            cerr << usage.str() << "Starting port is out of range MIN_PORT-MAX_PORT\n";
            exit (-1);
        }
        int endingPort = startingPort + numPorts - 1;
        stringstream buffer;
        buffer << to_string((long long)startingPort) << "-" << to_string((long long)endingPort);
        srcPorts = buffer.str();
    }
    int delay = getOptions()->parseIntOption('d', 1, 0, 1000, usage.str(), "Delay is out of range 0-1000 ms\n");
    int interval = getOptions()->parseIntOption('i', 1, 1, 900, usage.str(), "Measurement interval is out of range 0-900 s\n");
    int maxPacketSize = getOptions()->parseIntOption('m', 1, 1, MAXBUF, usage.str(), "Max packet size is out of range 1-MAXBUF\n");
    string dstMac = getOptions()->getStringOption ('a', 1, usage.str(), "You must specify one or more next-hop MAC addresses\n");

    MacList dstml(dstMac);
    if (dstml.getNumMacs() == 0) {
        cerr << "Invalid next-hop MAC address string" << endl << usage.str();
        exit (-1);
    }

    srand (time(0) + getpid());

    ClientSessionList sessions( srcIp, srcPorts, dstHost, dstPort, dstMac, interval, maxPacketSize );

    if (!getuid()) {
        // I'm running as root.  Switch to nobody or die!!!
        struct passwd* pwd = getpwnam("nobody");
        if (pwd && pwd->pw_uid) {
            if (setgid(pwd->pw_gid)) {
                cerr << "Couldn't change userid to nobody (setgid failed).  Terminating client" << endl;
                exit(-1);
            }
            if (setuid(pwd->pw_uid)) {
                cerr << "Couldn't change userid to nobody (setuid failed).  Terminating client" << endl;
                exit(-1);
            }
        } else {
            cerr << "Couldn't change userid to nobody.  Terminating client" << endl;
            exit(-1);
        }
    }

    int ix;
    while (1) {
        startTimer(&iter_start);
        ClientSession* session = sessions.getNextSession();
        if (session->rollover()) {
            session->reset();
        }
        (void) session->sendPingPacket();
        session->increment();
        doRandomPause(&iter_start, delay);
    };
    return(0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa80, %rsp            # imm = 0xA80
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
callq 0x2180
cmpl $0x0, %eax
je 0x273f
movq 0x78d6(%rip), %rdi      # 0x9ff0
leaq 0x48e3(%rip), %rsi      # 0x7004
callq 0x22f0
movq %rax, %rdi
movq 0x7888(%rip), %rsi      # 0x9fb8
callq 0x2310
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
movq $0x0, -0x28(%rbp)
movl $0x800, %edi            # imm = 0x800
callq 0x2300
movq %rax, -0x880(%rbp)
movb $0x1, -0x5d(%rbp)
movl -0x8(%rbp), %eax
movl %eax, -0x874(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x870(%rbp)
leaq -0x49(%rbp), %rdi
movq %rdi, -0x868(%rbp)
callq 0x2430
movq -0x868(%rbp), %rdx
leaq 0x4895(%rip), %rsi      # 0x7023
leaq -0x48(%rbp), %rdi
callq 0x2380
jmp 0x2799
movq -0x870(%rbp), %rdx
movl -0x874(%rbp), %esi
movq -0x880(%rbp), %rdi
leaq -0x48(%rbp), %rcx
callq 0x3e70
jmp 0x27b8
movq -0x880(%rbp), %rdi
movb $0x0, -0x5d(%rbp)
callq 0x4160
jmp 0x27ca
leaq -0x48(%rbp), %rdi
callq 0x21c0
leaq -0x49(%rbp), %rdi
callq 0x2320
leaq -0x1e8(%rbp), %rdi
callq 0x21e0
leaq -0x1d8(%rbp), %rdi
leaq 0x4843(%rip), %rsi      # 0x7039
callq 0x22f0
movq %rax, -0x888(%rbp)
jmp 0x2804
movq -0x888(%rbp), %rdi
movq 0x77a6(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x890(%rbp)
jmp 0x2820
movq -0x890(%rbp), %rdi
leaq 0x48fa(%rip), %rsi      # 0x7128
callq 0x22f0
movq %rax, -0x898(%rbp)
jmp 0x283c
movq -0x898(%rbp), %rdi
movq 0x776e(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x8a0(%rbp)
jmp 0x2858
movq -0x8a0(%rbp), %rdi
leaq 0x4965(%rip), %rsi      # 0x71cb
callq 0x22f0
movq %rax, -0x8a8(%rbp)
jmp 0x2874
movq -0x8a8(%rbp), %rdi
movq 0x7736(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x8b0(%rbp)
jmp 0x2890
movq -0x8b0(%rbp), %rdi
leaq 0x4943(%rip), %rsi      # 0x71e1
callq 0x22f0
movq %rax, -0x8b8(%rbp)
jmp 0x28ac
movq -0x8b8(%rbp), %rdi
movq 0x76fe(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x8c0(%rbp)
jmp 0x28c8
movq -0x8c0(%rbp), %rdi
leaq 0x4935(%rip), %rsi      # 0x720b
callq 0x22f0
movq %rax, -0x8c8(%rbp)
jmp 0x28e4
movq -0x8c8(%rbp), %rdi
movq 0x76c6(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x8d0(%rbp)
jmp 0x2900
movq -0x8d0(%rbp), %rdi
leaq 0x4928(%rip), %rsi      # 0x7236
callq 0x22f0
movq %rax, -0x8d8(%rbp)
jmp 0x291c
movq -0x8d8(%rbp), %rdi
movq 0x768e(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0x8e0(%rbp)
jmp 0x2938
movq -0x8e0(%rbp), %rdi
leaq 0x4925(%rip), %rsi      # 0x726b
callq 0x22f0
movq %rax, -0x8e8(%rbp)
jmp 0x2954
movq -0x8e8(%rbp), %rdi
movq 0x7656(%rip), %rsi      # 0x9fb8
callq 0x2310
jmp 0x2969
callq 0x4180
movq %rax, -0x8f0(%rbp)
jmp 0x2977
movq -0x8f0(%rbp), %rdi
movl $0x68, %esi
callq 0x40c0
movl %eax, -0x8f4(%rbp)
jmp 0x2990
movl -0x8f4(%rbp), %eax
cmpl $0x0, %eax
je 0x2a6b
leaq -0x208(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x29b4
movq 0x7635(%rip), %rdi      # 0x9ff0
leaq -0x208(%rbp), %rsi
callq 0x2260
movq %rax, -0x900(%rbp)
jmp 0x29d0
movq -0x900(%rbp), %rdi
movq 0x75da(%rip), %rsi      # 0x9fb8
callq 0x2310
jmp 0x29e5
leaq -0x208(%rbp), %rdi
callq 0x21c0
xorl %edi, %edi
callq 0x2340
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2a1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x21c0
leaq -0x49(%rbp), %rdi
callq 0x2320
testb $0x1, -0x5d(%rbp)
jne 0x2a2c
jmp 0x2a38
movq -0x880(%rbp), %rdi
callq 0x22b0
jmp 0x3b9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x21c0
jmp 0x3b93
callq 0x4180
movq %rax, -0x908(%rbp)
jmp 0x2a79
leaq -0x248(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2a8e
leaq -0x269(%rbp), %rdi
movq %rdi, -0x910(%rbp)
callq 0x2430
movq -0x910(%rbp), %rdx
leaq 0x484f(%rip), %rsi      # 0x72fe
leaq -0x268(%rbp), %rdi
callq 0x2380
jmp 0x2abd
movq -0x908(%rbp), %rdi
movl $0x72, %esi
movl $0x1, %edx
leaq -0x248(%rbp), %rcx
leaq -0x268(%rbp), %r8
callq 0x4030
movq %rax, -0x918(%rbp)
jmp 0x2aea
leaq -0x26a(%rbp), %rdi
movq %rdi, -0x920(%rbp)
callq 0x2430
movq -0x918(%rbp), %rsi
movq -0x920(%rbp), %rdx
leaq -0x228(%rbp), %rdi
callq 0x2380
jmp 0x2b19
leaq -0x26a(%rbp), %rdi
callq 0x2320
leaq -0x268(%rbp), %rdi
callq 0x21c0
leaq -0x269(%rbp), %rdi
callq 0x2320
leaq -0x248(%rbp), %rdi
callq 0x21c0
callq 0x4180
movq %rax, -0x928(%rbp)
jmp 0x2b57
leaq -0x290(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2b6c
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0x930(%rbp)
callq 0x2430
movq -0x930(%rbp), %rdx
leaq 0x478e(%rip), %rsi      # 0x731b
leaq -0x2b0(%rbp), %rdi
callq 0x2380
jmp 0x2b9b
movq -0x928(%rbp), %rdi
movq %rsp, %rax
leaq -0x2b0(%rbp), %rcx
movq %rcx, (%rax)
movl $0x70, %esi
movl $0x1, %edx
movl $0x400, %ecx            # imm = 0x400
movl $0x10000, %r8d          # imm = 0x10000
leaq -0x290(%rbp), %r9
callq 0x3f60
movl %eax, -0x934(%rbp)
jmp 0x2bd8
leaq -0x2b0(%rbp), %rdi
callq 0x21c0
leaq -0x2b1(%rbp), %rdi
callq 0x2320
leaq -0x290(%rbp), %rdi
callq 0x21c0
movl -0x934(%rbp), %eax
movl %eax, -0x270(%rbp)
callq 0x4180
movq %rax, -0x940(%rbp)
jmp 0x2c16
leaq -0x2f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2c2b
leaq -0x319(%rbp), %rdi
movq %rdi, -0x948(%rbp)
callq 0x2430
movq -0x948(%rbp), %rdx
leaq 0x46f7(%rip), %rsi      # 0x7343
leaq -0x318(%rbp), %rdi
callq 0x2380
jmp 0x2c5a
movq -0x940(%rbp), %rdi
movl $0x6c, %esi
movl $0x1, %edx
leaq -0x2f8(%rbp), %rcx
leaq -0x318(%rbp), %r8
callq 0x4030
movq %rax, -0x950(%rbp)
jmp 0x2c87
leaq -0x31a(%rbp), %rdi
movq %rdi, -0x958(%rbp)
callq 0x2430
movq -0x950(%rbp), %rsi
movq -0x958(%rbp), %rdx
leaq -0x2d8(%rbp), %rdi
callq 0x2380
jmp 0x2cb6
leaq -0x31a(%rbp), %rdi
callq 0x2320
leaq -0x318(%rbp), %rdi
callq 0x21c0
leaq -0x319(%rbp), %rdi
callq 0x2320
leaq -0x2f8(%rbp), %rdi
callq 0x21c0
callq 0x4180
movq %rax, -0x960(%rbp)
jmp 0x2cf4
leaq -0x360(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2d09
leaq -0x381(%rbp), %rdi
movq %rdi, -0x968(%rbp)
callq 0x2430
movq -0x968(%rbp), %rdx
leaq 0x462f(%rip), %rsi      # 0x7359
leaq -0x380(%rbp), %rdi
callq 0x2380
jmp 0x2d38
movq -0x960(%rbp), %rdi
movl $0x73, %esi
movl $0x1, %edx
leaq -0x360(%rbp), %rcx
leaq -0x380(%rbp), %r8
callq 0x4030
movq %rax, -0x970(%rbp)
jmp 0x2d65
leaq -0x382(%rbp), %rdi
movq %rdi, -0x978(%rbp)
callq 0x2430
movq -0x970(%rbp), %rsi
movq -0x978(%rbp), %rdx
leaq -0x340(%rbp), %rdi
callq 0x2380
jmp 0x2d94
leaq -0x382(%rbp), %rdi
callq 0x2320
leaq -0x380(%rbp), %rdi
callq 0x21c0
leaq -0x381(%rbp), %rdi
callq 0x2320
leaq -0x360(%rbp), %rdi
callq 0x21c0
callq 0x4180
movq %rax, -0x980(%rbp)
jmp 0x2dd2
leaq -0x3a8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2de7
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0x988(%rbp)
callq 0x2430
movq -0x988(%rbp), %rdx
leaq 0x4573(%rip), %rsi      # 0x737b
leaq -0x3c8(%rbp), %rdi
callq 0x2380
jmp 0x2e16
movq -0x980(%rbp), %rdi
movq %rsp, %rax
leaq -0x3c8(%rbp), %rcx
movq %rcx, (%rax)
movl $0x6e, %esi
xorl %edx, %edx
movl $0x1, %ecx
movl $0x1388, %r8d           # imm = 0x1388
leaq -0x3a8(%rbp), %r9
callq 0x3f60
movl %eax, -0x98c(%rbp)
jmp 0x2e50
leaq -0x3c8(%rbp), %rdi
callq 0x21c0
leaq -0x3c9(%rbp), %rdi
callq 0x2320
leaq -0x3a8(%rbp), %rdi
callq 0x21c0
movl -0x98c(%rbp), %eax
movl %eax, -0x388(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x2150
movq %rax, %rdi
callq 0x23e0
cmpl $0x0, %eax
jle 0x32ab
cmpl $0x0, -0x388(%rbp)
jle 0x32ab
leaq -0x340(%rbp), %rdi
leaq 0x44f2(%rip), %rsi      # 0x73aa
xorl %eax, %eax
movl %eax, %edx
callq 0x21b0
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
jne 0x32ab
leaq -0x340(%rbp), %rdi
callq 0x2150
movq %rax, %rdi
callq 0x23e0
movl %eax, -0x3d0(%rbp)
cmpl $0xea60, -0x3d0(%rbp)   # imm = 0xEA60
jg 0x2f0a
cmpl $0x400, -0x3d0(%rbp)    # imm = 0x400
jge 0x3153
leaq -0x3f0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x2f1f
movq 0x70ca(%rip), %rdi      # 0x9ff0
leaq -0x3f0(%rbp), %rsi
callq 0x2260
movq %rax, -0x998(%rbp)
jmp 0x2f3b
movq -0x998(%rbp), %rdi
leaq 0x446c(%rip), %rsi      # 0x73b5
callq 0x22f0
jmp 0x2f50
leaq -0x3f0(%rbp), %rdi
callq 0x21c0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2fa6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2f9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x26a(%rbp), %rdi
callq 0x2320
leaq -0x268(%rbp), %rdi
callq 0x21c0
leaq -0x269(%rbp), %rdi
callq 0x2320
leaq -0x248(%rbp), %rdi
callq 0x21c0
jmp 0x3b93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2ffa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x21c0
leaq -0x2b1(%rbp), %rdi
callq 0x2320
leaq -0x290(%rbp), %rdi
callq 0x21c0
jmp 0x3b87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3057
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x304b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x31a(%rbp), %rdi
callq 0x2320
leaq -0x318(%rbp), %rdi
callq 0x21c0
leaq -0x319(%rbp), %rdi
callq 0x2320
leaq -0x2f8(%rbp), %rdi
callq 0x21c0
jmp 0x3b87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x30c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x30b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x382(%rbp), %rdi
callq 0x2320
leaq -0x380(%rbp), %rdi
callq 0x21c0
leaq -0x381(%rbp), %rdi
callq 0x2320
leaq -0x360(%rbp), %rdi
callq 0x21c0
jmp 0x3b7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3119
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x21c0
leaq -0x3c9(%rbp), %rdi
callq 0x2320
leaq -0x3a8(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movl -0x3d0(%rbp), %edx
movl -0x388(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal -0x1(%rax,%rcx), %eax
movl %eax, -0x3f4(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x21e0
jmp 0x317b
leaq -0x570(%rbp), %rax
movq %rax, -0x9a0(%rbp)
movslq -0x3d0(%rbp), %rsi
leaq -0x5a0(%rbp), %rdi
callq 0x3bb0
jmp 0x319e
movq -0x9a0(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0x2260
movq %rax, -0x9a8(%rbp)
jmp 0x31ba
movq -0x9a8(%rbp), %rdi
leaq 0x4573(%rip), %rsi      # 0x773b
callq 0x22f0
movq %rax, -0x9b0(%rbp)
jmp 0x31d6
movslq -0x3f4(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
callq 0x3bb0
jmp 0x31eb
movq -0x9b0(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x2260
jmp 0x3200
leaq -0x5c0(%rbp), %rdi
callq 0x21c0
leaq -0x5a0(%rbp), %rdi
callq 0x21c0
leaq -0x5e0(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x22e0
jmp 0x322d
leaq -0x340(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0x2350
leaq -0x5e0(%rbp), %rdi
callq 0x21c0
leaq -0x580(%rbp), %rdi
callq 0x21f0
jmp 0x32ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x329a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x328e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x5c0(%rbp), %rdi
callq 0x21c0
leaq -0x5a0(%rbp), %rdi
callq 0x21c0
leaq -0x580(%rbp), %rdi
callq 0x21f0
jmp 0x3b6f
callq 0x4180
movq %rax, -0x9b8(%rbp)
jmp 0x32b9
leaq -0x608(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x32ce
leaq -0x629(%rbp), %rdi
movq %rdi, -0x9c0(%rbp)
callq 0x2430
movq -0x9c0(%rbp), %rdx
leaq 0x40f7(%rip), %rsi      # 0x73e6
leaq -0x628(%rbp), %rdi
callq 0x2380
jmp 0x32fd
movq -0x9b8(%rbp), %rdi
movq %rsp, %rax
leaq -0x628(%rbp), %rcx
movq %rcx, (%rax)
movl $0x64, %esi
movl $0x1, %edx
xorl %ecx, %ecx
movl $0x3e8, %r8d            # imm = 0x3E8
leaq -0x608(%rbp), %r9
callq 0x3f60
movl %eax, -0x9c4(%rbp)
jmp 0x3337
leaq -0x628(%rbp), %rdi
callq 0x21c0
leaq -0x629(%rbp), %rdi
callq 0x2320
leaq -0x608(%rbp), %rdi
callq 0x21c0
movl -0x9c4(%rbp), %eax
movl %eax, -0x5e4(%rbp)
callq 0x4180
movq %rax, -0x9d0(%rbp)
jmp 0x3375
leaq -0x650(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x338a
leaq -0x671(%rbp), %rdi
movq %rdi, -0x9d8(%rbp)
callq 0x2430
movq -0x9d8(%rbp), %rdx
leaq 0x405c(%rip), %rsi      # 0x7407
leaq -0x670(%rbp), %rdi
callq 0x2380
jmp 0x33b9
movq -0x9d0(%rbp), %rdi
movq %rsp, %rax
leaq -0x670(%rbp), %rcx
movq %rcx, (%rax)
movl $0x69, %esi
movl $0x1, %ecx
movl $0x384, %r8d            # imm = 0x384
leaq -0x650(%rbp), %r9
movl %ecx, %edx
callq 0x3f60
movl %eax, -0x9dc(%rbp)
jmp 0x33f3
leaq -0x670(%rbp), %rdi
callq 0x21c0
leaq -0x671(%rbp), %rdi
callq 0x2320
leaq -0x650(%rbp), %rdi
callq 0x21c0
movl -0x9dc(%rbp), %eax
movl %eax, -0x630(%rbp)
callq 0x4180
movq %rax, -0x9e8(%rbp)
jmp 0x3431
leaq -0x698(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x3446
leaq -0x6b9(%rbp), %rdi
movq %rdi, -0x9f0(%rbp)
callq 0x2430
movq -0x9f0(%rbp), %rdx
leaq 0x3fce(%rip), %rsi      # 0x7435
leaq -0x6b8(%rbp), %rdi
callq 0x2380
jmp 0x3475
movq -0x9e8(%rbp), %rdi
movq %rsp, %rax
leaq -0x6b8(%rbp), %rcx
movq %rcx, (%rax)
movl $0x6d, %esi
movl $0x1, %ecx
movl $0x7d0, %r8d            # imm = 0x7D0
leaq -0x698(%rbp), %r9
movl %ecx, %edx
callq 0x3f60
movl %eax, -0x9f4(%rbp)
jmp 0x34af
leaq -0x6b8(%rbp), %rdi
callq 0x21c0
leaq -0x6b9(%rbp), %rdi
callq 0x2320
leaq -0x698(%rbp), %rdi
callq 0x21c0
movl -0x9f4(%rbp), %eax
movl %eax, -0x678(%rbp)
callq 0x4180
movq %rax, -0xa00(%rbp)
jmp 0x34ed
leaq -0x700(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x3502
leaq -0x721(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x2430
movq -0xa08(%rbp), %rdx
leaq 0x3f3c(%rip), %rsi      # 0x745f
leaq -0x720(%rbp), %rdi
callq 0x2380
jmp 0x3531
movq -0xa00(%rbp), %rdi
movl $0x61, %esi
movl $0x1, %edx
leaq -0x700(%rbp), %rcx
leaq -0x720(%rbp), %r8
callq 0x4030
movq %rax, -0xa10(%rbp)
jmp 0x355e
leaq -0x722(%rbp), %rdi
movq %rdi, -0xa18(%rbp)
callq 0x2430
movq -0xa10(%rbp), %rsi
movq -0xa18(%rbp), %rdx
leaq -0x6e0(%rbp), %rdi
callq 0x2380
jmp 0x358d
leaq -0x722(%rbp), %rdi
callq 0x2320
leaq -0x720(%rbp), %rdi
callq 0x21c0
leaq -0x721(%rbp), %rdi
callq 0x2320
leaq -0x700(%rbp), %rdi
callq 0x21c0
leaq -0x758(%rbp), %rdi
leaq -0x6e0(%rbp), %rsi
callq 0x2160
jmp 0x35d2
leaq -0x738(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0x6370
jmp 0x35e7
leaq -0x758(%rbp), %rdi
callq 0x21c0
leaq -0x738(%rbp), %rdi
callq 0x65f0
movl %eax, -0xa1c(%rbp)
jmp 0x3607
movl -0xa1c(%rbp), %eax
cmpl $0x0, %eax
jne 0x3810
movq 0x69d3(%rip), %rdi      # 0x9ff0
leaq 0x3e70(%rip), %rsi      # 0x7494
callq 0x22f0
movq %rax, -0xa28(%rbp)
jmp 0x3632
movq -0xa28(%rbp), %rdi
movq 0x6978(%rip), %rsi      # 0x9fb8
callq 0x2310
movq %rax, -0xa30(%rbp)
jmp 0x364e
leaq -0x778(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x22e0
jmp 0x3663
movq -0xa30(%rbp), %rdi
leaq -0x778(%rbp), %rsi
callq 0x2260
jmp 0x3678
leaq -0x778(%rbp), %rdi
callq 0x21c0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x36b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x628(%rbp), %rdi
callq 0x21c0
leaq -0x629(%rbp), %rdi
callq 0x2320
leaq -0x608(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x36f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x21c0
leaq -0x671(%rbp), %rdi
callq 0x2320
leaq -0x650(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x373a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x21c0
leaq -0x6b9(%rbp), %rdi
callq 0x2320
leaq -0x698(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3797
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x378b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x722(%rbp), %rdi
callq 0x2320
leaq -0x720(%rbp), %rdi
callq 0x21c0
leaq -0x721(%rbp), %rdi
callq 0x2320
leaq -0x700(%rbp), %rdi
callq 0x21c0
jmp 0x3b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x758(%rbp), %rdi
callq 0x21c0
jmp 0x3b63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3b57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x778(%rbp), %rdi
callq 0x21c0
jmp 0x3b57
xorl %eax, %eax
movl %eax, %edi
callq 0x2290
movq %rax, -0xa38(%rbp)
callq 0x23b0
movq -0xa38(%rbp), %rcx
movl %ecx, %edi
addl %eax, %edi
callq 0x22c0
leaq -0x7e8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x2160
jmp 0x384a
leaq -0x808(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x2160
jmp 0x385f
leaq -0x828(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x2160
jmp 0x3874
movl -0x270(%rbp), %eax
movl %eax, -0xa3c(%rbp)
leaq -0x848(%rbp), %rdi
leaq -0x6e0(%rbp), %rsi
callq 0x2160
jmp 0x3895
movl -0xa3c(%rbp), %r8d
movl -0x630(%rbp), %ecx
movl -0x678(%rbp), %edx
movq %rsp, %rax
movl %edx, 0x8(%rax)
movl %ecx, (%rax)
leaq -0x7c8(%rbp), %rdi
leaq -0x7e8(%rbp), %rsi
leaq -0x808(%rbp), %rdx
leaq -0x828(%rbp), %rcx
leaq -0x848(%rbp), %r9
callq 0x4c00
jmp 0x38da
leaq -0x848(%rbp), %rdi
callq 0x21c0
leaq -0x828(%rbp), %rdi
callq 0x21c0
leaq -0x808(%rbp), %rdi
callq 0x21c0
leaq -0x7e8(%rbp), %rdi
callq 0x21c0
callq 0x2180
cmpl $0x0, %eax
jne 0x3ac3
leaq 0x3b99(%rip), %rdi      # 0x74b8
callq 0x2220
movq %rax, -0xa48(%rbp)
jmp 0x392d
movq -0xa48(%rbp), %rax
movq %rax, -0x850(%rbp)
cmpq $0x0, -0x850(%rbp)
je 0x3a86
movq -0x850(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0x3a86
movq -0x850(%rbp), %rax
movl 0x14(%rax), %edi
callq 0x2440
cmpl $0x0, %eax
je 0x3a35
movq 0x6677(%rip), %rdi      # 0x9ff0
leaq 0x3b3f(%rip), %rsi      # 0x74bf
callq 0x22f0
movq %rax, -0xa50(%rbp)
jmp 0x398e
movq -0xa50(%rbp), %rdi
movq 0x661c(%rip), %rsi      # 0x9fb8
callq 0x2310
jmp 0x39a3
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x3a07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x39fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x39ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x848(%rbp), %rdi
callq 0x21c0
leaq -0x828(%rbp), %rdi
callq 0x21c0
leaq -0x808(%rbp), %rdi
callq 0x21c0
leaq -0x7e8(%rbp), %rdi
callq 0x21c0
jmp 0x3b57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x5490
jmp 0x3b57
movq -0x850(%rbp), %rax
movl 0x10(%rax), %edi
callq 0x2460
cmpl $0x0, %eax
je 0x3a84
movq 0x65a0(%rip), %rdi      # 0x9ff0
leaq 0x3aae(%rip), %rsi      # 0x7505
callq 0x22f0
movq %rax, -0xa58(%rbp)
jmp 0x3a65
movq -0xa58(%rbp), %rdi
movq 0x6545(%rip), %rsi      # 0x9fb8
callq 0x2310
jmp 0x3a7a
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
jmp 0x3ac1
movq 0x6563(%rip), %rdi      # 0x9ff0
leaq 0x3ab7(%rip), %rsi      # 0x754b
callq 0x22f0
movq %rax, -0xa60(%rbp)
jmp 0x3aa2
movq -0xa60(%rbp), %rdi
movq 0x6508(%rip), %rsi      # 0x9fb8
callq 0x2310
jmp 0x3ab7
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2340
jmp 0x3ac3
jmp 0x3ac5
jmp 0x3ac7
leaq -0x20(%rbp), %rdi
callq 0x4190
jmp 0x3ad2
leaq -0x7c8(%rbp), %rdi
callq 0x5580
movq %rax, -0xa68(%rbp)
jmp 0x3ae7
movq -0xa68(%rbp), %rax
movq %rax, -0x860(%rbp)
movq -0x860(%rbp), %rdi
callq 0x57d0
movb %al, -0xa69(%rbp)
jmp 0x3b09
movb -0xa69(%rbp), %al
testb $0x1, %al
jne 0x3b15
jmp 0x3b25
movq -0x860(%rbp), %rdi
callq 0x5770
jmp 0x3b23
jmp 0x3b25
movq -0x860(%rbp), %rdi
callq 0x58a0
jmp 0x3b33
movq -0x860(%rbp), %rdi
callq 0x5880
jmp 0x3b41
movl -0x5e4(%rbp), %esi
leaq -0x20(%rbp), %rdi
callq 0x4200
jmp 0x3b52
jmp 0x3ac5
leaq -0x738(%rbp), %rdi
callq 0x6560
leaq -0x6e0(%rbp), %rdi
callq 0x21c0
leaq -0x340(%rbp), %rdi
callq 0x21c0
leaq -0x2d8(%rbp), %rdi
callq 0x21c0
leaq -0x228(%rbp), %rdi
callq 0x21c0
leaq -0x1e8(%rbp), %rdi
callq 0x21f0
movq -0x58(%rbp), %rdi
callq 0x2420
nopl (%rax,%rax)