// File: /workspace/github_c_makefile_star2_O0/CarlosLunaMota[P]BinaryTrees/BinaryTrees.c
// Function: bs_tree_union
bs_tree *bs_tree_union(const bs_tree *tree_1, const bs_tree *tree_2) {

    bs_tree *tree = NULL;
    bs_node *node = NULL;
    bs_node *pred_1;
    bs_node *node_1;
    bs_node *pred_2;
    bs_node *node_2;
    int      comp;

    // Sanity check:
    assert(tree_1 != NULL);
    assert(tree_2 != NULL);

    // Special case: Both trees are the same
    if (tree_1 == tree_2) { return bs_tree_copy(tree_1); }

    // Create a new tree:
    tree = new_bs_tree(tree_1->comp);
    if (tree == NULL) { return NULL; }

    // Go to the smallest element of tree_1 while right-threading your path:
    node_1 = tree_1->root;
    if (node_1 != NULL) {
        while (node_1->left != NULL) {
            pred_1 = node_1->left;
            while (pred_1->right != NULL) { pred_1 = pred_1->right; }
            pred_1->right = node_1;
            node_1        = node_1->left;
        }
    }

    // Go to the smallest element of tree_2 while right-threading your path:
    node_2 = tree_2->root;
    if (node_2 != NULL) {
        while (node_2->left != NULL) {
            pred_2 = node_2->left;
            while (pred_2->right != NULL) { pred_2 = pred_2->right; }
            pred_2->right = node_2;
            node_2        = node_2->left;
        }
    }

    // Until we have exhausted at least one of the trees:
    while (node_1 != NULL && node_2 != NULL) {

        // compare both nodes:
        comp = (tree->comp)(node_1->data, node_2->data);

        if (comp < 0) {

            // insert node_1->data in tree /////////////////////////////////////
            if (node == NULL)  {
                tree->root = (bs_node *) malloc(sizeof(bs_node));
                node = tree->root;
            } else {
                node->right = (bs_node *) malloc(sizeof(bs_node));
                node = node->right;
            }
            if (node == NULL) {
                fprintf(stderr, "ERROR: Unable to allocate bs_node\n");
                return tree;
            } else {
                node->data  = node_1->data;
                node->left  = NULL;
                node->right = NULL;
            }
            ////////////////////////////////////////////////////////////////////

            // advance node_1 //////////////////////////////////////////////////
            node_1 = node_1->right;
            if (node_1 != NULL) {
                while (node_1->left != NULL) {
                    pred_1 = node_1->left;
                    while (pred_1->right != NULL && pred_1->right != node_1) {
                        pred_1 = pred_1->right;
                    }
                    if (pred_1->right == NULL) {
                        pred_1->right = node_1;
                        node_1        = node_1->left;
                    } else {
                        pred_1->right = NULL;
                        break;
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////

        } else if (comp > 0) {

            // insert node_2->data in tree /////////////////////////////////////
            if (node == NULL)  {
                tree->root = (bs_node *) malloc(sizeof(bs_node));
                node = tree->root;
            } else {
                node->right = (bs_node *) malloc(sizeof(bs_node));
                node = node->right;
            }
            if (node == NULL) {
                fprintf(stderr, "ERROR: Unable to allocate bs_node\n");
                return tree;
            } else {
                node->data  = node_2->data;
                node->left  = NULL;
                node->right = NULL;
            }
            ////////////////////////////////////////////////////////////////////

            // advance node_2 //////////////////////////////////////////////////
            node_2 = node_2->right;
            if (node_2 != NULL) {
                while (node_2->left != NULL) {
                    pred_2 = node_2->left;
                    while (pred_2->right != NULL && pred_2->right != node_2) {
                        pred_2 = pred_2->right;
                    }
                    if (pred_2->right == NULL) {
                        pred_2->right = node_2;
                        node_2        = node_2->left;
                    } else {
                        pred_2->right = NULL;
                        break;
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////

        } else {

            // insert node_1->data in tree /////////////////////////////////////
            if (node == NULL)  {
                tree->root = (bs_node *) malloc(sizeof(bs_node));
                node = tree->root;
            } else {
                node->right = (bs_node *) malloc(sizeof(bs_node));
                node = node->right;
            }
            if (node == NULL) {
                fprintf(stderr, "ERROR: Unable to allocate bs_node\n");
                return tree;
            } else {
                node->data  = node_1->data;
                node->left  = NULL;
                node->right = NULL;
            }
            ////////////////////////////////////////////////////////////////////

            // advance node_1 //////////////////////////////////////////////////
            node_1 = node_1->right;
            if (node_1 != NULL) {
                while (node_1->left != NULL) {
                    pred_1 = node_1->left;
                    while (pred_1->right != NULL && pred_1->right != node_1) {
                        pred_1 = pred_1->right;
                    }
                    if (pred_1->right == NULL) {
                        pred_1->right = node_1;
                        node_1        = node_1->left;
                    } else {
                        pred_1->right = NULL;
                        break;
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////

            // advance node_2 //////////////////////////////////////////////////
            node_2 = node_2->right;
            if (node_2 != NULL) {
                while (node_2->left != NULL) {
                    pred_2 = node_2->left;
                    while (pred_2->right != NULL && pred_2->right != node_2) {
                        pred_2 = pred_2->right;
                    }
                    if (pred_2->right == NULL) {
                        pred_2->right = node_2;
                        node_2        = node_2->left;
                    } else {
                        pred_2->right = NULL;
                        break;
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////
        }
    }

    // Insert all remaining data from tree_1:
    while (node_1 != NULL) {

        // insert node_1->data in tree /////////////////////////////////////////
        if (node == NULL)  {
            tree->root = (bs_node *) malloc(sizeof(bs_node));
            node = tree->root;
        } else {
            node->right = (bs_node *) malloc(sizeof(bs_node));
            node = node->right;
        }
        if (node == NULL) {
            fprintf(stderr, "ERROR: Unable to allocate bs_node\n");
            return tree;
        } else {
            node->data  = node_1->data;
            node->left  = NULL;
            node->right = NULL;
        }
        ////////////////////////////////////////////////////////////////////////

        // advance node_1 //////////////////////////////////////////////////////
        node_1 = node_1->right;
        if (node_1 != NULL) {
            while (node_1->left != NULL) {
                pred_1 = node_1->left;
                while (pred_1->right != NULL && pred_1->right != node_1) {
                    pred_1 = pred_1->right;
                }
                if (pred_1->right == NULL) {
                    pred_1->right = node_1;
                    node_1        = node_1->left;
                } else {
                    pred_1->right = NULL;
                    break;
                }
            }
        }
        ////////////////////////////////////////////////////////////////////////
    }

    // Insert all remaining data from tree_2:
    while (node_2 != NULL) {

        // insert node_2->data in tree /////////////////////////////////////////
        if (node == NULL)  {
            tree->root = (bs_node *) malloc(sizeof(bs_node));
            node = tree->root;
        } else {
            node->right = (bs_node *) malloc(sizeof(bs_node));
            node = node->right;
        }
        if (node == NULL) {
            fprintf(stderr, "ERROR: Unable to allocate bs_node\n");
            return tree;
        } else {
            node->data  = node_2->data;
            node->left  = NULL;
            node->right = NULL;
        }
        ////////////////////////////////////////////////////////////////////////

        // advance node_2 //////////////////////////////////////////////////////
        node_2 = node_2->right;
        if (node_2 != NULL) {
            while (node_2->left != NULL) {
                pred_2 = node_2->left;
                while (pred_2->right != NULL && pred_2->right != node_2) {
                    pred_2 = pred_2->right;
                }
                if (pred_2->right == NULL) {
                    pred_2->right = node_2;
                    node_2        = node_2->left;
                } else {
                    pred_2->right = NULL;
                    break;
                }
            }
        }
        ////////////////////////////////////////////////////////////////////////
    }

    // Return the resulting tree:
    return tree;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xd659
jmp 0xd678
leaq 0x8ea5(%rip), %rdi      # 0x16505
leaq 0x8b95(%rip), %rsi      # 0x161fc
movl $0x305, %edx            # imm = 0x305
leaq 0x8ea1(%rip), %rcx      # 0x16514
callq 0x1060
cmpq $0x0, -0x18(%rbp)
je 0xd681
jmp 0xd6a0
leaq 0x8ec5(%rip), %rdi      # 0x1654d
leaq 0x8b6d(%rip), %rsi      # 0x161fc
movl $0x306, %edx            # imm = 0x306
leaq 0x8e79(%rip), %rcx      # 0x16514
callq 0x1060
movq -0x10(%rbp), %rax
cmpq -0x18(%rbp), %rax
jne 0xd6bc
movq -0x10(%rbp), %rdi
callq 0xc650
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xc5c0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0xd6e1
movq $0x0, -0x8(%rbp)
jmp 0xdf0d
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xd741
jmp 0xd6f5
movq -0x38(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xd73f
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd725
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xd70c
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0xd6f5
jmp 0xd741
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xd7a1
jmp 0xd755
movq -0x48(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xd79f
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd785
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xd76c
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xd755
jmp 0xd7a1
jmp 0xd7a3
xorl %eax, %eax
cmpq $0x0, -0x38(%rbp)
movb %al, -0x4d(%rbp)
je 0xd7ba
cmpq $0x0, -0x48(%rbp)
setne %al
movb %al, -0x4d(%rbp)
movb -0x4d(%rbp), %al
testb $0x1, %al
jne 0xd7c6
jmp 0xdc65
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rcx), %rdi
movq -0x48(%rbp), %rcx
movq (%rcx), %rsi
callq *%rax
movl %eax, -0x4c(%rbp)
cmpl $0x0, -0x4c(%rbp)
jge 0xd92e
cmpq $0x0, -0x28(%rbp)
jne 0xd813
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xd834
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xd860
movq 0xc7b6(%rip), %rax      # 0x19ff8
movq (%rax), %rdi
leaq 0x8a5a(%rip), %rsi      # 0x162a6
movb $0x0, %al
callq 0x1080
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xd929
jmp 0xd89f
movq -0x38(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xd927
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x4e(%rbp)
je 0xd8d8
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x38(%rbp), %rax
setne %al
movb %al, -0x4e(%rbp)
movb -0x4e(%rbp), %al
testb $0x1, %al
jne 0xd8e1
jmp 0xd8ef
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xd8b6
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xd914
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0xd922
movq -0x30(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xd927
jmp 0xd89f
jmp 0xd929
jmp 0xdc60
cmpl $0x0, -0x4c(%rbp)
jle 0xda7b
cmpq $0x0, -0x28(%rbp)
jne 0xd960
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xd981
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xd9ad
movq 0xc669(%rip), %rax      # 0x19ff8
movq (%rax), %rdi
leaq 0x890d(%rip), %rsi      # 0x162a6
movb $0x0, %al
callq 0x1080
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x48(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xda76
jmp 0xd9ec
movq -0x48(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xda74
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x4f(%rbp)
je 0xda25
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x48(%rbp), %rax
setne %al
movb %al, -0x4f(%rbp)
movb -0x4f(%rbp), %al
testb $0x1, %al
jne 0xda2e
jmp 0xda3c
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xda03
movq -0x40(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xda61
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xda6f
movq -0x40(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xda74
jmp 0xd9ec
jmp 0xda76
jmp 0xdc5e
cmpq $0x0, -0x28(%rbp)
jne 0xdaa3
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xdac4
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xdaf0
movq 0xc526(%rip), %rax      # 0x19ff8
movq (%rax), %rdi
leaq 0x87ca(%rip), %rsi      # 0x162a6
movb $0x0, %al
callq 0x1080
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xdbb9
jmp 0xdb2f
movq -0x38(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xdbb7
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x50(%rbp)
je 0xdb68
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x38(%rbp), %rax
setne %al
movb %al, -0x50(%rbp)
movb -0x50(%rbp), %al
testb $0x1, %al
jne 0xdb71
jmp 0xdb7f
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xdb46
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xdba4
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0xdbb2
movq -0x30(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xdbb7
jmp 0xdb2f
jmp 0xdbb9
movq -0x48(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xdc5c
jmp 0xdbd2
movq -0x48(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xdc5a
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x51(%rbp)
je 0xdc0b
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x48(%rbp), %rax
setne %al
movb %al, -0x51(%rbp)
movb -0x51(%rbp), %al
testb $0x1, %al
jne 0xdc14
jmp 0xdc22
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xdbe9
movq -0x40(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xdc47
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xdc55
movq -0x40(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xdc5a
jmp 0xdbd2
jmp 0xdc5c
jmp 0xdc5e
jmp 0xdc60
jmp 0xd7a3
jmp 0xdc67
cmpq $0x0, -0x38(%rbp)
je 0xddb5
cmpq $0x0, -0x28(%rbp)
jne 0xdc9a
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xdcbb
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xdce7
movq 0xc32f(%rip), %rax      # 0x19ff8
movq (%rax), %rdi
leaq 0x85d3(%rip), %rsi      # 0x162a6
movb $0x0, %al
callq 0x1080
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xddb0
jmp 0xdd26
movq -0x38(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xddae
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x52(%rbp)
je 0xdd5f
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x38(%rbp), %rax
setne %al
movb %al, -0x52(%rbp)
movb -0x52(%rbp), %al
testb $0x1, %al
jne 0xdd68
jmp 0xdd76
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xdd3d
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xdd9b
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0xdda9
movq -0x30(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xddae
jmp 0xdd26
jmp 0xddb0
jmp 0xdc67
jmp 0xddb7
cmpq $0x0, -0x48(%rbp)
je 0xdf05
cmpq $0x0, -0x28(%rbp)
jne 0xddea
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xde0b
movl $0x18, %edi
callq 0x10a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xde37
movq 0xc1df(%rip), %rax      # 0x19ff8
movq (%rax), %rdi
leaq 0x8483(%rip), %rsi      # 0x162a6
movb $0x0, %al
callq 0x1080
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xdf0d
movq -0x48(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xdf00
jmp 0xde76
movq -0x48(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xdefe
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x10(%rcx)
movb %al, -0x53(%rbp)
je 0xdeaf
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x48(%rbp), %rax
setne %al
movb %al, -0x53(%rbp)
movb -0x53(%rbp), %al
testb $0x1, %al
jne 0xdeb8
jmp 0xdec6
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0xde8d
movq -0x40(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0xdeeb
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0xdef9
movq -0x40(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xdefe
jmp 0xde76
jmp 0xdf00
jmp 0xddb7
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw (%rax,%rax)