// File: /workspace/github_cpp_makefile_star2_O2/Konano[P]UselessDatabase/./json.hpp
// Function: nlohmann::detail::serializer<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>>::dump(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, bool, bool, unsigned int, unsigned int)
void dump(const BasicJsonType& val, const bool pretty_print,
              const bool ensure_ascii,
              const unsigned int indent_step,
              const unsigned int current_indent = 0)
    {
        switch (val.m_type)
        {
            case value_t::object:
            {
                if (val.m_value.object->empty())
                {
                    o->write_characters("{}", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("{\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\": ", 3);
                        dump(i->second, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_characters(indent_string.c_str(), new_indent);
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\": ", 3);
                    dump(i->second, true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character('}');
                }
                else
                {
                    o->write_character('{');

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\":", 2);
                        dump(i->second, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\":", 2);
                    dump(i->second, false, ensure_ascii, indent_step, current_indent);

                    o->write_character('}');
                }

                return;
            }

            case value_t::array:
            {
                if (val.m_value.array->empty())
                {
                    o->write_characters("[]", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("[\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        dump(*i, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    o->write_characters(indent_string.c_str(), new_indent);
                    dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character(']');
                }
                else
                {
                    o->write_character('[');

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        dump(*i, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);

                    o->write_character(']');
                }

                return;
            }

            case value_t::string:
            {
                o->write_character('\"');
                dump_escaped(*val.m_value.string, ensure_ascii);
                o->write_character('\"');
                return;
            }

            case value_t::boolean:
            {
                if (val.m_value.boolean)
                {
                    o->write_characters("true", 4);
                }
                else
                {
                    o->write_characters("false", 5);
                }
                return;
            }

            case value_t::number_integer:
            {
                dump_integer(val.m_value.number_integer);
                return;
            }

            case value_t::number_unsigned:
            {
                dump_integer(val.m_value.number_unsigned);
                return;
            }

            case value_t::number_float:
            {
                dump_float(val.m_value.number_float);
                return;
            }

            case value_t::discarded:
            {
                o->write_characters("<discarded>", 11);
                return;
            }

            case value_t::null:
            {
                o->write_characters("null", 4);
                return;
            }

            default:            // LCOV_EXCL_LINE
                assert(false);  // LCOV_EXCL_LINE
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r8, 0x8(%rsp)
movzbl (%rsi), %eax
cmpq $0x8, %rax
ja 0x9f28
movl %r9d, %r15d
movl %ecx, %ebp
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x2974a(%rip), %rcx     # 0x330fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x29f63(%rip), %rsi     # 0x3392f
jmp 0x99eb
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
cmpb $0x1, 0x8(%r12)
jne 0x9c23
leaq 0x29f2d(%rip), %rsi     # 0x33918
pushq $0x4
jmp 0x9c48
movq 0x8(%r12), %rcx
movq (%rcx), %rsi
movq (%rbx), %rdi
movq (%rdi), %rax
cmpq 0x8(%rcx), %rsi
je 0x9c2e
testb %dl, %dl
je 0x9c59
leaq 0x29edd(%rip), %rsi     # 0x338f6
pushq $0x2
popq %rdx
callq *0x8(%rax)
movq 0x8(%rsp), %rax
leal (%r15,%rax), %r14d
movq 0x268(%rbx), %rsi
cmpq %r14, %rsi
jb 0x9efa
movq 0x8(%r12), %rax
movq (%rax), %r13
movzbl %bpl, %ebp
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rdx
cmpq %rdx, %r13
je 0x9cac
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r14, %rdx
callq *0x8(%rax)
movq %rbx, %rdi
movq %r13, %rsi
pushq $0x1
popq %rdx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r14d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x29d4a(%rip), %rsi     # 0x337d7
pushq $0x2
popq %rdx
callq *0x8(%rax)
addq $0x10, %r13
movq 0x8(%r12), %rax
jmp 0x9a44
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x22
popq %r14
movl %r14d, %esi
callq *(%rax)
movq 0x8(%r12), %rsi
movzbl %bpl, %edx
movq %rbx, %rdi
callq 0xa1f0
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl %r14d, %esi
jmp 0x9eea
movsd 0x8(%r12), %xmm0
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xa90e
movq 0x8(%r12), %rax
cmpq $0x0, 0x28(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
je 0x9c3b
testb %dl, %dl
je 0x9d37
leaq 0x29cbf(%rip), %rsi     # 0x337d0
pushq $0x2
popq %rdx
callq *0x8(%rax)
movq %r15, 0x10(%rsp)
movq 0x8(%rsp), %rax
leal (%r15,%rax), %r13d
movq 0x268(%rbx), %rsi
cmpq %r13, %rsi
jb 0x9f11
movq 0x8(%r12), %rax
movq 0x18(%rax), %r14
xorl %r15d, %r15d
movzbl %bpl, %ebp
movq 0x28(%rax), %rcx
decq %rcx
cmpq %rcx, %r15
jae 0x9dc3
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x22
popq %rsi
callq *(%rax)
leaq 0x20(%r14), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xa1f0
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x29c45(%rip), %rsi     # 0x337d3
pushq $0x3
popq %rdx
callq *0x8(%rax)
leaq 0x40(%r14), %rsi
movq %rbx, %rdi
pushq $0x1
popq %rdx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x29c1d(%rip), %rsi     # 0x337d7
pushq $0x2
popq %rdx
callq *0x8(%rax)
incq %r15
movq %r14, %rdi
callq 0x5480
movq %rax, %r14
movq 0x8(%r12), %rax
jmp 0x9b45
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xa760
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xa848
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x29d04(%rip), %rsi     # 0x33923
pushq $0xb
jmp 0x9c48
leaq 0x29cf3(%rip), %rsi     # 0x3391d
pushq $0x5
jmp 0x9c48
movq 0x8(%rax), %rax
leaq 0x29cba(%rip), %rsi     # 0x338f3
jmp 0x9c46
movq 0x8(%rax), %rax
leaq 0x29b87(%rip), %rsi     # 0x337cd
pushq $0x2
popq %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
pushq $0x5b
popq %rsi
callq *(%rax)
movq 0x8(%r12), %rax
movq (%rax), %r14
movzbl %bpl, %ebp
pushq $0x2c
popq %r13
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rsi
cmpq %rsi, %r14
je 0x9d0a
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r15d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
movl %r13d, %esi
callq *(%rax)
addq $0x10, %r14
movq 0x8(%r12), %rax
jmp 0x9c6e
cmpq %rcx, (%rax)
je 0x9f47
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r14, %rdx
callq *0x8(%rax)
movq 0x8(%r12), %rax
movq 0x8(%rax), %rsi
addq $-0x10, %rsi
pushq $0x1
popq %rdx
movq %rbx, %rdi
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r14d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0xa
popq %rsi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl %r15d, %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x9d27
cmpq %rcx, (%rax)
je 0x9f66
movq %rbx, %rdi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r15d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
pushq $0x5d
jmp 0x9ee9
movq %r15, %r13
pushq $0x7b
popq %rsi
callq *(%rax)
movq 0x8(%r12), %rax
movq 0x18(%rax), %r14
xorl %r15d, %r15d
movzbl %bpl, %ebp
movq 0x28(%rax), %rcx
decq %rcx
cmpq %rcx, %r15
jae 0x9e6d
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x22
popq %rsi
callq *(%rax)
leaq 0x20(%r14), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xa1f0
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x29b6b(%rip), %rsi     # 0x338f0
pushq $0x2
popq %rdx
callq *0x8(%rax)
leaq 0x40(%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x2c
popq %rsi
callq *(%rax)
incq %r15
movq %r14, %rdi
callq 0x5480
movq %rax, %r14
movq 0x8(%r12), %rax
jmp 0x9d4f
addq $0x8, %rax
cmpq %rax, %r14
je 0x9f85
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0xa742
movq 0x8(%r12), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
movq 0x10(%rsp), %r15
jne 0x9fc3
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x22
popq %rsi
callq *(%rax)
leaq 0x20(%r14), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xa1f0
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x299a8(%rip), %rsi     # 0x337d3
pushq $0x3
popq %rdx
callq *0x8(%rax)
addq $0x40, %r14
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0xa
popq %rsi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl %r15d, %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x9ede
addq $0x8, %rax
cmpq %rax, %r14
je 0x9fa4
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0xa742
movq 0x8(%r12), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x9fe2
movq (%rbx), %rdi
movq (%rdi), %rax
pushq $0x22
popq %rsi
callq *(%rax)
leaq 0x20(%r14), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xa1f0
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x29a33(%rip), %rsi     # 0x338f0
pushq $0x2
popq %rdx
callq *0x8(%rax)
addq $0x40, %r14
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0x9980
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
pushq $0x7d
popq %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
pushq $0x20
popq %rdx
callq 0x5160
jmp 0x9a38
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
pushq $0x20
popq %rdx
callq 0x5160
jmp 0x9b35
leaq 0x299ee(%rip), %rdi     # 0x3391d
leaq 0x298c4(%rip), %rsi     # 0x337fa
leaq 0x298c8(%rip), %rcx     # 0x33805
movl $0x36cc, %edx           # imm = 0x36CC
callq 0x52c0
leaq 0x299ab(%rip), %rdi     # 0x338f9
leaq 0x298a5(%rip), %rsi     # 0x337fa
leaq 0x298a9(%rip), %rcx     # 0x33805
movl $0x367a, %edx           # imm = 0x367A
callq 0x52c0
leaq 0x2998c(%rip), %rdi     # 0x338f9
leaq 0x29886(%rip), %rsi     # 0x337fa
leaq 0x2988a(%rip), %rcx     # 0x33805
movl $0x368f, %edx           # imm = 0x368F
callq 0x52c0
leaq 0x2984e(%rip), %rdi     # 0x337da
leaq 0x29867(%rip), %rsi     # 0x337fa
leaq 0x2986b(%rip), %rcx     # 0x33805
movl $0x3634, %edx           # imm = 0x3634
callq 0x52c0
leaq 0x2982f(%rip), %rdi     # 0x337da
leaq 0x29848(%rip), %rsi     # 0x337fa
leaq 0x2984c(%rip), %rcx     # 0x33805
movl $0x3650, %edx           # imm = 0x3650
callq 0x52c0
leaq 0x298fb(%rip), %rdi     # 0x338c5
leaq 0x29829(%rip), %rsi     # 0x337fa
leaq 0x2982d(%rip), %rcx     # 0x33805
movl $0x3635, %edx           # imm = 0x3635
callq 0x52c0
leaq 0x298dc(%rip), %rdi     # 0x338c5
leaq 0x2980a(%rip), %rsi     # 0x337fa
leaq 0x2980e(%rip), %rcx     # 0x33805
movl $0x3651, %edx           # imm = 0x3651
callq 0x52c0
nop