LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getNextNodeWithIdenticalNeighbors(unsigned int const&, std::vector<unsigned int, std::allocator<unsigned int>> const&) const
uint32_t Graph::getNextNodeWithIdenticalNeighbors(const uint32_t &previousNode, const vector<uint32_t> &neighbors) const {
    uint32_t pos = (!mapping ? previousNode : idToPos->at(previousNode));
    for (pos = pos+1 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed && nodeIndex[pos].edges == neighbors.size()) {
            uint32_t neighborCount = neighbors.size();
            uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
            for (uint32_t offset = nodeIndex[pos].offset ; offset  < nextNodeOffset && neighborCount; offset++) {
                uint32_t nPos = (!mapping ? (*edgeBuffer)[offset] : idToPos->at((*edgeBuffer)[offset]));
                if (!nodeIndex[nPos].removed && find(neighbors.begin(), neighbors.end(), (*edgeBuffer)[offset]) != neighbors.end()) {
                    neighborCount--;
                }
            }
            if (!neighborCount) {
                return (!mapping ? pos : posToId->at(pos));
            }
        }
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rdi, %rbx
cmpb $0x1, 0x3c(%rdi)
jne 0x361b
movq 0x40(%rbx), %rdi
callq 0xb880
movq %rax, %rsi
movl (%rsi), %r8d
pushq $0xc
popq %r9
movl %r8d, %esi
leal 0x1(%rsi), %r8d
movq (%rbx), %rdi
movq 0x8(%rbx), %rax
subq %rdi, %rax
cqto
idivq %r9
cmpq %r8, %rax
jbe 0x3729
imulq $0xc, %r8, %rcx
cmpb $0x0, 0x8(%rdi,%rcx)
jne 0x3622
addq %rdi, %rcx
movl 0x4(%rcx), %r13d
movq 0x8(%r14), %rdx
subq (%r14), %rdx
sarq $0x2, %rdx
cmpq %r13, %rdx
jne 0x3622
decq %rax
cmpq %r8, %rax
movq %r8, (%rsp)
jne 0x3680
movq 0x18(%rbx), %rdx
movq 0x8(%rdx), %rax
subq (%rdx), %rax
shrq $0x2, %rax
jmp 0x368a
addl $0x2, %esi
imulq $0xc, %rsi, %rax
movl (%rdi,%rax), %eax
movl (%rcx), %ebp
movl %eax, %r12d
leaq (,%rbp,4), %r15
cmpq %r12, %rbp
jae 0x3701
testl %r13d, %r13d
je 0x3701
cmpb $0x0, 0x3c(%rbx)
je 0x36bc
movq 0x18(%rbx), %rax
movq 0x40(%rbx), %rdi
movq (%rax), %rsi
addq %r15, %rsi
callq 0xb880
jmp 0x36c6
movq 0x18(%rbx), %rax
movq (%rax), %rax
addq %r15, %rax
movl (%rax), %eax
movq (%rbx), %rcx
imulq $0xc, %rax, %rax
cmpb $0x0, 0x8(%rcx,%rax)
jne 0x36f8
movq (%r14), %rdi
movq 0x8(%r14), %rsi
movq 0x18(%rbx), %rax
movq (%rax), %rdx
addq %r15, %rdx
callq 0xc377
xorl %ecx, %ecx
cmpq 0x8(%r14), %rax
setne %cl
subl %ecx, %r13d
incq %rbp
addq $0x4, %r15
jmp 0x3697
testl %r13d, %r13d
movq (%rsp), %r8
pushq $0xc
popq %r9
jne 0x3622
cmpb $0x1, 0x3c(%rbx)
jne 0x372f
movq 0x48(%rbx), %rdi
movq %r8, %rsi
callq 0x9e18
movl (%rax), %r8d
jmp 0x372f
pushq $-0x1
popq %rax
movl %eax, %r8d
movl %r8d, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getNodeWithOneUncommonNeighbor(std::vector<unsigned int, std::allocator<unsigned int>> const&, unsigned int&) const
uint32_t Graph::getNodeWithOneUncommonNeighbor(const vector<uint32_t> &neighbors, uint32_t &uncommonNeighbor) const {
    uncommonNeighbor = NONE;
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed && nodeIndex[pos].edges == 3 || nodeIndex[pos].edges == 4) { // Optimization for 3-4 structures reduction
            uint32_t node = (!mapping ? pos : posToId->at(pos));
            vector<uint32_t> newNeighbors;
            gatherNeighbors(node, newNeighbors);
            if (setsHaveKUncommonElements(neighbors, newNeighbors, 1, uncommonNeighbor)) {
                return node;
            }
        }
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rsi, 0x10(%rsp)
movq %rdx, 0x8(%rsp)
orl $-0x1, (%rdx)
movq %rdi, %r15
xorl %edi, %edi
pushq $0xc
popq %rbx
leaq 0x20(%rsp), %r13
movq %rsp, %r14
movl %edi, %esi
movq (%r15), %rcx
movq 0x8(%r15), %rax
subq %rcx, %rax
cqto
idivq %rbx
cmpq %rsi, %rax
jbe 0x383a
imulq $0xc, %rsi, %rax
movb 0x8(%rcx,%rax), %dl
movl 0x4(%rcx,%rax), %eax
notb %dl
cmpl $0x3, %eax
sete %cl
andb %dl, %cl
cmpl $0x4, %eax
sete %al
orb %cl, %al
cmpb $0x1, %al
jne 0x3833
cmpb $0x1, 0x3c(%r15)
movq %rdi, 0x18(%rsp)
movl %edi, %eax
jne 0x37c6
movq 0x48(%r15), %rdi
callq 0x9e18
movl (%rax), %eax
movl %eax, 0x4(%rsp)
andq $0x0, 0x30(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
orl $-0x1, (%rsp)
movq %r15, %rbp
movq %r15, %rdi
leaq 0x4(%rsp), %rsi
movq %r13, %rdx
xorl %ecx, %ecx
movq %r14, %r8
callq 0xa3c8
movl $0x1, (%rsp)
movq 0x10(%rsp), %rdi
movq %r13, %rsi
movq %r14, %r15
movq %r14, %rdx
movq 0x8(%rsp), %rcx
callq 0x15fb5
movl %eax, %r14d
movl 0x4(%rsp), %r12d
movq %r13, %rdi
callq 0xb872
testb %r14b, %r14b
movq %r15, %r14
movq %rbp, %r15
movq 0x18(%rsp), %rdi
jne 0x383e
incl %edi
jmp 0x376d
pushq $-0x1
popq %r12
movl %r12d, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3852
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0xb872
movq %rbx, %rdi
callq 0x22c0
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getExtendedGrandchildren(Graph::GraphTraversal&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>&, bool*, bool const&) const
void Graph::getExtendedGrandchildren(Graph::GraphTraversal &graphTraversal, unordered_set<uint32_t> &extendedGrandchildren, bool *isUnconfined, const bool &stopAtFirst) const {
    while (graphTraversal.curEdgeOffset != NONE) {
        uint32_t neighbor = (*edgeBuffer)[graphTraversal.curEdgeOffset];
        uint32_t outerNeighbor;
        bool exactlyOne;
        getOuterNeighbor(graphTraversal.curNode, neighbor, outerNeighbor, exactlyOne);
        if (isUnconfined != NULL && outerNeighbor == NONE) {
            *isUnconfined = true;
            break;
        } else if (exactlyOne) {
            extendedGrandchildren.insert(outerNeighbor);
            if (stopAtFirst) {
                return;
            }
        }
        getNextEdge(graphTraversal);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, 0x20(%rsp)
movq %rcx, %rbx
movq %rdx, 0x18(%rsp)
movq %rsi, %r12
movq %rdi, %r13
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
leaq 0x10(%rsp), %r14
leaq 0xf(%rsp), %r15
movl 0x4(%r12), %eax
cmpq %rbp, %rax
je 0x3900
movq 0x18(%r13), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x14(%rsp)
movq %r13, %rdi
movq %r12, %rsi
leaq 0x14(%rsp), %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0xa51e
testq %rbx, %rbx
je 0x38d2
cmpl $-0x1, 0x10(%rsp)
je 0x38fd
cmpb $0x1, 0xf(%rsp)
jne 0x38f0
movq 0x18(%rsp), %rdi
movq %r14, %rsi
callq 0xbc1a
movq 0x20(%rsp), %rax
cmpb $0x1, (%rax)
je 0x3900
movq %r13, %rdi
movq %r12, %rsi
callq 0xa1ca
jmp 0x3898
movb $0x1, (%rbx)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalNodeTheta3(unsigned int, unsigned int const&) const
uint32_t Graph::getOptimalNodeTheta3(const uint32_t initialMaxDegreeNode, const uint32_t &initialMaxDegree) const {
    uint32_t maxDegree = initialMaxDegree;
    uint32_t maxDegreeNode = initialMaxDegreeNode;
    if (maxDegree >= 4) {
        uint32_t maxNeighborsAtDistance2 = 0;
        GraphTraversal graphTraversal(*this, maxDegreeNode);
        while (graphTraversal.curNode != NONE) {
            unordered_set<uint32_t> neighborsAtDistance2;
            getNeighborsAtDistance2(graphTraversal.curNode, neighborsAtDistance2);
            if (neighborsAtDistance2.size() > maxNeighborsAtDistance2) {
                maxDegreeNode = graphTraversal.curNode;
                maxNeighborsAtDistance2 = neighborsAtDistance2.size();
            }
            getNextNode(graphTraversal);
        }
    }
    return maxDegreeNode;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl (%rdx), %eax
movl %esi, (%rsp)
cmpl $0x4, %eax
jb 0x39c0
movq %rdi, %rbx
movq %rsp, %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0x9dde
leaq 0x40(%rsp), %r13
xorl %ebp, %ebp
leaq 0x10(%rsp), %r15
leaq 0x4(%rsp), %r12
cmpl $-0x1, 0x8(%rsp)
je 0x39bd
movq %r13, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%r13)
movl $0x3f800000, 0x30(%rsp) # imm = 0x3F800000
movups %xmm0, -0x8(%r13)
orl $-0x1, 0x4(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
xorl %r8d, %r8d
callq 0x2966
movq 0x28(%rsp), %rax
movl %ebp, %ecx
cmpq %rcx, %rax
jbe 0x39a8
movl 0x8(%rsp), %ecx
movl %ecx, (%rsp)
movl %eax, %ebp
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9cf8
movq %r15, %rdi
callq 0xad26
jmp 0x3950
movl (%rsp), %esi
movl %esi, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x39d3
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0xad26
movq %rbx, %rdi
callq 0x22c0
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node() const
uint32_t Graph::getOptimalDegree4Node() const {
    uint32_t node = getOptimalDegree4Node1();
    if (node == NONE) {
        node = getOptimalDegree4Node2();
        if (node == NONE) {
            uint32_t maxNodeWithCond = NONE;
            uint32_t maxNode = NONE;
            getOptimalDegree4Node3(maxNodeWithCond, maxNode);
            if (maxNodeWithCond != NONE) {
                node = maxNodeWithCond;
            } else {
                node = maxNode;
            }
        }
    }
    //cout << "branching on optimal degree 4 node " << node << "\n";
    return node;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x3a36
cmpl $-0x1, %eax
jne 0x3a2d
movq %rbx, %rdi
callq 0x3bca
cmpl $-0x1, %eax
jne 0x3a2d
leaq 0x4(%rsp), %r14
orl $-0x1, (%r14)
movq %rsp, %rdx
orl $-0x1, (%rdx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3d52
movl (%r14), %eax
pushq $-0x1
popq %rcx
cmpl %ecx, %eax
jne 0x3a2d
movl (%rsp), %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node1() const
uint32_t Graph::getOptimalDegree4Node1() const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        if (getNodeDegree(graphTraversal.curNode) == 4) {
            vector<uint32_t> neighborsV;
            gatherNeighbors(graphTraversal.curNode, neighborsV);
            for (uint32_t neighborV: neighborsV) {
                if (getNodeDegree(neighborV) == 3) {
                    vector<uint32_t> neighborsN;
                    gatherNeighbors(neighborV, neighborsN);
                    if (edgeExists(neighborsN[0], neighborsN[1]) || edgeExists(neighborsN[0], neighborsN[2]) || edgeExists(neighborsN[1], neighborsN[2])) {
                        return graphTraversal.curNode;
                    }
                }
            }
        }
        getNextNode(graphTraversal);
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
leaq 0x18(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x270e
leaq 0x20(%rsp), %r12
leaq 0x14(%rsp), %r13
cmpl $-0x1, 0x18(%rsp)
je 0x3b88
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa5ce
cmpl $0x4, %eax
jne 0x3b78
andq $0x0, 0x50(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
orl $-0x1, 0x20(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x40(%rsp), %rdx
xorl %ecx, %ecx
movq %r12, %r8
callq 0xa3c8
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %r15
cmpq %r15, %r14
je 0x3b64
movl (%r14), %eax
movl %eax, 0x14(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xa5ce
cmpl $0x3, %eax
jne 0x3b5b
andq $0x0, 0x30(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
orl $-0x1, 0x10(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
xorl %ecx, %ecx
leaq 0x10(%rsp), %r8
callq 0xa3c8
movq 0x20(%rsp), %rsi
leaq 0x4(%rsi), %rdx
movq %rbx, %rdi
callq 0x9e3a
testb %al, %al
jne 0x3b44
movq 0x20(%rsp), %rsi
leaq 0x8(%rsi), %rdx
movq %rbx, %rdi
callq 0x9e3a
testb %al, %al
jne 0x3b44
movq 0x20(%rsp), %rdx
leaq 0x4(%rdx), %rsi
addq $0x8, %rdx
movq %rbx, %rdi
callq 0x9e3a
movb $0x1, %bpl
testb %al, %al
je 0x3b4e
movl 0x18(%rsp), %eax
movl %eax, 0xc(%rsp)
xorl %ebp, %ebp
movq %r12, %rdi
callq 0xb872
testb %bpl, %bpl
je 0x3b64
addq $0x4, %r14
jmp 0x3ab2
leaq 0x40(%rsp), %rdi
callq 0xb872
cmpq %r15, %r14
leaq 0x18(%rsp), %r14
jne 0x3b8f
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9cf8
jmp 0x3a61
pushq $-0x1
popq %rax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3bb5
jmp 0x3ba6
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0xb872
jmp 0x3bb8
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0xb872
movq %rbx, %rdi
callq 0x22c0
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node2() const
uint32_t Graph::getOptimalDegree4Node2() const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        if (getNodeDegree(graphTraversal.curNode) == 4) {
            vector<uint32_t> neighborsV;
            gatherNeighbors(graphTraversal.curNode, neighborsV);
            for (uint32_t neighborV: neighborsV) {
                if (getNodeDegree(neighborV) == 3) {
                    vector<uint32_t> neighborsN;
                    gatherNeighbors(neighborV, neighborsN);
                    for (uint32_t neighborN: neighborsN) {
                        if (neighborN != graphTraversal.curNode && getNodeDegree(neighborN) == 4) {
                            return graphTraversal.curNode;
                        }
                    }
                }
            }
        }
        getNextNode(graphTraversal);
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
leaq 0x14(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x270e
leaq 0x1c(%rsp), %r12
cmpl $-0x1, 0x14(%rsp)
je 0x3d0f
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa5ce
cmpl $0x4, %eax
jne 0x3cff
andq $0x0, 0x50(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
orl $-0x1, 0x20(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x40(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x20(%rsp), %r8
callq 0xa3c8
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %r15
cmpq %r15, %r14
je 0x3ceb
movl (%r14), %eax
movl %eax, 0x1c(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xa5ce
cmpl $0x3, %eax
jne 0x3cdf
andq $0x0, 0x30(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
orl $-0x1, 0xc(%rsp)
movq %rbx, %rdi
movq %r12, %rbp
movq %r12, %rsi
leaq 0x20(%rsp), %rdx
xorl %ecx, %ecx
leaq 0xc(%rsp), %r8
callq 0xa3c8
movq 0x20(%rsp), %r12
movq 0x28(%rsp), %r13
cmpq %r13, %r12
je 0x3ccd
movl (%r12), %eax
movl %eax, 0xc(%rsp)
cmpl 0x14(%rsp), %eax
je 0x3cbf
movq %rbx, %rdi
leaq 0xc(%rsp), %rsi
callq 0xa5ce
cmpl $0x4, %eax
je 0x3cc5
addq $0x4, %r12
jmp 0x3c9a
movl 0x14(%rsp), %eax
movl %eax, 0x10(%rsp)
leaq 0x20(%rsp), %rdi
callq 0xb872
cmpq %r13, %r12
jne 0x3ce8
movq %rbp, %r12
addq $0x4, %r14
jmp 0x3c43
movq %rbp, %r12
leaq 0x40(%rsp), %rdi
callq 0xb872
cmpq %r15, %r14
leaq 0x14(%rsp), %r14
jne 0x3d16
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9cf8
jmp 0x3bf0
pushq $-0x1
popq %rax
movl %eax, 0x10(%rsp)
movl 0x10(%rsp), %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3d2d
jmp 0x3d32
movq %rax, %rbx
jmp 0x3d3f
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0xb872
leaq 0x40(%rsp), %rdi
callq 0xb872
movq %rbx, %rdi
callq 0x22c0
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getCommonNeighbors(unsigned int const&, unsigned int const&, std::vector<unsigned int, std::allocator<unsigned int>>&, unsigned int const&) const
void Graph::getCommonNeighbors(const uint32_t &node1, const uint32_t &node2, vector<uint32_t> &commonNeighbors, const uint32_t &atLeast) const {
    uint32_t pos1 = (!mapping ? node1 : idToPos->at(node1));
    uint32_t pos2 = (!mapping ? node2 : idToPos->at(node2));
    assert(!nodeIndex[pos1].removed && !nodeIndex[pos2].removed);
    uint32_t count = 0;
    vector<uint32_t> neighbors1;
    gatherNeighbors(node1, neighbors1);
    for (auto &neighbor: neighbors1) {
        if (edgeExists(neighbor, node2)) {
            commonNeighbors.push_back(neighbor);
            if (atLeast && ++count == atLeast) {
                return;
            }
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, (%rsp)
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %r13
movq %rdi, %r12
movb 0x3c(%rdi), %cl
movq %rsi, %rax
cmpb $0x1, %cl
jne 0x4337
movq 0x40(%r12), %rdi
movq %r13, %rsi
callq 0xb880
movb 0x3c(%r12), %cl
movl (%rax), %ebx
movq %r15, %rax
testb $0x1, %cl
je 0x434e
movq 0x40(%r12), %rdi
movq %r15, %rsi
callq 0xb880
movq (%r12), %rcx
imulq $0xc, %rbx, %rdx
cmpb $0x0, 0x8(%rcx,%rdx)
jne 0x43f5
movl (%rax), %eax
imulq $0xc, %rax, %rax
cmpb $0x1, 0x8(%rcx,%rax)
je 0x43f5
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0xc(%rsp), %r8
orl $-0x1, (%r8)
xorl %ebp, %ebp
movq %r12, %rdi
movq %r13, %rsi
xorl %ecx, %ecx
callq 0xa3c8
movq 0x10(%rsp), %r13
movq 0x18(%rsp), %rbx
cmpq %rbx, %r13
je 0x43dc
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x9e3a
testb %al, %al
je 0x43d6
movq %r14, %rdi
movq %r13, %rsi
callq 0xa1ac
movq (%rsp), %rax
movl (%rax), %eax
testl %eax, %eax
je 0x43d6
incl %ebp
cmpl %eax, %ebp
je 0x43dc
addq $0x4, %r13
jmp 0x43a4
leaq 0x10(%rsp), %rdi
callq 0xb872
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x12d96(%rip), %rdi     # 0x17192
leaq 0x12c43(%rip), %rsi     # 0x17046
leaq 0x12dbd(%rip), %rcx     # 0x171c7
movl $0x463, %edx            # imm = 0x463
callq 0x2100
jmp 0x4416
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0xb872
movq %rbx, %rdi
callq 0x22c0
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getEffectiveNodeMeasure(unsigned int const&) const
uint32_t Graph::getEffectiveNodeMeasure(const uint32_t &bound) const {
    uint32_t measure = 0;
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        uint32_t degree = getNodeDegree(graphTraversal.curNode);
        if (degree > 2) {
            measure += (degree - 2);
        }
        if (bound != NONE && measure > bound) {
            break;
        }
        getNextNode(graphTraversal);
    }
    return measure;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x270e
xorl %r12d, %r12d
xorl %ebp, %ebp
cmpl $-0x1, 0x8(%rsp)
je 0x47a6
movq %r14, %rdi
movq %r15, %rsi
callq 0xa5ce
subl $0x2, %eax
cmovbl %r12d, %eax
addl %eax, %ebp
movl (%rbx), %eax
cmpl $-0x1, %eax
setne %cl
cmpl %eax, %ebp
seta %al
testb %al, %cl
jne 0x47a6
movq %r14, %rdi
movq %r15, %rsi
callq 0x9cf8
jmp 0x476d
movl %ebp, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::isFineInstance() const
bool Graph::isFineInstance() const {
    GraphTraversal graphTraversal(*this);
    bool fineInstance = false;
    while (graphTraversal.curNode != NONE) {
        uint32_t degree = getNodeDegree(graphTraversal.curNode);
        if (degree >= 4) {
            fineInstance = true;
        } else if (degree == 1) {
            return false;
        }
        getNextNode(graphTraversal);
    }
    return fineInstance;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq %rsp, %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x270e
xorl %ebp, %ebp
cmpl $-0x1, (%rsp)
je 0x507f
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa5ce
movb $0x1, %r15b
cmpl $0x3, %eax
ja 0x506d
movl %ebp, %r15d
cmpl $0x1, %eax
je 0x507d
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9cf8
movl %r15d, %ebp
jmp 0x504c
xorl %ebp, %ebp
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getGoodFunnel(unsigned int&, unsigned int&) const
bool Graph::getGoodFunnel(uint32_t &node1, uint32_t &node2) const {
    vector<Funnel> funnels;
    if (getFunnels(funnels)) {
        Funnel &funnel = funnels.back();
        node1 = funnel.a;
        node2 = funnel.v;
        //cout << "branching on good funnel ";
        //funnel.print();
        return true;
    } else {
        for (uint32_t i = 0 ; i < 2 ; i++) {
            for (auto &funnel: funnels) {
                uint32_t bDegree = getNodeDegree(funnel.b);
                uint32_t cDegree = getNodeDegree(funnel.c);
                if (!i && bDegree == 4 && cDegree == 4 || i && (bDegree == 4 || cDegree == 4)) {
                    node1 = funnel.a;
                    node2 = funnel.v;
                    //cout << "branching on good funnel ";
                    //funnel.print();
                    return true;
                }
            }
        }
    }
    return false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
xorps %xmm0, %xmm0
movq %rsp, %rsi
movaps %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x4a0c
testb %al, %al
je 0x50d8
movq 0x8(%rsp), %r12
movl -0x14(%r12), %eax
movl %eax, (%r14)
addq $-0x4, %r12
jmp 0x5153
movq %rbx, 0x20(%rsp)
xorl %r13d, %r13d
cmpl $0x2, %r13d
je 0x5174
movq (%rsp), %r12
movq 0x8(%rsp), %rbx
cmpq %rbx, %r12
je 0x513e
leaq 0x4(%r12), %rsi
movq %r15, %rdi
callq 0xa5ce
movl %eax, %ebp
leaq 0x8(%r12), %rsi
movq %r15, %rdi
callq 0xa5ce
testl %r13d, %r13d
setne %cl
sete %sil
cmpl $0x4, %ebp
sete %dl
andb %dl, %sil
cmpl $0x4, %eax
sete %al
testb %al, %sil
jne 0x5143
orb %al, %dl
andb %dl, %cl
jne 0x5143
addq $0x14, %r12
jmp 0x50f3
incl %r13d
jmp 0x50e0
movl (%r12), %eax
movl %eax, (%r14)
addq $0x10, %r12
movq 0x20(%rsp), %rbx
movl (%r12), %eax
movl %eax, (%rbx)
movb $0x1, %bl
movq %rsp, %rdi
callq 0xc4de
movl %ebx, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %ebx, %ebx
jmp 0x515b
jmp 0x517c
jmp 0x517c
movq %rax, %rbx
movq %rsp, %rdi
callq 0xc4de
movq %rbx, %rdi
callq 0x22c0
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::collectZeroDegreeNodes()
void Graph::collectZeroDegreeNodes() {
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed && !nodeIndex[pos].edges) {
            zeroDegreeNodes.push_back((!mapping ? pos : posToId->at(pos)));
            nodeIndex[pos].removed = true;
        }
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
leaq 0x20(%rdi), %r14
movq (%rdi), %rdi
xorl %ecx, %ecx
pushq $0xc
popq %r15
leaq 0x4(%rsp), %r12
movl %ecx, 0x4(%rsp)
movl %ecx, %esi
movq 0x8(%rbx), %rax
subq %rdi, %rax
cqto
idivq %r15
cmpq %rsi, %rax
jbe 0x6107
imulq $0xc, %rsi, %rax
cmpb $0x0, 0x8(%rdi,%rax)
jne 0x6103
addq %rdi, %rax
cmpl $0x0, 0x4(%rax)
jne 0x6103
cmpb $0x1, 0x3c(%rbx)
movq %r12, %rax
jne 0x60e8
movq 0x48(%rbx), %rdi
callq 0x9e18
movq %r14, %rdi
movq %rax, %rsi
callq 0xa1ac
movl 0x4(%rsp), %ecx
movq (%rbx), %rdi
imulq $0xc, %rcx, %rax
movb $0x1, 0x8(%rdi,%rax)
incl %ecx
jmp 0x60ab
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::addPalmTreeArc(std::unordered_map<unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<unsigned int, std::allocator<unsigned int>>>>>&, unsigned int const&, unsigned int const&)
void Graph::addPalmTreeArc(unordered_map<uint32_t, vector<uint32_t> > &palmTree, const uint32_t &node, const uint32_t &neighbor) {
    auto res = palmTree.find(node);
    if (res == palmTree.end()) {
        vector<uint32_t> tmp;
        tmp.push_back(neighbor);
        palmTree.insert({node, tmp});
    } else {
        res->second.push_back(neighbor);
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x40, %rsp
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
callq 0xcee4
testq %rax, %rax
je 0x6f02
addq $0x10, %rax
movq %rax, %rdi
movq %r15, %rsi
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
jmp 0xa1ac
xorps %xmm0, %xmm0
movq %rsp, %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
movq %r15, %rsi
callq 0xa1ac
leaq 0x20(%rsp), %rdi
movq %rsp, %rdx
movq %r14, %rsi
callq 0xa8fe
leaq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0xcf60
leaq 0x28(%rsp), %rdi
callq 0xb872
movq %rsp, %rdi
callq 0xb872
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xb872
jmp 0x6f65
jmp 0x6f62
movq %rax, %rbx
movq %rsp, %rdi
callq 0xb872
movq %rbx, %rdi
callq 0x22c0
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::printWithGraphTraversal(bool) const
void Graph::printWithGraphTraversal(bool direction) const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        while (graphTraversal.curEdgeOffset != NONE) {
            if (direction || !direction && graphTraversal.curNode < (*edgeBuffer)[graphTraversal.curEdgeOffset]) {
                cout << graphTraversal.curNode << "\t" << (*edgeBuffer)[graphTraversal.curEdgeOffset] << "\n";
            }
            getNextEdge(graphTraversal);
        }
        getNextNode(graphTraversal);
    }
    cout << "Zero degree nodes: \n";
    for (uint32_t i = 0 ; i < zeroDegreeNodes.size() ; i++) {
        cout << zeroDegreeNodes[i] << "\n";
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
movq %rsp, %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x270e
movl $0xffffffff, %r15d      # imm = 0xFFFFFFFF
leaq 0xe4d6(%rip), %r12      # 0x17575
leaq 0xe4e4(%rip), %r13      # 0x1758a
cmpl $-0x1, (%rsp)
je 0x911b
movl 0x4(%rsp), %eax
cmpq %r15, %rax
je 0x910e
movl (%rsp), %esi
testb %bpl, %bpl
jne 0x90c9
movq 0x18(%rbx), %rcx
movq (%rcx), %rcx
cmpl (%rcx,%rax,4), %esi
jae 0x9101
movq 0x18f00(%rip), %rdi     # 0x21fd0
callq 0x2110
movq %rax, %rdi
movq %r12, %rsi
callq 0x2170
movq 0x18(%rbx), %rcx
movl 0x4(%rsp), %edx
movq (%rcx), %rcx
movl (%rcx,%rdx,4), %esi
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
movq %r13, %rsi
callq 0x2170
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa1ca
jmp 0x90ac
movq %rbx, %rdi
movq %r14, %rsi
callq 0x9cf8
jmp 0x90a6
movq 0x18eae(%rip), %r14     # 0x21fd0
leaq 0xe44e(%rip), %rsi      # 0x17577
movq %r14, %rdi
callq 0x2170
xorl %eax, %eax
leaq 0xe450(%rip), %r15      # 0x1758a
movl %eax, %r12d
movq 0x20(%rbx), %rax
movq 0x28(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r12, %rcx
jbe 0x916f
movl (%rax,%r12,4), %esi
movq %r14, %rdi
callq 0x2110
movq %rax, %rdi
movq %r15, %rsi
callq 0x2170
leal 0x1(%r12), %eax
jmp 0x913a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::printEdgeCounts() const
void Graph::printEdgeCounts() const {
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (nodeIndex[pos].removed) {
            continue;
        }
        uint32_t node = (!mapping ? pos : (*posToId)[pos]);
        cout << "Node " << node << " has " << nodeIndex[pos].edges << " edges\n";
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorl %ebp, %ebp
pushq $0xc
popq %r15
leaq 0xe3f9(%rip), %r13      # 0x17592
movl %ebp, %ebp
movq (%rbx), %rcx
movq 0x8(%rbx), %rax
subq %rcx, %rax
cqto
idivq %r15
cmpq %rbp, %rax
jbe 0x921e
imulq $0xc, %rbp, %r12
cmpb $0x0, 0x8(%rcx,%r12)
jne 0x9217
cmpb $0x1, 0x3c(%rbx)
movq %rbp, %r14
jne 0x91cf
movq 0x48(%rbx), %rax
movq (%rax), %rax
movl (%rax,%rbp,4), %r14d
movq 0x18dfa(%rip), %rdi     # 0x21fd0
leaq 0xeeeb(%rip), %rsi      # 0x180c8
callq 0x2170
movq %rax, %rdi
movq %r14, %rsi
callq 0x2110
movq %rax, %rdi
leaq 0xe395(%rip), %rsi      # 0x1758c
callq 0x2170
movq (%rbx), %rcx
movl 0x4(%rcx,%r12), %esi
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
movq %r13, %rsi
callq 0x2170
incl %ebp
jmp 0x9199
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::parseNodeIDs(char*, unsigned int*, unsigned int*)
void Graph::parseNodeIDs(char *buf, uint32_t *sourceNode, uint32_t *targetNode) {
    uint32_t *node = sourceNode;
    for (int i = 0 ; i < 2 ; i++) {
        uint32_t id = 0;
        for (; *buf != ' ' && *buf != '\t' && *buf != '\n' && *buf != '\0' ; buf++) {
            id = id * 10 + (*buf - '0');
        }
        *node = id;
        node = targetNode;
        for (; *buf == ' ' || *buf == '\t' ; buf++);
    }
}

// Assembly:
xorl %eax, %eax
movabsq $0x100000601, %rcx      # imm = 0x100000601
cmpl $0x2, %eax
je 0x981c
xorl %r8d, %r8d
movzbl (%rdi), %r9d
cmpq $0x20, %r9
ja 0x97ec
btq %r9, %rcx
jb 0x9800
movsbl %r9b, %r9d
imull $0xa, %r8d, %r8d
addl %r9d, %r8d
addl $-0x30, %r8d
incq %rdi
jmp 0x97dc
movl %r8d, (%rsi)
movzbl (%rdi), %esi
cmpl $0x20, %esi
je 0x9810
cmpl $0x9, %esi
jne 0x9815
incq %rdi
jmp 0x9803
incl %eax
movq %rdx, %rsi
jmp 0x97d4
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::fill(unsigned int const&, bool const&)
void Graph::fill(const uint32_t &size, const bool &checkIndependentSet) {
    //cout << "start missing nodes from " << nodeIndex.size() << " to " << size << endl;
    while (nodeIndex.size() < size) {
        nodeIndex.push_back(NodeInfo(edgeBuffer->size(), 0));
        if (!checkIndependentSet) {
            zeroDegreeNodes.push_back(nodeIndex.size()-1);
            nodeIndex[nodeIndex.size()-1].removed = true;
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
leaq 0x20(%rdi), %r12
pushq $0xc
popq %rbp
leaq 0xc(%rsp), %r13
movq 0x8(%r15), %rax
subq (%r15), %rax
cqto
idivq %rbp
movl (%r14), %ecx
cmpq %rcx, %rax
jae 0x98a9
movq 0x18(%r15), %rax
movq 0x8(%rax), %rcx
subq (%rax), %rcx
shrq $0x2, %rcx
movl %ecx, 0xc(%rsp)
andl $0x0, 0x10(%rsp)
movb $0x0, 0x14(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0xc224
cmpb $0x0, (%rbx)
jne 0x9841
movq 0x8(%r15), %rax
subq (%r15), %rax
cqto
idivq %rbp
decl %eax
movl %eax, 0xc(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0xde6c
movq 0x8(%r15), %rax
movb $0x1, -0x4(%rax)
jmp 0x9841
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getNextNode(Graph::GraphTraversal&) const
void getNextNode(GraphTraversal &graphTraversal) const {
        bool firstTime = true;
        uint32_t pos;
        if (graphTraversal.curNode == NONE) {
            pos = NONE;
        } else {
            pos = (!mapping ? graphTraversal.curNode : idToPos->at(graphTraversal.curNode));
        }
        while (firstTime || pos == NONE || !nodeIndex[pos].edges) {
            if (pos == NONE && nodeIndex.size() || pos != NONE && pos < nodeIndex.size() - 1) {
                pos = (pos == NONE ? 0 : pos+1);
                if (nodeIndex[pos].removed) {
                    continue;
                }
                graphTraversal.curNode = (!mapping ? pos : (*posToId)[pos]);
                uint32_t offset = getFirstValidNeighborOffset(pos);
                if ((graphTraversal.curEdgeOffset = offset) != NONE) {
                    firstTime = false;
                }
            }
            else {
                graphTraversal.curNode = NONE;
                graphTraversal.curEdgeOffset = NONE;
                break;
            }
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movl (%rsi), %esi
cmpl $-0x1, %esi
je 0x9d28
cmpb $0x1, 0x3c(%r14)
jne 0x9d2b
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xb880
movl (%rax), %esi
jmp 0x9d2b
pushq $-0x1
popq %rsi
leaq 0xc(%rsp), %r15
movl %esi, (%r15)
movb $0x1, %bpl
pushq $0xc
popq %r12
movq (%r14), %rdi
movq 0x8(%r14), %r8
incl %esi
movq %r8, %rcx
subq %rdi, %rcx
movl %esi, %eax
subl $0x1, %eax
setb %dl
orb %bpl, %dl
movl %eax, %r9d
testb $0x1, %dl
je 0x9d67
testl %esi, %esi
jne 0x9d72
cmpq %rdi, %r8
jne 0x9d82
jmp 0x9dcc
imulq $0xc, %r9, %rax
cmpl $0x0, 0x4(%rdi,%rax)
jne 0x9dd0
movq %rcx, %rax
cqto
idivq %r12
decq %rax
cmpq %r9, %rax
jbe 0x9dcc
movl %esi, 0xc(%rsp)
movl %esi, %eax
imulq $0xc, %rax, %rdx
incl %esi
cmpb $0x0, 0x8(%rdi,%rdx)
jne 0x9d49
cmpb $0x1, 0x3c(%r14)
jne 0x9da8
movq 0x48(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax,4), %esi
jmp 0x9daa
decl %esi
movl %esi, (%rbx)
movq %r14, %rdi
movq %r15, %rsi
callq 0xac36
movl %eax, 0x4(%rbx)
cmpl $-0x1, %eax
sete %al
andb %al, %bpl
movl 0xc(%rsp), %esi
jmp 0x9d3a
orq $-0x1, (%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getNextEdge(Graph::GraphTraversal&) const
void getNextEdge(GraphTraversal &graphTraversal) const {
        assert(graphTraversal.curNode != NONE && graphTraversal.curEdgeOffset != NONE);
        uint32_t pos = (!mapping ? graphTraversal.curNode : idToPos->at(graphTraversal.curNode));
        uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
        graphTraversal.curEdgeOffset++;
        bool validNeighbor = false;
        for ( ; graphTraversal.curEdgeOffset  < nextNodeOffset ; graphTraversal.curEdgeOffset++) {
            uint32_t nPos = (!mapping ? (*edgeBuffer)[graphTraversal.curEdgeOffset] : idToPos->at((*edgeBuffer)[graphTraversal.curEdgeOffset]));
            if (!nodeIndex[nPos].removed) {
                validNeighbor = true;
                break;
            }
        }
        if (!validNeighbor) {
            graphTraversal.curEdgeOffset = NONE;
        }
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movl (%rsi), %esi
cmpl $-0x1, %esi
je 0xa28c
cmpl $-0x1, 0x4(%rbx)
je 0xa28c
movq %rdi, %r14
cmpb $0x1, 0x3c(%rdi)
jne 0xa1fe
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xb880
movl (%rax), %esi
movl %esi, %edi
movq (%r14), %rcx
movq 0x8(%r14), %rax
subq %rcx, %rax
pushq $0xc
popq %r8
cqto
idivq %r8
decq %rax
cmpq %rdi, %rax
jne 0xa22c
movq 0x18(%r14), %rax
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
jmp 0xa236
incl %esi
imulq $0xc, %rsi, %rax
movl (%rcx,%rax), %r15d
movl 0x4(%rbx), %eax
incl %eax
movl %eax, 0x4(%rbx)
cmpl %r15d, %eax
jae 0xa282
cmpb $0x0, 0x3c(%r14)
movl %eax, %eax
je 0xa268
movq 0x18(%r14), %rcx
movq 0x40(%r14), %rdi
shlq $0x2, %rax
addq (%rcx), %rax
movq %rax, %rsi
callq 0xb880
movq (%r14), %rcx
jmp 0xa273
movq 0x18(%r14), %rdx
shlq $0x2, %rax
addq (%rdx), %rax
movl (%rax), %eax
imulq $0xc, %rax, %rax
cmpb $0x0, 0x8(%rcx,%rax)
jne 0xa236
jmp 0xa286
orl $-0x1, 0x4(%rbx)
popq %rbx
popq %r14
popq %r15
retq
leaq 0xd3f1(%rip), %rdi      # 0x17684
leaq 0xd431(%rip), %rsi      # 0x176cb
leaq 0xd438(%rip), %rcx      # 0x176d9
movl $0x136, %edx            # imm = 0x136
callq 0x2100
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::findEdgeOffset(unsigned int const&, unsigned int const&) const
uint32_t findEdgeOffset(const uint32_t &node, const uint32_t &neighbor) const {
        uint32_t pos = (!mapping ? node : idToPos->at(node));
        uint32_t nPos = (!mapping ? neighbor : idToPos->at(neighbor));
        assert(!nodeIndex[pos].removed && !nodeIndex[nPos].removed);
        uint32_t offset = nodeIndex[pos].offset;
        uint32_t endOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() - 1 : nodeIndex[pos+1].offset - 1);
        if (offset == endOffset+1) {
            return NONE;
        }
        uint32_t startIndex = 0;
        uint32_t endIndex = endOffset - offset;
        uint32_t index = (endIndex - startIndex) / 2;
        while (startIndex != endIndex) {
            if ((*edgeBuffer)[offset + startIndex + index] == neighbor) {
                return offset + startIndex + index;
            } else if ((*edgeBuffer)[offset + startIndex + index] < neighbor) {
                startIndex += index + 1;
            } else {
                if (!index) {
                    return NONE;
                }
                endIndex = startIndex + index - 1;
            }
            index = (endIndex - startIndex) / 2;
        }
        return ((*edgeBuffer)[offset + startIndex + index] == neighbor ? offset + startIndex + index : NONE);
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rdi, %r14
movb 0x3c(%rdi), %cl
cmpb $0x1, %cl
jne 0xa2cf
movq 0x40(%r14), %rdi
callq 0xb880
movq %rax, %rsi
movb 0x3c(%r14), %cl
movl (%rsi), %r15d
movq %rbx, %rax
testb $0x1, %cl
je 0xa2e6
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xb880
movq (%r14), %rsi
imulq $0xc, %r15, %rcx
cmpb $0x0, 0x8(%rsi,%rcx)
jne 0xa3a8
movl (%rax), %eax
imulq $0xc, %rax, %rax
cmpb $0x1, 0x8(%rsi,%rax)
je 0xa3a8
addq %rsi, %rcx
movl (%rcx), %ecx
movq 0x8(%r14), %rax
subq %rsi, %rax
pushq $0xc
popq %rdi
cqto
idivq %rdi
decq %rax
cmpq %r15, %rax
jne 0xa336
movq 0x18(%r14), %rax
movq 0x8(%rax), %rdx
subq (%rax), %rdx
shrq $0x2, %rdx
jmp 0xa340
incl %r15d
imulq $0xc, %r15, %rax
movl (%rsi,%rax), %edx
pushq $-0x1
popq %rsi
cmpl %edx, %ecx
jne 0xa34b
movl %esi, %eax
jmp 0xa3a2
movl %ecx, %eax
notl %eax
addl %eax, %edx
movq 0x18(%r14), %rax
movl (%rbx), %edi
movq (%rax), %r8
xorl %r9d, %r9d
movl %edx, %r10d
movl %r10d, %r11d
shrl %r11d
addl %r9d, %r11d
leal (%r11,%rcx), %eax
movl (%r8,%rax,4), %ebx
cmpl %edx, %r9d
je 0xa398
cmpl %edi, %ebx
je 0xa3a2
jae 0xa384
incl %r11d
movl %r11d, %r9d
jmp 0xa390
cmpl $0x2, %r10d
jb 0xa347
decl %r11d
movl %r11d, %edx
movl %edx, %r10d
subl %r9d, %r10d
jmp 0xa360
cmpl %edi, %ebx
pushq $-0x1
popq %rcx
cmovel %eax, %ecx
movl %ecx, %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0xd35a(%rip), %rdi      # 0x17709
leaq 0xd315(%rip), %rsi      # 0x176cb
leaq 0xd380(%rip), %rcx      # 0x1773d
movl $0xcb, %edx
callq 0x2100
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: bool Graph::gatherNeighbors<std::vector<unsigned int, std::allocator<unsigned int>>, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>>(unsigned int const&, std::vector<unsigned int, std::allocator<unsigned int>>&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>> const*, unsigned int const&) const
bool gatherNeighbors(const uint32_t &node, Container &neighbors, const OriginalNodesContainer *nodes = NULL, const uint32_t &maxNeighbors = NONE) const {
        uint32_t pos = (!mapping ? node : idToPos->at(node));
        uint32_t neighborCount = nodeIndex[pos].edges;
        uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
        for (uint32_t offset = nodeIndex[pos].offset ; offset < nextNodeOffset && neighborCount; offset++) {
            uint32_t nPos = (!mapping ? (*edgeBuffer)[offset] : idToPos->at((*edgeBuffer)[offset]));
            if (!nodeIndex[nPos].removed && (nodes == NULL || nodes->find((*edgeBuffer)[offset]) == nodes->end())) {
                neighbors.insert(neighbors.end(), (*edgeBuffer)[offset]);
                if (maxNeighbors != NONE && neighbors.size() > maxNeighbors) {
                    return false;
                }
                neighborCount--;
            }
        }
        return true;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r8, 0x8(%rsp)
movq %rcx, 0x10(%rsp)
movq %rdx, (%rsp)
movq %rdi, %r12
cmpb $0x1, 0x3c(%rdi)
jne 0xa3fa
movq 0x40(%r12), %rdi
callq 0xb880
movq %rax, %rsi
movl (%rsi), %r8d
movq (%r12), %rcx
movq 0x8(%r12), %rax
imulq $0xc, %r8, %rdi
leaq (%rcx,%rdi), %rsi
subq %rcx, %rax
pushq $0xc
popq %r9
cqto
idivq %r9
decq %rax
cmpq %r8, %rax
jne 0xa434
movq 0x18(%r12), %rdx
movq 0x8(%rdx), %rax
subq (%rdx), %rax
shrq $0x2, %rax
jmp 0xa43e
incl %r8d
imulq $0xc, %r8, %rax
movl (%rcx,%rax), %eax
movl 0x4(%rcx,%rdi), %r13d
movl (%rsi), %ebx
movl %eax, %r14d
leaq (,%rbx,4), %r15
cmpq %r14, %rbx
setae %al
testl %r13d, %r13d
sete %bpl
orb %al, %bpl
jne 0xa50c
cmpb $0x0, 0x3c(%r12)
je 0xa485
movq 0x18(%r12), %rax
movq 0x40(%r12), %rdi
movq (%rax), %rsi
addq %r15, %rsi
callq 0xb880
jmp 0xa490
movq 0x18(%r12), %rax
movq (%rax), %rax
addq %r15, %rax
movl (%rax), %eax
movq (%r12), %rcx
imulq $0xc, %rax, %rax
cmpb $0x0, 0x8(%rcx,%rax)
jne 0xa500
movq 0x18(%r12), %rax
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xa4c5
movq (%rax), %rsi
addq %r15, %rsi
callq 0xdae2
testq %rax, %rax
jne 0xa500
movq 0x18(%r12), %rax
movq (%rsp), %rdi
movq 0x8(%rdi), %rsi
movq (%rax), %rdx
addq %r15, %rdx
callq 0xc434
movq 0x8(%rsp), %rax
movl (%rax), %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
cmpq %rcx, %rax
je 0xa4fd
movq (%rsp), %rdx
movq 0x8(%rdx), %rcx
subq (%rdx), %rcx
sarq $0x2, %rcx
cmpq %rax, %rcx
ja 0xa50c
decl %r13d
incq %rbx
addq $0x4, %r15
jmp 0xa450
movl %ebp, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getOuterNeighbor(unsigned int const&, unsigned int const&, unsigned int&, bool&) const
void getOuterNeighbor(const uint32_t &node, const uint32_t &neighbor, uint32_t &outerNeighbor, bool &exactlyOne) const {
        outerNeighbor = NONE;
        exactlyOne = false;
        bool found = false;
        GraphTraversal graphTraversal(*this, neighbor);
        while (graphTraversal.curEdgeOffset != NONE) {
            uint32_t extendedGrandchild = (*edgeBuffer)[graphTraversal.curEdgeOffset];
            if (extendedGrandchild != node && !edgeExists(extendedGrandchild, node)) {
                if (!found) {
                    found = true;
                    outerNeighbor = extendedGrandchild;
                } else {
                    return;
                }
            }
            getNextEdge(graphTraversal);
        }
        if (found) {
            exactlyOne = true;
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %r15
movq %rdi, %r12
movq %rcx, 0x18(%rsp)
orl $-0x1, (%rcx)
movq %r8, 0x10(%rsp)
movb $0x0, (%r8)
leaq 0x20(%rsp), %r13
movq %rdx, %rsi
movq %r13, %rdx
callq 0x9dde
xorl %r14d, %r14d
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
leaq 0xc(%rsp), %rbp
movl 0x24(%rsp), %eax
cmpq %rbx, %rax
je 0xa5b0
movq 0x18(%r12), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0xc(%rsp)
cmpl (%r15), %eax
je 0xa5a3
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x9e3a
testb %al, %al
jne 0xa5a3
testb $0x1, %r14b
jne 0xa5be
movl 0xc(%rsp), %eax
movq 0x18(%rsp), %rcx
movl %eax, (%rcx)
movb $0x1, %r14b
movq %r12, %rdi
movq %r13, %rsi
callq 0xa1ca
jmp 0xa560
testb $0x1, %r14b
je 0xa5be
movq 0x10(%rsp), %rax
movb $0x1, (%rax)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::Traversal::Traversal(unsigned int const&, Graph const&, Graph::Traversal*)
Traversal(const uint32_t &node, const Graph &graph, Traversal *previous = NULL) {
            sourceNode = node;
            if (previous != NULL) {
                auto it = previous->set.begin();
                std::advance(it, previous->index);
                while (++it != previous->set.end()) {
                    set.insert(*it);
                }
                set.erase(node);
            }
            graph.gatherNeighbors(node, set);
            if (!set.size()) {
                index = NONE;
            } else {
                index = 0;
            }
        }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %r14
movq %rdi, %rbx
leaq 0x8(%rdi), %rax
andl $0x0, 0x8(%rdi)
andq $0x0, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movq %rax, 0x20(%rdi)
andq $0x0, 0x28(%rdi)
movq %rsi, %r15
movl (%rsi), %eax
movl %eax, 0x34(%rdi)
testq %rcx, %rcx
je 0xa739
movq %rcx, %r12
movq 0x18(%rcx), %rax
leaq 0x8(%rsp), %rdi
movq %rax, (%rdi)
movl 0x30(%rcx), %esi
callq 0xba84
addq $0x8, %r12
movq 0x8(%rsp), %rdi
callq 0x21b0
movq %rax, 0x8(%rsp)
cmpq %r12, %rax
je 0xa72e
addq $0x20, %rax
movq %rbx, %rdi
movq %rax, %rsi
callq 0xbad0
jmp 0xa709
movq %rbx, %rdi
movq %r15, %rsi
callq 0xaf1c
leaq 0x14(%rsp), %r8
orl $-0x1, (%r8)
xorl %r12d, %r12d
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0xadc0
cmpq $0x1, 0x28(%rbx)
sbbl %r12d, %r12d
movl %r12d, 0x30(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0xa771
jmp 0xa771
movq %rax, %r14
movq %rbx, %rdi
callq 0xacde
movq %r14, %rdi
callq 0x22c0
// File: /workspace/github_cpp_makefile_star2_O2/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::advance(std::vector<Graph::Traversal*, std::allocator<Graph::Traversal*>>&, Graph::Traversal**, Graph const&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>&)
static bool advance(std::vector<Traversal *> &frontier, Traversal **traversal, const Graph &graph, std::unordered_set<uint32_t> &set) {
        bool validNeighbor = false;
        while(!validNeighbor) {
            *traversal = frontier.back();
            (*traversal)->next();
            if ((*traversal)->index != NONE) {
                validNeighbor = true;
            } else {
                set.erase((*traversal)->sourceNode);
                delete *traversal;
                frontier.pop_back();
                if (frontier.empty()) {
                    return false;
                }
            }
        }
        return true;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, (%rsp)
movq %rsi, %r14
movq %rdi, %r15
xorl %ebx, %ebx
pushq $-0x1
popq %r13
movl %ebx, %ebp
testb $0x1, %bl
jne 0xa806
movq 0x8(%r15), %rax
movq -0x8(%rax), %rax
movq %rax, (%r14)
movl 0x30(%rax), %ecx
incl %ecx
cmpq %rcx, 0x28(%rax)
cmovel %r13d, %ecx
movl %ecx, 0x30(%rax)
movq (%r14), %rsi
cmpl $-0x1, 0x30(%rsi)
setne %bl
jne 0xa79f
addq $0x34, %rsi
movq (%rsp), %rdi
callq 0xb93a
movq (%r14), %r12
testq %r12, %r12
je 0xa7ea
movq %r12, %rdi
callq 0xacde
movq %r12, %rdi
callq 0x2160
movq (%r15), %rax
movq 0x8(%r15), %rcx
addq $-0x8, %rcx
movq %rcx, 0x8(%r15)
cmpq %rcx, %rax
jne 0xa79f
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop