// File: /workspace/github_cpp_makefile_star2_O3/cassioneri[P]delayed_init/delayed_init.cpp
// Function: main
int main() {
  
  /***
   * Test default-constructor.
   */

  test_default_constructor(__LINE__);

  /***
   * Create non-const/const helpers.
   */
   
  helper h;
  const helper ch;
  
  /***
   * Test constructor from helper.
   */

  // lvalue.
  test_constructor<helper>(__LINE__, h, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, h, true,
    {helper::copy_constructor});

  // const lvalue.
  test_constructor<helper>(__LINE__, ch, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, ch, true,
    {helper::copy_constructor});

  // rvalue.
  test_constructor<helper>(__LINE__, std::move(h), true,
    {helper::move_constructor});
  test_constructor<const helper>(__LINE__, std::move(h), true,
    {helper::move_constructor});

  // const rvalue.
  test_constructor<helper>(__LINE__, std::move(ch), true,
    {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, std::move(ch), true,
    {helper::copy_constructor});

  /***
   * Create default/non-default initialised delayed_init non-const/const.
   */
   
  delayed_init<helper> d0;
  delayed_init<const helper> cd0;
  delayed_init<helper> d1(helper(1));
  delayed_init<const helper> cd1(helper(1));
    
  /***
   * Test constructor from delayed_init.
   */

  // uninitialised lvalue.
  test_constructor<helper>(__LINE__, d0, false, {});
  test_constructor<const helper>(__LINE__, d0, false, {});
  
  // uninitialised const lvalue.
  test_constructor<helper>(__LINE__, cd0, false, {});
  test_constructor<const helper>(__LINE__, cd0, false, {});
  
  // initialised lvalue.
  test_constructor<helper>(__LINE__, d1, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, d1, true,
    {helper::copy_constructor});

  // initialised const lvalue.
  test_constructor<helper>(__LINE__, cd1, true, {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, cd1, true,
    {helper::copy_constructor});

  // uninitialised rvalue.
  test_constructor<helper>(__LINE__, std::move(d0), false, {});
  test_constructor<const helper>(__LINE__, std::move(d0), false, {});
  
  // uninitialised const rvalue.
  test_constructor<helper>(__LINE__, std::move(cd0), false, {});
  test_constructor<const helper>(__LINE__, std::move(cd0), false, {});
  
  // initialised rvalue.
  test_constructor<helper>(__LINE__, std::move(d1), true,
    {helper::move_constructor});
  test_constructor<const helper>(__LINE__, std::move(d1), true,
    {helper::move_constructor});

  // initialised const rvalue.
  test_constructor<helper>(__LINE__, std::move(cd1), true,
    {helper::copy_constructor});
  test_constructor<const helper>(__LINE__, std::move(cd1), true,
    {helper::copy_constructor});

  /**
   * Test destructor.
   */
   
  // uninitialised.
  test_destructor(__LINE__, d0, {});
  
  // initialised.
  test_destructor(__LINE__, d1, {helper::destructor});

  /***
   * Test assignment from helper.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, h, d0, true, {helper::copy_constructor});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, h, d1, true, {helper::copy_assignment});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, ch, d0, true, {helper::copy_constructor});
  
  // const lvalue -> initialised.
  test_assignment(__LINE__, ch, d1, true, {helper::copy_assignment});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(h), d0, true,
    {helper::move_constructor});
  
  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(h), d1, true,
    {helper::move_assignment});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(ch), d0, true,
    {helper::copy_constructor});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(ch), d1, true,
    {helper::copy_assignment});

  /***
   * Test assignment from uninitialised delayed_init.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, d0, d0, false, {});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, d0, d1, false, {helper::destructor});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, cd0, d0, false, {});

  // const lvalue -> initialised.
  test_assignment(__LINE__, cd0, d1, false, {helper::destructor});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(d0), d0, false, {});

  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(d0), d1, false, {helper::destructor});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(cd0), d0, false, {});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(cd0), d1, false,
    {helper::destructor});

  /***
   * Test assignment from initialised delayed_init.
   */
   
  // lvalue -> uninitialised.
  test_assignment(__LINE__, d1, d0, true, {helper::copy_constructor});
  
  // lvalue -> initialised.
  test_assignment(__LINE__, d1, d1, true, {helper::copy_assignment});
  
  // const lvalue -> uninitialised.
  test_assignment(__LINE__, cd1, d0, true, {helper::copy_constructor});

  // const lvalue -> initialised.
  test_assignment(__LINE__, cd1, d1, true, {helper::copy_assignment});

  // rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(d1), d0, true,
    {helper::move_constructor});

  // rvalue -> initialised.
  test_assignment(__LINE__, std::move(d1), d1, true,
    {helper::move_assignment});

  // const rvalue -> uninitialised.
  test_assignment(__LINE__, std::move(cd1), d0, true,
    {helper::copy_constructor});

  // const rvalue -> initialised.
  test_assignment(__LINE__, std::move(cd1), d1, true,
    {helper::copy_assignment});
  
  /***
   * Test indirection for uninitialised delayed_init.
   */

  test_indirection_uninitialised<delayed_init<helper>>(__LINE__);
  test_indirection_uninitialised<delayed_init<const helper>>(__LINE__);
  
  /***
   * Test indirection for initialised delayed_init.
   */

  test_indirection_initialised<delayed_init<helper>>(__LINE__,
    {helper::non_const_get});
  test_indirection_initialised<delayed_init<const helper>>(__LINE__,
    {helper::const_get});

  /**
   * Test getter from uninitialised delayed_init.
   */

  // non-const.
  test_getter<delayed_init<helper>>(__LINE__, d0, false, false);

  // const.
  test_getter<const delayed_init<helper>>(__LINE__, d0, true, false);
  test_getter<delayed_init<const helper>>(__LINE__, d0, true, false);
  test_getter<const delayed_init<const helper>>(__LINE__, d0, true, false);

  /**
   * Test getter from initialised delayed_init.
   */

  // non-const.
  test_getter<delayed_init<helper>>(__LINE__, d1, false, true);

  // const.
  test_getter<delayed_init<const helper>>(__LINE__, d1, true, true);
  test_getter<const delayed_init<helper>>(__LINE__, d1, true, true);
  test_getter<const delayed_init<const helper>>(__LINE__, d1, true, true);

  /***
   * Test dereference.
   */
   
  // non-const.
  test_dereference<delayed_init<helper>>(__LINE__, {helper::non_const_get});

  // const.
  test_dereference<delayed_init<const helper>>(__LINE__,
    {helper::const_get});
  test_dereference<const delayed_init<helper>>(__LINE__,
    {helper::const_get});
  test_dereference<const delayed_init<const helper>>(__LINE__,
    {helper::const_get});

  /***
   * Test conversion to bool.
   */
    
  // uninitialised.
  test_conversion_to_bool(__LINE__, d0, false);
  
  // initialised.
  test_conversion_to_bool(__LINE__, d1, true);
  
  /***
   * Test initialiser.
   */
  
  // lvalue -> uninitialised.
  test_init_uninitialised(__LINE__, {helper::constructor}, 1);
  test_init_uninitialised(__LINE__, {helper::copy_constructor}, h);
  test_init_uninitialised(__LINE__, {helper::copy_constructor}, ch);
  
  // rvalue -> uninitialised.
  test_init_uninitialised(__LINE__, {helper::constructor}, std::move(1));
  test_init_uninitialised(__LINE__, {helper::move_constructor},
    std::move(h));
  test_init_uninitialised(__LINE__, {helper::copy_constructor},
    std::move(ch));
 
  // initialised.
  test_init_initialised(__LINE__);
 
  /***
   * Test swap member.
   */

  // uninitialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2;
    test_swap_member(__LINE__, d1, d2, {});
  }

  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1(h), d2;
    test_swap_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }
  
  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2(h);
    test_swap_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }

  // initialised <-> initialised.
  {
    delayed_init<helper> d1(h), d2(h);
    test_swap_member(__LINE__, d1, d2,
      {helper::swap_member, helper::swap_non_member});
  }
  
  /***
   * Test swap non member.
   */

  // uninitialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2;
    test_swap_non_member(__LINE__, d1, d2, {});
  }

  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1(h), d2;
    test_swap_non_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }
  
  // initialised <-> uninitialised.
  {
    delayed_init<helper> d1, d2(h);
    test_swap_non_member(__LINE__, d1, d2,
      {helper::destructor, helper::move_constructor});
  }

  // initialised <-> initialised.
  {
    delayed_init<helper> d1(h), d2(h);
    test_swap_non_member(__LINE__, d1, d2,
      {helper::swap_member, helper::swap_non_member});
  }

  std::cout << "all tests passed." << std::endl;
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl $0x173, %edi            # imm = 0x173
callq 0x14bc
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x27fa
leaq 0x2c(%rsp), %rdi
callq 0x27fa
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
movl $0x1, %r8d
movl $0x181, %edi            # imm = 0x181
movq %rbx, %rsi
movl $0x1, %edx
callq 0x284e
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x182, %edi            # imm = 0x182
movl $0x1, %edx
callq 0x28f4
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x186, %edi            # imm = 0x186
movl $0x1, %edx
callq 0x299a
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x187, %edi            # imm = 0x187
movl $0x1, %edx
callq 0x2a40
leaq 0x18(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x18b, %edi            # imm = 0x18B
movl $0x1, %edx
callq 0x2ae6
leaq 0x18(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x20(%rsp), %rsi
movl $0x1, %r8d
movl $0x18d, %edi            # imm = 0x18D
movl $0x1, %edx
callq 0x2b8c
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x191, %edi            # imm = 0x191
movl $0x1, %edx
callq 0x2c32
leaq 0x18(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
movl $0x1, %r8d
movl $0x193, %edi            # imm = 0x193
movl $0x1, %edx
callq 0x2cd8
xorl %r13d, %r13d
leaq 0x18(%rsp), %r15
movb %r13b, (%r15)
movb %r13b, 0x38(%rsp)
leaq 0x30(%rsp), %r14
movq %r14, %rdi
movl $0x1, %esi
callq 0x26f4
leaq 0x28(%rsp), %rbx
movb %r13b, -0x4(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4a24
movb $0x1, %bpl
movb %bpl, -0x4(%rbx)
movq %r14, %rdi
callq 0x2744
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movl $0x1, %esi
callq 0x26f4
movb %r13b, (%r14)
leaq 0x34(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x4a24
movb %bpl, -0x4(%r14)
movq %r12, %rdi
callq 0x2744
movl $0x1a4, %edi            # imm = 0x1A4
movq %r15, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2d7e
leaq 0x18(%rsp), %rsi
movl $0x1a5, %edi            # imm = 0x1A5
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2e36
leaq 0x38(%rsp), %rsi
movl $0x1a8, %edi            # imm = 0x1A8
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2eee
leaq 0x38(%rsp), %rsi
movl $0x1a9, %edi            # imm = 0x1A9
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2fa6
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1ac, %edi            # imm = 0x1AC
movl $0x1, %edx
callq 0x2d7e
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1ad, %edi            # imm = 0x1AD
movl $0x1, %edx
callq 0x2e36
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1b1, %edi            # imm = 0x1B1
movl $0x1, %edx
callq 0x2eee
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1b2, %edi            # imm = 0x1B2
movl $0x1, %edx
callq 0x2fa6
leaq 0x18(%rsp), %rsi
movl $0x1b6, %edi            # imm = 0x1B6
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x305e
leaq 0x18(%rsp), %rsi
movl $0x1b7, %edi            # imm = 0x1B7
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3116
leaq 0x38(%rsp), %rsi
movl $0x1ba, %edi            # imm = 0x1BA
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x31ce
leaq 0x38(%rsp), %rsi
movl $0x1bb, %edi            # imm = 0x1BB
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3286
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1be, %edi            # imm = 0x1BE
movl $0x1, %edx
callq 0x305e
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x24(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c0, %edi            # imm = 0x1C0
movl $0x1, %edx
callq 0x3116
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c4, %edi            # imm = 0x1C4
movl $0x1, %edx
callq 0x31ce
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
movl $0x1, %r8d
movl $0x1c6, %edi            # imm = 0x1C6
movl $0x1, %edx
callq 0x3286
leaq 0x18(%rsp), %rsi
movl $0x1ce, %edi            # imm = 0x1CE
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x333e
leaq 0x8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x24(%rsp), %rsi
movl $0x1, %ecx
movl $0x1d1, %edi            # imm = 0x1D1
callq 0x333e
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1d8, %edi            # imm = 0x1D8
movl $0x1, %ecx
callq 0x33c6
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1db, %edi            # imm = 0x1DB
movl $0x1, %ecx
callq 0x33c6
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1de, %edi            # imm = 0x1DE
movl $0x1, %ecx
callq 0x349b
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e1, %edi            # imm = 0x1E1
movl $0x1, %ecx
callq 0x349b
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e4, %edi            # imm = 0x1E4
movl $0x1, %ecx
callq 0x3568
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x20(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1e8, %edi            # imm = 0x1E8
movl $0x1, %ecx
callq 0x3568
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x1ec, %edi            # imm = 0x1EC
movl $0x1, %ecx
callq 0x3635
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1f0, %edi            # imm = 0x1F0
movl $0x1, %ecx
callq 0x3635
leaq 0x18(%rsp), %rdx
movl $0x1f8, %edi            # imm = 0x1F8
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x3702
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x18(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x1fb, %edi            # imm = 0x1FB
xorl %ecx, %ecx
callq 0x3702
leaq 0x38(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1fe, %edi            # imm = 0x1FE
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x37d1
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x201, %edi            # imm = 0x201
xorl %ecx, %ecx
callq 0x37d1
leaq 0x18(%rsp), %rdx
movl $0x204, %edi            # imm = 0x204
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x38a0
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x18(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x207, %edi            # imm = 0x207
xorl %ecx, %ecx
callq 0x38a0
leaq 0x38(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x20a, %edi            # imm = 0x20A
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x396f
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x20d, %edi            # imm = 0x20D
xorl %ecx, %ecx
callq 0x396f
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x24(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x215, %edi            # imm = 0x215
movl $0x1, %ecx
callq 0x3702
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x218, %edi            # imm = 0x218
movq %rdx, %rsi
movl $0x1, %ecx
callq 0x3702
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x21b, %edi            # imm = 0x21B
movl $0x1, %ecx
callq 0x37d1
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x21e, %edi            # imm = 0x21E
movl $0x1, %ecx
callq 0x37d1
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x24(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x221, %edi            # imm = 0x221
movl $0x1, %ecx
callq 0x38a0
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x225, %edi            # imm = 0x225
movq %rdx, %rsi
movl $0x1, %ecx
callq 0x38a0
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x18(%rsp), %rdx
movl $0x1, %r9d
movl $0x229, %edi            # imm = 0x229
movl $0x1, %ecx
callq 0x396f
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x1, %r9d
movl $0x22d, %edi            # imm = 0x22D
movl $0x1, %ecx
callq 0x396f
movl $0x234, %edi            # imm = 0x234
callq 0x3a3e
movl $0x235, %edi            # imm = 0x235
callq 0x3ae2
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
movl $0x1, %edx
movl $0x23b, %edi            # imm = 0x23B
callq 0x3b86
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x23d, %edi            # imm = 0x23D
callq 0x3c2c
leaq 0x18(%rsp), %rsi
movl $0x245, %edi            # imm = 0x245
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x3cd2
leaq 0x18(%rsp), %rsi
movl $0x248, %edi            # imm = 0x248
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3d7c
leaq 0x18(%rsp), %rsi
movl $0x249, %edi            # imm = 0x249
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3e26
leaq 0x18(%rsp), %rsi
movl $0x24a, %edi            # imm = 0x24A
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x3ed0
leaq 0x24(%rsp), %rsi
movl $0x251, %edi            # imm = 0x251
xorl %edx, %edx
movl $0x1, %ecx
callq 0x3cd2
leaq 0x24(%rsp), %rsi
movl $0x254, %edi            # imm = 0x254
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3e26
leaq 0x24(%rsp), %rsi
movl $0x255, %edi            # imm = 0x255
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3d7c
leaq 0x24(%rsp), %rsi
movl $0x256, %edi            # imm = 0x256
movl $0x1, %edx
movl $0x1, %ecx
callq 0x3ed0
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
movl $0x1, %edx
movl $0x25d, %edi            # imm = 0x25D
callq 0x3f7a
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x260, %edi            # imm = 0x260
callq 0x401e
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x262, %edi            # imm = 0x262
callq 0x40c2
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
movl $0x1, %edx
movl $0x264, %edi            # imm = 0x264
callq 0x4166
movb $0x0, 0x8(%rsp)
cmpb $0x1, 0x18(%rsp)
jne 0x1f0f
leaq 0x1c(%rsp), %rsi
leaq 0xc(%rsp), %r15
movq %r15, %rdi
callq 0x4a76
movb $0x1, -0x4(%r15)
leaq 0x8(%rsp), %rsi
movl $0x26c, %edi            # imm = 0x26C
xorl %edx, %edx
callq 0x14d8
cmpb $0x1, 0x8(%rsp)
jne 0x1f31
leaq 0xc(%rsp), %rdi
callq 0x2744
movb $0x0, 0x8(%rsp)
cmpb $0x1, 0x24(%rsp)
jne 0x1f52
leaq 0xc(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4a76
movb $0x1, -0x4(%r15)
leaq 0x8(%rsp), %rsi
movl $0x26f, %edi            # imm = 0x26F
movl $0x1, %edx
callq 0x14d8
cmpb $0x1, 0x8(%rsp)
jne 0x1f77
leaq 0xc(%rsp), %rdi
callq 0x2744
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rcx
movl $0x1, (%rcx)
movl $0x1, %edx
movl $0x276, %edi            # imm = 0x276
callq 0x420a
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x20(%rsp), %rcx
movl $0x1, %edx
movl $0x277, %edi            # imm = 0x277
callq 0x42a0
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x2c(%rsp), %rcx
movl $0x1, %edx
movl $0x278, %edi            # imm = 0x278
callq 0x4336
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rcx
movl $0x1, (%rcx)
movl $0x1, %edx
movl $0x27b, %edi            # imm = 0x27B
callq 0x420a
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x20(%rsp), %rcx
movl $0x1, %edx
movl $0x27c, %edi            # imm = 0x27C
callq 0x43cc
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x2c(%rsp), %rcx
movl $0x1, %edx
movl $0x27e, %edi            # imm = 0x27E
callq 0x4462
movl $0x282, %edi            # imm = 0x282
callq 0x1526
xorl %eax, %eax
leaq 0x8(%rsp), %rsi
movb %al, (%rsi)
leaq 0x10(%rsp), %rdx
movb %al, (%rdx)
movl $0x28b, %edi            # imm = 0x28B
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x44f8
cmpb $0x1, 0x10(%rsp)
jne 0x2077
leaq 0x14(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x2088
leaq 0xc(%rsp), %rdi
callq 0x2744
xorl %ebp, %ebp
leaq 0xc(%rsp), %r12
movb %bpl, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a76
movb $0x1, -0x4(%r12)
leaq 0x10(%rsp), %rdx
movb %bpl, (%rdx)
movabsq $0x400000005, %rbp      # imm = 0x400000005
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x8(%rsp), %rsi
movl $0x2, %r8d
movl $0x291, %edi            # imm = 0x291
callq 0x44f8
cmpb $0x1, 0x10(%rsp)
jne 0x20e7
leaq 0x14(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x20f6
movq %r12, %rdi
callq 0x2744
xorl %eax, %eax
leaq 0x8(%rsp), %r15
movb %al, (%r15)
leaq 0x14(%rsp), %r12
movb %al, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a76
movb $0x1, -0x4(%r12)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x298, %edi            # imm = 0x298
movq %r15, %rsi
callq 0x44f8
cmpb $0x1, 0x10(%rsp)
jne 0x214c
movq %r12, %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x215d
leaq 0xc(%rsp), %rdi
callq 0x2744
xorl %r14d, %r14d
leaq 0xc(%rsp), %r12
movb %r14b, -0x4(%r12)
leaq 0x20(%rsp), %r15
movq %r12, %rdi
movq %r15, %rsi
callq 0x4a76
movb $0x1, %bl
movb %bl, -0x4(%r12)
leaq 0x14(%rsp), %r13
movb %r14b, -0x4(%r13)
movq %r13, %rdi
movq %r15, %rsi
callq 0x4a76
movb %bl, -0x4(%r13)
movabsq $0xc0000000b, %r14      # imm = 0xC0000000B
leaq 0x40(%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x29f, %edi            # imm = 0x29F
callq 0x44f8
cmpb $0x1, 0x10(%rsp)
jne 0x21d4
movq %r13, %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x21e3
movq %r12, %rdi
callq 0x2744
xorl %eax, %eax
leaq 0x8(%rsp), %rsi
movb %al, (%rsi)
leaq 0x10(%rsp), %rdx
movb %al, (%rdx)
movl $0x2aa, %edi            # imm = 0x2AA
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x4595
cmpb $0x1, 0x10(%rsp)
jne 0x2213
leaq 0x14(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x2224
leaq 0xc(%rsp), %rdi
callq 0x2744
xorl %ebx, %ebx
leaq 0xc(%rsp), %r12
movb %bl, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a76
movb $0x1, -0x4(%r12)
leaq 0x10(%rsp), %rdx
movb %bl, (%rdx)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x8(%rsp), %rsi
movl $0x2, %r8d
movl $0x2b0, %edi            # imm = 0x2B0
callq 0x4595
cmpb $0x1, 0x10(%rsp)
jne 0x2278
leaq 0x14(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x2287
movq %r12, %rdi
callq 0x2744
xorl %eax, %eax
leaq 0x8(%rsp), %r15
movb %al, (%r15)
leaq 0x14(%rsp), %r12
movb %al, -0x4(%r12)
leaq 0x20(%rsp), %rsi
movq %r12, %rdi
callq 0x4a76
movb $0x1, -0x4(%r12)
leaq 0x40(%rsp), %rcx
movq %rbp, (%rcx)
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x2b7, %edi            # imm = 0x2B7
movq %r15, %rsi
callq 0x4595
cmpb $0x1, 0x10(%rsp)
jne 0x22dd
movq %r12, %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x22ee
leaq 0xc(%rsp), %rdi
callq 0x2744
xorl %ebx, %ebx
leaq 0xc(%rsp), %r12
movb %bl, -0x4(%r12)
leaq 0x20(%rsp), %r15
movq %r12, %rdi
movq %r15, %rsi
callq 0x4a76
movb $0x1, %bpl
movb %bpl, -0x4(%r12)
leaq 0x14(%rsp), %r13
movb %bl, -0x4(%r13)
movq %r13, %rdi
movq %r15, %rsi
callq 0x4a76
movb %bpl, -0x4(%r13)
leaq 0x40(%rsp), %rcx
movq %r14, (%rcx)
leaq 0x8(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movl $0x2, %r8d
movl $0x2be, %edi            # imm = 0x2BE
callq 0x4595
cmpb $0x1, 0x10(%rsp)
leaq 0x28(%rsp), %rbx
jne 0x2360
movq %r13, %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x236f
movq %r12, %rdi
callq 0x2744
movq 0x8c5a(%rip), %r15      # 0xafd0
leaq 0x3d7b(%rip), %rsi      # 0x60f8
movl $0x11, %edx
movq %r15, %rdi
callq 0x1120
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x1100
movsbl %al, %esi
movq 0x8c28(%rip), %rdi      # 0xafd0
callq 0x1030
movq %rax, %rdi
callq 0x10b0
cmpb $0x1, 0x30(%rsp)
jne 0x23c6
leaq 0x34(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x24(%rsp)
jne 0x23d5
movq %rbx, %rdi
callq 0x2744
cmpb $0x1, 0x38(%rsp)
jne 0x23e6
leaq 0x3c(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x18(%rsp)
jne 0x23f7
leaq 0x1c(%rsp), %rdi
callq 0x2744
leaq 0x2c(%rsp), %rdi
callq 0x2744
leaq 0x20(%rsp), %rdi
callq 0x2744
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2424
jmp 0x2433
jmp 0x2442
jmp 0x2466
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x2456
movq %r13, %rdi
jmp 0x2451
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x248d
movq %r12, %rdi
jmp 0x2475
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x2456
leaq 0x14(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x8(%rsp)
jne 0x24fc
movq %r12, %rdi
jmp 0x2499
movq %rax, %r15
cmpb $0x1, 0x10(%rsp)
jne 0x248d
leaq 0x14(%rsp), %rdi
callq 0x2744
jmp 0x248d
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x248a
movq %rax, %r15
cmpb $0x1, 0x8(%rsp)
jne 0x24fc
leaq 0xc(%rsp), %rdi
callq 0x2744
jmp 0x24fc
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f9
jmp 0x24f4
jmp 0x24f4
jmp 0x24f4
jmp 0x24f4
jmp 0x24f4
jmp 0x24f4
jmp 0x24f4
movq %rax, %r15
jmp 0x2540
movq %rax, %r15
cmpb $0x1, 0x30(%rsp)
jne 0x250d
leaq 0x34(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x24(%rsp)
jne 0x251e
leaq 0x28(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x38(%rsp)
jne 0x252f
leaq 0x3c(%rsp), %rdi
callq 0x2744
cmpb $0x1, 0x18(%rsp)
jne 0x2540
leaq 0x1c(%rsp), %rdi
callq 0x2744
leaq 0x2c(%rsp), %rdi
callq 0x2744
leaq 0x20(%rsp), %rdi
callq 0x2744
movq %r15, %rdi
callq 0x11b0