// File: xelia-it[P]mustache/src/mustache-light.cpp
// Function: mustache::Mustache::produceSection()
void Mustache::produceSection() {
        bool useSection = (tokens_.at(currentToken_ - 1) == TOKEN_START_BEGIN_SECTION);
        bool useUnless = (tokens_.at(currentToken_ - 1) == TOKEN_START_UNLESS);
        bool useExistsTest = (tokens_.at(currentToken_ - 1) == TOKEN_START_EXISTS_TEST);

        LOG_START("");
        LOG_END("SECTION := ");
#ifdef DEBUG
        if (useSection) {
                LOG_START(TOKEN_START_BEGIN_SECTION);
        } else if (useUnless) {
                LOG_START(TOKEN_START_UNLESS);
        } else if (useExistsTest) {
                LOG_START(TOKEN_START_EXISTS_TEST);
        } else {
                LOG_START(TOKEN_START_IF);
        }
#endif

        // Token must be (txt)
        CHECK_TOKEN_IS_TEXT();

        // Save var name
        string variableName = tokens_.at(currentToken_);
        ensureValidIdentifier(variableName);
        LOG(" ");
        LOG(variableName);

        json variable;
        bool variable_exists;
        try {
            variable = searchVariableInContext(variableName);
            variable_exists = true;
        } catch(const std::out_of_range& ex) {
            variable = nullptr;
            variable_exists = false;
        } catch(const std::invalid_argument& ex) {
            variable = nullptr;
            variable_exists = false;
        }

        // Is variable malformed
        bool isCorrectType = variable.is_null() || variable.is_boolean() ||
                             variable.is_string() || variable.is_array() ||
                             variable.is_object() || variable.is_number();
        if (!isCorrectType) {
                error("Variable '" + variableName + "' is malformed");
                return;
        }

        CONSUME_TOKEN();
        CHECK_TOKEN_NOT_EMPTY();
        CHECK_TOKEN_IS(TOKEN_END);
        LOG(" ");
        LOG_END(TOKEN_END);

        CONSUME_TOKEN();
        // The logic of section block {{# }}
        // - [ a, b, c, .. ] ==> cycle
        // - [], {}, "", false, null ==> hide
        // - { something }, "something", true ==> view
        // Section always changes context. EG:
        //
        // context = {
        //   "var1": { "one": 1, "two": 2 },
        //   "var2": "value2"
        // }
        //
        // template =  {{# var1 }}{{ one }}{{/ var1 }}
        //
        // output = 1
        //
        if (useSection && variable.is_array() && variable.size() > 0) {
                const TokenIndex savedPosition = currentToken_;
                for (json::iterator it = variable.begin(); it != variable.end(); ++it) {
                        LOG_END(variable);
                        currentToken_ = savedPosition;
                        currentListCounter_ = std::distance(variable.begin(), it);
                        stack_.push(*it);
                        produceMessage();
                        stack_.pop();
                }
                // Reset to 0 after the main cycle
                currentListCounter_ = 0;
        } else {
                // The hide variable is used for {{= }} and {{# }} logic
                bool hide =
                        (variable.is_array() && variable.size() == 0) ||
                        (variable.is_object() && variable.size() == 0) ||
                        (variable.is_string() && variable.get<string>().size() == 0) ||
                        (variable.is_boolean() && !variable.get<bool>()) ||
                        (variable.is_number() && variable.get<int>() == 0) ||
                        (variable.is_null());

                if (useExistsTest) {
                        // The exist test {{0 }} uses a different logic:
                        // If the key do not exists the section is not shown.
                        hide = !variable_exists;
                } else if (useUnless) {
                        // The inverted section {{^ }} uses inverted logic
                        hide = !hide;
                }
                bool oldVisible = visible_;

                // Should the next message be visible?
                visible_ = visible_ && !hide;

                // The only difference from {{# }} and {{= }} {{^ }} {{? }}
                // is the fact that tag {{# }} changes context.
                if (useSection) {
                        stack_.push(variable);
                }
                produceMessage();
                if (useSection) {
                        stack_.pop();
                }

                // Retrieve the old visibility state
                visible_ = oldVisible;
        }

        CHECK_TOKEN_IS(TOKEN_START_END_SECTION);
        LOG(" ");
        LOG(TOKEN_START_END_SECTION);

        CONSUME_TOKEN();
        CHECK_TOKEN_NOT_EMPTY();
        const string& variableNameEnd = tokens_.at(currentToken_);
        LOG(" ");
        LOG(variableNameEnd);
        ensureValidIdentifier(variableName);
        if (variableNameEnd != variableName) {
                error("Expected '" + variableName + "' in closing block (found '" +
                      variableNameEnd + "')");
                return;
        }

        CONSUME_TOKEN();
        CHECK_TOKEN_NOT_EMPTY();
        CHECK_TOKEN_IS(TOKEN_END);
        LOG("  ");
        LOG_END(TOKEN_END);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5f0, %rsp            # imm = 0x5F0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x470(%rbp)
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
subq $0x1, %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53d8a(%rip), %rsi     # 0xc5f38
callq 0x68f40
movb %al, %cl
movq -0x470(%rbp), %rax
andb $0x1, %cl
movb %cl, -0x9(%rbp)
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
subq $0x1, %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53c72(%rip), %rsi     # 0xc5e58
callq 0x68f40
movb %al, %cl
movq -0x470(%rbp), %rax
andb $0x1, %cl
movb %cl, -0xa(%rbp)
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
subq $0x1, %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53cda(%rip), %rsi     # 0xc5ef8
callq 0x68f40
movq -0x470(%rbp), %rdi
andb $0x1, %al
movb %al, -0xb(%rbp)
movq 0xe8(%rdi), %rax
movq %rax, -0x468(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x468(%rbp), %rax
cmpq %rcx, %rax
jne 0x722c4
leaq -0x31(%rbp), %rdi
movq %rdi, -0x478(%rbp)
callq 0x6d7d0
movq -0x478(%rbp), %rdx
leaq 0x3743c(%rip), %rsi     # 0xa96b2
leaq -0x30(%rbp), %rdi
callq 0x6bd90
jmp 0x72281
movq -0x470(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x6ba10
jmp 0x72293
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x722b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x6e458
leaq -0x31(%rbp), %rdi
callq 0x6ae90
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x480(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x480(%rbp), %rax
cmpq %rcx, %rax
jne 0x72373
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53b85(%rip), %rsi     # 0xc5ea0
callq 0x68f40
testb $0x1, %al
jne 0x72326
jmp 0x72373
leaq 0x3739d(%rip), %rsi     # 0xa96ca
movq 0x53b6c(%rip), %rdx     # 0xc5ea0
leaq -0x68(%rbp), %rdi
movq %rdi, -0x488(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x488(%rbp), %rsi
callq 0x6ba10
jmp 0x72359
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x490(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x490(%rbp), %rax
cmpq %rcx, %rax
jne 0x7242c
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53b8a(%rip), %rsi     # 0xc5f58
callq 0x68f40
testb $0x1, %al
jne 0x723d9
jmp 0x7242c
leaq 0x372ea(%rip), %rsi     # 0xa96ca
movq 0x53b71(%rip), %rdx     # 0xc5f58
leaq -0x88(%rbp), %rdi
movq %rdi, -0x498(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x498(%rbp), %rsi
callq 0x6ba10
jmp 0x7240f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4a0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4a0(%rbp), %rax
cmpq %rcx, %rax
jne 0x724e5
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53ab1(%rip), %rsi     # 0xc5f38
callq 0x68f40
testb $0x1, %al
jne 0x72492
jmp 0x724e5
leaq 0x37231(%rip), %rsi     # 0xa96ca
movq 0x53a98(%rip), %rdx     # 0xc5f38
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4a8(%rbp), %rsi
callq 0x6ba10
jmp 0x724c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4b0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4b0(%rbp), %rax
cmpq %rcx, %rax
jne 0x7259e
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53a70(%rip), %rsi     # 0xc5fb0
callq 0x68f40
testb $0x1, %al
jne 0x7254b
jmp 0x7259e
leaq 0x37178(%rip), %rsi     # 0xa96ca
movq 0x53a57(%rip), %rdx     # 0xc5fb0
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x4b8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4b8(%rbp), %rsi
callq 0x6ba10
jmp 0x72581
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4c0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4c0(%rbp), %rax
cmpq %rcx, %rax
jne 0x72657
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x539af(%rip), %rsi     # 0xc5fa8
callq 0x68f40
testb $0x1, %al
jne 0x72604
jmp 0x72657
leaq 0x370bf(%rip), %rsi     # 0xa96ca
movq 0x53996(%rip), %rdx     # 0xc5fa8
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x4c8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4c8(%rbp), %rsi
callq 0x6ba10
jmp 0x7263a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4d0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4d0(%rbp), %rax
cmpq %rcx, %rax
jne 0x72710
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x537a6(%rip), %rsi     # 0xc5e58
callq 0x68f40
testb $0x1, %al
jne 0x726bd
jmp 0x72710
leaq 0x37006(%rip), %rsi     # 0xa96ca
movq 0x5378d(%rip), %rdx     # 0xc5e58
leaq -0x108(%rbp), %rdi
movq %rdi, -0x4d8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4d8(%rbp), %rsi
callq 0x6ba10
jmp 0x726f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4e0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4e0(%rbp), %rax
cmpq %rcx, %rax
jne 0x727c9
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x5378d(%rip), %rsi     # 0xc5ef8
callq 0x68f40
testb $0x1, %al
jne 0x72776
jmp 0x727c9
leaq 0x36f4d(%rip), %rsi     # 0xa96ca
movq 0x53774(%rip), %rdx     # 0xc5ef8
leaq -0x128(%rbp), %rdi
movq %rdi, -0x4e8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4e8(%rbp), %rsi
callq 0x6ba10
jmp 0x727ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x4f0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x4f0(%rbp), %rax
cmpq %rcx, %rax
jne 0x72882
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53744(%rip), %rsi     # 0xc5f68
callq 0x68f40
testb $0x1, %al
jne 0x7282f
jmp 0x72882
leaq 0x36e94(%rip), %rsi     # 0xa96ca
movq 0x5372b(%rip), %rdx     # 0xc5f68
leaq -0x148(%rbp), %rdi
movq %rdi, -0x4f8(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x4f8(%rbp), %rsi
callq 0x6ba10
jmp 0x72865
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x500(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x500(%rbp), %rax
cmpq %rcx, %rax
jne 0x7293b
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x535d3(%rip), %rsi     # 0xc5eb0
callq 0x68f40
testb $0x1, %al
jne 0x728e8
jmp 0x7293b
leaq 0x36ddb(%rip), %rsi     # 0xa96ca
movq 0x535ba(%rip), %rdx     # 0xc5eb0
leaq -0x168(%rbp), %rdi
movq %rdi, -0x508(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x508(%rbp), %rsi
callq 0x6ba10
jmp 0x7291e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x510(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x510(%rbp), %rax
cmpq %rcx, %rax
jne 0x729f4
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rdi
movq 0x53492(%rip), %rsi     # 0xc5e28
callq 0x68f40
testb $0x1, %al
jne 0x729a1
jmp 0x729f4
leaq 0x36d22(%rip), %rsi     # 0xa96ca
movq 0x53479(%rip), %rdx     # 0xc5e28
leaq -0x188(%rbp), %rdi
movq %rdi, -0x518(%rbp)
callq 0x6a3b0
movq -0x470(%rbp), %rdi
movq -0x518(%rbp), %rsi
callq 0x6ba10
jmp 0x729d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x6e458
jmp 0x7370c
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, %rsi
leaq -0x1a8(%rbp), %rdi
movq %rdi, -0x520(%rbp)
callq 0x685c0
movq -0x470(%rbp), %rdi
movq -0x520(%rbp), %rsi
movq 0x5346c(%rip), %rdx     # 0xc5ea8
callq 0x6cc40
jmp 0x72a43
xorl %eax, %eax
movl %eax, %esi
leaq -0x1b8(%rbp), %rdi
callq 0x6b8d0
movq -0x470(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0x6adb0
jmp 0x72a6f
leaq -0x1b8(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x68bc0
leaq -0x1d0(%rbp), %rdi
callq 0x6b680
movb $0x1, -0x1b9(%rbp)
jmp 0x72b23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x73700
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
movl %eax, -0x524(%rbp)
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0x72c24
movq -0x40(%rbp), %rdi
callq 0x683e0
movq %rax, -0x1f0(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x200(%rbp), %rdi
movq %rdi, -0x530(%rbp)
callq 0x6b8d0
movq -0x530(%rbp), %rsi
leaq -0x1b8(%rbp), %rdi
callq 0x68bc0
movq -0x530(%rbp), %rdi
callq 0x6b680
movb $0x0, -0x1b9(%rbp)
callq 0x6ced0
jmp 0x72b21
jmp 0x72b23
leaq -0x1b8(%rbp), %rdi
callq 0x6b930
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x531(%rbp)
jne 0x72bbc
leaq -0x1b8(%rbp), %rdi
callq 0x6dcf0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x531(%rbp)
jne 0x72bbc
leaq -0x1b8(%rbp), %rdi
callq 0x6e0b0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x531(%rbp)
jne 0x72bbc
leaq -0x1b8(%rbp), %rdi
callq 0x69d90
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x531(%rbp)
jne 0x72bbc
leaq -0x1b8(%rbp), %rdi
callq 0x6ba00
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x531(%rbp)
jne 0x72bbc
leaq -0x1b8(%rbp), %rdi
callq 0x68690
movb %al, -0x531(%rbp)
movb -0x531(%rbp), %al
andb $0x1, %al
movb %al, -0x201(%rbp)
testb $0x1, -0x201(%rbp)
jne 0x72cd8
leaq 0x36b06(%rip), %rsi     # 0xa96e4
leaq -0x248(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0x6a3b0
jmp 0x72bf3
leaq 0x36af5(%rip), %rdx     # 0xa96ef
leaq -0x228(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x678d0
jmp 0x72c0f
movq -0x470(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x6ba10
jmp 0x72c24
movl -0x524(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x736f4
movq -0x40(%rbp), %rdi
callq 0x683e0
movq %rax, -0x1d8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x1e8(%rbp), %rdi
movq %rdi, -0x540(%rbp)
callq 0x6b8d0
movq -0x540(%rbp), %rsi
leaq -0x1b8(%rbp), %rdi
callq 0x68bc0
movq -0x540(%rbp), %rdi
callq 0x6b680
movb $0x0, -0x1b9(%rbp)
callq 0x6ced0
jmp 0x72c8b
jmp 0x72b23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x736f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x72cc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x6e458
leaq -0x248(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
addq $0x1, %rax
movq %rax, 0xe8(%rdi)
movq 0xe8(%rdi), %rax
movq %rax, -0x548(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x548(%rbp), %rax
cmpq %rcx, %rax
jne 0x72d95
leaq -0x269(%rbp), %rdi
movq %rdi, -0x550(%rbp)
callq 0x6d7d0
movq -0x550(%rbp), %rdx
leaq 0x36977(%rip), %rsi     # 0xa96b2
leaq -0x268(%rbp), %rdi
callq 0x6bd90
jmp 0x72d49
movq -0x470(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x6ba10
jmp 0x72d5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x72d84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x6e458
leaq -0x269(%rbp), %rdi
callq 0x6ae90
jmp 0x736f4
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x558(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x558(%rbp), %rax
cmpq %rcx, %rax
je 0x72e04
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, -0x560(%rbp)
jmp 0x72deb
movq -0x560(%rbp), %rdi
movq 0x5302f(%rip), %rsi     # 0xc5e28
callq 0x6da60
testb $0x1, %al
jne 0x72e04
jmp 0x72e52
leaq 0x368cb(%rip), %rsi     # 0xa96d6
movq 0x53016(%rip), %rdx     # 0xc5e28
leaq -0x290(%rbp), %rdi
callq 0x6a3b0
jmp 0x72e20
movq -0x470(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x6ba10
jmp 0x72e35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
movq -0x470(%rbp), %rax
movq 0xe8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0xe8(%rax)
testb $0x1, -0x9(%rbp)
je 0x7300c
leaq -0x1b8(%rbp), %rdi
callq 0x69d90
testb $0x1, %al
jne 0x72e8a
jmp 0x7300c
leaq -0x1b8(%rbp), %rdi
callq 0x6c630
cmpq $0x0, %rax
jbe 0x7300c
movq -0x470(%rbp), %rax
movq 0xe8(%rax), %rax
movq %rax, -0x298(%rbp)
leaq -0x2b8(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x69a10
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x570(%rbp)
leaq -0x1b8(%rbp), %rsi
callq 0x68b00
movq -0x570(%rbp), %rsi
leaq -0x2b8(%rbp), %rdi
callq 0x68450
movb %al, -0x561(%rbp)
jmp 0x72efd
movb -0x561(%rbp), %al
testb $0x1, %al
jne 0x72f0c
jmp 0x72ff5
movq -0x470(%rbp), %rax
movq -0x298(%rbp), %rcx
movq %rcx, 0xe8(%rax)
leaq -0x2f8(%rbp), %rdi
movq %rdi, -0x588(%rbp)
leaq -0x1b8(%rbp), %rsi
callq 0x69a10
leaq -0x318(%rbp), %rdi
movq %rdi, -0x580(%rbp)
leaq -0x2b8(%rbp), %rsi
callq 0x68e40
movq -0x588(%rbp), %rdi
movq -0x580(%rbp), %rsi
callq 0x6d760
movq %rax, -0x578(%rbp)
jmp 0x72f71
movq -0x470(%rbp), %rax
movq -0x578(%rbp), %rcx
movq %rcx, 0xf0(%rax)
addq $0xf8, %rax
movq %rax, -0x598(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x6a250
movq %rax, -0x590(%rbp)
jmp 0x72fa8
movq -0x590(%rbp), %rsi
movq -0x598(%rbp), %rdi
callq 0x67460
jmp 0x72fbd
movq -0x470(%rbp), %rdi
callq 0x68c10
jmp 0x72fcb
movq -0x470(%rbp), %rdi
addq $0xf8, %rdi
callq 0x69bc0
jmp 0x72fe0
jmp 0x72fe2
leaq -0x2b8(%rbp), %rdi
callq 0x6d580
jmp 0x72ff0
jmp 0x72ec8
movq -0x470(%rbp), %rax
movq $0x0, 0xf0(%rax)
jmp 0x73286
leaq -0x1b8(%rbp), %rdi
callq 0x69d90
movb $0x0, -0x341(%rbp)
testb $0x1, %al
jne 0x73025
jmp 0x73046
leaq -0x1b8(%rbp), %rdi
callq 0x6c630
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, -0x599(%rbp)
je 0x7314e
leaq -0x1b8(%rbp), %rdi
callq 0x6ba00
testb $0x1, %al
jne 0x73058
jmp 0x73079
leaq -0x1b8(%rbp), %rdi
callq 0x6c630
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, -0x599(%rbp)
je 0x7314e
leaq -0x1b8(%rbp), %rdi
callq 0x6e0b0
testb $0x1, %al
jne 0x7308b
jmp 0x730c8
leaq -0x340(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x6cfa0
jmp 0x730a0
movb $0x1, -0x341(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x69740
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, -0x599(%rbp)
je 0x7314e
leaq -0x1b8(%rbp), %rdi
callq 0x6dcf0
testb $0x1, %al
jne 0x730da
jmp 0x73103
leaq -0x1b8(%rbp), %rdi
callq 0x6bbc0
movb %al, -0x59a(%rbp)
jmp 0x730ee
movb -0x59a(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x599(%rbp)
jne 0x73103
jmp 0x7314e
leaq -0x1b8(%rbp), %rdi
callq 0x68690
testb $0x1, %al
jne 0x73115
jmp 0x7313c
leaq -0x1b8(%rbp), %rdi
callq 0x69290
movl %eax, -0x5a0(%rbp)
jmp 0x73129
movl -0x5a0(%rbp), %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x599(%rbp)
je 0x7314e
leaq -0x1b8(%rbp), %rdi
callq 0x6b930
movb %al, -0x599(%rbp)
movb -0x599(%rbp), %al
movb %al, -0x5a1(%rbp)
testb $0x1, -0x341(%rbp)
jne 0x73165
jmp 0x73171
leaq -0x340(%rbp), %rdi
callq 0x6e458
movb -0x5a1(%rbp), %al
andb $0x1, %al
movb %al, -0x319(%rbp)
testb $0x1, -0xb(%rbp)
je 0x731bf
movb -0x1b9(%rbp), %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0x319(%rbp)
jmp 0x731d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x341(%rbp)
jne 0x731ae
jmp 0x731ba
leaq -0x340(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
testb $0x1, -0xa(%rbp)
je 0x731d5
movb -0x319(%rbp), %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0x319(%rbp)
jmp 0x731d7
movq -0x470(%rbp), %rcx
movb 0x148(%rcx), %al
andb $0x1, %al
movb %al, -0x342(%rbp)
xorl %eax, %eax
testb $0x1, 0x148(%rcx)
movb %al, -0x5a2(%rbp)
je 0x7320b
movb -0x319(%rbp), %al
xorb $-0x1, %al
movb %al, -0x5a2(%rbp)
movq -0x470(%rbp), %rax
movb -0x5a2(%rbp), %cl
andb $0x1, %cl
movb %cl, 0x148(%rax)
testb $0x1, -0x9(%rbp)
je 0x73245
movq -0x470(%rbp), %rdi
addq $0xf8, %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x67460
jmp 0x73243
jmp 0x73245
movq -0x470(%rbp), %rdi
callq 0x68c10
jmp 0x73253
testb $0x1, -0x9(%rbp)
je 0x73270
movq -0x470(%rbp), %rdi
addq $0xf8, %rdi
callq 0x69bc0
jmp 0x7326e
jmp 0x73270
movq -0x470(%rbp), %rax
movb -0x342(%rbp), %cl
andb $0x1, %cl
movb %cl, 0x148(%rax)
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x5b0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x5b0(%rbp), %rax
cmpq %rcx, %rax
je 0x732f5
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, -0x5b8(%rbp)
jmp 0x732dc
movq -0x5b8(%rbp), %rdi
movq 0x52cc6(%rip), %rsi     # 0xc5fb0
callq 0x6da60
testb $0x1, %al
jne 0x732f5
jmp 0x73343
leaq 0x363da(%rip), %rsi     # 0xa96d6
movq 0x52cad(%rip), %rdx     # 0xc5fb0
leaq -0x368(%rbp), %rdi
callq 0x6a3b0
jmp 0x73311
movq -0x470(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x6ba10
jmp 0x73326
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
addq $0x1, %rax
movq %rax, 0xe8(%rdi)
movq 0xe8(%rdi), %rax
movq %rax, -0x5c0(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x5c0(%rbp), %rax
cmpq %rcx, %rax
jne 0x73400
leaq -0x389(%rbp), %rdi
movq %rdi, -0x5c8(%rbp)
callq 0x6d7d0
movq -0x5c8(%rbp), %rdx
leaq 0x3630c(%rip), %rsi     # 0xa96b2
leaq -0x388(%rbp), %rdi
callq 0x6bd90
jmp 0x733b4
movq -0x470(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x6ba10
jmp 0x733c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x733ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x6e458
leaq -0x389(%rbp), %rdi
callq 0x6ae90
jmp 0x736f4
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, -0x5d0(%rbp)
jmp 0x73426
movq -0x470(%rbp), %rdi
movq -0x5d0(%rbp), %rax
movq %rax, -0x398(%rbp)
movq 0x52a66(%rip), %rdx     # 0xc5ea8
leaq -0x1a8(%rbp), %rsi
callq 0x6cc40
jmp 0x73450
movq -0x398(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x6da60
testb $0x1, %al
jne 0x7346c
jmp 0x7355c
leaq 0x3628b(%rip), %rsi     # 0xa96fe
leaq -0x418(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0x6a3b0
jmp 0x73488
leaq 0x3627a(%rip), %rdx     # 0xa9709
leaq -0x3f8(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x678d0
jmp 0x734a4
movq -0x398(%rbp), %rdx
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x6c540
jmp 0x734c0
leaq 0x3625e(%rip), %rdx     # 0xa9725
leaq -0x3b8(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
callq 0x678d0
jmp 0x734dc
movq -0x470(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x6ba10
jmp 0x734f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7354b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7353f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x73533
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0x6e458
leaq -0x3d8(%rbp), %rdi
callq 0x6e458
leaq -0x3f8(%rbp), %rdi
callq 0x6e458
leaq -0x418(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
addq $0x1, %rax
movq %rax, 0xe8(%rdi)
movq 0xe8(%rdi), %rax
movq %rax, -0x5d8(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x5d8(%rbp), %rax
cmpq %rcx, %rax
jne 0x73619
leaq -0x439(%rbp), %rdi
movq %rdi, -0x5e0(%rbp)
callq 0x6d7d0
movq -0x5e0(%rbp), %rdx
leaq 0x360f3(%rip), %rsi     # 0xa96b2
leaq -0x438(%rbp), %rdi
callq 0x6bd90
jmp 0x735cd
movq -0x470(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x6ba10
jmp 0x735e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x73608
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x6e458
leaq -0x439(%rbp), %rdi
callq 0x6ae90
jmp 0x736f4
movq -0x470(%rbp), %rdi
movq 0xe8(%rdi), %rax
movq %rax, -0x5e8(%rbp)
addq $0xd0, %rdi
callq 0x6dab0
movq %rax, %rcx
movq -0x5e8(%rbp), %rax
cmpq %rcx, %rax
je 0x73688
movq -0x470(%rbp), %rax
movq %rax, %rdi
addq $0xd0, %rdi
movq 0xe8(%rax), %rsi
callq 0x67da0
movq %rax, -0x5f0(%rbp)
jmp 0x7366f
movq -0x5f0(%rbp), %rdi
movq 0x527ab(%rip), %rsi     # 0xc5e28
callq 0x6da60
testb $0x1, %al
jne 0x73688
jmp 0x736d3
leaq 0x36047(%rip), %rsi     # 0xa96d6
movq 0x52792(%rip), %rdx     # 0xc5e28
leaq -0x460(%rbp), %rdi
callq 0x6a3b0
jmp 0x736a4
movq -0x470(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x6ba10
jmp 0x736b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x6e458
jmp 0x736f4
leaq -0x1b8(%rbp), %rdi
callq 0x6b680
leaq -0x1a8(%rbp), %rdi
callq 0x6e458
addq $0x5f0, %rsp            # imm = 0x5F0
popq %rbp
retq
leaq -0x1b8(%rbp), %rdi
callq 0x6b680
leaq -0x1a8(%rbp), %rdi
callq 0x6e458
movq -0x40(%rbp), %rdi
callq 0x6d7b0
nopw %cs:(%rax,%rax)