// File: shreyas-gopalakrishna[P]Concurrent-Skip-list/unit_test_3.cpp
// Function: main
int main(int argc, char *argv[]){

    cout << "\n---------- Unit Test - 3 ----------" << endl;

    cout << "\nThis Unit test uses 8 Threads. Numbers (1-5000) are used for this unit test." << endl;
    cout << "All threads call a function which performs insert, delete, search and range with random numbers (1-5000)." << endl;
    cout << "This simulates all operations parallelly on the skip list." << endl;

    cout << "\nThe final elements in the skip list will be based on if insert or delete got scheduled and executed first for any given element.\n" << endl;
    
    cout << "Few of the numbers from the 'delete vector' are deleted from the skip list and few may still exist since insert got scheduled after delete for these numbers." << endl;
    cout << "But the tests notice that none of the numbers not present in the 'delete vector' are deleted. And our traversal of the skip list is sorted. This verifies our skip list to be accurate. \n" << endl;

	generate_input(5000);

    skiplist = SkipList(numbers_insert.size(), 0.5);

    concurrent_skiplist_combined();

    // checking if insert is done
    if(skiplist.search(numbers_insert[0]) == to_string(numbers_insert[0]) || skiplist.search(numbers_insert[0]) == ""){
        cout << "Unit Test 1: Insert: PASS" << endl;
    }else{
        cout << "Unit Test 1: Insert: FAIL" << endl;
    }

    // checking if insert is done
    if(skiplist.search(numbers_insert[1]) == to_string(numbers_insert[1]) || skiplist.search(numbers_insert[1]) == "" ){
        cout << "Unit Test 2: Insert: PASS" << endl;
    }else{
        cout << "Unit Test 2: Insert: FAIL" << endl;
    }


    // checking if delete is done
    if(skiplist.search(numbers_delete[0]) == ""){
        cout << "Unit Test 3: Delete: PASS" << endl;
    }else{
        cout << "Unit Test 3: Delete: FAIL" << endl;
    }

    // checking if delete is done
    if(skiplist.search(numbers_delete[1]) == ""){
        cout << "Unit Test 4: Delete: PASS" << endl;
    }else{
        cout << "Unit Test 4: Delete: FAIL" << endl;
    }


    if(skiplist.search(numbers_get[0]) == to_string(numbers_get[0]) || skiplist.search(numbers_get[0]) == ""){
        cout << "Unit Test 5: Search: PASS" << endl;
    }else{
        cout << "Unit Test 5: Insert: FAIL" << endl;
    }

    // checking if Search is done
    if(skiplist.search(numbers_get[1]) == to_string(numbers_get[1]) || skiplist.search(numbers_get[1]) == ""){
        cout << "Unit Test 6: Search: PASS" << endl;
    }else{
        cout << "Unit Test 6: Search: FAIL" << endl;
    }

    // checking by search if deleted element is present
    if(skiplist.search(numbers_delete[0]) == ""){
        cout << "Unit Test 7: Search: PASS" << endl;
    }else{
        cout << "Unit Test 7: Search: FAIL" << endl;
    }

    map<int, string> range_output = skiplist.range(1, 5000);

    // checking range
    if(range_output.count(numbers_delete[0]) == 0){
        cout << "Unit Test 8: Range: PASS" << endl;
    }else{
        cout << "Unit Test 8: Range: FAIL" << endl;
    }

    // checking range
    if(range_output.count(numbers_delete[1]) == 0){
        cout << "Unit Test 9: Range: PASS" << endl;
    }else{
        cout << "Unit Test 9: Range: FAIL" << endl;
    }

	
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x340, %rsp            # imm = 0x340
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0x11200(%rip), %rdi     # 0x13fd0
movq %rdi, -0x290(%rbp)
leaq 0xa22a(%rip), %rsi      # 0xd008
callq 0x2210
movq %rax, %rdi
movq 0x111cb(%rip), %rsi     # 0x13fb8
movq %rsi, -0x288(%rbp)
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa226(%rip), %rsi      # 0xd02d
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa252(%rip), %rsi      # 0xd07b
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa29a(%rip), %rsi      # 0xd0e5
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa2b3(%rip), %rsi      # 0xd120
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa314(%rip), %rsi      # 0xd1a3
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movq -0x290(%rbp), %rdi
leaq 0xa390(%rip), %rsi      # 0xd241
callq 0x2210
movq -0x288(%rbp), %rsi
movq %rax, %rdi
callq 0x2250
movl $0x1388, %edi           # imm = 0x1388
callq 0x2640
leaq 0x1134a(%rip), %rdi     # 0x14220
movq %rdi, -0x270(%rbp)
callq 0x3b80
movl %eax, %esi
leaq -0x20(%rbp), %rdi
movq %rdi, -0x280(%rbp)
movss 0xa10d(%rip), %xmm0     # 0xd004
callq 0x8790
movq -0x280(%rbp), %rdi
movups -0x20(%rbp), %xmm0
movups %xmm0, 0x11302(%rip)    # 0x14210
leaq 0x112fb(%rip), %rax     # 0x14210
movq %rax, -0x278(%rbp)
callq 0xa3a0
callq 0x2ca0
movq -0x270(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x268(%rbp)
callq 0x3ba0
movq -0x278(%rbp), %rsi
movl (%rax), %edx
leaq -0x40(%rbp), %rdi
callq 0x92e0
movq -0x270(%rbp), %rdi
movq -0x268(%rbp), %rsi
callq 0x3ba0
movl (%rax), %esi
movb $0x0, -0x91(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x3c20
jmp 0x2f76
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3fe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x291(%rbp)
jne 0x2fe9
leaq 0x11287(%rip), %rdi     # 0x14220
xorl %eax, %eax
movl %eax, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x11265(%rip), %rsi     # 0x14210
leaq -0x90(%rbp), %rdi
callq 0x92e0
jmp 0x2fb9
movb $0x1, -0x91(%rbp)
leaq 0xa6b8(%rip), %rsi      # 0xd67f
leaq -0x90(%rbp), %rdi
callq 0x4070
movb %al, -0x292(%rbp)
jmp 0x2fdb
movb -0x292(%rbp), %al
movb %al, -0x291(%rbp)
jmp 0x2fe9
movb -0x291(%rbp), %al
movb %al, -0x293(%rbp)
testb $0x1, -0x91(%rbp)
jne 0x3000
jmp 0x300c
leaq -0x90(%rbp), %rdi
callq 0x2140
leaq -0x60(%rbp), %rdi
callq 0x2140
leaq -0x40(%rbp), %rdi
callq 0x2140
movb -0x293(%rbp), %al
testb $0x1, %al
jne 0x302a
jmp 0x30a6
movq 0x10f9f(%rip), %rdi     # 0x13fd0
leaq 0xa2c3(%rip), %rsi      # 0xd2fb
callq 0x2210
movq %rax, %rdi
movq 0x10f71(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x30c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x3098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x308f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0x91(%rbp)
jne 0x3081
jmp 0x308d
leaq -0x90(%rbp), %rdi
callq 0x2140
jmp 0x308f
leaq -0x60(%rbp), %rdi
callq 0x2140
leaq -0x40(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10f23(%rip), %rdi     # 0x13fd0
leaq 0xa261(%rip), %rsi      # 0xd315
callq 0x2210
movq %rax, %rdi
movq 0x10ef5(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x11151(%rip), %rdi     # 0x14220
movq %rdi, -0x2a8(%rbp)
movl $0x1, %esi
movq %rsi, -0x2a0(%rbp)
callq 0x3ba0
movl (%rax), %edx
leaq 0x11120(%rip), %rsi     # 0x14210
leaq -0xb8(%rbp), %rdi
callq 0x92e0
movq -0x2a8(%rbp), %rdi
movq -0x2a0(%rbp), %rsi
callq 0x3ba0
movl (%rax), %esi
movb $0x0, -0xf9(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x3c20
jmp 0x3126
leaq -0xb8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3fe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2a9(%rbp)
jne 0x31a0
leaq 0x110d1(%rip), %rdi     # 0x14220
movl $0x1, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x110ae(%rip), %rsi     # 0x14210
leaq -0xf8(%rbp), %rdi
callq 0x92e0
jmp 0x3170
movb $0x1, -0xf9(%rbp)
leaq 0xa501(%rip), %rsi      # 0xd67f
leaq -0xf8(%rbp), %rdi
callq 0x4070
movb %al, -0x2aa(%rbp)
jmp 0x3192
movb -0x2aa(%rbp), %al
movb %al, -0x2a9(%rbp)
jmp 0x31a0
movb -0x2a9(%rbp), %al
movb %al, -0x2ab(%rbp)
testb $0x1, -0xf9(%rbp)
jne 0x31b7
jmp 0x31c3
leaq -0xf8(%rbp), %rdi
callq 0x2140
leaq -0xd8(%rbp), %rdi
callq 0x2140
leaq -0xb8(%rbp), %rdi
callq 0x2140
movb -0x2ab(%rbp), %al
testb $0x1, %al
jne 0x31ea
jmp 0x326f
movq 0x10ddf(%rip), %rdi     # 0x13fd0
leaq 0xa137(%rip), %rsi      # 0xd32f
callq 0x2210
movq %rax, %rdi
movq 0x10db1(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x3291
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x325e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x3252
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0xf9(%rbp)
jne 0x3244
jmp 0x3250
leaq -0xf8(%rbp), %rdi
callq 0x2140
jmp 0x3252
leaq -0xd8(%rbp), %rdi
callq 0x2140
leaq -0xb8(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10d5a(%rip), %rdi     # 0x13fd0
leaq 0xa0cc(%rip), %rsi      # 0xd349
callq 0x2210
movq %rax, %rdi
movq 0x10d2c(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x10fa0(%rip), %rdi     # 0x14238
xorl %eax, %eax
movl %eax, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x10f66(%rip), %rsi     # 0x14210
leaq -0x120(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
callq 0x92e0
movq -0x2b8(%rbp), %rdi
leaq 0xa3b4(%rip), %rsi      # 0xd67f
callq 0x4070
movb %al, -0x2ac(%rbp)
jmp 0x32d8
leaq -0x120(%rbp), %rdi
callq 0x2140
movb -0x2ac(%rbp), %al
testb $0x1, %al
jne 0x32f0
jmp 0x3331
movq 0x10cd9(%rip), %rdi     # 0x13fd0
leaq 0xa065(%rip), %rsi      # 0xd363
callq 0x2210
movq %rax, %rdi
movq 0x10cab(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x3353
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10c98(%rip), %rdi     # 0x13fd0
leaq 0xa03e(%rip), %rsi      # 0xd37d
callq 0x2210
movq %rax, %rdi
movq 0x10c6a(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x10ede(%rip), %rdi     # 0x14238
movl $0x1, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x10ea3(%rip), %rsi     # 0x14210
leaq -0x140(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
callq 0x92e0
movq -0x2c8(%rbp), %rdi
leaq 0xa2f1(%rip), %rsi      # 0xd67f
callq 0x4070
movb %al, -0x2b9(%rbp)
jmp 0x339b
leaq -0x140(%rbp), %rdi
callq 0x2140
movb -0x2b9(%rbp), %al
testb $0x1, %al
jne 0x33b3
jmp 0x33f4
movq 0x10c16(%rip), %rdi     # 0x13fd0
leaq 0x9fd6(%rip), %rsi      # 0xd397
callq 0x2210
movq %rax, %rdi
movq 0x10be8(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x3416
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10bd5(%rip), %rdi     # 0x13fd0
leaq 0x9faf(%rip), %rsi      # 0xd3b1
callq 0x2210
movq %rax, %rdi
movq 0x10ba7(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x10e33(%rip), %rdi     # 0x14250
movq %rdi, -0x2d8(%rbp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x2d0(%rbp)
callq 0x3ba0
movl (%rax), %edx
leaq 0x10dd3(%rip), %rsi     # 0x14210
leaq -0x160(%rbp), %rdi
callq 0x92e0
movq -0x2d8(%rbp), %rdi
movq -0x2d0(%rbp), %rsi
callq 0x3ba0
movl (%rax), %esi
movb $0x0, -0x1a1(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x3c20
jmp 0x3473
leaq -0x160(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x3fe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2d9(%rbp)
jne 0x34ec
leaq 0x10db4(%rip), %rdi     # 0x14250
xorl %eax, %eax
movl %eax, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x10d62(%rip), %rsi     # 0x14210
leaq -0x1a0(%rbp), %rdi
callq 0x92e0
jmp 0x34bc
movb $0x1, -0x1a1(%rbp)
leaq 0xa1b5(%rip), %rsi      # 0xd67f
leaq -0x1a0(%rbp), %rdi
callq 0x4070
movb %al, -0x2da(%rbp)
jmp 0x34de
movb -0x2da(%rbp), %al
movb %al, -0x2d9(%rbp)
jmp 0x34ec
movb -0x2d9(%rbp), %al
movb %al, -0x2db(%rbp)
testb $0x1, -0x1a1(%rbp)
jne 0x3503
jmp 0x350f
leaq -0x1a0(%rbp), %rdi
callq 0x2140
leaq -0x180(%rbp), %rdi
callq 0x2140
leaq -0x160(%rbp), %rdi
callq 0x2140
movb -0x2db(%rbp), %al
testb $0x1, %al
jne 0x3536
jmp 0x35bb
movq 0x10a93(%rip), %rdi     # 0x13fd0
leaq 0x9e87(%rip), %rsi      # 0xd3cb
callq 0x2210
movq %rax, %rdi
movq 0x10a65(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x35dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x35aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x359e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0x1a1(%rbp)
jne 0x3590
jmp 0x359c
leaq -0x1a0(%rbp), %rdi
callq 0x2140
jmp 0x359e
leaq -0x180(%rbp), %rdi
callq 0x2140
leaq -0x160(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10a0e(%rip), %rdi     # 0x13fd0
leaq 0x9e1c(%rip), %rsi      # 0xd3e5
callq 0x2210
movq %rax, %rdi
movq 0x109e0(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x10c6c(%rip), %rdi     # 0x14250
movq %rdi, -0x2f0(%rbp)
movl $0x1, %esi
movq %rsi, -0x2e8(%rbp)
callq 0x3ba0
movl (%rax), %edx
leaq 0x10c0b(%rip), %rsi     # 0x14210
leaq -0x1c8(%rbp), %rdi
callq 0x92e0
movq -0x2f0(%rbp), %rdi
movq -0x2e8(%rbp), %rsi
callq 0x3ba0
movl (%rax), %esi
movb $0x0, -0x209(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x3c20
jmp 0x363b
leaq -0x1c8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x3fe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2f1(%rbp)
jne 0x36b5
leaq 0x10bec(%rip), %rdi     # 0x14250
movl $0x1, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x10b99(%rip), %rsi     # 0x14210
leaq -0x208(%rbp), %rdi
callq 0x92e0
jmp 0x3685
movb $0x1, -0x209(%rbp)
leaq 0x9fec(%rip), %rsi      # 0xd67f
leaq -0x208(%rbp), %rdi
callq 0x4070
movb %al, -0x2f2(%rbp)
jmp 0x36a7
movb -0x2f2(%rbp), %al
movb %al, -0x2f1(%rbp)
jmp 0x36b5
movb -0x2f1(%rbp), %al
movb %al, -0x2f3(%rbp)
testb $0x1, -0x209(%rbp)
jne 0x36cc
jmp 0x36d8
leaq -0x208(%rbp), %rdi
callq 0x2140
leaq -0x1e8(%rbp), %rdi
callq 0x2140
leaq -0x1c8(%rbp), %rdi
callq 0x2140
movb -0x2f3(%rbp), %al
testb $0x1, %al
jne 0x36ff
jmp 0x3784
movq 0x108ca(%rip), %rdi     # 0x13fd0
leaq 0x9cf2(%rip), %rsi      # 0xd3ff
callq 0x2210
movq %rax, %rdi
movq 0x1089c(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x37a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x3773
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x3767
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0x209(%rbp)
jne 0x3759
jmp 0x3765
leaq -0x208(%rbp), %rdi
callq 0x2140
jmp 0x3767
leaq -0x1e8(%rbp), %rdi
callq 0x2140
leaq -0x1c8(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10845(%rip), %rdi     # 0x13fd0
leaq 0x9c87(%rip), %rsi      # 0xd419
callq 0x2210
movq %rax, %rdi
movq 0x10817(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x10a8b(%rip), %rdi     # 0x14238
xorl %eax, %eax
movl %eax, %esi
callq 0x3ba0
movl (%rax), %edx
leaq 0x10a51(%rip), %rsi     # 0x14210
leaq -0x230(%rbp), %rdi
movq %rdi, -0x300(%rbp)
callq 0x92e0
movq -0x300(%rbp), %rdi
leaq 0x9e9f(%rip), %rsi      # 0xd67f
callq 0x4070
movb %al, -0x2f4(%rbp)
jmp 0x37ed
leaq -0x230(%rbp), %rdi
callq 0x2140
movb -0x2f4(%rbp), %al
testb $0x1, %al
jne 0x3805
jmp 0x3846
movq 0x107c4(%rip), %rdi     # 0x13fd0
leaq 0x9c20(%rip), %rsi      # 0xd433
callq 0x2210
movq %rax, %rdi
movq 0x10796(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x3868
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x2140
jmp 0x39ff
movq 0x10783(%rip), %rdi     # 0x13fd0
leaq 0x9bf9(%rip), %rsi      # 0xd44d
callq 0x2210
movq %rax, %rdi
movq 0x10755(%rip), %rsi     # 0x13fb8
callq 0x2250
leaq 0x109a1(%rip), %rsi     # 0x14210
leaq -0x260(%rbp), %rdi
movq %rdi, -0x310(%rbp)
movl $0x1, %edx
movl $0x1388, %ecx           # imm = 0x1388
callq 0x9e70
leaq 0x109a5(%rip), %rdi     # 0x14238
xorl %eax, %eax
movl %eax, %esi
callq 0x3ba0
movq -0x310(%rbp), %rdi
movq %rax, %rsi
callq 0x40a0
movq %rax, -0x308(%rbp)
jmp 0x38b4
movq -0x308(%rbp), %rax
cmpq $0x0, %rax
jne 0x3911
movq 0x10708(%rip), %rdi     # 0x13fd0
leaq 0x9b98(%rip), %rsi      # 0xd467
callq 0x2210
movq %rax, -0x318(%rbp)
jmp 0x38dd
movq -0x318(%rbp), %rdi
movq 0x106cd(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x38f2
jmp 0x3944
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x3d40
jmp 0x39ff
movq 0x106b8(%rip), %rdi     # 0x13fd0
leaq 0x9b61(%rip), %rsi      # 0xd480
callq 0x2210
movq %rax, -0x320(%rbp)
jmp 0x392d
movq -0x320(%rbp), %rdi
movq 0x1067d(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x3942
jmp 0x3944
leaq 0x108ed(%rip), %rdi     # 0x14238
movl $0x1, %esi
callq 0x3ba0
movq %rax, %rsi
leaq -0x260(%rbp), %rdi
callq 0x40a0
movq %rax, -0x328(%rbp)
jmp 0x396d
movq -0x328(%rbp), %rax
cmpq $0x0, %rax
jne 0x39ad
movq 0x1064f(%rip), %rdi     # 0x13fd0
leaq 0x9b11(%rip), %rsi      # 0xd499
callq 0x2210
movq %rax, -0x330(%rbp)
jmp 0x3996
movq -0x330(%rbp), %rdi
movq 0x10614(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x39ab
jmp 0x39e0
movq 0x1061c(%rip), %rdi     # 0x13fd0
leaq 0x9af7(%rip), %rsi      # 0xd4b2
callq 0x2210
movq %rax, -0x338(%rbp)
jmp 0x39c9
movq -0x338(%rbp), %rdi
movq 0x105e1(%rip), %rsi     # 0x13fb8
callq 0x2250
jmp 0x39de
jmp 0x39e0
movl $0x0, -0x4(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x3d40
movl -0x4(%rbp), %eax
addq $0x340, %rsp            # imm = 0x340
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x2350
nopl (%rax,%rax)