// File: Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ShowDemoWindowColumns()
static void ShowDemoWindowColumns()
{
    bool open = ImGui::TreeNode("Legacy Columns API");
    ImGui::SameLine();
    HelpMarker("Columns() is an old API! Prefer using the more flexible and powerful BeginTable() API!");
    if (!open)
        return;

    // Basic columns
    if (ImGui::TreeNode("Basic"))
    {
        ImGui::Text("Without border:");
        ImGui::Columns(3, "mycolumns3", false);  // 3-ways, no border
        ImGui::Separator();
        for (int n = 0; n < 14; n++)
        {
            char label[32];
            sprintf(label, "Item %d", n);
            if (ImGui::Selectable(label)) {}
            //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {}
            ImGui::NextColumn();
        }
        ImGui::Columns(1);
        ImGui::Separator();

        ImGui::Text("With border:");
        ImGui::Columns(4, "mycolumns"); // 4-ways, with border
        ImGui::Separator();
        ImGui::Text("ID"); ImGui::NextColumn();
        ImGui::Text("Name"); ImGui::NextColumn();
        ImGui::Text("Path"); ImGui::NextColumn();
        ImGui::Text("Hovered"); ImGui::NextColumn();
        ImGui::Separator();
        const char* names[3] = { "One", "Two", "Three" };
        const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
        static int selected = -1;
        for (int i = 0; i < 3; i++)
        {
            char label[32];
            sprintf(label, "%04d", i);
            if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
                selected = i;
            bool hovered = ImGui::IsItemHovered();
            ImGui::NextColumn();
            ImGui::Text(names[i]); ImGui::NextColumn();
            ImGui::Text(paths[i]); ImGui::NextColumn();
            ImGui::Text("%d", hovered); ImGui::NextColumn();
        }
        ImGui::Columns(1);
        ImGui::Separator();
        ImGui::TreePop();
    }

    if (ImGui::TreeNode("Borders"))
    {
        // NB: Future columns API should allow automatic horizontal borders.
        static bool h_borders = true;
        static bool v_borders = true;
        static int columns_count = 4;
        const int lines_count = 3;
        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
        ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
        if (columns_count < 2)
            columns_count = 2;
        ImGui::SameLine();
        ImGui::Checkbox("horizontal", &h_borders);
        ImGui::SameLine();
        ImGui::Checkbox("vertical", &v_borders);
        ImGui::Columns(columns_count, NULL, v_borders);
        for (int i = 0; i < columns_count * lines_count; i++)
        {
            if (h_borders && ImGui::GetColumnIndex() == 0)
                ImGui::Separator();
            ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i);
            ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
            ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
            ImGui::Text("Offset %.2f", ImGui::GetColumnOffset());
            ImGui::Text("Long text that is likely to clip");
            ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f));
            ImGui::NextColumn();
        }
        ImGui::Columns(1);
        if (h_borders)
            ImGui::Separator();
        ImGui::TreePop();
    }

    // Create multiple items in a same cell before switching to next column
    if (ImGui::TreeNode("Mixed items"))
    {
        ImGui::Columns(3, "mixed");
        ImGui::Separator();

        ImGui::Text("Hello");
        ImGui::Button("Banana");
        ImGui::NextColumn();

        ImGui::Text("ImGui");
        ImGui::Button("Apple");
        static float foo = 1.0f;
        ImGui::InputFloat("red", &foo, 0.05f, 0, "%.3f");
        ImGui::Text("An extra line here.");
        ImGui::NextColumn();

        ImGui::Text("Sailor");
        ImGui::Button("Corniflower");
        static float bar = 1.0f;
        ImGui::InputFloat("blue", &bar, 0.05f, 0, "%.3f");
        ImGui::NextColumn();

        if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
        if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
        if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
        ImGui::Columns(1);
        ImGui::Separator();
        ImGui::TreePop();
    }

    // Word wrapping
    if (ImGui::TreeNode("Word-wrapping"))
    {
        ImGui::Columns(2, "word-wrapping");
        ImGui::Separator();
        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
        ImGui::TextWrapped("Hello Left");
        ImGui::NextColumn();
        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
        ImGui::TextWrapped("Hello Right");
        ImGui::Columns(1);
        ImGui::Separator();
        ImGui::TreePop();
    }

    if (ImGui::TreeNode("Horizontal Scrolling"))
    {
        ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f));
        ImVec2 child_size = ImVec2(0, ImGui::GetFontSize() * 20.0f);
        ImGui::BeginChild("##ScrollingRegion", child_size, false, ImGuiWindowFlags_HorizontalScrollbar);
        ImGui::Columns(10);

        // Also demonstrate using clipper for large vertical lists
        int ITEMS_COUNT = 2000;
        ImGuiListClipper clipper;
        clipper.Begin(ITEMS_COUNT);
        while (clipper.Step())
        {
            for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
                for (int j = 0; j < 10; j++)
                {
                    ImGui::Text("Line %d Column %d...", i, j);
                    ImGui::NextColumn();
                }
        }
        ImGui::Columns(1);
        ImGui::EndChild();
        ImGui::TreePop();
    }

    if (ImGui::TreeNode("Tree"))
    {
        ImGui::Columns(2, "tree", true);
        for (int x = 0; x < 3; x++)
        {
            bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x);
            ImGui::NextColumn();
            ImGui::Text("Node contents");
            ImGui::NextColumn();
            if (open1)
            {
                for (int y = 0; y < 3; y++)
                {
                    bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y);
                    ImGui::NextColumn();
                    ImGui::Text("Node contents");
                    if (open2)
                    {
                        ImGui::Text("Even more contents");
                        if (ImGui::TreeNode("Tree in column"))
                        {
                            ImGui::Text("The quick brown fox jumps over the lazy dog");
                            ImGui::TreePop();
                        }
                    }
                    ImGui::NextColumn();
                    if (open2)
                        ImGui::TreePop();
                }
                ImGui::TreePop();
            }
        }
        ImGui::Columns(1);
        ImGui::TreePop();
    }

    ImGui::TreePop();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
