// File: /workspace/github_cpp_makefile_star2_O2/benjibc[P]json-universal-container/./json.h
// Function: JSON::json_encode[abi:cxx11](int, bool) const
inline
string JSON::json_encode(int level, bool noTab) const
{
    string current;
    string suffix; 
    string tab(level, '\t');
    switch(this->m_type)
    {
        case type_array:
        {
            current += '\n' + tab+"[\n";
            auto back = --(this->arr_end());
			level++;
            for(auto it = this->arr_begin(); it != back; it++)
            {
                current += tab + '\t' + (*it).json_encode(level) + ",\n";
            }
			current += tab +'\t'+  (*back).json_encode(level) + "\n";
            suffix += tab+"]";
            break;
        }
        case type_obj:
        {
			current += '\n' + tab +"{\n";
            auto end = this->map_end();
			level++;
            auto it = this->map_begin();
            auto next = it;
            next++;
            while(next != end)
            {
				if(noTab)
				{
					current += tab + '"'+it->first+'"'+" : "
                        +it->second.json_encode(level, true)+",\n";
					noTab = true;
				}
				else
				{
					current += tab+'\t' + '"'+it->first+'"'+" : "
                        +it->second.json_encode(level, true)+",\n";
				}
				it++;
                next++;
            }
			if(noTab)
				current += tab + '"'+ it->first+'"'+" : "
                    +it->second.json_encode(level, true)+"\n";
			else
				current += tab+ '\t' + '"'+it->first+'"'+" : "
                    +it->second.json_encode(level, true)+"\n";
			suffix +=tab + "}";
            break;
        }
        case type_str:
        {
			if(noTab)
				current += '"' + this->m_data.u_str + '"';
			else
				current += tab + '"' + this->m_data.u_str + '"';
            break;
        }
        case type_double:
        {
			if(noTab)
				current += to_string(this->m_data.u_double); 
			else
				current += tab + to_string(this->m_data.u_double); 
            break;
        }
        case type_bool:
        {
			if(noTab)
			{
				if(m_data.u_bool)
					current += "true";
				else
					current += "false";
			}
			else
			{
				if(m_data.u_bool)
					current += tab+"true";
				else
					current += tab+"false";
			}
			break;
        }
		case no_type:
			current += tab + "null";
			break;
        default:
            break;
    }
    return current + suffix;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movl %ecx, %r13d
movq %rsi, %rbx
leaq 0x98(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movq %rdi, 0x128(%rsp)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x168(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
movl %edx, 0x4(%rsp)
movslq %edx, %rsi
leaq 0xb8(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0xa8(%rsp), %rdi
pushq $0x9
popq %rdx
callq 0x21c0
movl 0x28(%rbx), %eax
cmpq $0x5, %rax
ja 0x458c
leaq 0x3386(%rip), %rcx      # 0x7028
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x3432(%rip), %rdx      # 0x70e4
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x5e17
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x4582
testb %r13b, %r13b
je 0x4315
movsd (%rbx), %xmm0
leaq 0x8(%rsp), %rdi
callq 0x5fc1
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x4582
leaq 0x28(%rsp), %rdi
pushq $0xa
popq %rsi
leaq 0xa8(%rsp), %rdx
callq 0x5c02
leaq 0x44ab(%rip), %rdx      # 0x81d0
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5be3
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
movq %rbx, %rdi
callq 0x5e50
movq %rax, 0x130(%rsp)
movq %rbx, %rdi
callq 0x5eda
movq %rax, %r12
incl 0x4(%rsp)
leaq 0x8(%rsp), %rbx
movq %rax, %r14
movq 0x50(%r12), %rax
leaq -0x50(%rax), %r12
testq %rax, %rax
cmoveq %rax, %r12
cmpq 0x130(%rsp), %r12
je 0x4207
testb $0x1, %r13b
je 0x3ea1
leaq 0xe8(%rsp), %r13
movq %r13, %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5de1
leaq 0x108(%rsp), %r15
movq %r15, %rdi
movq %r13, %rsi
movq %r14, %rdx
callq 0x5fa2
leaq 0x68(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x48(%rsp), %rdi
movq %r13, %rsi
leaq 0x43d7(%rip), %rdx      # 0x81d3
callq 0x5be3
leaq 0x20(%r14), %rsi
leaq 0xc8(%rsp), %r13
movq %r13, %rdi
movl 0x4(%rsp), %edx
pushq $0x1
popq %rcx
callq 0x3c24
leaq 0x28(%rsp), %rbp
movq %rbp, %rdi
leaq 0x48(%rsp), %rsi
movq %r13, %rdx
callq 0x5d7a
movq %rbx, %rdi
movq %rbp, %rsi
leaq 0x438f(%rip), %rdx      # 0x81cd
callq 0x5be3
leaq 0x88(%rsp), %rdi
movq %rbx, %rsi
callq 0x2290
movq %rbx, %rdi
callq 0x20d0
movq %rbp, %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
movq %r15, %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
callq 0x20d0
movb $0x1, %r13b
jmp 0x3fbb
leaq 0xc8(%rsp), %rbp
movq %rbp, %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x5de1
leaq 0xe8(%rsp), %r15
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x108(%rsp), %rbp
movq %rbp, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x5fa2
leaq 0x68(%rsp), %r15
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x48(%rsp), %rdi
movq %r15, %rsi
leaq 0x42c9(%rip), %rdx      # 0x81d3
callq 0x5be3
leaq 0x20(%r14), %rsi
leaq 0x138(%rsp), %rbp
movq %rbp, %rdi
movl 0x4(%rsp), %edx
pushq $0x1
popq %rcx
callq 0x3c24
leaq 0x28(%rsp), %r15
movq %r15, %rdi
leaq 0x48(%rsp), %rsi
movq %rbp, %rdx
callq 0x5d7a
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x4281(%rip), %rdx      # 0x81cd
callq 0x5be3
leaq 0x88(%rsp), %rdi
movq %rbx, %rsi
callq 0x2290
movq %rbx, %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x138(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x108(%rsp), %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
callq 0x20d0
movq 0x50(%r14), %rax
leaq -0x50(%rax), %r14
testq %rax, %rax
cmoveq %rax, %r14
jmp 0x3d81
leaq 0x28(%rsp), %rdi
pushq $0xa
popq %rsi
leaq 0xa8(%rsp), %rdx
callq 0x5c02
leaq 0x41df(%rip), %rdx      # 0x81ca
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5be3
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
movq %rbx, %rdi
callq 0x5c60
movq %rax, %r14
movq %rbx, %rdi
callq 0x5cf0
movq %rax, %rbx
addq $-0x30, %r14
incl 0x4(%rsp)
leaq 0x48(%rsp), %r15
leaq 0x68(%rsp), %r13
leaq 0x28(%rsp), %r12
leaq 0x8(%rsp), %rbp
cmpq %r14, %rbx
je 0x414b
movq %r15, %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x5de1
movq %r13, %rdi
movq %rbx, %rsi
movl 0x4(%rsp), %edx
xorl %ecx, %ecx
callq 0x3c24
movq %r12, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x5d7a
movq %rbp, %rdi
movq %r12, %rsi
leaq 0x4133(%rip), %rdx      # 0x81cd
callq 0x5be3
leaq 0x88(%rsp), %rdi
movq %rbp, %rsi
callq 0x2290
movq %rbp, %rdi
callq 0x20d0
movq %r12, %rdi
callq 0x20d0
movq %r13, %rdi
callq 0x20d0
movq %r15, %rdi
callq 0x20d0
addq $0x30, %rbx
jmp 0x4052
testb %r13b, %r13b
je 0x4360
leaq 0x28(%rsp), %rdi
pushq $0x22
popq %rsi
movq %rbx, %rdx
callq 0x5c02
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x434c
movb (%rbx), %al
testb %r13b, %r13b
je 0x43c9
leaq 0x40ab(%rip), %rcx      # 0x81d7
leaq 0x2fc0(%rip), %rsi      # 0x70f3
testb %al, %al
cmovneq %rcx, %rsi
leaq 0x88(%rsp), %rdi
callq 0x2280
jmp 0x458c
leaq 0x48(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x5de1
leaq 0x68(%rsp), %rdi
movq %r14, %rsi
movl 0x4(%rsp), %edx
xorl %ecx, %ecx
callq 0x3c24
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0x5d7a
leaq 0x4040(%rip), %rdx      # 0x81ce
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5be3
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x4394(%rip), %rdx      # 0x8572
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x5e17
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x4582
testb $0x1, %r13b
je 0x4401
leaq 0xe8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5de1
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
movq %r14, %rdx
callq 0x5fa2
leaq 0x68(%rsp), %rdi
leaq 0x108(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x3f76(%rip), %rdx      # 0x81d3
leaq 0x48(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x5be3
addq $0x20, %r14
leaq 0xc8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r14, %rsi
movl 0x4(%rsp), %edx
callq 0x3c24
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x5d7a
leaq 0x3f29(%rip), %rdx      # 0x81ce
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5be3
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x108(%rsp), %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
jmp 0x4525
movsd (%rbx), %xmm0
leaq 0x28(%rsp), %rdi
callq 0x5fc1
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x5fe4
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
jmp 0x4587
leaq 0x48(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5de1
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rsi
movq %rbx, %rdx
callq 0x5fa2
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
jmp 0x4587
testb %al, %al
je 0x4557
leaq 0x3dff(%rip), %rdx      # 0x81d7
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x5e17
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x4582
leaq 0xc8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x5de1
leaq 0xe8(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
movq %r14, %rdx
callq 0x5fa2
leaq 0x68(%rsp), %rdi
leaq 0x108(%rsp), %rsi
pushq $0x22
popq %rdx
callq 0x5f80
leaq 0x3d6e(%rip), %rdx      # 0x81d3
leaq 0x48(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x5be3
addq $0x20, %r14
leaq 0x138(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r14, %rsi
movl 0x4(%rsp), %edx
callq 0x3c24
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x138(%rsp), %rdx
callq 0x5d7a
leaq 0x3d21(%rip), %rdx      # 0x81ce
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5be3
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x138(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x108(%rsp), %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
callq 0x20d0
leaq 0x2ea0(%rip), %rdx      # 0x73d1
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x5e17
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
jmp 0x4582
leaq 0x2b95(%rip), %rdx      # 0x70f3
leaq 0x8(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x5e17
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2290
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x88(%rsp), %rsi
leaq 0x158(%rsp), %rdx
movq 0x128(%rsp), %rdi
callq 0x6008
leaq 0xa8(%rsp), %rdi
callq 0x20d0
leaq 0x158(%rsp), %rdi
callq 0x20d0
leaq 0x88(%rsp), %rdi
callq 0x20d0
movq 0x128(%rsp), %rax
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x46ed
jmp 0x46ed
jmp 0x4884
jmp 0x4884
jmp 0x475e
jmp 0x4728
jmp 0x47cc
jmp 0x4759
jmp 0x4742
jmp 0x4723
jmp 0x47c7
jmp 0x4754
jmp 0x473a
jmp 0x471e
jmp 0x47c2
jmp 0x474f
jmp 0x4732
jmp 0x4716
jmp 0x47bd
jmp 0x4884
jmp 0x4884
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20d0
jmp 0x4665
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x4846
jmp 0x46cf
jmp 0x46cf
jmp 0x481b
jmp 0x46e0
jmp 0x46e0
jmp 0x46ed
jmp 0x4884
jmp 0x4884
jmp 0x4884
jmp 0x4884
jmp 0x46ed
jmp 0x4884
jmp 0x46ed
jmp 0x4884
jmp 0x482a
jmp 0x4825
jmp 0x4820
jmp 0x481b
jmp 0x4884
jmp 0x4884
jmp 0x4884
jmp 0x4884
jmp 0x4884
jmp 0x46cf
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20d0
jmp 0x46e3
jmp 0x46e0
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x4850
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0x4850
jmp 0x4884
jmp 0x4884
jmp 0x4884
movq %rax, %rbx
jmp 0x4862
jmp 0x4884
movq %rax, %rbx
jmp 0x47b0
movq %rax, %rbx
jmp 0x4796
movq %rax, %rbx
jmp 0x4782
movq %rax, %rbx
jmp 0x476b
jmp 0x4884
movq %rax, %rbx
jmp 0x4804
movq %rax, %rbx
jmp 0x47f0
movq %rax, %rbx
jmp 0x47d9
jmp 0x4884
movq %rax, %rbx
jmp 0x47a3
movq %rax, %rbx
jmp 0x478c
movq %rax, %rbx
jmp 0x4775
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x138(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x108(%rsp), %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
jmp 0x4850
movq %rax, %rbx
jmp 0x4811
movq %rax, %rbx
jmp 0x47fa
movq %rax, %rbx
jmp 0x47e3
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0xc8(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x108(%rsp), %rdi
callq 0x20d0
leaq 0xe8(%rsp), %rdi
jmp 0x4850
movq %rax, %rbx
jmp 0x484b
movq %rax, %rbx
jmp 0x4841
movq %rax, %rbx
jmp 0x4837
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20d0
leaq 0x28(%rsp), %rdi
callq 0x20d0
leaq 0x68(%rsp), %rdi
callq 0x20d0
leaq 0x48(%rsp), %rdi
callq 0x20d0
leaq 0xa8(%rsp), %rdi
callq 0x20d0
leaq 0x158(%rsp), %rdi
callq 0x20d0
leaq 0x88(%rsp), %rdi
callq 0x20d0
movq %rbx, %rdi
callq 0x2250
movq %rax, %rbx
jmp 0x4855
nop