// File: SYZYGYfpga[P]syzygy-tools/include/json.hpp
// Function: nlohmann::detail::lexer<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>>::get_codepoint()
int get_codepoint()
    {
        // this function only makes sense after reading `\u`
        assert(current == 'u');
        int codepoint = 0;

        const auto factors = { 12, 8, 4, 0 };
        for (const auto factor : factors)
        {
            get();

            if (current >= '0' and current <= '9')
            {
                codepoint += ((current - 0x30) << factor);
            }
            else if (current >= 'A' and current <= 'F')
            {
                codepoint += ((current - 0x37) << factor);
            }
            else if (current >= 'a' and current <= 'f')
            {
                codepoint += ((current - 0x57) << factor);
            }
            else
            {
                return -1;
            }
        }

        assert(0x0000 <= codepoint and codepoint <= 0xFFFF);
        return codepoint;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpl $0x75, 0x10(%rax)
jne 0xc1cc
jmp 0xc1eb
leaq 0xa2c0(%rip), %rdi      # 0x16493
leaq 0x9854(%rip), %rsi      # 0x15a2e
movl $0x6d7, %edx            # imm = 0x6D7
leaq 0xa2bc(%rip), %rcx      # 0x164a2
callq 0x3210
movl $0x0, -0x14(%rbp)
movl $0xc, -0x38(%rbp)
movl $0x8, -0x34(%rbp)
movl $0x4, -0x30(%rbp)
movl $0x0, -0x2c(%rbp)
leaq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movq $0x4, -0x20(%rbp)
leaq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0xc5c0
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0xc5e0
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
je 0xc301
movq -0x60(%rbp), %rdi
movq -0x48(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
callq 0xa9c0
movq -0x60(%rbp), %rax
cmpl $0x30, 0x10(%rax)
jl 0xc28b
movq -0x60(%rbp), %rax
cmpl $0x39, 0x10(%rax)
jg 0xc28b
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x30, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0xc2ee
movq -0x60(%rbp), %rax
cmpl $0x41, 0x10(%rax)
jl 0xc2b6
movq -0x60(%rbp), %rax
cmpl $0x46, 0x10(%rax)
jg 0xc2b6
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x37, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0xc2ec
movq -0x60(%rbp), %rax
cmpl $0x61, 0x10(%rax)
jl 0xc2e1
movq -0x60(%rbp), %rax
cmpl $0x66, 0x10(%rax)
jg 0xc2e1
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x57, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0xc2ea
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0xc34a
jmp 0xc2ec
jmp 0xc2ee
jmp 0xc2f0
movq -0x48(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x48(%rbp)
jmp 0xc240
xorl %eax, %eax
xorl %ecx, %ecx
cmpl -0x14(%rbp), %ecx
movb %al, -0x61(%rbp)
jg 0xc31a
cmpl $0xffff, -0x14(%rbp)    # imm = 0xFFFF
setle %al
movb %al, -0x61(%rbp)
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0xc323
jmp 0xc325
jmp 0xc344
leaq 0xa1e4(%rip), %rdi      # 0x16510
leaq 0x96fb(%rip), %rsi      # 0x15a2e
movl $0x6f1, %edx            # imm = 0x6F1
leaq 0xa163(%rip), %rcx      # 0x164a2
callq 0x3210
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)