// File: Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ShowDemoWindowMisc()
static void ShowDemoWindowMisc()
{
    if (ImGui::CollapsingHeader("Filtering"))
    {
        // Helper class to easy setup a text filter.
        // You may want to implement a more feature-full filtering scheme in your own application.
        static ImGuiTextFilter filter;
        ImGui::Text("Filter usage:\n"
                    "  \"\"         display all lines\n"
                    "  \"xxx\"      display lines containing \"xxx\"\n"
                    "  \"xxx,yyy\"  display lines containing \"xxx\" or \"yyy\"\n"
                    "  \"-xxx\"     hide lines containing \"xxx\"");
        filter.Draw();
        const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" };
        for (int i = 0; i < IM_ARRAYSIZE(lines); i++)
            if (filter.PassFilter(lines[i]))
                ImGui::BulletText("%s", lines[i]);
    }

    if (ImGui::CollapsingHeader("Inputs, Navigation & Focus"))
    {
        ImGuiIO& io = ImGui::GetIO();

        // Display ImGuiIO output flags
        ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse);
        ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
        ImGui::Text("WantTextInput: %d", io.WantTextInput);
        ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos);
        ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible);

        // Display Keyboard/Mouse state
        if (ImGui::TreeNode("Keyboard, Mouse & Navigation State"))
        {
            if (ImGui::IsMousePosValid())
                ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
            else
                ImGui::Text("Mouse pos: <INVALID>");
            ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y);
            ImGui::Text("Mouse down:");     for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f)   { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
            ImGui::Text("Mouse clicked:");  for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i))          { ImGui::SameLine(); ImGui::Text("b%d", i); }
            ImGui::Text("Mouse dblclick:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i))    { ImGui::SameLine(); ImGui::Text("b%d", i); }
            ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i))         { ImGui::SameLine(); ImGui::Text("b%d", i); }
            ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);

            ImGui::Text("Keys down:");      for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f)     { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); }
            ImGui::Text("Keys pressed:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i))             { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
            ImGui::Text("Keys release:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i))            { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
            ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
            ImGui::Text("Chars queue:");    for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine();  ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.

            ImGui::Text("NavInputs down:");     for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f)              { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputs[i]); }
            ImGui::Text("NavInputs pressed:");  for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); }
            ImGui::Text("NavInputs duration:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputsDownDuration[i]); }

            ImGui::Button("Hovering me sets the\nkeyboard capture flag");
            if (ImGui::IsItemHovered())
                ImGui::CaptureKeyboardFromApp(true);
            ImGui::SameLine();
            ImGui::Button("Holding me clears the\nthe keyboard capture flag");
            if (ImGui::IsItemActive())
                ImGui::CaptureKeyboardFromApp(false);

            ImGui::TreePop();
        }

        if (ImGui::TreeNode("Tabbing"))
        {
            ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields.");
            static char buf[32] = "hello";
            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
            ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
            ImGui::PushAllowKeyboardFocus(false);
            ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
            //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool) to disable tabbing through certain widgets.");
            ImGui::PopAllowKeyboardFocus();
            ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
            ImGui::TreePop();
        }

        if (ImGui::TreeNode("Focus from code"))
        {
            bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine();
            bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine();
            bool focus_3 = ImGui::Button("Focus on 3");
            int has_focus = 0;
            static char buf[128] = "click on a button to set focus";

            if (focus_1) ImGui::SetKeyboardFocusHere();
            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
            if (ImGui::IsItemActive()) has_focus = 1;

            if (focus_2) ImGui::SetKeyboardFocusHere();
            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
            if (ImGui::IsItemActive()) has_focus = 2;

            ImGui::PushAllowKeyboardFocus(false);
            if (focus_3) ImGui::SetKeyboardFocusHere();
            ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
            if (ImGui::IsItemActive()) has_focus = 3;
            ImGui::PopAllowKeyboardFocus();

            if (has_focus)
                ImGui::Text("Item with focus: %d", has_focus);
            else
                ImGui::Text("Item with focus: <none>");

            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
            static float f3[3] = { 0.0f, 0.0f, 0.0f };
            int focus_ahead = -1;
            if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine();
            if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine();
            if (ImGui::Button("Focus on Z")) { focus_ahead = 2; }
            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);

            ImGui::TextWrapped("NB: Cursor & selection are preserved when refocusing last used item in code.");
            ImGui::TreePop();
        }

        if (ImGui::TreeNode("Dragging"))
        {
            ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
            for (int button = 0; button < 3; button++)
            {
                ImGui::Text("IsMouseDragging(%d):", button);
                ImGui::Text("  w/ default threshold: %d,", ImGui::IsMouseDragging(button));
                ImGui::Text("  w/ zero threshold: %d,", ImGui::IsMouseDragging(button, 0.0f));
                ImGui::Text("  w/ large threshold: %d,", ImGui::IsMouseDragging(button, 20.0f));
            }

            ImGui::Button("Drag Me");
            if (ImGui::IsItemActive())
                ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor

            // Drag operations gets "unlocked" when the mouse has moved past a certain threshold
            // (the default threshold is stored in io.MouseDragThreshold). You can request a lower or higher
            // threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta().
            ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
            ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
            ImVec2 mouse_delta = io.MouseDelta;
            ImGui::Text("GetMouseDragDelta(0):");
            ImGui::Text("  w/ default threshold: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y);
            ImGui::Text("  w/ zero threshold: (%.1f, %.1f)", value_raw.x, value_raw.y);
            ImGui::Text("io.MouseDelta: (%.1f, %.1f)", mouse_delta.x, mouse_delta.y);
            ImGui::TreePop();
        }

        if (ImGui::TreeNode("Mouse cursors"))
        {
            const char* mouse_cursors_names[] = { "Arrow", "TextInput", "ResizeAll", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE", "Hand", "NotAllowed" };
            IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_COUNT);

            ImGuiMouseCursor current = ImGui::GetMouseCursor();
            ImGui::Text("Current mouse cursor = %d: %s", current, mouse_cursors_names[current]);
            ImGui::Text("Hover to see mouse cursors:");
            ImGui::SameLine(); HelpMarker(
                "Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. "
                "If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, "
                "otherwise your backend needs to handle it.");
            for (int i = 0; i < ImGuiMouseCursor_COUNT; i++)
            {
                char label[32];
                sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]);
                ImGui::Bullet(); ImGui::Selectable(label, false);
                if (ImGui::IsItemHovered())
                    ImGui::SetMouseCursor(i);
            }
            ImGui::TreePop();
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
leaq 0x7c0b3(%rip), %rdi     # 0x181d45
xorl %esi, %esi
callq 0x1525b0
testb $0x1, %al
jne 0x105ca2
jmp 0x105da1
cmpb $0x0, 0x10e3af(%rip)    # 0x214058
jne 0x105cf7
leaq 0x10e3a6(%rip), %rdi    # 0x214058
callq 0xd380
cmpl $0x0, %eax
je 0x105cf7
leaq 0x10e27d(%rip), %rdi    # 0x213f40
leaq 0x6c23f(%rip), %rsi     # 0x171f09
callq 0xc65d0
jmp 0x105cd1
leaq 0x32e8(%rip), %rdi      # 0x108fc0
leaq 0x10e261(%rip), %rsi    # 0x213f40
leaq 0x1088d2(%rip), %rdx    # 0x20e5b8
callq 0xd820
leaq 0x10e366(%rip), %rdi    # 0x214058
callq 0xd580
leaq 0x7c051(%rip), %rdi     # 0x181d4f
movb $0x0, %al
callq 0x139160
leaq 0x10e234(%rip), %rdi    # 0x213f40
leaq 0x7c0f3(%rip), %rsi     # 0x181e06
xorps %xmm0, %xmm0
callq 0xc67e0
leaq -0x50(%rbp), %rdi
leaq 0x107caa(%rip), %rsi    # 0x20d9d0
movl $0x40, %edx
callq 0xd0a0
movl $0x0, -0x54(%rbp)
cmpl $0x8, -0x54(%rbp)
jge 0x105d9f
movslq -0x54(%rbp), %rax
movq -0x50(%rbp,%rax,8), %rsi
leaq 0x10e1f3(%rip), %rdi    # 0x213f40
xorl %eax, %eax
movl %eax, %edx
callq 0xc69a0
testb $0x1, %al
jne 0x105d5c
jmp 0x105d92
movslq -0x54(%rbp), %rax
movq -0x50(%rbp,%rax,8), %rsi
leaq 0x6fe5b(%rip), %rdi     # 0x175bc7
movb $0x0, %al
callq 0x139ab0
jmp 0x105d92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x8(%rbp)
movl %eax, -0xc(%rbp)
leaq 0x10e2d0(%rip), %rdi    # 0x214058
callq 0xd460
jmp 0x106c57
jmp 0x105d94
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x105d37
jmp 0x105da1
leaq 0x7c0b3(%rip), %rdi     # 0x181e5b
xorl %esi, %esi
callq 0x1525b0
testb $0x1, %al
jne 0x105db8
jmp 0x106c4e
callq 0xcb1a0
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movb 0x390(%rax), %al
andb $0x1, %al
movzbl %al, %esi
leaq 0x7c09f(%rip), %rdi     # 0x181e76
movb $0x0, %al
callq 0x139160
movq -0x60(%rbp), %rax
movb 0x391(%rax), %al
andb $0x1, %al
movzbl %al, %esi
leaq 0x7c097(%rip), %rdi     # 0x181e8b
movb $0x0, %al
callq 0x139160
movq -0x60(%rbp), %rax
movb 0x392(%rax), %al
andb $0x1, %al
movzbl %al, %esi
leaq 0x7c092(%rip), %rdi     # 0x181ea3
movb $0x0, %al
callq 0x139160
movq -0x60(%rbp), %rax
movb 0x393(%rax), %al
andb $0x1, %al
movzbl %al, %esi
leaq 0x7c087(%rip), %rdi     # 0x181eb5
movb $0x0, %al
callq 0x139160
movq -0x60(%rbp), %rax
movb 0x395(%rax), %al
andb $0x1, %al
movzbl %al, %esi
movq -0x60(%rbp), %rax
movb 0x396(%rax), %al
andb $0x1, %al
movzbl %al, %edx
leaq 0x7018e(%rip), %rdi     # 0x175fe8
movb $0x0, %al
callq 0x139160
leaq 0x7c061(%rip), %rdi     # 0x181ec9
callq 0x1510b0
testb $0x1, %al
jne 0x105e76
jmp 0x106521
xorl %eax, %eax
movl %eax, %edi
callq 0xcb710
testb $0x1, %al
jne 0x105e85
jmp 0x105eb5
movq -0x60(%rbp), %rax
movss 0x120(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x60(%rbp), %rax
movss 0x124(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x7c040(%rip), %rdi     # 0x181eec
movb $0x2, %al
callq 0x139160
jmp 0x105ec3
leaq 0x7c044(%rip), %rdi     # 0x181f00
movb $0x0, %al
callq 0x139160
movq -0x60(%rbp), %rax
movss 0x3b0(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x60(%rbp), %rax
movss 0x3b4(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x7c02b(%rip), %rdi     # 0x181f15
movb $0x2, %al
callq 0x139160
leaq 0x7c033(%rip), %rdi     # 0x181f2b
movb $0x0, %al
callq 0x139160
movl $0x0, -0x64(%rbp)
cmpl $0x5, -0x64(%rbp)
jge 0x105f68
movq -0x60(%rbp), %rax
movslq -0x64(%rbp), %rcx
movss 0x434(%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x105f5b
xorps %xmm0, %xmm0
movss 0x6c050(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x64(%rbp), %esi
movq -0x60(%rbp), %rax
movslq -0x64(%rbp), %rcx
movss 0x434(%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x7bfe3(%rip), %rdi     # 0x181f37
movb $0x1, %al
callq 0x139160
jmp 0x105f5d
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x105f06
leaq 0x7bfd9(%rip), %rdi     # 0x181f48
movb $0x0, %al
callq 0x139160
movl $0x0, -0x68(%rbp)
cmpl $0x5, -0x68(%rbp)
jge 0x105fc1
movl -0x68(%rbp), %edi
xorl %esi, %esi
callq 0xd4d60
testb $0x1, %al
jne 0x105f93
jmp 0x105fb4
xorps %xmm0, %xmm0
movss 0x6bfe2(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x68(%rbp), %esi
leaq 0x7bfaa(%rip), %rdi     # 0x181f57
movb $0x0, %al
callq 0x139160
jmp 0x105fb6
movl -0x68(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x68(%rbp)
jmp 0x105f7d
leaq 0x7bf93(%rip), %rdi     # 0x181f5b
movb $0x0, %al
callq 0x139160
movl $0x0, -0x6c(%rbp)
cmpl $0x5, -0x6c(%rbp)
jge 0x106018
movl -0x6c(%rbp), %edi
callq 0xd4ed0
testb $0x1, %al
jne 0x105fea
jmp 0x10600b
xorps %xmm0, %xmm0
movss 0x6bf8b(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x6c(%rbp), %esi
leaq 0x7bf53(%rip), %rdi     # 0x181f57
movb $0x0, %al
callq 0x139160
jmp 0x10600d
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x105fd6
leaq 0x7bf4c(%rip), %rdi     # 0x181f6b
movb $0x0, %al
callq 0x139160
movl $0x0, -0x70(%rbp)
cmpl $0x5, -0x70(%rbp)
jge 0x10606f
movl -0x70(%rbp), %edi
callq 0xd4e60
testb $0x1, %al
jne 0x106041
jmp 0x106062
xorps %xmm0, %xmm0
movss 0x6bf34(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x70(%rbp), %esi
leaq 0x7befc(%rip), %rdi     # 0x181f57
movb $0x0, %al
callq 0x139160
jmp 0x106064
movl -0x70(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0x10602d
movq -0x60(%rbp), %rax
movss 0x130(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x7bef5(%rip), %rdi     # 0x181f7b
movb $0x1, %al
callq 0x139160
leaq 0x7bef9(%rip), %rdi     # 0x181f8d
movb $0x0, %al
callq 0x139160
movl $0x0, -0x74(%rbp)
cmpl $0x200, -0x74(%rbp)     # imm = 0x200
jge 0x10610a
movq -0x60(%rbp), %rax
movslq -0x74(%rbp), %rcx
movss 0x498(%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x1060fd
xorps %xmm0, %xmm0
movss 0x6beb1(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x74(%rbp), %esi
movl -0x74(%rbp), %edx
movq -0x60(%rbp), %rax
movslq -0x74(%rbp), %rcx
movss 0x498(%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x7bea2(%rip), %rdi     # 0x181f98
movb $0x1, %al
callq 0x139160
jmp 0x1060ff
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x1060a2
leaq 0x7be9e(%rip), %rdi     # 0x181faf
movb $0x0, %al
callq 0x139160
movl $0x0, -0x78(%rbp)
cmpl $0x200, -0x78(%rbp)     # imm = 0x200
jge 0x10616c
movl -0x78(%rbp), %edi
movl $0x1, %esi
callq 0xd4bc0
testb $0x1, %al
jne 0x10613b
jmp 0x10615f
xorps %xmm0, %xmm0
movss 0x6be3a(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x78(%rbp), %esi
movl -0x78(%rbp), %edx
leaq 0x7be65(%rip), %rdi     # 0x181fbd
movb $0x0, %al
callq 0x139160
jmp 0x106161
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x10611f
leaq 0x7be54(%rip), %rdi     # 0x181fc7
movb $0x0, %al
callq 0x139160
movl $0x0, -0x7c(%rbp)
cmpl $0x200, -0x7c(%rbp)     # imm = 0x200
jge 0x1061c9
movl -0x7c(%rbp), %edi
callq 0xd4cb0
testb $0x1, %al
jne 0x106198
jmp 0x1061bc
xorps %xmm0, %xmm0
movss 0x6bddd(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x7c(%rbp), %esi
movl -0x7c(%rbp), %edx
leaq 0x7be08(%rip), %rdi     # 0x181fbd
movb $0x0, %al
callq 0x139160
jmp 0x1061be
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x106181
movq -0x60(%rbp), %rax
movb 0x138(%rax), %cl
leaq 0x6bd2f(%rip), %rsi     # 0x171f09
leaq 0x7be08(%rip), %rax     # 0x181fe9
testb $0x1, %cl
cmovneq %rax, %rsi
movq -0x60(%rbp), %rax
movb 0x139(%rax), %cl
leaq 0x6bd10(%rip), %rdx     # 0x171f09
leaq 0x7bdef(%rip), %rax     # 0x181fef
testb $0x1, %cl
cmovneq %rax, %rdx
movq -0x60(%rbp), %rax
movb 0x13a(%rax), %dil
leaq 0x6bcf0(%rip), %rcx     # 0x171f09
leaq 0x7bdd6(%rip), %rax     # 0x181ff6
testb $0x1, %dil
cmovneq %rax, %rcx
movq -0x60(%rbp), %rax
movb 0x13b(%rax), %dil
leaq 0x6bccf(%rip), %r8      # 0x171f09
leaq 0x7bdba(%rip), %rax     # 0x181ffb
testb $0x1, %dil
cmovneq %rax, %r8
leaq 0x7bd85(%rip), %rdi     # 0x181fd5
movb $0x0, %al
callq 0x139160
leaq 0x7bda4(%rip), %rdi     # 0x182002
movb $0x0, %al
callq 0x139160
movl $0x0, -0x80(%rbp)
movl -0x80(%rbp), %eax
movq -0x60(%rbp), %rcx
cmpl 0x1548(%rcx), %eax
jge 0x10630b
movq -0x60(%rbp), %rdi
addq $0x1548, %rdi           # imm = 0x1548
movl -0x80(%rbp), %esi
callq 0x1094a0
movw (%rax), %ax
movw %ax, -0x82(%rbp)
xorps %xmm0, %xmm0
movss 0x6bcd9(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movzwl -0x82(%rbp), %eax
cmpl $0x20, %eax
jle 0x1062d5
movzwl -0x82(%rbp), %eax
cmpl $0xff, %eax
jg 0x1062d5
movw -0x82(%rbp), %ax
movb %al, -0x189(%rbp)
jmp 0x1062df
movb $0x3f, %al
movb %al, -0x189(%rbp)
jmp 0x1062df
movb -0x189(%rbp), %al
movsbl %al, %esi
movzwl -0x82(%rbp), %edx
leaq 0x7bd19(%rip), %rdi     # 0x18200f
movb $0x0, %al
callq 0x139160
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x10626c
leaq 0x7bd0b(%rip), %rdi     # 0x18201d
movb $0x0, %al
callq 0x139160
movl $0x0, -0x88(%rbp)
cmpl $0x15, -0x88(%rbp)
jge 0x106397
movq -0x60(%rbp), %rax
movslq -0x88(%rbp), %rcx
movss 0x33c(%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x106384
xorps %xmm0, %xmm0
movss 0x6bc2d(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x88(%rbp), %esi
movq -0x60(%rbp), %rax
movslq -0x88(%rbp), %rcx
movss 0x33c(%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x7bcb0(%rip), %rdi     # 0x18202d
movb $0x1, %al
callq 0x139160
jmp 0x106386
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x106323
leaq 0x7bc99(%rip), %rdi     # 0x182037
movb $0x0, %al
callq 0x139160
movl $0x0, -0x8c(%rbp)
cmpl $0x15, -0x8c(%rbp)
jge 0x10640d
movq -0x60(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movss 0x1498(%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x1063fa
jp 0x1063fa
xorps %xmm0, %xmm0
movss 0x6bb9f(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x8c(%rbp), %esi
leaq 0x6be53(%rip), %rdi     # 0x172246
movb $0x0, %al
callq 0x139160
jmp 0x1063fc
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1063af
leaq 0x7bc36(%rip), %rdi     # 0x18204a
movb $0x0, %al
callq 0x139160
movl $0x0, -0x90(%rbp)
cmpl $0x15, -0x90(%rbp)
jge 0x106499
movq -0x60(%rbp), %rax
movslq -0x90(%rbp), %rcx
movss 0x1498(%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x106486
xorps %xmm0, %xmm0
movss 0x6bb2b(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
movl -0x90(%rbp), %esi
movq -0x60(%rbp), %rax
movslq -0x90(%rbp), %rcx
movss 0x1498(%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x7bbae(%rip), %rdi     # 0x18202d
movb $0x1, %al
callq 0x139160
jmp 0x106488
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x106425
leaq -0x98(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7bbac(%rip), %rdi     # 0x18205e
leaq -0x98(%rbp), %rsi
callq 0x13a930
xorl %edi, %edi
callq 0xca1c0
testb $0x1, %al
jne 0x1064cb
jmp 0x1064d5
movl $0x1, %edi
callq 0xd5360
xorps %xmm0, %xmm0
movss 0x6baa0(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq -0xa0(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7bb8b(%rip), %rdi     # 0x182089
leaq -0xa0(%rbp), %rsi
callq 0x13a930
callq 0xd53c0
testb $0x1, %al
jne 0x106515
jmp 0x10651c
xorl %edi, %edi
callq 0xd5360
callq 0x1523d0
leaq 0x7bb91(%rip), %rdi     # 0x1820b9
callq 0x1510b0
testb $0x1, %al
jne 0x106536
jmp 0x1065ff
leaq 0x7bb84(%rip), %rdi     # 0x1820c1
movb $0x0, %al
callq 0x139160
leaq 0x7677f(%rip), %rdi     # 0x17ccca
leaq 0x10c63e(%rip), %rsi    # 0x212b90
movl $0x20, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
leaq 0x88bb8(%rip), %rdi     # 0x18f125
leaq 0x10c61c(%rip), %rsi    # 0x212b90
movl $0x20, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
leaq 0x7bbab(%rip), %rdi     # 0x18213a
leaq 0x10c5fa(%rip), %rsi    # 0x212b90
movl $0x20, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
xorl %edi, %edi
callq 0xda240
leaq 0x7bb46(%rip), %rdi     # 0x1820fe
leaq 0x10c5d1(%rip), %rsi    # 0x212b90
movl $0x20, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
callq 0xda270
leaq 0x896e1(%rip), %rdi     # 0x18fcc0
leaq 0x10c5aa(%rip), %rsi    # 0x212b90
movl $0x20, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
callq 0x1523d0
leaq 0x7bb05(%rip), %rdi     # 0x18210b
callq 0x1510b0
testb $0x1, %al
jne 0x106614
jmp 0x1068ea
leaq -0xac(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7baee(%rip), %rdi     # 0x18211b
leaq -0xac(%rbp), %rsi
callq 0x13a930
andb $0x1, %al
movb %al, -0xa1(%rbp)
xorps %xmm0, %xmm0
movss 0x6b934(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq -0xb8(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7babc(%rip), %rdi     # 0x182126
leaq -0xb8(%rbp), %rsi
callq 0x13a930
andb $0x1, %al
movb %al, -0xad(%rbp)
xorps %xmm0, %xmm0
movss 0x6b8f7(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq -0xc4(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7ba8a(%rip), %rdi     # 0x182131
leaq -0xc4(%rbp), %rsi
callq 0x13a930
andb $0x1, %al
movb %al, -0xb9(%rbp)
movl $0x0, -0xc8(%rbp)
testb $0x1, -0xa1(%rbp)
je 0x1066d5
xorl %edi, %edi
callq 0xdb080
leaq 0x765ee(%rip), %rdi     # 0x17ccca
leaq 0x10c4cd(%rip), %rsi    # 0x212bb0
movl $0x80, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
callq 0xd53c0
testb $0x1, %al
jne 0x106702
jmp 0x10670c
movl $0x1, -0xc8(%rbp)
testb $0x1, -0xad(%rbp)
je 0x10671c
xorl %edi, %edi
callq 0xdb080
leaq 0x88a02(%rip), %rdi     # 0x18f125
leaq 0x10c486(%rip), %rsi    # 0x212bb0
movl $0x80, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
callq 0xd53c0
testb $0x1, %al
jne 0x106749
jmp 0x106753
movl $0x2, -0xc8(%rbp)
xorl %edi, %edi
callq 0xda240
testb $0x1, -0xb9(%rbp)
je 0x10676a
xorl %edi, %edi
callq 0xdb080
leaq 0x7b9cb(%rip), %rdi     # 0x18213c
leaq 0x10c438(%rip), %rsi    # 0x212bb0
movl $0x80, %edx
xorl %ecx, %ecx
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %r8
callq 0x149cd0
callq 0xd53c0
testb $0x1, %al
jne 0x106797
jmp 0x1067a1
movl $0x3, -0xc8(%rbp)
callq 0xda270
cmpl $0x0, -0xc8(%rbp)
je 0x1067c5
movl -0xc8(%rbp), %esi
leaq 0x7b98d(%rip), %rdi     # 0x182149
movb $0x0, %al
callq 0x139160
jmp 0x1067d3
leaq 0x7b991(%rip), %rdi     # 0x18215d
movb $0x0, %al
callq 0x139160
movl $0xffffffff, -0xcc(%rbp) # imm = 0xFFFFFFFF
leaq -0xd4(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7b97f(%rip), %rdi     # 0x182175
leaq -0xd4(%rbp), %rsi
callq 0x13a930
testb $0x1, %al
jne 0x106808
jmp 0x106812
movl $0x0, -0xcc(%rbp)
xorps %xmm0, %xmm0
movss 0x6b763(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq -0xdc(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7b945(%rip), %rdi     # 0x182180
leaq -0xdc(%rbp), %rsi
callq 0x13a930
testb $0x1, %al
jne 0x10684d
jmp 0x106857
movl $0x1, -0xcc(%rbp)
xorps %xmm0, %xmm0
movss 0x6b71e(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq -0xe4(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7b90b(%rip), %rdi     # 0x18218b
leaq -0xe4(%rbp), %rsi
callq 0x13a930
testb $0x1, %al
jne 0x106892
jmp 0x10689c
movl $0x2, -0xcc(%rbp)
cmpl $-0x1, -0xcc(%rbp)
je 0x1068b0
movl -0xcc(%rbp), %edi
callq 0xdb080
leaq 0x76b35(%rip), %rdi     # 0x17d3ec
leaq 0x10d7a2(%rip), %rsi    # 0x214060
xorps %xmm0, %xmm0
movss 0x6a373(%rip), %xmm1    # 0x170c3c
leaq 0x893de(%rip), %rdx     # 0x18fcae
xorl %ecx, %ecx
callq 0x1449c0
leaq 0x7b8b8(%rip), %rdi     # 0x182196
movb $0x0, %al
callq 0x139570
callq 0x1523d0
leaq 0x7b8f2(%rip), %rdi     # 0x1821e3
callq 0x1510b0
testb $0x1, %al
jne 0x1068ff
jmp 0x106b17
leaq 0x7b8e6(%rip), %rdi     # 0x1821ec
movb $0x0, %al
callq 0x139570
movl $0x0, -0xe8(%rbp)
cmpl $0x3, -0xe8(%rbp)
jge 0x1069b9
movl -0xe8(%rbp), %esi
leaq 0x7b912(%rip), %rdi     # 0x182243
movb $0x0, %al
callq 0x139160
movl -0xe8(%rbp), %edi
movss 0x6b63a(%rip), %xmm0    # 0x171f80
callq 0xd4fe0
andb $0x1, %al
movzbl %al, %esi
leaq 0x7b901(%rip), %rdi     # 0x182258
movb $0x0, %al
callq 0x139160
movl -0xe8(%rbp), %edi
xorps %xmm0, %xmm0
callq 0xd4fe0
andb $0x1, %al
movzbl %al, %esi
leaq 0x7b8fc(%rip), %rdi     # 0x182274
movb $0x0, %al
callq 0x139160
movl -0xe8(%rbp), %edi
movss 0x6be4f(%rip), %xmm0    # 0x1727dc
callq 0xd4fe0
andb $0x1, %al
movzbl %al, %esi
leaq 0x7b8ef(%rip), %rdi     # 0x18228d
movb $0x0, %al
callq 0x139160
movl -0xe8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xe8(%rbp)
jmp 0x106917
leaq -0xf0(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
leaq 0x7b8d5(%rip), %rdi     # 0x1822a7
leaq -0xf0(%rbp), %rsi
callq 0x13a930
callq 0xd53c0
testb $0x1, %al
jne 0x1069e9
jmp 0x106a4d
callq 0xca6c0
movq %rax, -0x1a8(%rbp)
movq -0x60(%rbp), %rax
addq $0x3c4, %rax            # imm = 0x3C4
movq %rax, -0x1a0(%rbp)
movq -0x60(%rbp), %rax
addq $0x120, %rax            # imm = 0x120
movq %rax, -0x198(%rbp)
movl $0x15, %edi
movss 0x6a218(%rip), %xmm0    # 0x170c3c
callq 0xc76e0
movq -0x1a8(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
movl %eax, %ecx
movss 0x6bcec(%rip), %xmm0    # 0x172734
callq 0x112e20
xorl %edi, %edi
movl %edi, -0x1ac(%rbp)
xorps %xmm0, %xmm0
callq 0xd5160
movl -0x1ac(%rbp), %edi
movlpd %xmm0, -0xf8(%rbp)
movss 0x6b50d(%rip), %xmm0    # 0x171f80
callq 0xd5160
movlpd %xmm0, -0x100(%rbp)
movq -0x60(%rbp), %rax
movq 0x3b0(%rax), %rax
movq %rax, -0x108(%rbp)
leaq 0x7b816(%rip), %rdi     # 0x1822af
movb $0x0, %al
callq 0x139160
movss -0x100(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0xfc(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x7b806(%rip), %rdi     # 0x1822c5
movb $0x2, %al
callq 0x139160
movss -0xf8(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0xf4(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x7b805(%rip), %rdi     # 0x1822ea
movb $0x2, %al
callq 0x139160
movss -0x108(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0x104(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x7b801(%rip), %rdi     # 0x18230c
movb $0x2, %al
callq 0x139160
callq 0x1523d0
leaq 0x7b80a(%rip), %rdi     # 0x182328
callq 0x1510b0
testb $0x1, %al
jne 0x106b2c
jmp 0x106c4c
leaq -0x150(%rbp), %rdi
leaq 0x106ed6(%rip), %rsi    # 0x20da10
movl $0x48, %edx
callq 0xd0a0
callq 0xd5320
movl %eax, -0x154(%rbp)
movl -0x154(%rbp), %esi
movslq -0x154(%rbp), %rax
movq -0x150(%rbp,%rax,8), %rdx
leaq 0x7b817(%rip), %rdi     # 0x182382
movb $0x0, %al
callq 0x139160
leaq 0x7b827(%rip), %rdi     # 0x1823a0
movb $0x0, %al
callq 0x139160
xorps %xmm0, %xmm0
movss 0x6b3f5(%rip), %xmm1    # 0x171f80
callq 0xdc1c0
leaq 0x7b825(%rip), %rdi     # 0x1823bc
callq 0xf6290
movl $0x0, -0x158(%rbp)
cmpl $0x9, -0x158(%rbp)
jge 0x106c47
leaq -0x180(%rbp), %rdi
movl -0x158(%rbp), %edx
movslq -0x158(%rbp), %rax
movq -0x150(%rbp,%rax,8), %rcx
leaq 0x7b8d8(%rip), %rsi     # 0x1824ae
movb $0x0, %al
callq 0xd990
callq 0x13d6c0
leaq -0x180(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x188(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0xbf4c0
movq -0x1b8(%rbp), %rdi
xorl %edx, %edx
leaq -0x188(%rbp), %rcx
movl %edx, %esi
callq 0x13f2b0
xorl %edi, %edi
callq 0xca1c0
testb $0x1, %al
jne 0x106c26
jmp 0x106c31
movl -0x158(%rbp), %edi
callq 0xd5340
jmp 0x106c33
movl -0x158(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x158(%rbp)
jmp 0x106ba6
callq 0x1523d0
jmp 0x106c4e
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0x8(%rbp), %rdi
callq 0xd620