// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_spect_inst.c
// Function: spect_inst_selftest
static st_s* spect_inst_selftest( void )
{
    typedef struct { aware_t _; bcore_array_dyn_link_typed_s string_arr; u2_t val1; u3_t val2; s1_t val3; } test_object1_s;

    bcore_flect_define_self_d( bcore_self_s_build_parse_sc( " test_object1_s = { aware_t _; typed => [] string_arr; u2_t val1; u3_t val2; s1_t val3; }", 0, 0 ) );

    typedef struct { aware_t _; u2_t val1; test_object1_s* o1; } test_object2_s;
    bcore_flect_define_self_d( bcore_self_s_build_parse_sc( " test_object2_s = { aware_t _; u2_t val1; test_object1_s => o1; }", 0, 0 ) );

    test_object1_s* o1 = bcore_inst_t_create( typeof( "test_object1_s" ) );

    ASSERT( bcore_strcmp( nameof( o1->_ ), "test_object1_s" ) == 0 );
    ASSERT( o1->val1 == 0 );
    ASSERT( o1->val2 == 0 );
    ASSERT( o1->val3 == 0 );

    o1->val1 = 1234;
    o1->val2 = 1000000000001;
    o1->val3 = -5;

    o1->string_arr.type = typeof( "st_s" );
    o1->string_arr.space = 20;
    o1->string_arr.data = bcore_u_alloc( sizeof( vd_t ), NULL, o1->string_arr.space, &o1->string_arr.space );
    o1->string_arr.size = 10;
    for( uz_t i = 0; i < o1->string_arr.size; i++ ) o1->string_arr.data[ i ] = st_s_createf( "String number %04i", i );
    test_object2_s* o2 = bcore_inst_t_create( typeof( "test_object2_s" ) );
    o2->o1 = bcore_inst_a_clone( (bcore_inst*)o1 );

    test_object2_s* o3 = bcore_inst_a_clone( (bcore_inst*)o2 );

    ASSERT( bcore_strcmp( nameof( o3->_ ), "test_object2_s" ) == 0 );
    ASSERT( o3->o1->val1 == 1234 );
    ASSERT( o3->o1->val2 == 1000000000001 );
    ASSERT( o3->o1->val3 == -5 );
    for( uz_t i = 0; i < o3->o1->string_arr.size; i++ )
    {
        st_s* s = st_s_createf( "String number %04i", i );
        ASSERT( bcore_strcmp( ( ( st_s* )o3->o1->string_arr.data[ i ] )->sc, s->sc ) == 0 );
        st_s_discard( s );
    }

    bcore_inst_a_discard( o1 );
    bcore_inst_a_discard( o2 );
    bcore_inst_a_discard( o3 );

    // deep vs shallow links
    {
        typedef struct { aware_t _; st_s * str; } deep_object_s;
        bcore_flect_define_self_d( BCORE_SELF_S_BUILD_PARSE_SC( " deep_object_s = { aware_t _; st_s => str; }", deep_object_s ) );
        typedef struct { aware_t _; st_s * str; } shallow_object_s;
        bcore_flect_define_self_d( BCORE_SELF_S_BUILD_PARSE_SC( " shallow_object_s = { aware_t _; st_s -> str; }", shallow_object_s ) );

        deep_object_s*    do1 = bcore_inst_t_create( typeof( "deep_object_s" ) );
        shallow_object_s* so1 = bcore_inst_t_create( typeof( "shallow_object_s" ) );

        do1->str = st_s_create_sc( "the" );
        so1->str = st_s_create_sc( "quick" );

        ASSERT( st_s_equal_sc( do1->str, "the") );
        ASSERT( st_s_equal_sc( so1->str, "quick") );

        deep_object_s*    do2 = bcore_inst_a_clone( (bcore_inst*)do1 );
        shallow_object_s* so2 = bcore_inst_a_clone( (bcore_inst*)so1 );

        do2->str = st_s_replace_sc_sc( do2->str, "the", "brown" );
        so2->str = st_s_replace_sc_sc( so2->str, "quick", "fox" );

        ASSERT( st_s_equal_sc( do1->str, "the") );
        ASSERT( st_s_equal_sc( do2->str, "brown") );

        ASSERT( st_s_equal_sc( so2->str, "fox") );
        ASSERT( st_s_equal_sc( so1->str, "fox") );

        bcore_inst_a_discard( do1 );
        bcore_inst_a_discard( do2 );
        bcore_inst_a_discard( so1 );
        bcore_inst_a_discard( so2 );
    }

    // just links
    {
        typedef struct
        {
            st_s* str1;
            st_s* str2;
            st_s* str3;
        } links_object_s;

        bcore_flect_define_self_d
        (
            BCORE_SELF_S_BUILD_PARSE_SC
            (
                "links_object_s = \
                { \
                    st_s => str1; \
                    st_s -> str2; \
                    hidden st_s * str3; \
                } \
                ",
                links_object_s
            )
        );

        st_s* ext_str = st_s_create_sc( "external" );

        links_object_s* o1 = bcore_inst_t_create( typeof( "links_object_s" ) );
        o1->str1 = st_s_create_sc( "hello " );
        o1->str2 = st_s_create_sc( "world!" );
        o1->str3 = ext_str;

        links_object_s* o2 = bcore_inst_t_clone( typeof( "links_object_s" ), ( const bcore_inst* )o1 );

        ASSERT( o1->str1 != o2->str1 );
        ASSERT( o1->str2 == o2->str2 );
        ASSERT( o1->str3 == o2->str3 );

        bcore_inst_t_discard( typeof( "links_object_s" ), o1 );
        bcore_inst_t_discard( typeof( "links_object_s" ), o2 );

        st_s_discard( ext_str );
    }

    // flat copy
    {
        typedef struct
        {
            tp_t v1;
            u1_t v2;
            st_s* p1;
        } flat_object_s;

        bcore_flect_define_self_d
        (
            BCORE_SELF_S_BUILD_PARSE_SC
            (
                "flat_object_s = \
                { \
                    tp_t v1; \
                    u1_t v2; \
                    hidden st_s* p1; \
                } \
                ",
                flat_object_s
            )
        );

        st_s* ext_str = st_s_create_sc( "external" );

        const bcore_inst_s* spect = bcore_inst_s_get_typed( typeof( "flat_object_s" ) );
        ASSERT( spect->init_flat );
        ASSERT( spect->copy_flat );
        ASSERT( spect->down_flat );

        flat_object_s* o1 = bcore_inst_t_create( typeof( "flat_object_s" ) );
        o1->v1 = 123;
        o1->v2 = 456;
        o1->p1 = ext_str;

        flat_object_s* o2 = bcore_inst_t_clone( typeof( "flat_object_s" ), ( const bcore_inst* )o1 );

        ASSERT( o1->v1 == o2->v1 );
        ASSERT( o1->v2 == o2->v2 );
        ASSERT( o1->p1 == o2->p1 );

        bcore_inst_t_discard( typeof( "flat_object_s" ), o1 );
        bcore_inst_t_discard( typeof( "flat_object_s" ), o2 );

        st_s_discard( ext_str );
    }

    // default strings
    {
        typedef struct
        {
            sc_t  str0;
            st_s* str1;
            st_s  str2;
            st_s* str3;
            st_s* str4;
        } string_init_object_s;

        bcore_flect_define_self_d
        (
            BCORE_SELF_S_BUILD_PARSE_SC
            (
                "string_init_object_s = \
                { \
                    sc_t str0 = \"hi\"; \
                    st_s => str1 = \"hello\"; \
                    st_s str2 = \"world!\"; \
                    st_s -> str3!; \
                    st_s => str4!; \
                } \
                ",
                string_init_object_s
            )
        );
        string_init_object_s* o = bcore_inst_t_create( typeof( "string_init_object_s" ) );
        ASSERT( sc_t_equal(     o->str0, "hi" ) );
        ASSERT( st_s_equal_sc(  o->str1, "hello" ) );
        ASSERT( st_s_equal_sc( &o->str2, "world!" ) );
        ASSERT( o->str3 );
        ASSERT( o->str4 );
        bcore_inst_t_discard( typeof( "string_init_object_s" ), o );
    }

    // fixed size array
    {
        typedef struct { st_s str_arr[ 10 ]; } arr_object_s;
        bcore_flect_define_self_d( BCORE_SELF_S_BUILD_PARSE_SC( "arr_object_s = { st_s [ 10 ] str_arr; }", arr_object_s ) );
        arr_object_s* o1 = bcore_inst_t_create( typeof( "arr_object_s" ) );
        arr_object_s* o2 = bcore_inst_t_create( typeof( "arr_object_s" ) );

        for( uz_t i = 0; i < 10; i++ ) st_s_copy_fa( &o1->str_arr[ i ], "#<uz_t>", i );

        bcore_inst_t_copy( typeof( "arr_object_s" ), (bcore_inst*)o2, o1 );

        for( uz_t i = 0; i < 10; i++ )
        {
            st_s* ref = st_s_create_fa( "#<uz_t>", i );
            ASSERT( st_s_equal_st( &o2->str_arr[ i ], ref ) );
            st_s_discard( ref );
        }

        bcore_inst_t_discard( typeof( "arr_object_s" ), o1 );
        bcore_inst_t_discard( typeof( "arr_object_s" ), o2 );
    }

    return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
leaq 0x6f691(%rip), %rdi     # 0x154c53
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f6d0(%rip), %rdi     # 0x154cad
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f6f7(%rip), %rdi     # 0x154cef
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0xe5080
movq %rax, %rdi
leaq 0x6f6d0(%rip), %rsi     # 0x154cef
callq 0x9d700
cmpl $0x0, %eax
je 0xe5652
leaq 0x4e36f(%rip), %rdi     # 0x13399f
leaq 0x6f6c7(%rip), %rsi     # 0x154cfe
leaq 0x6f6f7(%rip), %rdx     # 0x154d35
leaq 0x6eefd(%rip), %rcx     # 0x154542
movl $0x7b0, %r8d            # imm = 0x7B0
movb $0x0, %al
callq 0x9cea0
movq -0x8(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0xe5685
leaq 0x4e33c(%rip), %rdi     # 0x13399f
leaq 0x6f6df(%rip), %rsi     # 0x154d49
leaq 0x6f6c4(%rip), %rdx     # 0x154d35
leaq 0x6eeca(%rip), %rcx     # 0x154542
movl $0x7b1, %r8d            # imm = 0x7B1
movb $0x0, %al
callq 0x9cea0
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xe56b9
leaq 0x4e308(%rip), %rdi     # 0x13399f
leaq 0x6f6b9(%rip), %rsi     # 0x154d57
leaq 0x6f690(%rip), %rdx     # 0x154d35
leaq 0x6ee96(%rip), %rcx     # 0x154542
movl $0x7b2, %r8d            # imm = 0x7B2
movb $0x0, %al
callq 0x9cea0
movq -0x8(%rbp), %rax
movswl 0x38(%rax), %eax
cmpl $0x0, %eax
je 0xe56ef
leaq 0x4e2d2(%rip), %rdi     # 0x13399f
leaq 0x6f691(%rip), %rsi     # 0x154d65
leaq 0x6f65a(%rip), %rdx     # 0x154d35
leaq 0x6ee60(%rip), %rcx     # 0x154542
movl $0x7b3, %r8d            # imm = 0x7B3
movb $0x0, %al
callq 0x9cea0
movq -0x8(%rbp), %rax
movl $0x4d2, 0x28(%rax)      # imm = 0x4D2
movq -0x8(%rbp), %rax
movabsq $0xe8d4a51001, %rcx     # imm = 0xE8D4A51001
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rax
movw $0xfffb, 0x38(%rax)     # imm = 0xFFFB
leaq 0x714a5(%rip), %rdi     # 0x156bc2
callq 0xe4cf0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq $0x14, 0x18(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x8(%rbp), %rcx
addq $0x8, %rcx
addq $0x10, %rcx
movl $0x8, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
movq $0xa, 0x10(%rax)
movq $0x0, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jae 0xe57bb
movq -0x10(%rbp), %rsi
leaq 0x6f5e0(%rip), %rdi     # 0x154d73
movb $0x0, %al
callq 0xff350
movq %rax, %rdx
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x10(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
jmp 0xe577a
leaq 0x6f5c4(%rip), %rdi     # 0x154d86
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdi
callq 0xee200
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rdi
callq 0xee200
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rdi
callq 0xe5080
movq %rax, %rdi
leaq 0x6f57c(%rip), %rsi     # 0x154d86
callq 0x9d700
cmpl $0x0, %eax
je 0xe583d
leaq 0x4e184(%rip), %rdi     # 0x13399f
leaq 0x6f573(%rip), %rsi     # 0x154d95
leaq 0x6f50c(%rip), %rdx     # 0x154d35
leaq 0x6ed12(%rip), %rcx     # 0x154542
movl $0x7c3, %r8d            # imm = 0x7C3
movb $0x0, %al
callq 0x9cea0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
cmpl $0x4d2, 0x28(%rax)      # imm = 0x4D2
je 0xe5877
leaq 0x4e14a(%rip), %rdi     # 0x13399f
leaq 0x6f570(%rip), %rsi     # 0x154dcc
leaq 0x6f4d2(%rip), %rdx     # 0x154d35
leaq 0x6ecd8(%rip), %rcx     # 0x154542
movl $0x7c4, %r8d            # imm = 0x7C4
movb $0x0, %al
callq 0x9cea0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movabsq $0xe8d4a51001, %rcx     # imm = 0xE8D4A51001
cmpq %rcx, 0x30(%rax)
je 0xe58b8
leaq 0x4e109(%rip), %rdi     # 0x13399f
leaq 0x6f544(%rip), %rsi     # 0x154de1
leaq 0x6f491(%rip), %rdx     # 0x154d35
leaq 0x6ec97(%rip), %rcx     # 0x154542
movl $0x7c5, %r8d            # imm = 0x7C5
movb $0x0, %al
callq 0x9cea0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movswl 0x38(%rax), %eax
cmpl $-0x5, %eax
je 0xe58f2
leaq 0x4e0cf(%rip), %rdi     # 0x13399f
leaq 0x6f528(%rip), %rsi     # 0x154dff
leaq 0x6f457(%rip), %rdx     # 0x154d35
leaq 0x6ec5d(%rip), %rcx     # 0x154542
movl $0x7c6, %r8d            # imm = 0x7C6
movb $0x0, %al
callq 0x9cea0
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
cmpq 0x10(%rcx), %rax
jae 0xe5993
movq -0x28(%rbp), %rsi
leaq 0x6f458(%rip), %rdi     # 0x154d73
movb $0x0, %al
callq 0xff350
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x9d700
cmpl $0x0, %eax
je 0xe5979
leaq 0x4e048(%rip), %rdi     # 0x13399f
leaq 0x6f4b4(%rip), %rsi     # 0x154e12
leaq 0x6f3d0(%rip), %rdx     # 0x154d35
leaq 0x6ebd6(%rip), %rcx     # 0x154542
movl $0x7ca, %r8d            # imm = 0x7CA
movb $0x0, %al
callq 0x9cea0
movq -0x30(%rbp), %rdi
callq 0xff600
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0xe58fa
movq -0x8(%rbp), %rdi
callq 0xee140
movq -0x18(%rbp), %rdi
callq 0xee140
movq -0x20(%rbp), %rdi
callq 0xee140
leaq 0x6f4a7(%rip), %rdi     # 0x154e5c
movl $0x10, %esi
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f4b6(%rip), %rdi     # 0x154e89
movl $0x10, %esi
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f4c8(%rip), %rdi     # 0x154eb9
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x38(%rbp)
leaq 0x6f4be(%rip), %rdi     # 0x154ec7
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x40(%rbp)
leaq 0x6f4b7(%rip), %rdi     # 0x154ed8
callq 0xff550
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x8(%rax)
leaq 0x6f4a4(%rip), %rdi     # 0x154edc
callq 0xff550
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f481(%rip), %rsi     # 0x154ed8
callq 0xee270
testb $0x1, %al
jne 0xe5a89
leaq 0x4df38(%rip), %rdi     # 0x13399f
leaq 0x6f474(%rip), %rsi     # 0x154ee2
leaq 0x6f2c0(%rip), %rdx     # 0x154d35
leaq 0x6eac6(%rip), %rcx     # 0x154542
movl $0x7df, %r8d            # imm = 0x7DF
movb $0x0, %al
callq 0x9cea0
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f444(%rip), %rsi     # 0x154edc
callq 0xee270
testb $0x1, %al
jne 0xe5aca
leaq 0x4def7(%rip), %rdi     # 0x13399f
leaq 0x6f453(%rip), %rsi     # 0x154f02
leaq 0x6f27f(%rip), %rdx     # 0x154d35
leaq 0x6ea85(%rip), %rcx     # 0x154542
movl $0x7e0, %r8d            # imm = 0x7E0
movb $0x0, %al
callq 0x9cea0
movq -0x38(%rbp), %rdi
callq 0xee200
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0xee200
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f3e5(%rip), %rsi     # 0x154ed8
leaq 0x6f42a(%rip), %rdx     # 0x154f24
callq 0x101660
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f3c3(%rip), %rsi     # 0x154edc
leaq 0x6f40a(%rip), %rdx     # 0x154f2a
callq 0x101660
movq %rax, %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f399(%rip), %rsi     # 0x154ed8
callq 0xee270
testb $0x1, %al
jne 0xe5b71
leaq 0x4de50(%rip), %rdi     # 0x13399f
leaq 0x6f38c(%rip), %rsi     # 0x154ee2
leaq 0x6f1d8(%rip), %rdx     # 0x154d35
leaq 0x6e9de(%rip), %rcx     # 0x154542
movl $0x7e8, %r8d            # imm = 0x7E8
movb $0x0, %al
callq 0x9cea0
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f3a4(%rip), %rsi     # 0x154f24
callq 0xee270
testb $0x1, %al
jne 0xe5bb2
leaq 0x4de0f(%rip), %rdi     # 0x13399f
leaq 0x6f397(%rip), %rsi     # 0x154f2e
leaq 0x6f197(%rip), %rdx     # 0x154d35
leaq 0x6e99d(%rip), %rcx     # 0x154542
movl $0x7e9, %r8d            # imm = 0x7E9
movb $0x0, %al
callq 0x9cea0
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f369(%rip), %rsi     # 0x154f2a
callq 0xee270
testb $0x1, %al
jne 0xe5bf3
leaq 0x4ddce(%rip), %rdi     # 0x13399f
leaq 0x6f378(%rip), %rsi     # 0x154f50
leaq 0x6f156(%rip), %rdx     # 0x154d35
leaq 0x6e95c(%rip), %rcx     # 0x154542
movl $0x7eb, %r8d            # imm = 0x7EB
movb $0x0, %al
callq 0x9cea0
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f328(%rip), %rsi     # 0x154f2a
callq 0xee270
testb $0x1, %al
jne 0xe5c34
leaq 0x4dd8d(%rip), %rdi     # 0x13399f
leaq 0x6f357(%rip), %rsi     # 0x154f70
leaq 0x6f115(%rip), %rdx     # 0x154d35
leaq 0x6e91b(%rip), %rcx     # 0x154542
movl $0x7ec, %r8d            # imm = 0x7EC
movb $0x0, %al
callq 0x9cea0
movq -0x38(%rbp), %rdi
callq 0xee140
movq -0x48(%rbp), %rdi
callq 0xee140
movq -0x40(%rbp), %rdi
callq 0xee140
movq -0x50(%rbp), %rdi
callq 0xee140
leaq 0x6f331(%rip), %rdi     # 0x154f90
movl $0x18, %esi
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f3c5(%rip), %rdi     # 0x155042
callq 0xff550
movq %rax, -0x58(%rbp)
leaq 0x6f3be(%rip), %rdi     # 0x15504b
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x60(%rbp)
leaq 0x6f3b5(%rip), %rdi     # 0x15505a
callq 0xff550
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
leaq 0x6f3a6(%rip), %rdi     # 0x155061
callq 0xff550
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x58(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x10(%rax)
leaq 0x6f36d(%rip), %rdi     # 0x15504b
callq 0xe4cf0
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0xee1d0
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xe5d2c
leaq 0x4dc95(%rip), %rdi     # 0x13399f
leaq 0x6f357(%rip), %rsi     # 0x155068
leaq 0x6f01d(%rip), %rdx     # 0x154d35
leaq 0x6e823(%rip), %rcx     # 0x154542
movl $0x815, %r8d            # imm = 0x815
movb $0x0, %al
callq 0x9cea0
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
je 0xe5d67
leaq 0x4dc5a(%rip), %rdi     # 0x13399f
leaq 0x6f331(%rip), %rsi     # 0x15507d
leaq 0x6efe2(%rip), %rdx     # 0x154d35
leaq 0x6e7e8(%rip), %rcx     # 0x154542
movl $0x816, %r8d            # imm = 0x816
movb $0x0, %al
callq 0x9cea0
movq -0x60(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x10(%rcx), %rax
je 0xe5da2
leaq 0x4dc1f(%rip), %rdi     # 0x13399f
leaq 0x6f30b(%rip), %rsi     # 0x155092
leaq 0x6efa7(%rip), %rdx     # 0x154d35
leaq 0x6e7ad(%rip), %rcx     # 0x154542
movl $0x817, %r8d            # imm = 0x817
movb $0x0, %al
callq 0x9cea0
leaq 0x6f2a2(%rip), %rdi     # 0x15504b
callq 0xe4cf0
movq %rax, %rdi
movq -0x60(%rbp), %rsi
callq 0xee0f0
leaq 0x6f28a(%rip), %rdi     # 0x15504b
callq 0xe4cf0
movq %rax, %rdi
movq -0x68(%rbp), %rsi
callq 0xee0f0
movq -0x58(%rbp), %rdi
callq 0xff600
leaq 0x6f2c5(%rip), %rdi     # 0x1550a7
movl $0x18, %esi
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f242(%rip), %rdi     # 0x155042
callq 0xff550
movq %rax, -0x70(%rbp)
leaq 0x6f33b(%rip), %rdi     # 0x15514b
callq 0xe4cf0
movq %rax, %rdi
callq 0xe4ee0
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
testb $0x1, 0x29(%rax)
jne 0xe5e54
leaq 0x4db6d(%rip), %rdi     # 0x13399f
leaq 0x6f320(%rip), %rsi     # 0x155159
leaq 0x6eef5(%rip), %rdx     # 0x154d35
leaq 0x6e6fb(%rip), %rcx     # 0x154542
movl $0x83a, %r8d            # imm = 0x83A
movb $0x0, %al
callq 0x9cea0
movq -0x78(%rbp), %rax
testb $0x1, 0x2b(%rax)
jne 0xe5e87
leaq 0x4db3a(%rip), %rdi     # 0x13399f
leaq 0x6f2fe(%rip), %rsi     # 0x15516a
leaq 0x6eec2(%rip), %rdx     # 0x154d35
leaq 0x6e6c8(%rip), %rcx     # 0x154542
movl $0x83b, %r8d            # imm = 0x83B
movb $0x0, %al
callq 0x9cea0
movq -0x78(%rbp), %rax
testb $0x1, 0x2a(%rax)
jne 0xe5eba
leaq 0x4db07(%rip), %rdi     # 0x13399f
leaq 0x6f2dc(%rip), %rsi     # 0x15517b
leaq 0x6ee8f(%rip), %rdx     # 0x154d35
leaq 0x6e695(%rip), %rcx     # 0x154542
movl $0x83c, %r8d            # imm = 0x83C
movb $0x0, %al
callq 0x9cea0
leaq 0x6f28a(%rip), %rdi     # 0x15514b
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq $0x7b, (%rax)
movq -0x80(%rbp), %rax
movw $0x1c8, 0x8(%rax)       # imm = 0x1C8
movq -0x70(%rbp), %rcx
movq -0x80(%rbp), %rax
movq %rcx, 0x10(%rax)
leaq 0x6f251(%rip), %rdi     # 0x15514b
callq 0xe4cf0
movq %rax, %rdi
movq -0x80(%rbp), %rsi
callq 0xee1d0
movq %rax, -0x88(%rbp)
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq -0x88(%rbp), %rcx
cmpq (%rcx), %rax
je 0xe5f4e
leaq 0x4da73(%rip), %rdi     # 0x13399f
leaq 0x6f259(%rip), %rsi     # 0x15518c
leaq 0x6edfb(%rip), %rdx     # 0x154d35
leaq 0x6e601(%rip), %rcx     # 0x154542
movl $0x845, %r8d            # imm = 0x845
movb $0x0, %al
callq 0x9cea0
movq -0x80(%rbp), %rax
movzwl 0x8(%rax), %eax
movq -0x88(%rbp), %rcx
movzwl 0x8(%rcx), %ecx
cmpl %ecx, %eax
je 0xe5f8e
leaq 0x4da33(%rip), %rdi     # 0x13399f
leaq 0x6f22a(%rip), %rsi     # 0x15519d
leaq 0x6edbb(%rip), %rdx     # 0x154d35
leaq 0x6e5c1(%rip), %rcx     # 0x154542
movl $0x846, %r8d            # imm = 0x846
movb $0x0, %al
callq 0x9cea0
movq -0x80(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x88(%rbp), %rcx
cmpq 0x10(%rcx), %rax
je 0xe5fcc
leaq 0x4d9f5(%rip), %rdi     # 0x13399f
leaq 0x6f1fd(%rip), %rsi     # 0x1551ae
leaq 0x6ed7d(%rip), %rdx     # 0x154d35
leaq 0x6e583(%rip), %rcx     # 0x154542
movl $0x847, %r8d            # imm = 0x847
movb $0x0, %al
callq 0x9cea0
leaq 0x6f178(%rip), %rdi     # 0x15514b
callq 0xe4cf0
movq %rax, %rdi
movq -0x80(%rbp), %rsi
callq 0xee0f0
leaq 0x6f160(%rip), %rdi     # 0x15514b
callq 0xe4cf0
movq %rax, %rdi
movq -0x88(%rbp), %rsi
callq 0xee0f0
movq -0x70(%rbp), %rdi
callq 0xff600
leaq 0x6f1b0(%rip), %rdi     # 0x1551bf
movl $0x40, %esi
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f2a0(%rip), %rdi     # 0x1552cd
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movq (%rax), %rdi
leaq 0x6f290(%rip), %rsi     # 0x1552e2
callq 0xee2c0
testb $0x1, %al
jne 0xe6084
leaq 0x4d93d(%rip), %rdi     # 0x13399f
leaq 0x6f27c(%rip), %rsi     # 0x1552e5
leaq 0x6ecc5(%rip), %rdx     # 0x154d35
leaq 0x6e4cb(%rip), %rcx     # 0x154542
movl $0x86b, %r8d            # imm = 0x86B
movb $0x0, %al
callq 0x9cea0
movq -0x90(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x6f26b(%rip), %rsi     # 0x155301
callq 0xee270
testb $0x1, %al
jne 0xe60c8
leaq 0x4d8f9(%rip), %rdi     # 0x13399f
leaq 0x6f25a(%rip), %rsi     # 0x155307
leaq 0x6ec81(%rip), %rdx     # 0x154d35
leaq 0x6e487(%rip), %rcx     # 0x154542
movl $0x86c, %r8d            # imm = 0x86C
movb $0x0, %al
callq 0x9cea0
movq -0x90(%rbp), %rdi
addq $0x10, %rdi
leaq 0x6ef87(%rip), %rsi     # 0x155061
callq 0xee270
testb $0x1, %al
jne 0xe610c
leaq 0x4d8b5(%rip), %rdi     # 0x13399f
leaq 0x6f238(%rip), %rsi     # 0x155329
leaq 0x6ec3d(%rip), %rdx     # 0x154d35
leaq 0x6e443(%rip), %rcx     # 0x154542
movl $0x86d, %r8d            # imm = 0x86D
movb $0x0, %al
callq 0x9cea0
movq -0x90(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0xe6143
leaq 0x4d87e(%rip), %rdi     # 0x13399f
leaq 0x6f225(%rip), %rsi     # 0x15534d
leaq 0x6ec06(%rip), %rdx     # 0x154d35
leaq 0x6e40c(%rip), %rcx     # 0x154542
movl $0x86e, %r8d            # imm = 0x86E
movb $0x0, %al
callq 0x9cea0
movq -0x90(%rbp), %rax
cmpq $0x0, 0x38(%rax)
jne 0xe617a
leaq 0x4d847(%rip), %rdi     # 0x13399f
leaq 0x6f1f6(%rip), %rsi     # 0x155355
leaq 0x6ebcf(%rip), %rdx     # 0x154d35
leaq 0x6e3d5(%rip), %rcx     # 0x154542
movl $0x86f, %r8d            # imm = 0x86F
movb $0x0, %al
callq 0x9cea0
leaq 0x6f14c(%rip), %rdi     # 0x1552cd
callq 0xe4cf0
movq %rax, %rdi
movq -0x90(%rbp), %rsi
callq 0xee0f0
leaq 0x6f1c1(%rip), %rdi     # 0x15535d
movl $0x140, %esi            # imm = 0x140
movl $0x8, %edx
callq 0xa67c0
movq %rax, %rdi
callq 0xa7620
leaq 0x6f1cb(%rip), %rdi     # 0x155385
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0x98(%rbp)
leaq 0x6f1b0(%rip), %rdi     # 0x155385
callq 0xe4cf0
movq %rax, %rdi
callq 0xee030
movq %rax, -0xa0(%rbp)
movq $0x0, -0xa8(%rbp)
cmpq $0xa, -0xa8(%rbp)
jae 0xe623c
movq -0x98(%rbp), %rdi
movq -0xa8(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
movq -0xa8(%rbp), %rdx
leaq 0x6f95e(%rip), %rsi     # 0x155b7f
movb $0x0, %al
callq 0xfec20
movq -0xa8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa8(%rbp)
jmp 0xe61f4
leaq 0x6f142(%rip), %rdi     # 0x155385
callq 0xe4cf0
movq %rax, %rdi
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
callq 0xee2f0
movq $0x0, -0xb0(%rbp)
cmpq $0xa, -0xb0(%rbp)
jae 0xe6304
movq -0xb0(%rbp), %rsi
leaq 0x6f8fa(%rip), %rdi     # 0x155b7f
movb $0x0, %al
callq 0xff430
movq %rax, -0xb8(%rbp)
movq -0xa0(%rbp), %rdi
movq -0xb0(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
movq -0xb8(%rbp), %rsi
callq 0xee330
testb $0x1, %al
jne 0xe62e1
leaq 0x4d6e0(%rip), %rdi     # 0x13399f
leaq 0x6f0cc(%rip), %rsi     # 0x155392
leaq 0x6ea68(%rip), %rdx     # 0x154d35
leaq 0x6e26e(%rip), %rcx     # 0x154542
movl $0x881, %r8d            # imm = 0x881
movb $0x0, %al
callq 0x9cea0
movq -0xb8(%rbp), %rdi
callq 0xff600
movq -0xb0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb0(%rbp)
jmp 0xe6269
leaq 0x6f07a(%rip), %rdi     # 0x155385
callq 0xe4cf0
movq %rax, %rdi
movq -0x98(%rbp), %rsi
callq 0xee0f0
leaq 0x6f05f(%rip), %rdi     # 0x155385
callq 0xe4cf0
movq %rax, %rdi
movq -0xa0(%rbp), %rsi
callq 0xee0f0
xorl %eax, %eax
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)