leaq 0x799e0(%rip), %rdi     # 0x181b12
callq 0x1510b0
andb $0x1, %al
movb %al, -0x1(%rbp)
xorps %xmm0, %xmm0
movss 0x69e39(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq 0x799d2(%rip), %rdi     # 0x181b25
callq 0xf6290
testb $0x1, -0x1(%rbp)
jne 0x108163
jmp 0x108b81
leaq 0x724a3(%rip), %rdi     # 0x17a60d
callq 0x1510b0
testb $0x1, %al
jne 0x108178
jmp 0x1083e9
leaq 0x799fd(%rip), %rdi     # 0x181b7c
movb $0x0, %al
callq 0x139160
movl $0x3, %edi
leaq 0x799fa(%rip), %rsi     # 0x181b8c
xorl %edx, %edx
callq 0x1369d0
callq 0x13dec0
movl $0x0, -0x8(%rbp)
cmpl $0xe, -0x8(%rbp)
jge 0x108206
leaq -0x30(%rbp), %rdi
movl -0x8(%rbp), %edx
leaq 0x73518(%rip), %rsi     # 0x17b6d1
movb $0x0, %al
callq 0xd990
leaq -0x30(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x38(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
movq -0x140(%rbp), %rdi
xorl %edx, %edx
leaq -0x38(%rbp), %rcx
movl %edx, %esi
callq 0x13f2b0
testb $0x1, %al
jne 0x1081f4
jmp 0x1081f6
jmp 0x1081f6
callq 0x136130
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x1081a5
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
callq 0x13dec0
leaq 0x79975(%rip), %rdi     # 0x181b97
movb $0x0, %al
callq 0x139160
movl $0x4, %edi
leaq 0x7996f(%rip), %rsi     # 0x181ba4
movl $0x1, %edx
callq 0x1369d0
callq 0x13dec0
leaq 0x83e31(%rip), %rdi     # 0x18c07c
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x788aa(%rip), %rdi     # 0x180b08
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x7993d(%rip), %rdi     # 0x181bae
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x6b2f9(%rip), %rdi     # 0x17357d
movb $0x0, %al
callq 0x139160
callq 0x136130
callq 0x13dec0
movq 0x1056f4(%rip), %rax    # 0x20d990
movq %rax, -0x50(%rbp)
movq 0x1056f1(%rip), %rax    # 0x20d998
movq %rax, -0x48(%rbp)
movq 0x1056ee(%rip), %rax    # 0x20d9a0
movq %rax, -0x40(%rbp)
movq 0x1056f3(%rip), %rax    # 0x20d9b0
movq %rax, -0x70(%rbp)
movq 0x1056f0(%rip), %rax    # 0x20d9b8
movq %rax, -0x68(%rbp)
movq 0x1056ed(%rip), %rax    # 0x20d9c0
movq %rax, -0x60(%rbp)
movl $0x0, -0x74(%rbp)
cmpl $0x3, -0x74(%rbp)
jge 0x1083cf
leaq -0xa0(%rbp), %rdi
movl -0x74(%rbp), %edx
leaq 0x73c65(%rip), %rsi     # 0x17bf5e
movb $0x0, %al
callq 0xd990
leaq -0xa0(%rbp), %rax
movq %rax, -0x148(%rbp)
movl 0x10a860(%rip), %eax    # 0x212b74
cmpl -0x74(%rbp), %eax
sete %al
movb %al, -0x149(%rbp)
leaq -0xa8(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
movb -0x149(%rbp), %al
movq -0x148(%rbp), %rdi
movzbl %al, %esi
andl $0x1, %esi
movl $0x2, %edx
leaq -0xa8(%rbp), %rcx
callq 0x13f2b0
testb $0x1, %al
jne 0x10835c
jmp 0x108365
movl -0x74(%rbp), %eax
movl %eax, 0x10a80f(%rip)    # 0x212b74
xorl %edi, %edi
callq 0xca1c0
andb $0x1, %al
movb %al, -0xa9(%rbp)
callq 0x136130
movslq -0x74(%rbp), %rax
movq -0x50(%rbp,%rax,8), %rdi
movb $0x0, %al
callq 0x139160
callq 0x136130
movslq -0x74(%rbp), %rax
movq -0x70(%rbp,%rax,8), %rdi
movb $0x0, %al
callq 0x139160
callq 0x136130
movb -0xa9(%rbp), %al
andb $0x1, %al
movzbl %al, %esi
leaq 0x71612(%rip), %rdi     # 0x1799c7
movb $0x0, %al
callq 0x139160
callq 0x136130
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x1082de
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
callq 0x13dec0
callq 0x1523d0
leaq 0x76f1e(%rip), %rdi     # 0x17f30e
callq 0x1510b0
testb $0x1, %al
jne 0x1083fe
jmp 0x1085e5
movl $0x3, -0xb0(%rbp)
callq 0xdae90
movss 0x6a32f(%rip), %xmm1    # 0x172744
mulss %xmm1, %xmm0
callq 0xc6860
leaq 0x797ae(%rip), %rdi     # 0x181bd3
leaq 0x10a750(%rip), %rsi    # 0x212b7c
movss 0x6a348(%rip), %xmm0    # 0x17277c
movl $0x2, %edx
movl $0xa, %ecx
leaq 0x7979e(%rip), %r8      # 0x181be3
xorl %r9d, %r9d
callq 0x143390
cmpl $0x2, 0x10a728(%rip)    # 0x212b7c
jge 0x108460
movl $0x2, 0x10a71c(%rip)    # 0x212b7c
xorps %xmm0, %xmm0
movss 0x69b15(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq 0x79777(%rip), %rdi     # 0x181bee
leaq 0x10a6fa(%rip), %rsi    # 0x212b78
callq 0x13c7c0
xorps %xmm0, %xmm0
movss 0x69af2(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq 0x7975f(%rip), %rdi     # 0x181bf9
leaq 0x10a6d8(%rip), %rsi    # 0x212b79
callq 0x13c7c0
movl 0x10a6d0(%rip), %edi    # 0x212b7c
movb 0x10a6c7(%rip), %al     # 0x212b79
xorl %ecx, %ecx
movl %ecx, %esi
andb $0x1, %al
movzbl %al, %edx
callq 0x1369d0
movl $0x0, -0xb4(%rbp)
movl -0xb4(%rbp), %eax
imull $0x3, 0x10a6a5(%rip), %ecx # 0x212b7c
cmpl %ecx, %eax
jge 0x1085c2
testb $0x1, 0x10a692(%rip)    # 0x212b78
je 0x1084f7
callq 0x135270
cmpl $0x0, %eax
jne 0x1084f7
callq 0x13dec0
movl -0xb4(%rbp), %ecx
addl $0x61, %ecx
leaq 0x796fb(%rip), %rdi     # 0x181c02
xorl %eax, %eax
movl %ecx, %esi
movl %ecx, %edx
callq 0x139160
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x135480
cvtss2sd %xmm0, %xmm0
leaq 0x76419(%rip), %rdi     # 0x17e940
movb $0x1, %al
callq 0x139160
callq 0xd5b40
movlpd %xmm0, -0xbc(%rbp)
movss -0xbc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x776dd(%rip), %rdi     # 0x17fc2b
movb $0x1, %al
callq 0x139160
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x135370
cvtss2sd %xmm0, %xmm0
leaq 0x7969f(%rip), %rdi     # 0x181c09
movb $0x1, %al
callq 0x139160
leaq 0x7969d(%rip), %rdi     # 0x181c15
movb $0x0, %al
callq 0x139160
leaq -0xc4(%rbp), %rdi
movss 0x6a24a(%rip), %xmm0    # 0x1727d8
xorps %xmm1, %xmm1
callq 0xbf4c0
leaq 0x74dfb(%rip), %rdi     # 0x17d398
leaq -0xc4(%rbp), %rsi
callq 0x13a930
callq 0x136130
movl -0xb4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb4(%rbp)
jmp 0x1084ca
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
testb $0x1, 0x10a59f(%rip)    # 0x212b78
je 0x1085e0
callq 0x13dec0
callq 0x1523d0
leaq 0x7964a(%rip), %rdi     # 0x181c36
callq 0x1510b0
testb $0x1, %al
jne 0x1085fa
jmp 0x1087a8
movl $0x3, %edi
leaq 0x770c6(%rip), %rsi     # 0x17f6cc
movl $0x1, %edx
callq 0x1369d0
callq 0x13dec0
leaq 0x75994(%rip), %rdi     # 0x17dfb0
movb $0x0, %al
callq 0x139160
leaq -0xcc(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x72663(%rip), %rdi     # 0x17ac9f
leaq -0xcc(%rbp), %rsi
callq 0x13a930
callq 0x136130
leaq 0x70669(%rip), %rdi     # 0x178cbd
movb $0x0, %al
callq 0x139160
leaq -0xd4(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x72625(%rip), %rdi     # 0x17ac99
leaq -0xd4(%rbp), %rsi
callq 0x13a930
leaq 0x6aefa(%rip), %rdi     # 0x173581
leaq 0x10a4f2(%rip), %rsi    # 0x212b80
movss 0x6a15a(%rip), %xmm0    # 0x1727f0
xorps %xmm1, %xmm1
leaq 0x8760e(%rip), %rdx     # 0x18fcae
xorl %ecx, %ecx
callq 0x149f10
leaq 0x79594(%rip), %rdi     # 0x181c42
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x7303f(%rip), %rdi     # 0x17b700
movb $0x0, %al
callq 0x139160
leaq -0xdc(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x758e4(%rip), %rdi     # 0x17dfc5
leaq -0xdc(%rbp), %rsi
callq 0x13a930
leaq 0x79562(%rip), %rdi     # 0x181c56
leaq 0x10a489(%rip), %rsi    # 0x212b84
movss 0x6a0ed(%rip), %xmm0    # 0x1727f0
xorps %xmm1, %xmm1
leaq 0x875a1(%rip), %rdx     # 0x18fcae
xorl %ecx, %ecx
callq 0x149f10
callq 0x136130
leaq 0x7953b(%rip), %rdi     # 0x181c5b
xorl %esi, %esi
callq 0x1525b0
testb $0x1, %al
jne 0x10872d
jmp 0x10873b
leaq 0x79532(%rip), %rdi     # 0x181c66
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x7952e(%rip), %rdi     # 0x181c75
xorl %esi, %esi
callq 0x1525b0
testb $0x1, %al
jne 0x108754
jmp 0x108762
leaq 0x7950b(%rip), %rdi     # 0x181c66
movb $0x0, %al
callq 0x139160
callq 0x136130
leaq 0x79512(%rip), %rdi     # 0x181c80
xorl %esi, %esi
callq 0x1525b0
testb $0x1, %al
jne 0x10877b
jmp 0x108789
leaq 0x794e4(%rip), %rdi     # 0x181c66
movb $0x0, %al
callq 0x139160
callq 0x136130
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
callq 0x13dec0
callq 0x1523d0
leaq 0x794dc(%rip), %rdi     # 0x181c8b
callq 0x1510b0
testb $0x1, %al
jne 0x1087ba
jmp 0x10882c
movl $0x2, %edi
leaq 0x794d3(%rip), %rsi     # 0x181c99
movl $0x1, %edx
callq 0x1369d0
callq 0x13dec0
leaq 0x729c6(%rip), %rdi     # 0x17b1a2
movb $0x0, %al
callq 0x139570
leaq 0x794bd(%rip), %rdi     # 0x181ca7
movb $0x0, %al
callq 0x139570
callq 0x136130
leaq 0x729a5(%rip), %rdi     # 0x17b1a2
movb $0x0, %al
callq 0x139570
leaq 0x794a7(%rip), %rdi     # 0x181cb2
movb $0x0, %al
callq 0x139570
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
callq 0x13dec0
callq 0x1523d0
leaq 0x7948b(%rip), %rdi     # 0x181cbe
callq 0x1510b0
testb $0x1, %al
jne 0x108841
jmp 0x108a08
leaq -0xe4(%rbp), %rdi
movq %rdi, -0x178(%rbp)
movss 0x6fddd(%rip), %xmm0    # 0x178634
xorps %xmm1, %xmm1
movss %xmm1, -0x16c(%rbp)
callq 0xbf4c0
movq -0x178(%rbp), %rdi
callq 0xdac90
callq 0xdae90
movaps %xmm0, %xmm1
movss -0x16c(%rbp), %xmm0
movss 0x69f51(%rip), %xmm2    # 0x1727dc
mulss %xmm2, %xmm1
leaq -0xec(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0xbf4c0
movq -0x168(%rbp), %rsi
leaq 0x79423(%rip), %rdi     # 0x181cd3
xorl %edx, %edx
movl %edx, -0x15c(%rbp)
movl $0x800, %ecx            # imm = 0x800
callq 0xd5cc0
movl -0x15c(%rbp), %eax
movl %eax, %esi
movl $0xa, %edi
movl $0x1, %edx
callq 0x1369d0
movl $0x7d0, -0xf0(%rbp)     # imm = 0x7D0
leaq -0x10c(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0xc6ff0
movq -0x158(%rbp), %rdi
movl -0xf0(%rbp), %esi
movss 0x69675(%rip), %xmm0    # 0x171f80
callq 0xc7090
jmp 0x108912
jmp 0x108914
leaq -0x10c(%rbp), %rdi
callq 0xc7320
movb %al, -0x179(%rbp)
jmp 0x108928
movb -0x179(%rbp), %al
testb $0x1, %al
jne 0x108937
jmp 0x1089dc
movl -0x10c(%rbp), %eax
movl %eax, -0x120(%rbp)
movl -0x120(%rbp), %eax
cmpl -0x108(%rbp), %eax
jge 0x1089d7
movl $0x0, -0x124(%rbp)
cmpl $0xa, -0x124(%rbp)
jge 0x1089c1
movl -0x120(%rbp), %esi
movl -0x124(%rbp), %edx
leaq 0x7936a(%rip), %rdi     # 0x181ce5
xorl %eax, %eax
callq 0x139160
jmp 0x108984
callq 0x136130
jmp 0x10898b
jmp 0x10898d
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x124(%rbp)
jmp 0x10895f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x118(%rbp)
movl %eax, -0x11c(%rbp)
leaq -0x10c(%rbp), %rdi
callq 0xc7030
jmp 0x108b8a
jmp 0x1089c3
movl -0x120(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x120(%rbp)
jmp 0x108943
jmp 0x108914
xorl %eax, %eax
movl %eax, %esi
movl $0x1, %edx
movl %edx, %edi
callq 0x1369d0
jmp 0x1089ee
callq 0xd5d90
jmp 0x1089f5
callq 0x1523d0
jmp 0x1089fc
leaq -0x10c(%rbp), %rdi
callq 0xc7030
leaq 0x792eb(%rip), %rdi     # 0x181cfa
callq 0x1510b0
testb $0x1, %al
jne 0x108a1d
jmp 0x108b7c
movl $0x2, %edi
leaq 0x792d6(%rip), %rsi     # 0x181cff
movl $0x1, %edx
callq 0x1369d0
movl $0x0, -0x128(%rbp)
cmpl $0x3, -0x128(%rbp)
jge 0x108b67
movslq -0x128(%rbp), %rdi
movl -0x128(%rbp), %edx
leaq 0x792a6(%rip), %rsi     # 0x181d04
movb $0x0, %al
callq 0x150f40
andb $0x1, %al
movb %al, -0x129(%rbp)
callq 0x136130
leaq 0x79292(%rip), %rdi     # 0x181d0b
movb $0x0, %al
callq 0x139160
callq 0x136130
testb $0x1, -0x129(%rbp)
je 0x108b51
movl $0x0, -0x130(%rbp)
cmpl $0x3, -0x130(%rbp)
jge 0x108b4c
movslq -0x130(%rbp), %rdi
movl -0x128(%rbp), %edx
movl -0x130(%rbp), %ecx
leaq 0x79256(%rip), %rsi     # 0x181d19
movb $0x0, %al
callq 0x150f40
andb $0x1, %al
movb %al, -0x131(%rbp)
callq 0x136130
leaq 0x7922d(%rip), %rdi     # 0x181d0b
movb $0x0, %al
callq 0x139160
testb $0x1, -0x131(%rbp)
je 0x108b23
leaq 0x7922e(%rip), %rdi     # 0x181d23
movb $0x0, %al
callq 0x139160
leaq 0x79233(%rip), %rdi     # 0x181d36
callq 0x1510b0
testb $0x1, %al
jne 0x108b0e
jmp 0x108b21
leaq 0x7a579(%rip), %rdi     # 0x18308e
movb $0x0, %al
callq 0x139160
callq 0x1523d0
jmp 0x108b23
callq 0x136130
testb $0x1, -0x131(%rbp)
je 0x108b36
callq 0x1523d0
jmp 0x108b38
movl -0x130(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x130(%rbp)
jmp 0x108a9c
callq 0x1523d0
jmp 0x108b53
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x108a3d
movl $0x1, %edx
xorl %eax, %eax
movl %eax, %esi
movl %edx, %edi
callq 0x1369d0
callq 0x1523d0
callq 0x1523d0
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
movq -0x118(%rbp), %rdi
callq 0xd620
nopw %cs:(%rax,%rax)