// File: EmbeddedPaul166[P]SNMP-Agent/src/main.cpp
// Function: encodeASequence(Manager&)
void encodeASequence(Manager & manager)
{
    std::vector<std::byte> beginVector;
    std::vector<std::byte> endVector;
    int lengthInBytes = 0;
    
    DataType dataType;
    dataType.m_baseType = BaseDataType::SEQUENCE_OF;
    dataType.m_complexity = EncodingComplexity::CONSTRUCTED;
    dataType.m_visibility = DataVisibility::UNIVERSAL;
    
    //Validate sequence
    std::string nodeName = "ifTable";
    Node * pNode = manager.getNodeByName(nodeName);
    std::vector<std::string> nodeNameVector;
    
    if (manager.validate(dataType, pNode -> m_dataType, nodeNameVector))
    {
        std::cout << "Ok sequence " <<  nodeName <<std::endl;
        
    }
    else
    {
        std::cout << "Not ok sequence " <<  nodeName <<std::endl;
    }
    
    manager.startASequence(dataType, beginVector);
    
    //Validate integer element
    dataType.m_baseType = BaseDataType::INTEGER;
    dataType.m_complexity = EncodingComplexity::PRIMITIVE;
    nodeName = "ifType"; 
    bool isFound = false;
    int x = 5;
    pNode = manager.getNodeByName(nodeName);
    
    for (std::vector<std::string>::size_type i = nodeNameVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        if (nodeNameVector[i] == pNode -> m_name)
        {
            isFound = true;
            break;
        }
    }
    
    if (isFound)
    {
        if (manager.validate(dataType, pNode -> m_dataType, x))
        {
            std::cout << "OK integer " <<  nodeName <<std::endl;
        }
        else
        {
            std::cout << "Not ok integer " <<  nodeName <<std::endl;
        }
    }
    else 
    {
        std::cout << "Not ok integer " <<  nodeName <<std::endl;
    }
    
    manager.addInteger(dataType, x, lengthInBytes, endVector);
    
    //Validate octet string element
    dataType.m_baseType = BaseDataType::OCTET_STRING;
    nodeName = "ifPhysAddress";  
    isFound = false;
    std::string y = "heh";
    pNode = manager.getNodeByName(nodeName);
    
    for (std::vector<std::string>::size_type i = nodeNameVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        if (nodeNameVector[i] == pNode -> m_name)
        {
            isFound = true;
            break;
        }
    }
    
    if (isFound)
    {
        if (manager.validate(dataType, pNode -> m_dataType, y))
        {
            std::cout << "OK octet string " <<  nodeName <<std::endl;
        }
        else
        {
            std::cout << "Not ok octet string " <<  nodeName <<std::endl;
        }
    }
    else 
    {
        std::cout << "Not ok octet string " <<  nodeName <<std::endl;
    }
    
    manager.addOctetString(dataType, y, lengthInBytes, endVector);
    
    //Validate oid element
    dataType.m_baseType = BaseDataType::OBJECT_IDENTIFIER;
    nodeName = "ifLastChange";  
    isFound = false;
    std::vector<unsigned int> vec;
    vec.push_back(1);
    vec.push_back(3);
    vec.push_back(6); 
    pNode = manager.getNodeByName(nodeName);
    
    for (std::vector<std::string>::size_type i = nodeNameVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        if (nodeNameVector[i] == pNode -> m_name)
        {
            isFound = true;
            break;
        }
    }
    
    if (isFound)
    {
        if (manager.validate(dataType, pNode -> m_dataType))
        {
            std::cout << "OK oid " <<  nodeName <<std::endl;
        }
        else
        {
            std::cout << "Not ok oid " <<  nodeName <<std::endl;
        }
    }
    else 
    {
        std::cout << "Not ok oid " <<  nodeName <<std::endl;
    } 
    
    manager.addObjectIdentifier(dataType, vec, lengthInBytes, endVector);

    //Validate bool element
    dataType.m_baseType = BaseDataType::BOOLEAN;
    nodeName = "ifOutDiscards";  
    isFound = false;
    bool z = true;
    pNode = manager.getNodeByName(nodeName);
    
    for (std::vector<std::string>::size_type i = nodeNameVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        if (nodeNameVector[i] == pNode -> m_name)
        {
            isFound = true;
            break;
        }
    }
    
    if (isFound)
    {
        if (manager.validate(dataType, pNode -> m_dataType))
        {
            std::cout << "OK boolean " <<  nodeName <<std::endl;
        }
        else
        {
            std::cout << "Not ok boolean " <<  nodeName <<std::endl;
        }
    }
    else 
    {
        std::cout << "Not ok boolean " <<  nodeName <<std::endl;
    } 
    
    manager.addBoolean(dataType, z, lengthInBytes, endVector);
    
    //Validate NULL element 
    dataType.m_baseType = BaseDataType::NULL_D;
    nodeName = "ifOutDiscards";  
    isFound = false;
    pNode = manager.getNodeByName(nodeName);
    
    for (std::vector<std::string>::size_type i = nodeNameVector.size() - 1; i != (std::vector<std::string>::size_type) - 1; i--)
    {
        if (nodeNameVector[i] == pNode -> m_name)
        {
            isFound = true;
            break;
        }
    }
    
    if (isFound)
    {
        if (manager.validate(dataType, pNode -> m_dataType))
        {
            std::cout << "OK null " <<  nodeName <<std::endl;
        }
        else
        {
            std::cout << "Not ok null " <<  nodeName <<std::endl;
        }
    }
    else 
    {
        std::cout << "Not ok null " <<  nodeName <<std::endl;
    } 
    
    manager.addNULL(dataType, lengthInBytes, endVector);
    
    manager.endASequence(lengthInBytes, beginVector);
    manager.getEncodedSequence(beginVector, endVector);
    
    
    //Print sequence elements
    for (std::vector<std::byte>::size_type i = 0; i < beginVector.size(); i++)
    {
        std::bitset<8> x(std::to_integer<uint8_t>(beginVector[i]));
        std::cout << x << std::endl;
    } 
    
    std::cout << std::endl;
    std::cout << std::endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x350, %rsp            # imm = 0x350
movq %rdi, -0x10(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x8110
leaq -0x40(%rbp), %rdi
callq 0x8110
movl $0x0, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x44a20
jmp 0x6ac6
movl $0x6, -0x98(%rbp)
movl $0x1, -0x94(%rbp)
movl $0x0, -0x8c(%rbp)
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x1a8(%rbp)
callq 0x67a0
movq -0x1a8(%rbp), %rdx
leaq 0x414ff(%rip), %rsi     # 0x48004
leaq -0xc8(%rbp), %rdi
callq 0x8130
jmp 0x6b13
leaq -0xc9(%rbp), %rdi
callq 0x64d0
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x1b0(%rbp)
jmp 0x6b38
movq -0x1b0(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x81e0
movq -0x1c0(%rbp), %rcx
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
callq 0x9d00
movb %al, -0x1b1(%rbp)
jmp 0x6b83
movb -0x1b1(%rbp), %al
testb $0x1, %al
jne 0x6b92
jmp 0x6c4c
movq 0x6240f(%rip), %rdi     # 0x68fa8
leaq 0x4146c(%rip), %rsi     # 0x4800c
callq 0x6450
movq %rax, -0x1c8(%rbp)
jmp 0x6bae
movq -0x1c8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x1d0(%rbp)
jmp 0x6bca
movq -0x1d0(%rbp), %rdi
movq 0x623a8(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x6bdf
jmp 0x6c9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x798e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0x64d0
jmp 0x7982
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7976
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x796a
movq 0x62355(%rip), %rdi     # 0x68fa8
leaq 0x413bf(%rip), %rsi     # 0x48019
callq 0x6450
movq %rax, -0x1d8(%rbp)
jmp 0x6c68
movq -0x1d8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x1e0(%rbp)
jmp 0x6c84
movq -0x1e0(%rbp), %rdi
movq 0x622ee(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x6c99
jmp 0x6c9b
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0xacd0
jmp 0x6cb1
movl $0x0, -0x98(%rbp)
movl $0x0, -0x94(%rbp)
leaq 0x4135e(%rip), %rsi     # 0x4802a
leaq -0xc8(%rbp), %rdi
callq 0x65f0
jmp 0x6cda
movb $0x0, -0xf1(%rbp)
movl $0x5, -0xf8(%rbp)
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x1e8(%rbp)
jmp 0x6d04
movq -0x1e8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x100(%rbp)
cmpq $-0x1, -0x100(%rbp)
je 0x6d7e
movq -0x100(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x82b0
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
addq $0x8, %rsi
callq 0x8220
testb $0x1, %al
jne 0x6d5f
jmp 0x6d68
movb $0x1, -0xf1(%rbp)
jmp 0x6d7e
jmp 0x6d6a
movq -0x100(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x100(%rbp)
jmp 0x6d29
testb $0x1, -0xf1(%rbp)
je 0x6e61
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
leaq -0xf8(%rbp), %rcx
callq 0x9eb0
movb %al, -0x1e9(%rbp)
jmp 0x6db5
movb -0x1e9(%rbp), %al
testb $0x1, %al
jne 0x6dc1
jmp 0x6e10
movq 0x621e0(%rip), %rdi     # 0x68fa8
leaq 0x41262(%rip), %rsi     # 0x48031
callq 0x6450
movq %rax, -0x1f8(%rbp)
jmp 0x6ddd
movq -0x1f8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x200(%rbp)
jmp 0x6df9
movq -0x200(%rbp), %rdi
movq 0x62179(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x6e0e
jmp 0x6e5f
movq 0x62191(%rip), %rdi     # 0x68fa8
leaq 0x4121f(%rip), %rsi     # 0x4803d
callq 0x6450
movq %rax, -0x208(%rbp)
jmp 0x6e2c
movq -0x208(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x210(%rbp)
jmp 0x6e48
movq -0x210(%rbp), %rdi
movq 0x6212a(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x6e5d
jmp 0x6e5f
jmp 0x6eb0
movq 0x62140(%rip), %rdi     # 0x68fa8
leaq 0x411ce(%rip), %rsi     # 0x4803d
callq 0x6450
movq %rax, -0x218(%rbp)
jmp 0x6e7d
movq -0x218(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x220(%rbp)
jmp 0x6e99
movq -0x220(%rbp), %rdi
movq 0x620d9(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x6eae
jmp 0x6eb0
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0xf8(%rbp), %rdx
leaq -0x44(%rbp), %rcx
leaq -0x40(%rbp), %r8
callq 0xad10
jmp 0x6ed1
movl $0x1, -0x98(%rbp)
leaq 0x4116b(%rip), %rsi     # 0x4804d
leaq -0xc8(%rbp), %rdi
callq 0x65f0
jmp 0x6ef0
movb $0x0, -0xf1(%rbp)
leaq -0x121(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x67a0
movq -0x228(%rbp), %rdx
leaq 0x41143(%rip), %rsi     # 0x4805b
leaq -0x120(%rbp), %rdi
callq 0x8130
jmp 0x6f26
leaq -0x121(%rbp), %rdi
callq 0x64d0
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x230(%rbp)
jmp 0x6f4b
movq -0x230(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x130(%rbp)
cmpq $-0x1, -0x130(%rbp)
je 0x7006
movq -0x130(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x82b0
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
addq $0x8, %rsi
callq 0x8220
testb $0x1, %al
jne 0x6faa
jmp 0x6fed
movb $0x1, -0xf1(%rbp)
jmp 0x7006
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x121(%rbp), %rdi
callq 0x64d0
jmp 0x796a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x795e
jmp 0x6fef
movq -0x130(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x130(%rbp)
jmp 0x6f70
testb $0x1, -0xf1(%rbp)
je 0x70e9
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
leaq -0x120(%rbp), %rcx
callq 0x9f00
movb %al, -0x231(%rbp)
jmp 0x703d
movb -0x231(%rbp), %al
testb $0x1, %al
jne 0x7049
jmp 0x7098
movq 0x61f58(%rip), %rdi     # 0x68fa8
leaq 0x41008(%rip), %rsi     # 0x4805f
callq 0x6450
movq %rax, -0x240(%rbp)
jmp 0x7065
movq -0x240(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x248(%rbp)
jmp 0x7081
movq -0x248(%rbp), %rdi
movq 0x61ef1(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x7096
jmp 0x70e7
movq 0x61f09(%rip), %rdi     # 0x68fa8
leaq 0x40fca(%rip), %rsi     # 0x48070
callq 0x6450
movq %rax, -0x250(%rbp)
jmp 0x70b4
movq -0x250(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x258(%rbp)
jmp 0x70d0
movq -0x258(%rbp), %rdi
movq 0x61ea2(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x70e5
jmp 0x70e7
jmp 0x7138
movq 0x61eb8(%rip), %rdi     # 0x68fa8
leaq 0x40f79(%rip), %rsi     # 0x48070
callq 0x6450
movq %rax, -0x260(%rbp)
jmp 0x7105
movq -0x260(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x268(%rbp)
jmp 0x7121
movq -0x268(%rbp), %rdi
movq 0x61e51(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x7136
jmp 0x7138
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x120(%rbp), %rdx
leaq -0x44(%rbp), %rcx
leaq -0x40(%rbp), %r8
callq 0xad60
jmp 0x7159
movl $0x2, -0x98(%rbp)
leaq 0x40f1b(%rip), %rsi     # 0x48085
leaq -0xc8(%rbp), %rdi
callq 0x65f0
jmp 0x7178
movb $0x0, -0xf1(%rbp)
leaq -0x148(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x82d0
movq -0x270(%rbp), %rdi
movl $0x1, -0x14c(%rbp)
leaq -0x14c(%rbp), %rsi
callq 0x82f0
jmp 0x71b1
movl $0x3, -0x150(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x82f0
jmp 0x71d0
movl $0x6, -0x154(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x154(%rbp), %rsi
callq 0x82f0
jmp 0x71ef
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x278(%rbp)
jmp 0x7208
movq -0x278(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x160(%rbp)
cmpq $-0x1, -0x160(%rbp)
je 0x72a5
movq -0x160(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x82b0
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
addq $0x8, %rsi
callq 0x8220
testb $0x1, %al
jne 0x7263
jmp 0x728f
movb $0x1, -0xf1(%rbp)
jmp 0x72a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x8510
jmp 0x795e
jmp 0x7291
movq -0x160(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x160(%rbp)
jmp 0x722d
testb $0x1, -0xf1(%rbp)
je 0x7381
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
callq 0x9e70
movb %al, -0x279(%rbp)
jmp 0x72d5
movb -0x279(%rbp), %al
testb $0x1, %al
jne 0x72e1
jmp 0x7330
movq 0x61cc0(%rip), %rdi     # 0x68fa8
leaq 0x40da3(%rip), %rsi     # 0x48092
callq 0x6450
movq %rax, -0x288(%rbp)
jmp 0x72fd
movq -0x288(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x290(%rbp)
jmp 0x7319
movq -0x290(%rbp), %rdi
movq 0x61c59(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x732e
jmp 0x737f
movq 0x61c71(%rip), %rdi     # 0x68fa8
leaq 0x40d5c(%rip), %rsi     # 0x4809a
callq 0x6450
movq %rax, -0x298(%rbp)
jmp 0x734c
movq -0x298(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x2a0(%rbp)
jmp 0x7368
movq -0x2a0(%rbp), %rdi
movq 0x61c0a(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x737d
jmp 0x737f
jmp 0x73d0
movq 0x61c20(%rip), %rdi     # 0x68fa8
leaq 0x40d0b(%rip), %rsi     # 0x4809a
callq 0x6450
movq %rax, -0x2a8(%rbp)
jmp 0x739d
movq -0x2a8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x2b0(%rbp)
jmp 0x73b9
movq -0x2b0(%rbp), %rdi
movq 0x61bb9(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x73ce
jmp 0x73d0
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x148(%rbp), %rdx
leaq -0x44(%rbp), %rcx
leaq -0x40(%rbp), %r8
callq 0xadb0
jmp 0x73f1
movl $0x3, -0x98(%rbp)
leaq 0x40ca4(%rip), %rsi     # 0x480a6
leaq -0xc8(%rbp), %rdi
callq 0x65f0
jmp 0x7410
movb $0x0, -0xf1(%rbp)
movb $0x1, -0x161(%rbp)
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x2b8(%rbp)
jmp 0x7437
movq -0x2b8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x170(%rbp)
cmpq $-0x1, -0x170(%rbp)
je 0x74b1
movq -0x170(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x82b0
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
addq $0x8, %rsi
callq 0x8220
testb $0x1, %al
jne 0x7492
jmp 0x749b
movb $0x1, -0xf1(%rbp)
jmp 0x74b1
jmp 0x749d
movq -0x170(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x170(%rbp)
jmp 0x745c
testb $0x1, -0xf1(%rbp)
je 0x758d
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
callq 0x9e70
movb %al, -0x2b9(%rbp)
jmp 0x74e1
movb -0x2b9(%rbp), %al
testb $0x1, %al
jne 0x74ed
jmp 0x753c
movq 0x61ab4(%rip), %rdi     # 0x68fa8
leaq 0x40bb9(%rip), %rsi     # 0x480b4
callq 0x6450
movq %rax, -0x2c8(%rbp)
jmp 0x7509
movq -0x2c8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x2d0(%rbp)
jmp 0x7525
movq -0x2d0(%rbp), %rdi
movq 0x61a4d(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x753a
jmp 0x758b
movq 0x61a65(%rip), %rdi     # 0x68fa8
leaq 0x40b76(%rip), %rsi     # 0x480c0
callq 0x6450
movq %rax, -0x2d8(%rbp)
jmp 0x7558
movq -0x2d8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x2e0(%rbp)
jmp 0x7574
movq -0x2e0(%rbp), %rdi
movq 0x619fe(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x7589
jmp 0x758b
jmp 0x75dc
movq 0x61a14(%rip), %rdi     # 0x68fa8
leaq 0x40b25(%rip), %rsi     # 0x480c0
callq 0x6450
movq %rax, -0x2e8(%rbp)
jmp 0x75a9
movq -0x2e8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x2f0(%rbp)
jmp 0x75c5
movq -0x2f0(%rbp), %rdi
movq 0x619ad(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x75da
jmp 0x75dc
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x161(%rbp), %rdx
leaq -0x44(%rbp), %rcx
leaq -0x40(%rbp), %r8
callq 0xae00
jmp 0x75fd
movl $0x4, -0x98(%rbp)
leaq 0x40a98(%rip), %rsi     # 0x480a6
leaq -0xc8(%rbp), %rdi
callq 0x65f0
jmp 0x761c
movb $0x0, -0xf1(%rbp)
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xaa30
movq %rax, -0x2f8(%rbp)
jmp 0x763c
movq -0x2f8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x8200
subq $0x1, %rax
movq %rax, -0x178(%rbp)
cmpq $-0x1, -0x178(%rbp)
je 0x76b6
movq -0x178(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x82b0
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
addq $0x8, %rsi
callq 0x8220
testb $0x1, %al
jne 0x7697
jmp 0x76a0
movb $0x1, -0xf1(%rbp)
jmp 0x76b6
jmp 0x76a2
movq -0x178(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x178(%rbp)
jmp 0x7661
testb $0x1, -0xf1(%rbp)
je 0x7792
movq -0x10(%rbp), %rdi
movq -0xd8(%rbp), %rdx
addq $0x28, %rdx
leaq -0x98(%rbp), %rsi
callq 0x9e70
movb %al, -0x2f9(%rbp)
jmp 0x76e6
movb -0x2f9(%rbp), %al
testb $0x1, %al
jne 0x76f2
jmp 0x7741
movq 0x618af(%rip), %rdi     # 0x68fa8
leaq 0x409d0(%rip), %rsi     # 0x480d0
callq 0x6450
movq %rax, -0x308(%rbp)
jmp 0x770e
movq -0x308(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x310(%rbp)
jmp 0x772a
movq -0x310(%rbp), %rdi
movq 0x61848(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x773f
jmp 0x7790
movq 0x61860(%rip), %rdi     # 0x68fa8
leaq 0x4098a(%rip), %rsi     # 0x480d9
callq 0x6450
movq %rax, -0x318(%rbp)
jmp 0x775d
movq -0x318(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x320(%rbp)
jmp 0x7779
movq -0x320(%rbp), %rdi
movq 0x617f9(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x778e
jmp 0x7790
jmp 0x77e1
movq 0x6180f(%rip), %rdi     # 0x68fa8
leaq 0x40939(%rip), %rsi     # 0x480d9
callq 0x6450
movq %rax, -0x328(%rbp)
jmp 0x77ae
movq -0x328(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x6400
movq %rax, -0x330(%rbp)
jmp 0x77ca
movq -0x330(%rbp), %rdi
movq 0x617a8(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x77df
jmp 0x77e1
movq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x44(%rbp), %rdx
leaq -0x40(%rbp), %rcx
callq 0xae50
jmp 0x77fb
movq -0x10(%rbp), %rdi
leaq -0x44(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0xae90
jmp 0x780e
movq -0x10(%rbp), %rsi
leaq -0x190(%rbp), %rdi
leaq -0x28(%rbp), %rdx
leaq -0x40(%rbp), %rcx
callq 0xaed0
jmp 0x7828
leaq -0x190(%rbp), %rdi
callq 0x8320
movq $0x0, -0x198(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0x338(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x8380
movq %rax, %rcx
movq -0x338(%rbp), %rax
cmpq %rcx, %rax
jae 0x78dd
movq -0x198(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x83a0
movb (%rax), %al
movb %al, -0x1(%rbp)
movzbl -0x1(%rbp), %eax
movl %eax, %esi
leaq -0x1a0(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x83c0
movq -0x348(%rbp), %rsi
movq 0x61707(%rip), %rdi     # 0x68fa8
callq 0x8410
movq %rax, -0x340(%rbp)
jmp 0x78af
movq -0x340(%rbp), %rdi
movq 0x616c3(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x78c4
jmp 0x78c6
movq -0x198(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x198(%rbp)
jmp 0x783f
movq 0x616c4(%rip), %rdi     # 0x68fa8
movq 0x61695(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x78f2
movq 0x616af(%rip), %rdi     # 0x68fa8
movq 0x61680(%rip), %rsi     # 0x68f80
callq 0x64b0
jmp 0x7907
leaq -0x148(%rbp), %rdi
callq 0x8510
leaq -0x120(%rbp), %rdi
callq 0x62e0
leaq -0xf0(%rbp), %rdi
callq 0x8570
leaq -0xc8(%rbp), %rdi
callq 0x62e0
leaq -0x98(%rbp), %rdi
callq 0x44a90
leaq -0x40(%rbp), %rdi
callq 0x8320
leaq -0x28(%rbp), %rdi
callq 0x8320
addq $0x350, %rsp            # imm = 0x350
popq %rbp
retq
leaq -0x120(%rbp), %rdi
callq 0x62e0
leaq -0xf0(%rbp), %rdi
callq 0x8570
leaq -0xc8(%rbp), %rdi
callq 0x62e0
leaq -0x98(%rbp), %rdi
callq 0x44a90
leaq -0x40(%rbp), %rdi
callq 0x8320
leaq -0x28(%rbp), %rdi
callq 0x8320
movq -0xa0(%rbp), %rdi
callq 0x6790
nopl (%rax)