// File: jo-qzy[P]MyJson/./json.hpp
// Function: JSON::value_parse::parse_array(JSON::Value*)
int parse_array(Value* element = nullptr) {
            it++;
            std::vector<Value> tmp_array;
            int ret = 0;
            skip_blank();
            if (*it == ']') {
                it++;
                if (element != nullptr)
                    *element = tmp_array;
                else
                    *root = tmp_array;
                return PARSE_OK;
            }
            while (it != json_source.end()) {
                Value tmp_element;
                skip_blank();
                if ((ret = parse_value(&tmp_element)) != PARSE_OK)
                    return ret;
                skip_blank();
                // insert element to array
                tmp_array.push_back(tmp_element);
                if (*it == ',') {
                    CHECK_ITERATOR(it);
                    it++;
                }
                else if (*it == ']') {
                    CHECK_ITERATOR(it);
                    it++;
                    break;
                }
                else
                    return PARSE_MISS_COMMA_OR_SQUARE_BRAKET;
            }
            if (element != nullptr)
                *element = tmp_array;
            else
                *root = tmp_array;
            return PARSE_OK;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x130(%rbp)
addq $0x20, %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x20(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x37d0
movq -0x130(%rbp), %rdi
movl $0x0, -0x3c(%rbp)
callq 0x3c60
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x5d, %eax
jne 0x419b
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x4170
movq -0x18(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4de0
jmp 0x415d
jmp 0x4188
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x440e
movq -0x130(%rbp), %rax
movq 0x28(%rax), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4de0
jmp 0x4186
jmp 0x4188
movl $0x0, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
jmp 0x43f9
jmp 0x419d
movq -0x130(%rbp), %rdi
movq %rdi, %rax
addq $0x20, %rax
movq %rax, -0x138(%rbp)
callq 0x20f0
movq -0x138(%rbp), %rdi
movq %rax, -0x60(%rbp)
leaq -0x60(%rbp), %rsi
callq 0x3eb0
testb $0x1, %al
jne 0x41d4
jmp 0x43bb
leaq -0x108(%rbp), %rdi
callq 0x2de0
jmp 0x41e2
movq -0x130(%rbp), %rdi
callq 0x3c60
movq -0x130(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3cf0
movl %eax, -0x13c(%rbp)
jmp 0x4209
movl -0x13c(%rbp), %eax
movl %eax, -0x3c(%rbp)
cmpl $0x0, %eax
je 0x4246
movl -0x3c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
jmp 0x438e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x3010
jmp 0x440e
movq -0x130(%rbp), %rdi
callq 0x3c60
leaq -0x38(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x4e20
jmp 0x4264
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x2c, %eax
jne 0x42ed
jmp 0x427e
movq -0x130(%rbp), %rdi
movq %rdi, %rax
addq $0x20, %rax
movq %rax, -0x148(%rbp)
callq 0x20f0
movq -0x148(%rbp), %rdi
movq %rax, -0x110(%rbp)
leaq -0x110(%rbp), %rsi
callq 0x3f70
testb $0x1, %al
jne 0x42b8
jmp 0x42cb
movl $0x5, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
jmp 0x438e
jmp 0x42cd
jmp 0x42cf
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x118(%rbp)
jmp 0x4387
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x5d, %eax
jne 0x4377
jmp 0x4307
movq -0x130(%rbp), %rdi
movq %rdi, %rax
addq $0x20, %rax
movq %rax, -0x150(%rbp)
callq 0x20f0
movq -0x150(%rbp), %rdi
movq %rax, -0x120(%rbp)
leaq -0x120(%rbp), %rsi
callq 0x3f70
testb $0x1, %al
jne 0x4341
jmp 0x4351
movl $0x5, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
jmp 0x438e
jmp 0x4353
jmp 0x4355
movq -0x130(%rbp), %rdi
addq $0x20, %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x128(%rbp)
movl $0x3, -0x58(%rbp)
jmp 0x438e
movl $0xa, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
jmp 0x438e
movl $0x0, -0x58(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x3010
movl -0x58(%rbp), %eax
movl %eax, -0x154(%rbp)
testl %eax, %eax
je 0x43b6
jmp 0x43a9
movl -0x154(%rbp), %eax
subl $0x3, %eax
je 0x43bb
jmp 0x43f9
jmp 0x419d
cmpq $0x0, -0x18(%rbp)
je 0x43d3
movq -0x18(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4de0
jmp 0x43d1
jmp 0x43eb
movq -0x130(%rbp), %rax
movq 0x28(%rax), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4de0
jmp 0x43e9
jmp 0x43eb
movl $0x0, -0x4(%rbp)
movl $0x1, -0x58(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x4e90
movl -0x4(%rbp), %eax
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x4e90
movq -0x50(%rbp), %rdi
callq 0x22f0