// File: /workspace/github_cpp_makefile_star2_O2/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 0x1365
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x23a6
leaq 0x2c(%rsp), %rdi
callq 0x23a6
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x181, %edi            # imm = 0x181
movq %rbx, %rsi
callq 0x23cb
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x10(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x182, %edi            # imm = 0x182
callq 0x2450
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x186, %edi            # imm = 0x186
callq 0x24d5
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x187, %edi            # imm = 0x187
callq 0x255a
leaq 0x14(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x10(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x18b, %edi            # imm = 0x18B
callq 0x25df
leaq 0x14(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x10(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x18d, %edi            # imm = 0x18D
callq 0x2664
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x191, %edi            # imm = 0x191
callq 0x26e9
leaq 0x14(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x2c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x193, %edi            # imm = 0x193
callq 0x276e
xorl %eax, %eax
leaq 0x14(%rsp), %rbx
movb %al, (%rbx)
movb %al, 0x38(%rsp)
leaq 0x30(%rsp), %r14
pushq $0x1
popq %rbp
movq %r14, %rdi
movl %ebp, %esi
callq 0x2300
leaq 0x1c(%rsp), %rdi
movq %r14, %rsi
callq 0x27f4
movq %r14, %rdi
callq 0x232c
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movl %ebp, %esi
callq 0x2300
leaq 0x30(%rsp), %rdi
movq %r14, %rsi
callq 0x2324
movq %r14, %rdi
callq 0x232c
movl $0x1a4, %edi            # imm = 0x1A4
movq %rbx, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x27fc
leaq 0x14(%rsp), %rsi
movl $0x1a5, %edi            # imm = 0x1A5
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2881
leaq 0x38(%rsp), %rsi
movl $0x1a8, %edi            # imm = 0x1A8
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2906
leaq 0x38(%rsp), %rsi
movl $0x1a9, %edi            # imm = 0x1A9
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x298b
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1ac, %edi            # imm = 0x1AC
callq 0x27fc
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1ad, %edi            # imm = 0x1AD
callq 0x2881
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1b1, %edi            # imm = 0x1B1
callq 0x2906
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1b2, %edi            # imm = 0x1B2
callq 0x298b
leaq 0x14(%rsp), %rsi
movl $0x1b6, %edi            # imm = 0x1B6
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a10
leaq 0x14(%rsp), %rsi
movl $0x1b7, %edi            # imm = 0x1B7
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a95
leaq 0x38(%rsp), %rsi
movl $0x1ba, %edi            # imm = 0x1BA
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b1a
leaq 0x38(%rsp), %rsi
movl $0x1bb, %edi            # imm = 0x1BB
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2b9f
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1be, %edi            # imm = 0x1BE
callq 0x2a10
leaq 0x8(%rsp), %rcx
movl $0x4, (%rcx)
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1c0, %edi            # imm = 0x1C0
callq 0x2a95
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1c4, %edi            # imm = 0x1C4
callq 0x2b1a
leaq 0x8(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $0x1
popq %r8
movl $0x1c6, %edi            # imm = 0x1C6
callq 0x2b9f
leaq 0x14(%rsp), %rsi
movl $0x1ce, %edi            # imm = 0x1CE
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x2c24
leaq 0x8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rcx
movl $0x1d1, %edi            # imm = 0x1D1
callq 0x2c24
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x10(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1d8, %edi            # imm = 0x1D8
callq 0x2c88
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x10(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1db, %edi            # imm = 0x1DB
callq 0x2c88
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1de, %edi            # imm = 0x1DE
callq 0x2d2b
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1e1, %edi            # imm = 0x1E1
callq 0x2d2b
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x10(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1e4, %edi            # imm = 0x1E4
callq 0x2dce
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x10(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1e8, %edi            # imm = 0x1E8
callq 0x2dce
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1ec, %edi            # imm = 0x1EC
callq 0x2e71
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x2c(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x1f0, %edi            # imm = 0x1F0
callq 0x2e71
leaq 0x14(%rsp), %rdx
movl $0x1f8, %edi            # imm = 0x1F8
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x2f14
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x14(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %r9
movl $0x1fb, %edi            # imm = 0x1FB
xorl %ecx, %ecx
callq 0x2f14
leaq 0x38(%rsp), %rsi
leaq 0x14(%rsp), %rdx
movl $0x1fe, %edi            # imm = 0x1FE
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x2fb7
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %r9
movl $0x201, %edi            # imm = 0x201
xorl %ecx, %ecx
callq 0x2fb7
leaq 0x14(%rsp), %rdx
movl $0x204, %edi            # imm = 0x204
movq %rdx, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x305a
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x14(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %r9
movl $0x207, %edi            # imm = 0x207
xorl %ecx, %ecx
callq 0x305a
leaq 0x38(%rsp), %rsi
leaq 0x14(%rsp), %rdx
movl $0x20a, %edi            # imm = 0x20A
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x30fd
leaq 0x8(%rsp), %r8
movl $0x5, (%r8)
leaq 0x38(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %r9
movl $0x20d, %edi            # imm = 0x20D
xorl %ecx, %ecx
callq 0x30fd
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x1c(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x215, %edi            # imm = 0x215
callq 0x2f14
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x218, %edi            # imm = 0x218
movq %rdx, %rsi
callq 0x2f14
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x21b, %edi            # imm = 0x21B
callq 0x2fb7
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x21e, %edi            # imm = 0x21E
callq 0x2fb7
leaq 0x8(%rsp), %r8
movl $0x4, (%r8)
leaq 0x1c(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x221, %edi            # imm = 0x221
callq 0x305a
leaq 0x8(%rsp), %r8
movl $0x7, (%r8)
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x225, %edi            # imm = 0x225
movq %rdx, %rsi
callq 0x305a
leaq 0x8(%rsp), %r8
movl $0x3, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x14(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x229, %edi            # imm = 0x229
callq 0x30fd
leaq 0x8(%rsp), %r8
movl $0x6, (%r8)
leaq 0x30(%rsp), %rsi
leaq 0x1c(%rsp), %rdx
pushq $0x1
popq %rcx
pushq $0x1
popq %r9
movl $0x22d, %edi            # imm = 0x22D
callq 0x30fd
movl $0x234, %edi            # imm = 0x234
callq 0x31a0
movl $0x235, %edi            # imm = 0x235
callq 0x3250
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
pushq $0x1
popq %rdx
movl $0x23b, %edi            # imm = 0x23B
callq 0x3300
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
pushq $0x1
popq %rdx
movl $0x23d, %edi            # imm = 0x23D
callq 0x338b
leaq 0x14(%rsp), %rsi
movl $0x245, %edi            # imm = 0x245
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x3416
leaq 0x14(%rsp), %rsi
pushq $0x1
popq %rdx
movl $0x248, %edi            # imm = 0x248
xorl %ecx, %ecx
callq 0x3499
leaq 0x14(%rsp), %rsi
pushq $0x1
popq %rdx
movl $0x249, %edi            # imm = 0x249
xorl %ecx, %ecx
callq 0x351c
leaq 0x14(%rsp), %rsi
pushq $0x1
popq %rdx
movl $0x24a, %edi            # imm = 0x24A
xorl %ecx, %ecx
callq 0x359f
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rcx
movl $0x251, %edi            # imm = 0x251
xorl %edx, %edx
callq 0x3416
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rcx
movl $0x254, %edi            # imm = 0x254
movl %ecx, %edx
callq 0x351c
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rcx
movl $0x255, %edi            # imm = 0x255
movl %ecx, %edx
callq 0x3499
leaq 0x1c(%rsp), %rsi
pushq $0x1
popq %rcx
movl $0x256, %edi            # imm = 0x256
movl %ecx, %edx
callq 0x359f
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
pushq $0x1
popq %rdx
movl $0x25d, %edi            # imm = 0x25D
callq 0x3622
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
pushq $0x1
popq %rdx
movl $0x260, %edi            # imm = 0x260
callq 0x36af
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
pushq $0x1
popq %rdx
movl $0x262, %edi            # imm = 0x262
callq 0x373c
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
pushq $0x1
popq %rdx
movl $0x264, %edi            # imm = 0x264
callq 0x37c9
leaq 0x8(%rsp), %rbx
leaq 0x14(%rsp), %rsi
movq %rbx, %rdi
callq 0x3856
movl $0x26c, %edi            # imm = 0x26C
movq %rbx, %rsi
xorl %edx, %edx
callq 0x13ae
leaq 0x8(%rsp), %rdi
callq 0x4112
leaq 0x8(%rsp), %rbx
leaq 0x1c(%rsp), %rsi
movq %rbx, %rdi
callq 0x3856
pushq $0x1
popq %rdx
movl $0x26f, %edi            # imm = 0x26F
movq %rbx, %rsi
callq 0x13ae
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x4112
movl $0x2, (%rbx)
leaq 0x24(%rsp), %rcx
movl $0x1, (%rcx)
leaq 0x8(%rsp), %rsi
pushq $0x1
popq %rdx
movl $0x276, %edi            # imm = 0x276
callq 0x3868
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
pushq $0x1
popq %rdx
leaq 0x10(%rsp), %rcx
movl $0x277, %edi            # imm = 0x277
callq 0x38f7
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
pushq $0x1
popq %rdx
leaq 0x2c(%rsp), %rcx
movl $0x278, %edi            # imm = 0x278
callq 0x3986
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x24(%rsp), %rcx
movl $0x1, (%rcx)
pushq $0x1
popq %rdx
movl $0x27b, %edi            # imm = 0x27B
callq 0x3868
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
pushq $0x1
popq %rdx
leaq 0x10(%rsp), %rcx
movl $0x27c, %edi            # imm = 0x27C
callq 0x3a15
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
pushq $0x1
popq %rdx
leaq 0x2c(%rsp), %rcx
movl $0x27e, %edi            # imm = 0x27E
callq 0x3aa4
movl $0x282, %edi            # imm = 0x282
callq 0x13fc
xorl %eax, %eax
leaq 0x8(%rsp), %rsi
movb %al, (%rsi)
leaq 0x24(%rsp), %rdx
movb %al, (%rdx)
movl $0x28b, %edi            # imm = 0x28B
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3b33
leaq 0x24(%rsp), %rbx
movq %rbx, %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %r14
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0x3bd0
movb $0x0, (%rbx)
movabsq $0x400000005, %r12      # imm = 0x400000005
leaq 0x40(%rsp), %rcx
movq %r12, (%rcx)
leaq 0x24(%rsp), %rdx
pushq $0x2
popq %r8
movl $0x291, %edi            # imm = 0x291
movq %r14, %rsi
callq 0x3b33
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x421e
movb $0x0, (%rbx)
leaq 0x24(%rsp), %rbx
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x3bd0
leaq 0x40(%rsp), %rcx
movq %r12, (%rcx)
leaq 0x8(%rsp), %rsi
pushq $0x2
popq %r8
movl $0x298, %edi            # imm = 0x298
movq %rbx, %rdx
callq 0x3b33
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rbx
leaq 0x10(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3bd0
leaq 0x24(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x3bd0
movabsq $0xc0000000b, %r13      # imm = 0xC0000000B
leaq 0x40(%rsp), %rcx
movq %r13, (%rcx)
pushq $0x2
popq %r8
movl $0x29f, %edi            # imm = 0x29F
movq %rbx, %rsi
movq %r15, %rdx
callq 0x3b33
leaq 0x24(%rsp), %rbx
movq %rbx, %rdi
callq 0x421e
leaq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0x421e
xorl %eax, %eax
movb %al, (%r14)
movb %al, (%rbx)
leaq 0x8(%rsp), %rsi
leaq 0x24(%rsp), %rdx
movl $0x2aa, %edi            # imm = 0x2AA
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3bd8
leaq 0x24(%rsp), %rbx
movq %rbx, %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %r14
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0x3bd0
movb $0x0, (%rbx)
leaq 0x40(%rsp), %rcx
movq %r12, (%rcx)
leaq 0x24(%rsp), %rdx
pushq $0x2
popq %r8
movl $0x2b0, %edi            # imm = 0x2B0
movq %r14, %rsi
callq 0x3bd8
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x421e
movb $0x0, (%rbx)
leaq 0x24(%rsp), %rbx
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x3bd0
leaq 0x40(%rsp), %rcx
movq %r12, (%rcx)
leaq 0x8(%rsp), %rsi
pushq $0x2
popq %r8
movl $0x2b7, %edi            # imm = 0x2B7
movq %rbx, %rdx
callq 0x3bd8
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rbx
leaq 0x10(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3bd0
leaq 0x24(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x3bd0
leaq 0x40(%rsp), %rcx
movq %r13, (%rcx)
pushq $0x2
popq %r8
movl $0x2be, %edi            # imm = 0x2BE
movq %rbx, %rsi
movq %r15, %rdx
callq 0x3bd8
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
movq 0x7f63(%rip), %rdi      # 0x9fd0
leaq 0x3084(%rip), %rsi      # 0x50f8
callq 0x10e0
movq %rax, %rdi
callq 0x1060
leaq 0x30(%rsp), %rdi
callq 0x4112
leaq 0x1c(%rsp), %rdi
callq 0x421e
leaq 0x38(%rsp), %rdi
callq 0x4112
leaq 0x14(%rsp), %rdi
callq 0x421e
leaq 0x2c(%rsp), %rdi
callq 0x232c
leaq 0x10(%rsp), %rdi
callq 0x232c
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x20dc
jmp 0x20dc
jmp 0x20dc
jmp 0x20dc
jmp 0x20dc
jmp 0x20dc
jmp 0x20dc
movq %rax, %rbx
leaq 0x24(%rsp), %rdi
callq 0x421e
leaq 0x8(%rsp), %rdi
callq 0x421e
jmp 0x216e
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x2103
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x4112
jmp 0x216e
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x216b
jmp 0x2166
jmp 0x2166
jmp 0x2166
jmp 0x2166
jmp 0x2166
jmp 0x2166
jmp 0x2166
movq %rax, %rbx
jmp 0x2196
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x4112
leaq 0x1c(%rsp), %rdi
callq 0x421e
leaq 0x38(%rsp), %rdi
callq 0x4112
leaq 0x14(%rsp), %rdi
callq 0x421e
leaq 0x2c(%rsp), %rdi
callq 0x232c
leaq 0x10(%rsp), %rdi
callq 0x232c
movq %rbx, %rdi
callq 0x1170