// File: oknenavin[P]cxon/test/../src/cxon/lang/json/tidy.hxx
// Function: cxon::json::indenter<cxon::JSON<cxon::JSON<cxon::JSON<cxon::json::format_traits>>>, std::ostreambuf_iterator<char, std::char_traits<char>>>::append(char)
bool append(char c) {
                using cio::poke;
                switch (cur()) {
                    case stt::grn: break;
                    case stt::lst:
                        switch (c) {
                            case '\t': case '\n': case '\r': case ' ': case '\0':
                                return true;
                            case '}': case ']':
                                return mut(stt::scl),   poke(o_, c);
                        }
                        mut(stt::grn);
                        if (!poke(o_, '\n') || !poke(o_, lvl_ += tab_, pad_))
                            return false;
                        break;
                    case stt::qst:
                        switch (c) {
                            case '"' : mut(stt::scl); break;
                            case '\\': mut(stt::esc); break;
                        }
                        return poke(o_, c);
                    case stt::ast:
                        switch (c) {
                            case '\'': mut(stt::scl); break;
                            case '\\': mut(stt::esc); break;
                        }
                        return poke(o_, c);
                    case stt::scl:
                        switch (c) {
                            case '\t': case '\n': case '\r': case ' ': case '\0':
                                return mut(stt::grn),   true;
                            case '\\':
                                return mut(stt::esc),   poke(o_, '\\');
                            default:
                                return poke(o_, c);
                            case '}': case ']':// case '"':
                                break;
                            case ',': case ';': case ':': case '=':
                                mut(stt::grn); break;
                        }
                        break;
                    case stt::esc:
                        return mut(pre()),  poke(o_, c);
                    case stt::com:
                        switch (c) {
                            case '\t': case '\n': case '\r': case ' ': case '\0':
                                return true;
                            case '}': case ']':
                                break;
                            default:
                                mut(stt::grn),   poke(o_, '\n') && poke(o_, lvl_, pad_);
                        }
                        break;
                }
                stt nxt;
                switch (c) {
                    case '\t': case '\n': case '\r': case ' ': case '\0':
                        return true;
                    case '{': case '[':
                        nxt = stt::lst; goto scl;
                    case '}': case ']':
                        return mut(stt::scl),   poke(o_, '\n') && poke(o_, (lvl_ ? lvl_ -= tab_ : 0), pad_) && poke(o_, c);
                    case '"':
                        nxt = stt::qst; goto scl;
                    case '\'':
                        nxt = stt::ast; goto scl;
                    case ',': case ';':
                        return mut(stt::com),   poke(o_, c);
                    case ':':
                        return mut(stt::grn),   poke(o_, c) && poke(o_, ' ');
                    case '=':
                        return mut(stt::grn),   poke(o_, ' ') && poke(o_, c) && poke(o_, ' ');
                    default:
                        nxt = stt::scl;// goto scl;
                }
                scl: return pre() == stt::scl ?
                    (mut(nxt),  poke(o_, '\n') && poke(o_, lvl_, pad_)   && poke(o_, c)) :
                    (mut(nxt),                                              poke(o_, c))
                ;
            }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movb %sil, %al
