// File: /workspace/github_c_makefile_star2_O3/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_feature_s_setup_functions
er_t xoico_feature_s_setup_functions( xoico_feature_s* o, const xoico_host* host )
{
    // xoico_feature.x:170:1
    BLM_INIT_LEVEL(0);
    xoico_compiler_s* compiler = xoico_host_a_compiler(host);
    sc_t sc_name = xoico_compiler_s_nameof(compiler,o->signature.name );
    sc_t sc_obj_type = xoico_compiler_s_nameof(compiler,xoico_host_a_obj_type(host) );
    sc_t sc_spect_name = ((st_s*)BLM_LEVEL_T_PUSH(0,st_s,xoico_host_a_create_spect_name(host)))->sc;
    
    st_s* st_ret_typespec = ((st_s*)BLM_LEVEL_T_PUSH(0,st_s,st_s_create()));
    
    bl_t has_ret = xoico_signature_s_returns_a_value(&(o->signature));
    BLM_TRY(xoico_signature_s_expand_ret_x(&(o->signature),host,((x_sink*)( st_ret_typespec ))))
    
    sc_t sc_ret_typespec = st_ret_typespec->sc;
    bl_t flag_const = o->signature.arg_o->typespec.access_class == TYPEOF_const;
    bl_t flag_discardable = o->signature.arg_o->typespec.access_class == TYPEOF_discardable;
    
    bl_t always_defined = ( o->strict || o->default_body || o->st_default_func_name.size > 0 );
    
    if( o->flag_a )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"#<sc_t> a_#<sc_t>( ", sc_ret_typespec, sc_name );
        st_s_push_fa(st,flag_const ? "c" : flag_discardable ? "d" : "m" );
        st_s_push_fa(st," @* o" );
        BLM_TRY(xoico_args_s_expand_x(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ) { verbatim_C{" );
        st_s_push_fa(st,"const #<sc_t>* p = #<sc_t>_get_aware( o ); ", sc_spect_name, sc_spect_name );
        st_s_push_fa(st,"assert( p->#<sc_t> ); ", sc_name );
        if( has_ret ) st_s_push_fa(st,"return " );
        st_s_push_fa(st,"p->#<sc_t>( o", sc_name );
        BLM_TRY(xoico_args_s_expand_name(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ); } };" );
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    
        xoico_func_s* func_to_group = xoico_func_s_clone(func);
        xoico_body_s_attach( &(func_to_group->body ),  NULL);
        BLM_TRY(xoico_func_s_freeze_global_name(func_to_group,host )) // set global name before local name is changed
        func_to_group->name = o->signature.name;
        func_to_group->expandable = false;
        x_array_push_d(((x_array*)(&(o->funcs_return_to_group))),((x_inst*)(func_to_group )));
    BLM_DOWN();}
    
    if( o->flag_a )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"bl_t defines_#<sc_t>( c @* o ) ", sc_name );
        if( always_defined )
        {
            st_s_push_fa(st,"{ return true; };", sc_name );
        }
        else
        {
            st_s_push_fa(st,"{ verbatim_C { return #<sc_t>_get_aware( o )->#<sc_t> != NULL; } };", sc_spect_name, sc_name );
        }
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    
        xoico_func_s* func_to_group = xoico_func_s_clone(func);
        xoico_body_s_attach( &(func_to_group->body ),  NULL);
        func_to_group->expandable = false;
        x_array_push_d(((x_array*)(&(o->funcs_return_to_group))),((x_inst*)(func_to_group )));
    BLM_DOWN();}
    
    if( o->flag_t )
    {BLM_INIT_LEVEL(1);
        /// new
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"#<sc_t> t_#<sc_t>( ", sc_ret_typespec, sc_name );
        st_s_push_fa(st,flag_const ? "c" : flag_discardable ? "d" : "m" );
        st_s_push_fa(st," #<sc_t>* o, tp_t t", sc_obj_type );
        BLM_TRY(xoico_args_s_expand_x(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ) { verbatim_C{" );
        st_s_push_fa(st,"const #<sc_t>* p = #<sc_t>_get_typed( t ); ", sc_spect_name, sc_spect_name );
        st_s_push_fa(st,"assert( p->#<sc_t> ); ", sc_name );
        if( has_ret ) st_s_push_fa(st,"return " );
        st_s_push_fa(st,"p->#<sc_t>( o", sc_name );
        BLM_TRY(xoico_args_s_expand_name(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ); } };" );
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    
        xoico_func_s* func_to_group = xoico_func_s_clone(func);
        xoico_body_s_attach( &(func_to_group->body ),  NULL);
        func_to_group->expandable = false;
        x_array_push_d(((x_array*)(&(o->funcs_return_to_group))),((x_inst*)(func_to_group )));
    BLM_DOWN();}
    
    if( o->flag_t )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"bl_t t_defines_#<sc_t>( tp_t t ) ", sc_name );
        if( always_defined )
        {
            st_s_push_fa(st,"{ return true; };", sc_name );
        }
        else
        {
            st_s_push_fa(st,"{ verbatim_C{ return #<sc_t>_get_typed( t )->#<sc_t> != NULL; } };", sc_spect_name, sc_name );
        }
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    
        xoico_func_s* func_to_group = xoico_func_s_clone(func);
        xoico_body_s_attach( &(func_to_group->body ),  NULL);
        func_to_group->expandable = false;
        x_array_push_d(((x_array*)(&(o->funcs_return_to_group))),((x_inst*)(func_to_group )));
    BLM_DOWN();}
    
    if( o->flag_p )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"#<sc_t> p_#<sc_t>( c #<sc_t>* p, ", sc_ret_typespec, sc_name, sc_spect_name );
        st_s_push_fa(st,flag_const ? "c" : flag_discardable ? "d" : "m" );
        st_s_push_fa(st," #<sc_t>* o", sc_obj_type );
        BLM_TRY(xoico_args_s_expand_x(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ) { verbatim_C {" );
        st_s_push_fa(st,"assert( p->#<sc_t> ); ", sc_name );
        if( has_ret ) st_s_push_fa(st,"return " );
        st_s_push_fa(st,"p->#<sc_t>( o", sc_name );
        BLM_TRY(xoico_args_s_expand_name(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ); } };" );
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    BLM_DOWN();}
    
    if( o->flag_p )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"bl_t p_defines_#<sc_t>( c #<sc_t>* p ) ", sc_name, sc_spect_name );
        if( always_defined )
        {
            st_s_push_fa(st,"{ return true; };", sc_name );
        }
        else
        {
            st_s_push_fa(st,"{ verbatim_C{ return p->#<sc_t> != NULL; } };", sc_name );
        }
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    BLM_DOWN();}
    
    if( o->flag_r )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
        st_s_push_fa(st,"#<sc_t> r_#<sc_t>(", sc_ret_typespec, sc_name );
        st_s_push_fa(st," c sr_s* o" );
        BLM_TRY(xoico_args_s_expand_x(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ) { verbatim_C {" );
        if( !flag_const ) st_s_push_fa(st,"ASSERT( !sr_s_is_const( o ) ); " );
        st_s_push_fa(st,"const #<sc_t>* p = (const #<sc_t>*)ch_spect_p( o->p, TYPEOF_#<sc_t> ); ",
            sc_spect_name,
            sc_spect_name,
            sc_spect_name
        );
    
        st_s_push_fa(st,"assert( p->#<sc_t> ); ", sc_name );
        if( has_ret ) st_s_push_fa(st,"return " );
        st_s_push_fa(st,"p->#<sc_t>( o->o", sc_name );
        BLM_TRY(xoico_args_s_expand_name(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," ); } };" );
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    BLM_DOWN();}
    
    if( o->flag_r )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
    
        st_s_push_fa(st,"bl_t r_defines_#<sc_t>( c sr_s* o ) ", sc_name );
        if( always_defined )
        {
            st_s_push_fa(st,"{ return true; };", sc_name );
        }
        else
        {
            st_s_push_fa(st,"{ verbatim_C{ return ( (#<sc_t>*)ch_spect_p( o->p, TYPEOF_#<sc_t> ) )->#<sc_t> != NULL; } };", sc_spect_name, sc_spect_name, sc_name );
        }
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
    BLM_DOWN();}
    
    if( o->st_default_func_name.size > 0 )
    {BLM_INIT_LEVEL(1);
        st_s* st = ((st_s*)BLM_LEVEL_T_PUSH(1,st_s,st_s_create()));
    
        if( o->signature.direct_return_arg )
        {
            st_s_push_fa(st,"#<sc_t>", xoico_compiler_s_nameof(compiler,o->signature.direct_return_arg->name ) );
        }
        else
        {
            st_s_push_fa(st,"#<sc_t>", sc_ret_typespec );
        }
    
        st_s_push_fa(st," #<sc_t>(", o->st_default_func_name.sc );
        st_s_push_fa(st,flag_const ? " c" : " m" );
        st_s_push_fa(st," #<sc_t>* o", sc_obj_type );
        BLM_TRY(xoico_args_s_expand_x(&(o->signature.args),host, false,((x_sink*)( st ))))
        st_s_push_fa(st," );" );
    
        xoico_func_s* func = xoico_feature_s_push_func_from_sc(o,host, st->sc );
        func->declare_in_expand_forward = false;
        if( o->default_body ) xoico_body_s_attach( &(func->body ),  ((xoico_body_s*)bcore_fork(o->default_body)));
    
        xoico_func_s* func_to_group = xoico_func_s_clone(func);
        xoico_body_s_attach( &(func_to_group->body ),  NULL);
        func_to_group->expandable = false;
        x_array_push_d(((x_array*)(&(o->funcs_return_to_group))),((x_inst*)(func_to_group )));
    BLM_DOWN();}
    
    BLM_RETURNV(er_t, 0)
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rsi, %rbp
movq %rdi, %rbx
leaq 0x17eecd(%rip), %rax    # 0x19bdd0
movq (%rax), %rsi
leaq 0x68(%rsp), %r12
movq %r12, %rdi
callq 0xd6675
movq $0x0, 0x10(%r12)
movq (%rbp), %r12
leaq 0x175779(%rip), %r15    # 0x1926a0
movl 0x175773(%rip), %eax    # 0x1926a0
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%r15,%rax,8), %rcx
movq 0x18(%r15,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x1cf80
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x1cf80
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x1cf80
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x1cf89
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0x1cfb0
movabsq $-0x1e682f89ce03d7c8, %rdi # imm = 0xE197D07631FC2838
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %r13
leaq 0x1756fb(%rip), %rdi    # 0x1926a0
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
movq %rbp, %rdi
callq *0x20(%r13)
movq 0x10(%rbx), %rsi
movq %rax, 0x30(%rsp)
movq %rax, %rdi
callq 0xe3d7
movq %rax, %r13
movq %rbp, %r14
movq (%rbp), %r12
movl 0x1756c8(%rip), %eax    # 0x1926a0
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%r15,%rax,8), %rcx
movq 0x18(%r15,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x1d02b
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x1d02b
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x1d02b
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x1d034
movq (%rax,%rcx), %rbp
testq %rbp, %rbp
jne 0x1d05b
movabsq $-0x1e682f89ce03d7c8, %rdi # imm = 0xE197D07631FC2838
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %rbp
leaq 0x175650(%rip), %rdi    # 0x1926a0
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
movq %r13, 0x10(%rsp)
movq %r14, %rdi
callq *0x30(%rbp)
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0xe3d7
movq %rax, 0x28(%rsp)
movq (%r14), %r12
movl 0x17561f(%rip), %eax    # 0x1926a0
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%r15,%rax,8), %rcx
movq 0x18(%r15,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0x1d0d4
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0x1d0d4
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0x1d0d4
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0x1d0dd
movq (%rax,%rcx), %rbp
testq %rbp, %rbp
jne 0x1d104
movabsq $-0x1e682f89ce03d7c8, %rdi # imm = 0xE197D07631FC2838
movq %r12, %rsi
callq 0xe9bc5
movq %rax, %rbp
leaq 0x1755a7(%rip), %rdi    # 0x1926a0
movq %r12, %rsi
movq %rax, %rdx
callq 0x115fac
leaq 0x8(%rbx), %r15
movabsq $-0x503db0e6e1c2e704, %r13 # imm = 0xAFC24F191E3D18FC
movq %r14, %rdi
callq *0x38(%rbp)
leaq 0x68(%rsp), %r12
movq %r12, %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %rax, %rcx
callq 0xd68a8
movq 0x8(%rax), %rax
movq %rax, 0x18(%rsp)
xorl %eax, %eax
callq 0x109c82
movq %r12, %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r12
movq 0x30(%rbx), %rax
movabsq $0x3173c900e37ae1df, %rcx # imm = 0x3173C900E37AE1DF
cmpq %rcx, %rax
je 0x1d16d
movb $0x1, 0x7(%rsp)
testq %rax, %rax
jne 0x1d177
cmpq $0x0, 0x48(%rbx)
setne 0x7(%rsp)
movq %r15, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x14840
movq 0x58(%rbx), %rax
movb $0x1, 0x6(%rsp)
cmpb $0x0, 0x110(%rbx)
je 0x1d1a8
movabsq $-0x503db0e6e1c2e704, %r15 # imm = 0xAFC24F191E3D18FC
movq 0x10(%rsp), %r13
jmp 0x1d1ce
cmpq $0x0, 0x108(%rbx)
movabsq $-0x503db0e6e1c2e704, %r15 # imm = 0xAFC24F191E3D18FC
movq 0x10(%rsp), %r13
jne 0x1d1ce
cmpq $0x0, 0xf8(%rbx)
setne 0x6(%rsp)
movq 0x8(%r12), %rcx
movq %rcx, 0x20(%rsp)
movq 0x30(%rax), %rax
movq %rax, 0x10(%rsp)
movb 0x113(%rbx), %al
cmpb $0x1, %al
jne 0x1d3d2
leaq 0x38(%rsp), %rdi
movq %rdi, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
callq 0xd6675
movq 0x8(%rsp), %r12
movq $0x1, 0x10(%r12)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %rbp
leaq 0x11076c(%rip), %rsi    # 0x12d9a1
movq %rax, %rdi
movq 0x20(%rsp), %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x10a8a5
movq 0x10(%rsp), %rdx
movabsq $-0x12e90733f18038df, %rax # imm = 0xED16F8CC0E7FC721
cmpq %rax, %rdx
leaq 0x114f44(%rip), %rax    # 0x1321a4
leaq 0x110ab3(%rip), %rcx    # 0x12dd1a
cmoveq %rax, %rcx
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
cmpq %rax, %rdx
leaq 0x110a98(%rip), %rsi    # 0x12dd17
cmovneq %rcx, %rsi
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110721(%rip), %rsi    # 0x12d9b5
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x60(%rbx), %r12
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x13fd1
leaq 0x110702(%rip), %rsi    # 0x12d9bb
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110702(%rip), %rsi    # 0x12d9cc
movq %rbp, %rdi
movq 0x18(%rsp), %rcx
movq %rcx, %rdx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110715(%rip), %rsi    # 0x12d9f8
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x7(%rsp)
je 0x1d308
leaq 0x110711(%rip), %rsi    # 0x12da0f
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110708(%rip), %rsi    # 0x12da17
xorl %r15d, %r15d
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x1403e
leaq 0x1106ef(%rip), %rsi    # 0x12da25
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%rbp), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
movb %r15b, 0x2a(%rax)
movq %rax, %rdi
callq 0x19821
movq %rax, %r12
movq 0x38(%rax), %rdi
callq 0x1802c
movq $0x0, 0x38(%r12)
movq %r12, %rdi
movq %r14, %rsi
callq 0x19e33
movq 0x10(%rbx), %rax
movq %rax, 0x8(%r12)
movb %r15b, 0x28(%r12)
leaq 0xc0(%rbx), %rdi
movq 0xc0(%rbx), %rsi
movq %r12, %rdx
callq 0x55b79
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x113(%rbx), %al
movabsq $-0x503db0e6e1c2e704, %r15 # imm = 0xAFC24F191E3D18FC
testb $0x1, %al
je 0x1d4d4
leaq 0x38(%rsp), %rdi
movq %rdi, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
callq 0xd6675
movq 0x8(%rsp), %r12
movq $0x1, 0x10(%r12)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r12
leaq 0x11060e(%rip), %rsi    # 0x12da2e
movq %rax, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x6(%rsp)
je 0x1d44a
leaq 0x110613(%rip), %rsi    # 0x12da4e
movq %r12, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
jmp 0x1d463
leaq 0x11060f(%rip), %rsi    # 0x12da60
movq %r12, %rdi
movq 0x18(%rsp), %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%r12), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
xorl %ebp, %ebp
movb %bpl, 0x2a(%rax)
movq %rax, %rdi
callq 0x19821
movq %rax, %r12
movq 0x38(%rax), %rdi
callq 0x1802c
movq $0x0, 0x38(%r12)
movb %bpl, 0x28(%r12)
leaq 0xc0(%rbx), %rdi
movq 0xc0(%rbx), %rsi
movq %r12, %rdx
callq 0x55b79
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x112(%rbx), %al
cmpb $0x1, %al
jne 0x1d6b6
leaq 0x38(%rsp), %rdi
movq %rdi, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
callq 0xd6675
movq 0x8(%rsp), %r12
movq $0x1, 0x10(%r12)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %rbp
leaq 0x11057c(%rip), %rsi    # 0x12daa4
movq %rax, %rdi
movq 0x20(%rsp), %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x10a8a5
movq 0x10(%rsp), %rdx
movabsq $-0x12e90733f18038df, %rax # imm = 0xED16F8CC0E7FC721
cmpq %rax, %rdx
leaq 0x114c51(%rip), %rax    # 0x1321a4
leaq 0x1107c0(%rip), %rcx    # 0x12dd1a
cmoveq %rax, %rcx
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
cmpq %rax, %rdx
leaq 0x1107a5(%rip), %rsi    # 0x12dd17
cmovneq %rcx, %rsi
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110531(%rip), %rsi    # 0x12dab8
movq %rbp, %rdi
movq 0x28(%rsp), %rdx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x60(%rbx), %r12
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x13fd1
leaq 0x11040a(%rip), %rsi    # 0x12d9bb
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x11050a(%rip), %rsi    # 0x12dacc
movq %rbp, %rdi
movq 0x18(%rsp), %rcx
movq %rcx, %rdx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x11041d(%rip), %rsi    # 0x12d9f8
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x7(%rsp)
je 0x1d600
leaq 0x110419(%rip), %rsi    # 0x12da0f
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110410(%rip), %rsi    # 0x12da17
xorl %r15d, %r15d
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x1403e
leaq 0x1103f7(%rip), %rsi    # 0x12da25
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%rbp), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
movb %r15b, 0x2a(%rax)
movq %rax, %rdi
callq 0x19821
movq %rax, %r12
movq 0x38(%rax), %rdi
callq 0x1802c
movq $0x0, 0x38(%r12)
movb %r15b, 0x28(%r12)
leaq 0xc0(%rbx), %rdi
movq 0xc0(%rbx), %rsi
movq %r12, %rdx
callq 0x55b79
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x112(%rbx), %al
movabsq $-0x503db0e6e1c2e704, %r15 # imm = 0xAFC24F191E3D18FC
testb $0x1, %al
je 0x1d7b6
leaq 0x38(%rsp), %r12
movq %r12, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r12
leaq 0x1103f6(%rip), %rsi    # 0x12daf8
movq %rax, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x6(%rsp)
je 0x1d72c
leaq 0x110331(%rip), %rsi    # 0x12da4e
movq %r12, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
jmp 0x1d745
leaq 0x1103e7(%rip), %rsi    # 0x12db1a
movq %r12, %rdi
movq 0x18(%rsp), %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%r12), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
xorl %ebp, %ebp
movb %bpl, 0x2a(%rax)
movq %rax, %rdi
callq 0x19821
movq %rax, %r12
movq 0x38(%rax), %rdi
callq 0x1802c
movq $0x0, 0x38(%r12)
movb %bpl, 0x28(%r12)
leaq 0xc0(%rbx), %rdi
movq 0xc0(%rbx), %rsi
movq %r12, %rdx
callq 0x55b79
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x111(%rbx), %al
cmpb $0x1, %al
jne 0x1d93d
leaq 0x38(%rsp), %r12
movq %r12, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %rbp
leaq 0x110355(%rip), %rsi    # 0x12db5d
movq %rax, %rdi
movq 0x20(%rsp), %rdx
movq %r13, %rcx
movq 0x18(%rsp), %r8
xorl %eax, %eax
callq 0x10a8a5
movq 0x10(%rsp), %rdx
movabsq $-0x12e90733f18038df, %rax # imm = 0xED16F8CC0E7FC721
cmpq %rax, %rdx
leaq 0x11496c(%rip), %rax    # 0x1321a4
leaq 0x1104db(%rip), %rcx    # 0x12dd1a
cmoveq %rax, %rcx
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
cmpq %rax, %rdx
leaq 0x1104c0(%rip), %rsi    # 0x12dd17
cmovneq %rcx, %rsi
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110313(%rip), %rsi    # 0x12db7f
movq %rbp, %rdi
movq 0x28(%rsp), %rdx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x60(%rbx), %r12
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x13fd1
leaq 0x1102f5(%rip), %rsi    # 0x12db8b
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110151(%rip), %rsi    # 0x12d9f8
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x7(%rsp)
je 0x1d8cc
leaq 0x11014d(%rip), %rsi    # 0x12da0f
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110144(%rip), %rsi    # 0x12da17
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x1403e
leaq 0x11012e(%rip), %rsi    # 0x12da25
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%rbp), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
movb $0x0, 0x2a(%rax)
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x111(%rbx), %al
testb $0x1, %al
je 0x1d9f7
leaq 0x8(%rsp), %r12
leaq 0x38(%rsp), %rbp
movq %rbp, (%r12)
leaq 0x68(%rsp), %rsi
movq %rbp, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %rbp, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %rbp
leaq 0x110210(%rip), %rsi    # 0x12db9d
movq %rax, %rdi
movq %r13, %rdx
movq 0x18(%rsp), %rcx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x1100a8(%rip), %rax    # 0x12da4e
leaq 0x110218(%rip), %rsi    # 0x12dbc5
cmpb $0x0, 0x6(%rsp)
cmovneq %rax, %rsi
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%rbp), %rdx
leaq 0xa0(%rbx), %rbp
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %rbp, %rdi
movq %rax, %rdx
callq 0x55b79
movb $0x0, 0x2a(%rax)
movq %r12, %rdi
callq 0xd6d0d
movb 0x114(%rbx), %al
cmpb $0x1, %al
jne 0x1db6c
leaq 0x38(%rsp), %r12
movq %r12, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %rbp
leaq 0x1101aa(%rip), %rsi    # 0x12dbf3
movq %rax, %rdi
movq 0x20(%rsp), %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x1101a4(%rip), %rsi    # 0x12dc06
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x60(%rbx), %r12
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x13fd1
leaq 0x110104(%rip), %rsi    # 0x12db8b
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
cmpq %rax, 0x10(%rsp)
je 0x1dab3
leaq 0x110168(%rip), %rsi    # 0x12dc11
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110177(%rip), %rsi    # 0x12dc31
movq %rbp, %rdi
movq 0x18(%rsp), %rcx
movq %rcx, %rdx
movq %rcx, %r8
xorl %eax, %eax
callq 0x10a8a5
leaq 0x10ff22(%rip), %rsi    # 0x12d9f8
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x7(%rsp)
je 0x1dafb
leaq 0x10ff1e(%rip), %rsi    # 0x12da0f
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x110177(%rip), %rsi    # 0x12dc79
movq %rbp, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
movq %r12, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x1403e
leaq 0x10feff(%rip), %rsi    # 0x12da25
movq %rbp, %rdi
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%rbp), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
movb $0x0, 0x2a(%rax)
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
movb 0x114(%rbx), %al
testb $0x1, %al
je 0x1dc35
leaq 0x38(%rsp), %r12
movq %r12, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r12
leaq 0x1100d2(%rip), %rsi    # 0x12dc8a
movq %rax, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
cmpb $0x0, 0x6(%rsp)
je 0x1dbe2
leaq 0x10fe7b(%rip), %rsi    # 0x12da4e
movq %r12, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10a8a5
jmp 0x1dbfe
leaq 0x1100c6(%rip), %rsi    # 0x12dcaf
movq %r12, %rdi
movq 0x18(%rsp), %rcx
movq %rcx, %rdx
movq %r13, %r8
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%r12), %rdx
leaq 0xa0(%rbx), %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r12, %rdi
movq %rax, %rdx
callq 0x55b79
movb $0x0, 0x2a(%rax)
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
cmpq $0x0, 0xf8(%rbx)
je 0x1ddce
leaq 0x38(%rsp), %r12
movq %r12, 0x8(%rsp)
leaq 0x68(%rsp), %rsi
movq %r12, %rdi
callq 0xd6675
movq $0x1, 0x48(%rsp)
xorl %eax, %eax
callq 0x109c82
movl $0x1, %esi
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xd68a8
movq %rax, %r15
movq 0x80(%rbx), %rax
testq %rax, %rax
je 0x1dca9
movq 0x50(%rax), %rsi
movq 0x30(%rsp), %rdi
callq 0xe3d7
leaq 0x126fd4(%rip), %rsi    # 0x144c75
movq %r15, %rdi
movq %rax, %rdx
jmp 0x1dcb8
leaq 0x126fc5(%rip), %rsi    # 0x144c75
movq %r15, %rdi
movq 0x20(%rsp), %rdx
xorl %eax, %eax
callq 0x10a8a5
movq 0xf0(%rbx), %rdx
leaq 0x11003f(%rip), %rsi    # 0x12dd0c
movq %r15, %rdi
xorl %eax, %eax
callq 0x10a8a5
movabsq $0x65c9718e19e3df34, %rax # imm = 0x65C9718E19E3DF34
cmpq %rax, 0x10(%rsp)
leaq 0x110029(%rip), %rax    # 0x12dd16
leaq 0x110025(%rip), %rsi    # 0x12dd19
cmoveq %rax, %rsi
movq %r15, %rdi
xorl %eax, %eax
callq 0x10a8a5
leaq 0x10fe76(%rip), %rsi    # 0x12db7f
movq %r15, %rdi
movq 0x28(%rsp), %rdx
xorl %eax, %eax
callq 0x10a8a5
leaq 0x60(%rbx), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %r15, %rcx
callq 0x13fd1
leaq 0x125a6f(%rip), %rsi    # 0x14379f
movq %r15, %rdi
xorl %eax, %eax
callq 0x10a8a5
movq 0x8(%r15), %rdx
leaq 0xa0(%rbx), %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ddec
movq 0xa0(%rbx), %rsi
movq %r15, %rdi
movq %rax, %rdx
callq 0x55b79
movq %rax, %r14
movb $0x0, 0x2a(%rax)
movq 0x108(%rbx), %rdi
testq %rdi, %rdi
je 0x1dd8a
callq 0xbe7e4
movq %rax, %r15
movq 0x38(%r14), %rdi
callq 0x1802c
movq %r15, 0x38(%r14)
movq %r14, %rdi
callq 0x19821
movq %rax, %r14
movq 0x38(%rax), %rdi
callq 0x1802c
movq $0x0, 0x38(%r14)
movb $0x0, 0x28(%r14)
movq 0xc0(%rbx), %rsi
addq $0xc0, %rbx
movq %rbx, %rdi
movq %r14, %rdx
callq 0x55b79
leaq 0x8(%rsp), %rdi
callq 0xd6d0d
leaq 0x68(%rsp), %rdi
callq 0xd6d2c
xorl %eax, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq