// File: mattn[P]minijson/main.cxx
// Function: main
int
main(int /*argc*/, char* /*argv*/[]) {
#ifdef __MINIJSON_LIBERAL
  const char* foo = R"(
{'empty':{"":[]}, "foo":
3.2, "bar": "baz", "baz": true,"hoge":{"a":"あい\nうお\2え"}, "moge": null, "zz": 0xff
, "rrr":[[2,"3"], "4"], "fuba": 1e9,}
)";
#else
  const char* foo = R"(
{"empty":{"":[]}, "foo":
3.2, "bar": "baz", "baz": true,"hoge":{"a":"あい\nうお\2え"}, "moge": null, "zz": 0xff
, "rrr":[[2,"3"], "4"], "fuba": 1e9}
)";
#endif
  const char* p = foo;
  value v;
  error e = parse(p, v);
  if (e != no_error) {
    std::cerr << errstr(e) << "(" << (int) (p - foo) << "):" << p << std::endl;
    return 1;
  }
  while (*p && strchr("\r\n \t", *p)) { p++; }
  if (*p) {
    std::cerr << "invalid token: " << p << std::endl;
    return 1;
  }

#if defined(_MSC_VER) && _MSC_VER <= 6000
  object& o = object();
  v.get(o);
#else
  object& o = v.get<object>();
#endif
  o["momo"] = "3.0";
#if defined(_MSC_VER) && _MSC_VER <= 6000
  array& a = array();
  o["rrr"].get(a);
#else
  array& a = o["rrr"].get<array>();
#endif
  a.push_back("3.0");
  a.push_back(null);
  o.erase(o.find("foo"));
  std::cout << v.str() << std::endl;
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq 0x7b48(%rip), %rax      # 0xa018
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x30(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0x2a60
movq -0x138(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x2a90
movl %eax, -0x12c(%rbp)
jmp 0x2504
movl -0x12c(%rbp), %eax
movl %eax, -0x34(%rbp)
cmpl $0x0, -0x34(%rbp)
je 0x25eb
movl -0x34(%rbp), %edi
callq 0x2ac0
movq %rax, -0x140(%rbp)
jmp 0x2528
movq -0x140(%rbp), %rsi
movq 0xcaba(%rip), %rdi      # 0xeff0
callq 0x21f0
movq %rax, -0x148(%rbp)
jmp 0x2544
movq -0x148(%rbp), %rdi
leaq 0x7b62(%rip), %rsi      # 0xa0b4
callq 0x21f0
movq %rax, -0x150(%rbp)
jmp 0x2560
movq -0x150(%rbp), %rdi
movl -0x20(%rbp), %esi
movl -0x18(%rbp), %eax
subl %eax, %esi
callq 0x2300
movq %rax, -0x158(%rbp)
jmp 0x257d
movq -0x158(%rbp), %rdi
leaq 0x7b2b(%rip), %rsi      # 0xa0b6
callq 0x21f0
movq %rax, -0x160(%rbp)
jmp 0x2599
movq -0x160(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x21f0
movq %rax, -0x168(%rbp)
jmp 0x25b2
movq -0x168(%rbp), %rdi
movq 0xca00(%rip), %rsi      # 0xefc0
callq 0x2230
jmp 0x25c7
movl $0x1, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x2a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2a46
jmp 0x25ed
movq -0x20(%rbp), %rcx
xorl %eax, %eax
cmpb $0x0, (%rcx)
movb %al, -0x169(%rbp)
je 0x261e
movq -0x20(%rbp), %rax
movsbl (%rax), %esi
leaq 0x7aad(%rip), %rdi      # 0xa0b9
callq 0x2090
cmpq $0x0, %rax
setne %al
movb %al, -0x169(%rbp)
movb -0x169(%rbp), %al
testb $0x1, %al
jne 0x262a
jmp 0x2638
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x25ed
movq -0x20(%rbp), %rax
cmpb $0x0, (%rax)
je 0x269e
movq 0xc9a8(%rip), %rdi      # 0xeff0
leaq 0x7a6f(%rip), %rsi      # 0xa0be
callq 0x21f0
movq %rax, -0x178(%rbp)
jmp 0x265d
movq -0x178(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x21f0
movq %rax, -0x180(%rbp)
jmp 0x2676
movq -0x180(%rbp), %rdi
movq 0xc93c(%rip), %rsi      # 0xefc0
callq 0x2230
jmp 0x268b
movl $0x1, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x2a31
leaq -0x30(%rbp), %rdi
callq 0x2b40
movq %rax, -0x188(%rbp)
jmp 0x26b0
movq -0x188(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x198(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x190(%rbp)
callq 0x2320
movq -0x190(%rbp), %rdx
leaq 0x79ee(%rip), %rsi      # 0xa0d2
leaq -0x70(%rbp), %rdi
callq 0x2c90
jmp 0x26ef
movq -0x198(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x2bb0
movq %rax, -0x1a0(%rbp)
jmp 0x2708
movq -0x1a0(%rbp), %rdi
leaq 0x79b8(%rip), %rsi      # 0xa0ce
callq 0x2d40
jmp 0x271d
leaq -0x70(%rbp), %rdi
callq 0x2120
leaq -0x71(%rbp), %rdi
callq 0x2250
movq -0x50(%rbp), %rax
movq %rax, -0x1b0(%rbp)
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x1a8(%rbp)
callq 0x2320
movq -0x1a8(%rbp), %rdx
leaq 0x797c(%rip), %rsi      # 0xa0d7
leaq -0xa0(%rbp), %rdi
callq 0x2c90
jmp 0x2769
movq -0x1b0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2bb0
movq %rax, -0x1b8(%rbp)
jmp 0x2785
movq -0x1b8(%rbp), %rdi
callq 0x2e00
movq %rax, -0x1c0(%rbp)
jmp 0x279a
leaq -0xa0(%rbp), %rdi
callq 0x2120
leaq -0xa1(%rbp), %rdi
callq 0x2250
movq -0x1c0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x1c8(%rbp)
leaq 0x78ff(%rip), %rsi      # 0xa0ce
leaq -0xb8(%rbp), %rdi
callq 0x2ea0
jmp 0x27dd
movq -0x1c8(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2e70
jmp 0x27f2
leaq -0xb8(%rbp), %rdi
callq 0x2f60
movq -0x80(%rbp), %rax
movq %rax, -0x1d0(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x3020
jmp 0x2817
movq -0x1d0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x2e70
jmp 0x282c
leaq -0xc8(%rbp), %rdi
callq 0x2f60
movq -0x50(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq %rax, -0x1e0(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x1d8(%rbp)
callq 0x2320
movq -0x1d8(%rbp), %rdx
leaq 0x7870(%rip), %rsi      # 0xa0db
leaq -0xf8(%rbp), %rdi
callq 0x2c90
jmp 0x2879
movq -0x1e8(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x3090
movq %rax, -0x1f0(%rbp)
jmp 0x2895
movq -0x1e0(%rbp), %rdi
movq -0x1f0(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rsi
callq 0x3050
movq %rax, -0x1f8(%rbp)
jmp 0x28bf
movq -0x1f8(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x2120
leaq -0xf9(%rbp), %rdi
callq 0x2250
leaq -0x128(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x30c0
jmp 0x28f7
movq 0xc6d2(%rip), %rdi      # 0xefd0
leaq -0x128(%rbp), %rsi
callq 0x21d0
movq %rax, -0x200(%rbp)
jmp 0x2913
movq -0x200(%rbp), %rdi
movq 0xc69f(%rip), %rsi      # 0xefc0
callq 0x2230
jmp 0x2928
leaq -0x128(%rbp), %rdi
callq 0x2120
movl $0x0, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x2a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x296a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x2120
leaq -0x71(%rbp), %rdi
callq 0x2250
jmp 0x2a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x299e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x2120
leaq -0xa1(%rbp), %rdi
callq 0x2250
jmp 0x2a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2f60
jmp 0x2a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x2f60
jmp 0x2a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2a09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x2120
leaq -0xf9(%rbp), %rdi
callq 0x2250
jmp 0x2a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x2120
jmp 0x2a46
leaq -0x30(%rbp), %rdi
callq 0x2f60
movl -0x4(%rbp), %eax
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x2f60
movq -0x40(%rbp), %rdi
callq 0x2310
nopl (%rax,%rax)