movq %rdi, -0x10(%rbp)
movb %al, -0x11(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x28(%rbp)
callq 0x38580
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x6, %eax
ja 0x3832b
movq -0x20(%rbp), %rax
leaq 0x89d67(%rip), %rcx     # 0xc1db0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x3832b
movsbl -0x11(%rbp), %eax
movl %eax, -0x2c(%rbp)
testl %eax, %eax
je 0x38099
jmp 0x38064
movl -0x2c(%rbp), %eax
addl $-0x9, %eax
subl $0x2, %eax
jb 0x38099
jmp 0x38071
movl -0x2c(%rbp), %eax
subl $0xd, %eax
je 0x38099
jmp 0x3807b
movl -0x2c(%rbp), %eax
subl $0x20, %eax
je 0x38099
jmp 0x38085
movl -0x2c(%rbp), %eax
subl $0x5d, %eax
je 0x380a2
jmp 0x3808f
movl -0x2c(%rbp), %eax
subl $0x7d, %eax
je 0x380a2
jmp 0x380c7
movb $0x1, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
movl $0x4, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0xa, %esi
callq 0x385c0
testb $0x1, %al
jne 0x380e6
jmp 0x38103
movq -0x28(%rbp), %rax
movl 0x1c(%rax), %esi
addl 0x18(%rax), %esi
movl %esi, 0x18(%rax)
movq %rax, %rdi
movsbl 0x20(%rax), %edx
callq 0x385f0
testb $0x1, %al
jne 0x3810c
movb $0x0, -0x1(%rbp)
jmp 0x38571
jmp 0x3832b
movsbl -0x11(%rbp), %eax
movl %eax, -0x30(%rbp)
subl $0x22, %eax
je 0x38129
jmp 0x3811f
movl -0x30(%rbp), %eax
subl $0x5c, %eax
je 0x38139
jmp 0x38147
movq -0x28(%rbp), %rdi
movl $0x4, %esi
callq 0x385a0
jmp 0x38147
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movsbl -0x11(%rbp), %eax
movl %eax, -0x34(%rbp)
subl $0x27, %eax
je 0x38176
jmp 0x3816c
movl -0x34(%rbp), %eax
subl $0x5c, %eax
je 0x38186
jmp 0x38194
movq -0x28(%rbp), %rdi
movl $0x4, %esi
callq 0x385a0
jmp 0x38194
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movsbl -0x11(%rbp), %eax
movl %eax, -0x38(%rbp)
testl %eax, %eax
je 0x3821c
jmp 0x381b8
movl -0x38(%rbp), %eax
addl $-0x9, %eax
subl $0x2, %eax
jb 0x3821c
jmp 0x381c5
movl -0x38(%rbp), %eax
subl $0xd, %eax
je 0x3821c
jmp 0x381cf
movl -0x38(%rbp), %eax
subl $0x20, %eax
je 0x3821c
jmp 0x381d9
movl -0x38(%rbp), %eax
subl $0x2c, %eax
je 0x3826f
jmp 0x381e7
movl -0x38(%rbp), %eax
addl $-0x3a, %eax
subl $0x2, %eax
jb 0x3826f
jmp 0x381f4
movl -0x38(%rbp), %eax
subl $0x3d, %eax
je 0x3826f
jmp 0x381fe
movl -0x38(%rbp), %eax
subl $0x5c, %eax
je 0x38230
jmp 0x38208
movl -0x38(%rbp), %eax
subl $0x5d, %eax
je 0x3826d
jmp 0x38212
movl -0x38(%rbp), %eax
subl $0x7d, %eax
je 0x3826d
jmp 0x38256
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
movb $0x1, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0x5c, %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
jmp 0x3827a
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
jmp 0x3832b
movq -0x28(%rbp), %rdi
callq 0x38620
movq -0x28(%rbp), %rdi
movl %eax, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movsbl -0x11(%rbp), %eax
movl %eax, -0x3c(%rbp)
testl %eax, %eax
je 0x382ec
jmp 0x382b7
movl -0x3c(%rbp), %eax
addl $-0x9, %eax
subl $0x2, %eax
jb 0x382ec
jmp 0x382c4
movl -0x3c(%rbp), %eax
subl $0xd, %eax
je 0x382ec
jmp 0x382ce
movl -0x3c(%rbp), %eax
subl $0x20, %eax
je 0x382ec
jmp 0x382d8
movl -0x3c(%rbp), %eax
subl $0x5d, %eax
je 0x382f5
jmp 0x382e2
movl -0x3c(%rbp), %eax
subl $0x7d, %eax
je 0x382f5
jmp 0x382f7
movb $0x1, -0x1(%rbp)
jmp 0x38571
jmp 0x38329
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0xa, %esi
callq 0x385c0
testb $0x1, %al
jne 0x38316
jmp 0x38329
movq -0x28(%rbp), %rax
movl 0x18(%rax), %esi
movq %rax, %rdi
movsbl 0x20(%rax), %edx
callq 0x385f0
jmp 0x3832b
movsbl -0x11(%rbp), %eax
movl %eax, %ecx
movq %rcx, -0x48(%rbp)
subl $0x7d, %eax
ja 0x384d5
movq -0x48(%rbp), %rax
leaq 0x89a83(%rip), %rcx     # 0xc1dcc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x1, -0x1(%rbp)
jmp 0x38571
movl $0x1, -0x18(%rbp)
jmp 0x384de
movq -0x28(%rbp), %rdi
movl $0x4, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0xa, %esi
callq 0x385c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x49(%rbp)
jne 0x38391
jmp 0x383e7
movq -0x28(%rbp), %rax
cmpl $0x0, 0x18(%rax)
je 0x383af
movq -0x28(%rbp), %rcx
movl 0x1c(%rcx), %edx
movl 0x18(%rcx), %eax
subl %edx, %eax
movl %eax, 0x18(%rcx)
movl %eax, -0x50(%rbp)
jmp 0x383b6
xorl %eax, %eax
movl %eax, -0x50(%rbp)
jmp 0x383b6
movq -0x28(%rbp), %rax
movl -0x50(%rbp), %esi
movq %rax, %rdi
movsbl 0x20(%rax), %edx
callq 0x385f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x49(%rbp)
jne 0x383d7
jmp 0x383e7
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
movb %al, -0x49(%rbp)
movb -0x49(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movl $0x2, -0x18(%rbp)
jmp 0x384de
movl $0x3, -0x18(%rbp)
jmp 0x384de
movq -0x28(%rbp), %rdi
movl $0x6, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x51(%rbp)
jne 0x38457
jmp 0x38468
movq -0x28(%rbp), %rdi
movl $0x20, %esi
callq 0x385c0
movb %al, -0x51(%rbp)
movb -0x51(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0x20, %esi
callq 0x385c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x52(%rbp)
jne 0x3849c
jmp 0x384c8
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x52(%rbp)
jne 0x384b7
jmp 0x384c8
movq -0x28(%rbp), %rdi
movl $0x20, %esi
callq 0x385c0
movb %al, -0x52(%rbp)
movb -0x52(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x38571
movl $0x4, -0x18(%rbp)
jmp 0x384de
movq -0x28(%rbp), %rdi
callq 0x38620
cmpl $0x4, %eax
jne 0x3854d
movq -0x28(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movl $0xa, %esi
callq 0x385c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x53(%rbp)
jne 0x38514
jmp 0x38545
movq -0x28(%rbp), %rax
movl 0x18(%rax), %esi
movq %rax, %rdi
movsbl 0x20(%rax), %edx
callq 0x385f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x53(%rbp)
jne 0x38535
jmp 0x38545
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
movb %al, -0x53(%rbp)
movb -0x53(%rbp), %al
movb %al, -0x54(%rbp)
jmp 0x38569
movq -0x28(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x385a0
movq -0x28(%rbp), %rdi
movsbl -0x11(%rbp), %esi
callq 0x385c0
movb %al, -0x54(%rbp)
movb -0x54(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)