LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cb.c
// Function: lv_cb_signal
static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(cb, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);

    if(sign == LV_SIGNAL_STYLE_CHG) {
        const lv_style_t * label_style = lv_label_get_style(ext->label, LV_LABEL_STYLE_MAIN);
        lv_obj_set_size(ext->bullet, lv_font_get_line_height(label_style->text.font),
                        lv_font_get_line_height(label_style->text.font));
        lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
    } else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
        lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
    } else if(sign == LV_SIGNAL_CONTROL) {
        char c = *((char *)param);
        if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN || c == LV_KEY_LEFT || c == LV_KEY_UP) {
            /*Follow the backgrounds state with the bullet*/
            lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
        }
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %r12
movl %esi, %ebp
movq %rdi, %r14
callq *0x55247(%rip)          # 0x5e2a8
movl %eax, %ebx
cmpb $0x1, %al
jne 0x90ef
cmpb $0x7, %bpl
jne 0x9088
leaq 0x32152(%rip), %rsi     # 0x3b1ca
movq %r12, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movzbl %bpl, %eax
movb $0x1, %bl
leal -0xa(%rax), %ecx
cmpl $0x2, %ecx
jb 0x90d8
cmpl $0x12, %eax
je 0x90ce
cmpl $0x8, %eax
je 0x90d8
cmpl $0x4, %eax
jne 0x90ef
movq 0x40(%r15), %rdi
callq 0x6316
movq 0x38(%r15), %rdi
movq 0x28(%rax), %rax
movzbl 0x10(%rax), %edx
movl %edx, %esi
callq 0x520e
jmp 0x90d8
movb (%r12), %al
addb $-0x11, %al
cmpb $0x3, %al
ja 0x90ef
movq 0x38(%r15), %r15
movq %r14, %rdi
callq 0x1289a
movzbl %al, %esi
movq %r15, %rdi
callq 0x1278e
movl %ebx, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cb.c
// Function: lv_cb_design
static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t mode)
{
    bool result = true;

    if(mode == LV_DESIGN_COVER_CHK) {
        /*Return false if the object is not covers the mask_p area*/
        result = ancestor_bg_design(cb, mask, mode);
    } else if(mode == LV_DESIGN_DRAW_MAIN || mode == LV_DESIGN_DRAW_POST) {
        lv_cb_ext_t * cb_ext      = lv_obj_get_ext_attr(cb);
        lv_btn_ext_t * bullet_ext = lv_obj_get_ext_attr(cb_ext->bullet);

        /*Be sure the state of the bullet is the same as the parent button*/
        bullet_ext->state = cb_ext->bg_btn.state;

        result = ancestor_bg_design(cb, mask, mode);

    } else {
        result = ancestor_bg_design(cb, mask, mode);
    }

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movb $0x2, %al
cmpl $0x2, %edx
je 0x913e
movl %edx, %ebp
cmpb $0x1, %bpl
ja 0x913c
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movq 0x38(%rax), %rdi
callq 0x6747
movb 0x30(%r15), %cl
andb $0x7, %cl
movb 0x30(%rax), %dl
andb $-0x8, %dl
orb %cl, %dl
movb %dl, 0x30(%rax)
movl %ebp, %eax
movq 0x5516b(%rip), %rcx     # 0x5e2b0
movzbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmpq *%rcx
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cb.c
// Function: lv_cb_set_style
void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(cb, LV_OBJX_NAME);

    lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);

    switch(type) {
        case LV_CB_STYLE_BG:
            lv_btn_set_style(cb, LV_BTN_STYLE_REL, style);
            lv_btn_set_style(cb, LV_BTN_STYLE_PR, style);
            lv_btn_set_style(cb, LV_BTN_STYLE_TGL_REL, style);
            lv_btn_set_style(cb, LV_BTN_STYLE_TGL_PR, style);
            lv_btn_set_style(cb, LV_BTN_STYLE_INA, style);
            break;
        case LV_CB_STYLE_BOX_REL: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_REL, style); break;
        case LV_CB_STYLE_BOX_PR: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_PR, style); break;
        case LV_CB_STYLE_BOX_TGL_REL: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_TGL_REL, style); break;
        case LV_CB_STYLE_BOX_TGL_PR: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_TGL_PR, style); break;
        case LV_CB_STYLE_BOX_INA: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_INA, style); break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x9213
movq %r14, %rdi
callq 0x6747
cmpb $0x5, %bpl
ja 0x9257
movzbl %bpl, %ecx
leaq 0x31fc5(%rip), %rdx     # 0x3b190
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r14, %rdi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x126f8
pushq $0x1
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
callq 0x126f8
pushq $0x2
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
callq 0x126f8
pushq $0x3
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
callq 0x126f8
pushq $0x4
popq %rsi
movq %r14, %rdi
jmp 0x924b
leaq 0x31f2a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x9222
movq 0x38(%rax), %rdi
pushq $0x3
jmp 0x924a
movq 0x38(%rax), %rdi
pushq $0x1
jmp 0x924a
movq 0x38(%rax), %rdi
pushq $0x2
jmp 0x924a
movq 0x38(%rax), %rdi
xorl %esi, %esi
jmp 0x924b
movq 0x38(%rax), %rdi
pushq $0x4
popq %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x126f8
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cb.c
// Function: lv_bullet_design
static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_design_mode_t mode)
{
    if(mode == LV_DESIGN_COVER_CHK) {
        return ancestor_bullet_design(bullet, mask, mode);
    } else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_GROUP
        /* If the check box is the active in a group and
         * the background is not visible (transparent)
         * then activate the style of the bullet*/
        const lv_style_t * style_ori  = lv_obj_get_style(bullet);
        lv_obj_t * bg                 = lv_obj_get_parent(bullet);
        const lv_style_t * style_page = lv_obj_get_style(bg);
        lv_group_t * g                = lv_obj_get_group(bg);
        if(style_page->body.opa == LV_OPA_TRANSP) { /*Is the Background visible?*/
            if(lv_group_get_focused(g) == bg) {
                lv_style_t * style_mod;
                style_mod       = lv_group_mod_style(g, style_ori);
                bullet->style_p = style_mod; /*Temporally change the style to the activated */
            }
        }
#endif
        ancestor_bullet_design(bullet, mask, mode);

#if LV_USE_GROUP
        bullet->style_p = style_ori; /*Revert the style*/
#endif
    } else if(mode == LV_DESIGN_DRAW_POST) {
        ancestor_bullet_design(bullet, mask, mode);
    }

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
testl %edx, %edx
je 0x92b0
cmpl $0x1, %edx
je 0x929f
cmpl $0x2, %edx
jne 0x9310
movq 0x55032(%rip), %rax     # 0x5e2b8
pushq $0x2
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq *0x5500a(%rip)          # 0x5e2b8
jmp 0x9310
movq %rbx, %rdi
callq 0x6316
movq %rax, %r15
movq %rbx, %rdi
callq 0x47bc
movq %rax, %r12
movq %rax, %rdi
callq 0x6316
movq %rax, %rbp
movq %r12, %rdi
callq 0x4b8e
cmpb $0x0, 0x8(%rbp)
jne 0x92fe
movq %rax, %r13
movq %rax, %rdi
callq 0x29b8
cmpq %r12, %rax
jne 0x92fe
movq %r13, %rdi
movq %r15, %rsi
callq 0x2a44
movq %rax, 0x48(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq *0x54fac(%rip)          # 0x5e2b8
movq %r15, 0x48(%rbx)
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cb.c
// Function: lv_cb_get_style
const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type)
{
    LV_ASSERT_OBJ(cb, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_cb_ext_t * ext        = lv_obj_get_ext_attr(cb);

    switch(type) {
        case LV_CB_STYLE_BG: style = lv_btn_get_style(cb, LV_BTN_STYLE_REL); break;
        case LV_CB_STYLE_BOX_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_REL); break;
        case LV_CB_STYLE_BOX_PR: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_PR); break;
        case LV_CB_STYLE_BOX_TGL_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_TGL_REL); break;
        case LV_CB_STYLE_BOX_TGL_PR: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_TGL_PR); break;
        case LV_CB_STYLE_BOX_INA: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_INA); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x93c8
movq %rbx, %rdi
callq 0x6747
cmpb $0x5, %bpl
ja 0x940b
movzbl %bpl, %ecx
leaq 0x31dee(%rip), %rdx     # 0x3b1a8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x93f5
leaq 0x31d75(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x93d7
movq 0x38(%rax), %rdi
pushq $0x3
jmp 0x93ff
movq 0x38(%rax), %rdi
pushq $0x1
jmp 0x93ff
movq 0x38(%rax), %rdi
pushq $0x2
jmp 0x93ff
movq 0x38(%rax), %rdi
xorl %esi, %esi
jmp 0x9400
movq 0x38(%rax), %rdi
pushq $0x4
popq %rsi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1295d
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_style
void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_t * style)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);

    switch(type) {
    case LV_CPICKER_STYLE_MAIN:
        lv_obj_set_style(cpicker, style);
        break;
    case LV_CPICKER_STYLE_INDICATOR:
        ext->indic.style = style;
        lv_obj_invalidate(cpicker);
        break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa205
movq %rbx, %rdi
callq 0x6747
cmpb $0x1, %bpl
je 0xa216
movzbl %bpl, %eax
testl %eax, %eax
jne 0xa226
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x5a3d
leaq 0x30f38(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa214
movq %r14, 0x8(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_type
void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    if(ext->type == type) return;

    ext->type = type;
    lv_obj_refresh_ext_draw_pad(cpicker);
    refr_indic_pos(cpicker);

    lv_obj_invalidate(cpicker);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa3be
movq %rbx, %rdi
callq 0x6747
movb 0x24(%rax), %cl
movl %ecx, %edx
shrb $0x3, %dl
andb $0x1, %dl
cmpb %bpl, %dl
jne 0xa3cf
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x30d7f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa3cd
shlb $0x3, %bpl
andb $0x8, %bpl
andb $-0x9, %cl
orb %bpl, %cl
movb %cl, 0x24(%rax)
movq %rbx, %rdi
callq 0x617f
movq %rbx, %rdi
callq 0xa22b
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_hsv
bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    if (hsv.h > 360) hsv.h %= 360;
    if (hsv.s > 100) hsv.s = 100;
    if (hsv.v > 100) hsv.v = 100;

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);

    if (ext->hsv.h == hsv.h && ext->hsv.s == hsv.s && ext->hsv.v == hsv.v) return false;

    ext->hsv = hsv;

    refr_indic_pos(cpicker);

    if (ext->preview && ext->type == LV_CPICKER_TYPE_DISC) {
        lv_obj_invalidate(cpicker);
    }

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa4ce
movl %ebp, %r12d
shrl $0x18, %r12d
movl %ebp, %r13d
shrl $0x10, %r13d
movzwl %bp, %ecx
movw $0x168, %si             # imm = 0x168
movl %ecx, %eax
xorl %edx, %edx
divw %si
movl %edx, %r14d
cmpl $0x169, %ecx            # imm = 0x169
cmovbl %ebp, %r14d
movl %ebp, %eax
andl $0xff0000, %eax         # imm = 0xFF0000
cmpl $0x640001, %eax         # imm = 0x640001
pushq $0x64
popq %rax
cmovael %eax, %r13d
cmpl $0x65000000, %ebp       # imm = 0x65000000
cmovael %eax, %r12d
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpw %r14w, (%rax)
jne 0xa4df
cmpb %r13b, 0x2(%r15)
jne 0xa4df
cmpb %r12b, 0x3(%r15)
jne 0xa4df
xorl %ebp, %ebp
jmp 0xa508
leaq 0x30c6f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa4dd
movw %r14w, (%r15)
movb %r13b, 0x2(%r15)
movb %r12b, 0x3(%r15)
movq %rbx, %rdi
callq 0xa22b
movb 0x24(%r15), %al
notb %al
movb $0x1, %bpl
testb $0x18, %al
jne 0xa508
movq %rbx, %rdi
callq 0x493a
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_color
bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color)
{
    lv_color32_t c32;
    c32.full = lv_color_to32(color);

    return lv_cpicker_set_hsv(cpicker,
            lv_color_rgb_to_hsv(c32.ch.red, c32.ch.green, c32.ch.blue));
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movzwl %si, %eax
shrl $0xb, %eax
imull $0x107, %eax, %edi      # imm = 0x107
addl $0x7, %edi
shrl $0x5, %edi
movl %esi, %eax
shrl $0x5, %eax
andl $0x3f, %eax
andl $0x1f, %esi
imull $0x107, %esi, %edx      # imm = 0x107
addl $0x7, %edx
shrl $0x5, %edx
imull $0x40c, %eax, %esi      # imm = 0x40C
addl $0xc, %esi
andl $0xffffff00, %esi       # imm = 0xFFFFFF00
addl %edx, %esi
shrl $0x8, %esi
movl $0xff, %eax
andl %eax, %edx
andl %eax, %edi
andl %eax, %esi
callq 0x28193
movq %rbx, %rdi
movl %eax, %esi
popq %rbx
jmp 0xa44e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_color_mode
void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);

    ext->color_mode = mode;
    refr_indic_pos(cpicker);
    lv_obj_invalidate(cpicker);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa606
movq %rbx, %rdi
callq 0x6747
movb 0x24(%rax), %cl
andb $0x3, %bpl
andb $-0x4, %cl
orb %bpl, %cl
movb %cl, 0x24(%rax)
movq %rbx, %rdi
callq 0xa22b
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x30b37(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa615
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_indic_colored
void lv_cpicker_set_indic_colored(lv_obj_t * cpicker, bool en)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    ext->indic.colored = en ? 1 : 0;
    invalidate_indic(cpicker);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa688
movq %rbx, %rdi
callq 0x6747
movb 0x14(%rax), %cl
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0x14(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xa699
leaq 0x30ab5(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa697
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_set_preview
void lv_cpicker_set_preview(lv_obj_t * cpicker, bool en)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    ext->preview = en ? 1 : 0;
    lv_obj_invalidate(cpicker);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa6fd
movq %rbx, %rdi
callq 0x6747
movb 0x24(%rax), %cl
shlb $0x4, %bpl
andb $-0x11, %cl
orb %bpl, %cl
movb %cl, 0x24(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x30a40(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa70c
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: lv_cpicker_get_style
const lv_style_t * lv_cpicker_get_style(const lv_obj_t * cpicker, lv_cpicker_style_t type)
{
    LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);

    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);

    switch(type) {
    case LV_CPICKER_STYLE_MAIN:
        return lv_obj_get_style(cpicker);
    case LV_CPICKER_STYLE_INDICATOR:
        return ext->indic.style;
    default:
        return NULL;
    }

    /*To avoid warning*/
    return NULL;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xa7a0
movq %rbx, %rdi
callq 0x6747
cmpb $0x1, %bpl
je 0xa7b1
movzbl %bpl, %eax
testl %eax, %eax
jne 0xa7b7
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x3099d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xa7af
movq 0x8(%rax), %rax
jmp 0xa7b9
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: angle_to_mode_color
static lv_color_t angle_to_mode_color(lv_obj_t * cpicker, uint16_t angle)
{
    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    lv_color_t color;
    switch(ext->color_mode)
    {
    default:
    case LV_CPICKER_COLOR_MODE_HUE:
        color = lv_color_hsv_to_rgb(angle % 360, ext->hsv.s, ext->hsv.v);
        break;
    case LV_CPICKER_COLOR_MODE_SATURATION:
        color = lv_color_hsv_to_rgb(ext->hsv.h, ((angle % 360) * 100) / 360, ext->hsv.v);
        break;
    case LV_CPICKER_COLOR_MODE_VALUE:
        color = lv_color_hsv_to_rgb(ext->hsv.h, ext->hsv.s, ((angle % 360) * 100) / 360);
        break;
    }
    return color;
}

// Assembly:
pushq %rbx
movl %esi, %ebx
callq 0x6747
movq %rax, %rcx
movzbl 0x24(%rax), %eax
andl $0x3, %eax
leaq 0x30962(%rip), %rdx     # 0x3b250
movslq (%rdx,%rax,4), %rax
addq %rdx, %rax
jmpq *%rax
movw $0x168, %si             # imm = 0x168
movl %ebx, %eax
xorl %edx, %edx
divw %si
movzbl 0x2(%rcx), %esi
movzbl 0x3(%rcx), %eax
movzwl %dx, %edi
movl %eax, %edx
jmp 0xa94d
movzwl (%rcx), %edi
movw $0x168, %si             # imm = 0x168
movl %ebx, %eax
xorl %edx, %edx
divw %si
imull $0x64, %edx, %eax
xorl %edx, %edx
divw %si
movzbl 0x3(%rcx), %edx
movzwl %ax, %esi
jmp 0xa94d
movzwl (%rcx), %edi
movzbl 0x2(%rcx), %esi
movw $0x168, %cx             # imm = 0x168
movl %ebx, %eax
xorl %edx, %edx
divw %cx
imull $0x64, %edx, %eax
xorl %edx, %edx
divw %cx
movzwl %ax, %edx
popq %rbx
jmp 0x28074
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: get_indic_area
static lv_area_t get_indic_area(lv_obj_t * cpicker)
{
    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
    const lv_style_t * style_indic = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_INDICATOR);

    uint16_t r = 0;
    if(ext->type == LV_CPICKER_TYPE_DISC) r = style_main->line.width / 2;
    else if(ext->type == LV_CPICKER_TYPE_RECT) {
        lv_coord_t h = lv_obj_get_height(cpicker);
        r = h / 2;
    }

    lv_area_t indic_area;
    indic_area.x1 = cpicker->coords.x1 + ext->indic.pos.x - r - style_indic->body.padding.left;
    indic_area.y1 = cpicker->coords.y1 + ext->indic.pos.y - r - style_indic->body.padding.right;
    indic_area.x2 = cpicker->coords.x1 + ext->indic.pos.x + r + style_indic->body.padding.top;
    indic_area.y2 = cpicker->coords.y1 + ext->indic.pos.y + r + style_indic->body.padding.bottom;

    return indic_area;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x6747
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0xa76b
movq %rax, %r12
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0xa76b
movq %rax, %rbx
testb $0x8, 0x24(%r15)
jne 0xa992
movq %r14, %rdi
callq 0x5332
jmp 0xa998
movzwl 0x3e(%r12), %eax
cwtd
movw $0x2, %cx
idivw %cx
movzwl 0x20(%r14), %edx
movzwl 0x10(%r15), %ecx
addl %edx, %ecx
movzwl %ax, %esi
movzwl 0x1a(%rbx), %edi
addl %esi, %edi
movzwl 0x22(%r14), %r8d
movzwl 0x12(%r15), %edx
addl %r8d, %edx
movzwl 0x1c(%rbx), %r8d
addl %esi, %r8d
leal (%rax,%rcx), %esi
subl %edi, %ecx
addw 0x16(%rbx), %si
addl %edx, %eax
subl %r8d, %edx
addw 0x18(%rbx), %ax
movzwl %ax, %eax
shlq $0x30, %rax
movzwl %si, %esi
shlq $0x20, %rsi
orq %rax, %rsi
shll $0x10, %edx
orq %rsi, %rdx
movzwl %cx, %eax
orq %rdx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_cpicker.c
// Function: next_color_mode
static void next_color_mode(lv_obj_t * cpicker)
{
    lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
    ext->color_mode = (ext->color_mode + 1) % 3;
    refr_indic_pos(cpicker);
    lv_obj_invalidate(cpicker);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x6747
movb 0x24(%rax), %cl
movl %ecx, %edx
andb $0x3, %dl
cmpb $0x2, %dl
movl $0xfe, %esi
pushq $0x1
popq %rdi
cmovael %esi, %edi
andb $-0x4, %cl
addb %dl, %cl
addb %dil, %cl
movb %cl, 0x24(%rax)
movq %rbx, %rdi
callq 0xa22b
movq %rbx, %rdi
popq %rbx
jmp 0x493a
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_scrl_signal
static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_scrl_signal(scrl, sign, param);
    if(res != LV_RES_OK) return res;

    lv_obj_t * ddlist = lv_obj_get_parent(scrl);

    if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        /*TODO review this*/
        /* Because of the wider selected rectangle ext. size
         * In this way by dragging the scrollable part the wider rectangle area can be redrawn too*/
        const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
        lv_coord_t hpad          = LV_MATH_MAX(style->body.padding.left, style->body.padding.right);
        if(scrl->ext_draw_pad < hpad) scrl->ext_draw_pad = hpad;
    } else if(sign == LV_SIGNAL_RELEASED) {
        if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
            release_handler(ddlist);
        }
    } else if(sign == LV_SIGNAL_CLEANUP) {
        lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
        ext->label            = NULL; /*The label is already deleted*/
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %r14
callq *0x53373(%rip)          # 0x5e2d8
movl %eax, %ebx
cmpb $0x1, %al
jne 0xafd7
movq %r14, %rdi
callq 0x47bc
movq %rax, %r15
testb %bpl, %bpl
je 0xafca
movzbl %bpl, %eax
cmpl $0xb, %eax
je 0xafaf
cmpl $0x6, %eax
jne 0xafd7
movq %r15, %rdi
xorl %esi, %esi
callq 0xb4ce
movzwl 0x1a(%rax), %ecx
movzwl 0x1c(%rax), %eax
cmpw %ax, %cx
cmovgl %ecx, %eax
cmpw %ax, 0x5c(%r14)
jge 0xafd7
movw %ax, 0x5c(%r14)
jmp 0xafd7
callq 0x35b3
movq %rax, %rdi
callq 0x3691
testb %al, %al
jne 0xafd7
movq %r15, %rdi
callq 0xbc1a
jmp 0xafd7
movq %r15, %rdi
callq 0x6747
andq $0x0, 0x50(%rax)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_options
void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
    LV_ASSERT_STR(options);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Count the '\n'-s to determine the number of options*/
    ext->option_cnt = 0;
    uint16_t i;
    for(i = 0; options[i] != '\0'; i++) {
        if(options[i] == '\n') ext->option_cnt++;
    }
    ext->option_cnt++; /*Last option has no `\n`*/
    ext->sel_opt_id     = 0;
    ext->sel_opt_id_ori = 0;

    lv_label_set_text(ext->label, options);

    lv_ddlist_refr_width(ddlist);

    lv_label_align_t align = lv_label_get_align(ext->label);
    switch(align) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb3c8
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0xb3d9
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
andw $0x0, 0x60(%rax)
xorl %eax, %eax
xorl %ecx, %ecx
movzwl %cx, %edx
movzbl (%r14,%rdx), %edx
cmpl $0xa, %edx
je 0xb3bd
testl %edx, %edx
jne 0xb3c4
jmp 0xb3ea
incl %eax
movw %ax, 0x60(%r15)
incl %ecx
jmp 0xb3aa
leaq 0x2fd75(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb3d7
leaq 0x2fd64(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xb3e8
incl %eax
movw %ax, 0x60(%r15)
andl $0x0, 0x62(%r15)
movq 0x50(%r15), %rdi
movq %r14, %rsi
callq 0x18a9a
movq %rbx, %rdi
callq 0xb532
movq 0x50(%r15), %rdi
callq 0x18d7f
cmpb $0x2, %al
ja 0xb436
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%r15), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5424
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
popq %r14
popq %r15
jmp 0xb5f7
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_style
void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    switch(type) {
        case LV_DDLIST_STYLE_BG:
            lv_page_set_style(ddlist, LV_PAGE_STYLE_BG, style);
            lv_ddlist_refr_width(ddlist);
            break;
        case LV_DDLIST_STYLE_SB: lv_page_set_style(ddlist, LV_PAGE_STYLE_SB, style); break;
        case LV_DDLIST_STYLE_SEL:
            ext->sel_style  = style;
            lv_obj_t * scrl = lv_page_get_scrl(ddlist);
            lv_obj_refresh_ext_draw_pad(scrl); /*Because of the wider selected rectangle*/
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb48e
movq %rbx, %rdi
callq 0x6747
cmpb $0x2, %bpl
je 0xb4b7
movzbl %bpl, %ecx
cmpl $0x1, %ecx
je 0xb49f
testl %ecx, %ecx
jne 0xb4c9
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x24089
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xb532
leaq 0x2fcaf(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb49d
movq %r14, 0x58(%rax)
movq %rbx, %rdi
callq 0x245d9
movq %rax, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x617f
pushq $0x2
popq %rsi
movq %rbx, %rdi
movq %r14, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x24089
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_get_style
const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_style_t type)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    switch(type) {
        case LV_DDLIST_STYLE_BG: return lv_page_get_style(ddlist, LV_PAGE_STYLE_BG);
        case LV_DDLIST_STYLE_SB: return lv_page_get_style(ddlist, LV_PAGE_STYLE_SB);
        case LV_DDLIST_STYLE_SEL: return ext->sel_style;
        default: return NULL;
    }

    /*To avoid warning*/
    return NULL;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb501
movq %rbx, %rdi
callq 0x6747
cmpb $0x2, %bpl
je 0xb518
movzbl %bpl, %ecx
cmpl $0x1, %ecx
je 0xb512
testl %ecx, %ecx
jne 0xb529
movq %rbx, %rdi
xorl %esi, %esi
jmp 0xb51e
leaq 0x2fc3c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb510
movq 0x58(%rax), %rax
jmp 0xb52b
pushq $0x2
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x24149
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_refr_width
static void lv_ddlist_refr_width(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(ddlist);

    /*Save the current x coordinate because it should be kept after the refrsh*/
    lv_coord_t x;
    if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(ddlist) + lv_obj_get_width(ddlist);
    else x = lv_obj_get_x(ddlist);

    /*Set the TIGHT fit horizontally the set the width to the content*/
    lv_page_set_scrl_fit2(ddlist, LV_FIT_TIGHT, lv_page_get_scrl_fit_bottom(ddlist));

    /*Revert FILL fit to fill the parent with the options area. It allows to RIGHT/CENTER align the text*/
    lv_page_set_scrl_fit2(ddlist, LV_FIT_FILL, lv_page_get_scrl_fit_bottom(ddlist));

    if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(ddlist, x - lv_obj_get_width(ddlist));
    else lv_obj_set_x(ddlist, x);

    switch(lv_label_get_align(ext->label)) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x6747
movq %rax, %rbx
movq %r14, %rdi
callq 0x47b9
movl %eax, %r15d
movq %r14, %rdi
callq 0x48ca
movl %eax, %ebp
cmpb $0x1, %r15b
jne 0xb569
movq %r14, %rdi
callq 0x5308
addl %eax, %ebp
movq %r14, %rdi
callq 0xbe27
movzbl %al, %edx
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0xb34f
movq %r14, %rdi
callq 0xbe27
movzbl %al, %edx
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0xb34f
movq %r14, %rdi
callq 0x47b9
cmpb $0x1, %al
jne 0xb5ab
movq %r14, %rdi
callq 0x5308
subl %eax, %ebp
movswl %bp, %esi
movq %r14, %rdi
callq 0x5192
movq 0x50(%rbx), %rdi
callq 0x18d7f
cmpb $0x2, %al
ja 0xb5ec
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%rbx), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5424
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_selected
void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(ext->sel_opt_id == sel_opt) return;

    ext->sel_opt_id     = sel_opt < ext->option_cnt ? sel_opt : ext->option_cnt - 1;
    ext->sel_opt_id_ori = ext->sel_opt_id;
    /*Move the list to show the current option*/
    if(ext->opened == 0) {
        lv_ddlist_pos_current_option(ddlist);
    } else {
        lv_obj_invalidate(ddlist);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb76f
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x62(%rax)
jne 0xb780
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2f9ce(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb77e
movl 0x60(%rax), %ecx
movl %ecx, %edx
decl %edx
cmpw %bp, %cx
cmovbel %edx, %ebp
movw %bp, 0x62(%rax)
movw %bp, 0x64(%rax)
testb $0x1, 0x66(%rax)
jne 0xb7a6
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xb7b4
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_pos_current_option
static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext          = lv_obj_get_ext_attr(ddlist);
    const lv_style_t * style       = lv_obj_get_style(ddlist);
    const lv_font_t * font         = style->text.font;
    lv_coord_t font_h              = lv_font_get_line_height(font);
    const lv_style_t * label_style = lv_obj_get_style(ext->label);
    lv_obj_t * scrl                = lv_page_get_scrl(ddlist);

    lv_coord_t h = lv_obj_get_height(ddlist);
    lv_coord_t line_y1 =
        ext->sel_opt_id * (font_h + label_style->text.line_space) + ext->label->coords.y1 - scrl->coords.y1;

    lv_obj_set_y(scrl, -line_y1 + (h - font_h) / 2);
    lv_obj_invalidate(ddlist);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x6747
movq %rax, %r15
movq %rbx, %rdi
callq 0x6316
movq 0x28(%rax), %rax
movzbl 0x10(%rax), %ebp
movq 0x50(%r15), %rdi
callq 0x6316
movq %rax, %r12
movq %rbx, %rdi
callq 0x245d9
movq %rax, %r14
movq %rbx, %rdi
callq 0x5332
movzwl %bp, %ecx
movq 0x50(%r15), %rsi
movzwl 0x32(%r12), %edi
addw %cx, %di
imulw 0x62(%r15), %di
cwtl
subl %ecx, %eax
pushq $0x2
popq %rcx
cltd
idivl %ecx
addw 0x22(%rsi), %di
subl %edi, %eax
addw 0x22(%r14), %ax
movswl %ax, %esi
movq %r14, %rdi
callq 0x51d0
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_fix_height
void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(ext->fix_height == h) return;

    ext->fix_height = h;

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb861
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x68(%rax)
jne 0xb872
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2f8dc(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb870
movw %bp, 0x68(%rax)
movq %rbx, %rdi
xorl %esi, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0xb5f7
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_fix_width
void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    if(w == 0) {
        lv_cont_set_fit2(ddlist, LV_FIT_TIGHT, lv_cont_get_fit_bottom(ddlist));
    } else {
        lv_cont_set_fit2(ddlist, LV_FIT_NONE, lv_cont_get_fit_bottom(ddlist));
        lv_obj_set_width(ddlist, w);
    }

    switch(lv_label_get_align(ext->label)) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }

    lv_ddlist_refr_size(ddlist, false);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xb8ca
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movq %rbx, %rdi
callq 0x20dc3
movzbl %al, %edx
testw %bp, %bp
je 0xb8db
movq %rbx, %rdi
xorl %esi, %esi
callq 0xb36a
movswl %bp, %esi
movq %rbx, %rdi
callq 0x53a8
jmp 0xb8e6
leaq 0x2f873(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xb8d9
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0xb36a
movq 0x50(%r14), %rdi
callq 0x18d7f
cmpb $0x2, %al
ja 0xb912
shlb $0x3, %al
movl $0x80007, %edx          # imm = 0x80007
movl %eax, %ecx
shrl %cl, %edx
movq 0x50(%r14), %rdi
movzbl %dl, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5424
movq %rbx, %rdi
xorl %esi, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0xb5f7
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_draw_arrow
void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Set the flag*/
    ext->draw_arrow = en ? 1 : 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xb950
movq %r14, %rdi
callq 0x6747
movb 0x66(%rax), %cl
shlb $0x2, %bl
andb $-0x5, %cl
orb %bl, %cl
movb %cl, 0x66(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2f7ed(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xb95f
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_stay_open
void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    /*Set the flag*/
    ext->stay_open = en ? 1 : 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xb991
movq %r14, %rdi
callq 0x6747
movb 0x66(%rax), %cl
shlb $0x3, %bl
andb $-0x9, %cl
orb %bl, %cl
movb %cl, 0x66(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2f7ac(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xb9a0
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_set_align
void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    lv_label_set_align(ext->label, align);
    switch(align) {
        case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
        case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
        case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xb9f6
movq %r14, %rdi
callq 0x6747
movq %rax, %r14
movq 0x50(%rax), %rdi
movzbl %bl, %ebp
movl %ebp, %esi
callq 0x18d16
cmpb $0x2, %bpl
ja 0xba07
shlb $0x3, %bl
movl $0x80007, %eax          # imm = 0x80007
movl %ebx, %ecx
shrl %cl, %eax
movq 0x50(%r14), %rdi
movzbl %al, %edx
xorl %esi, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
popq %rbx
popq %r14
popq %rbp
jmp 0x5424
leaq 0x2f747(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xba05
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_get_selected_str
void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t buf_size)
{
    LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);

    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    uint16_t i;
    uint16_t line        = 0;
    const char * opt_txt = lv_label_get_text(ext->label);
    size_t txt_len     = strlen(opt_txt);

    for(i = 0; i < txt_len && line != ext->sel_opt_id; i++) {
        if(opt_txt[i] == '\n') line++;
    }

    uint16_t c;
    for(c = 0; opt_txt[i] != '\n' && i < txt_len; c++, i++) {
        if(buf_size && c >= buf_size - 1) {
            LV_LOG_WARN("lv_ddlist_get_selected_str: the buffer was too small")
            break;
        }
        buf[c] = opt_txt[i];
    }

    buf[c] = '\0';
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xbac3
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movq 0x50(%rax), %rdi
callq 0x18db9
movq %rax, %r14
movq %rax, %rdi
callq 0x2070
xorl %edx, %edx
xorl %ecx, %ecx
movzwl %cx, %ecx
cmpq %rcx, %rax
jbe 0xbad4
cmpw 0x62(%r15), %dx
je 0xbad4
xorl %esi, %esi
cmpb $0xa, (%r14,%rcx)
sete %sil
addl %esi, %edx
incl %ecx
jmp 0xbaa3
leaq 0x2f67a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xbad2
movzwl %bp, %edx
decl %edx
xorl %esi, %esi
leal (%rcx,%rsi), %edi
movzwl %di, %edi
movzwl %si, %esi
cmpq %rdi, %rax
jbe 0xbb04
movb (%r14,%rdi), %dil
cmpb $0xa, %dil
je 0xbb04
testw %bp, %bp
je 0xbafc
cmpl %esi, %edx
jbe 0xbb04
movb %dil, (%rbx,%rsi)
incl %esi
jmp 0xbadb
movb $0x0, (%rbx,%rsi)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_open
void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
{
#if LV_USE_ANIMATION == 0
    anim = false;
#endif
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    ext->opened           = 1;
    lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
    lv_ddlist_refr_size(ddlist, anim);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x6747
orb $0x1, 0x66(%rax)
movq %r14, %rdi
callq 0x245d9
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x5ce4
movq %r14, %rdi
movl %ebx, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xb5f7
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_close
void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim)
{
#if LV_USE_ANIMATION == 0
    anim = false;
#endif
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
    ext->opened           = 0;
    lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
    lv_ddlist_refr_size(ddlist, anim);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x6747
andb $-0x2, 0x66(%rax)
movq %r14, %rdi
callq 0x245d9
movq %rax, %rdi
xorl %esi, %esi
callq 0x5ce4
movq %r14, %rdi
movl %ebx, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0xb5f7
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ddlist.c
// Function: lv_ddlist_anim_finish
static void lv_ddlist_anim_finish(lv_obj_t * ddlist)
{
    lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);

    lv_ddlist_pos_current_option(ddlist);
    ext->force_sel = 0; /*Turn off drawing of selection*/
    if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x6747
movq %rax, %r14
movq %rbx, %rdi
callq 0xb7b4
movb 0x66(%r14), %al
movl %eax, %ecx
andb $-0x3, %cl
movb %cl, 0x66(%r14)
testb $0x1, %al
jne 0xbe10
addq $0x8, %rsp
popq %rbx
popq %r14
retq
pushq $0x5
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x23fed
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_signal
static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(kb, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_CLEANUP) {
        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
    } else if(sign == LV_SIGNAL_FOCUS) {
        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
        /*Show the cursor of the new Text area if cursor management is enabled*/
        if(ext->ta && ext->cursor_mng) {
            lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
            lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
        }
    } else if(sign == LV_SIGNAL_DEFOCUS) {
        lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
        /*Show the cursor of the new Text area if cursor management is enabled*/
        if(ext->ta && ext->cursor_mng) {
            lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
            lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
        }
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x522a4(%rip)          # 0x5e2e8
movl %eax, %ebx
cmpb $0x1, %al
jne 0xc0d1
movb $0x1, %bl
cmpb $0x11, %bpl
je 0xc0a4
movzbl %bpl, %eax
cmpl $0x10, %eax
je 0xc07d
cmpl $0x7, %eax
jne 0xc0d1
leaq 0x2f317(%rip), %rsi     # 0x3b382
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r15, %rdi
callq 0x6747
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xc0d1
movq %rax, %r14
testb $0x1, 0x51(%rax)
je 0xc0d1
callq 0x1e6f8
movq 0x48(%r14), %rdi
andb $-0x9, %al
jmp 0xc0c9
movq %r15, %rdi
callq 0x6747
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xc0d1
movq %rax, %r14
testb $0x1, 0x51(%rax)
je 0xc0d1
callq 0x1e6f8
movq 0x48(%r14), %rdi
orb $0x8, %al
movzbl %al, %esi
callq 0x1e2f4
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_set_ta
void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
    if(ta) LV_ASSERT_OBJ(ta, "lv_ta");

    lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
    lv_cursor_type_t cur_type;

    /*Hide the cursor of the old Text area if cursor management is enabled*/
    if(ext->ta && ext->cursor_mng) {
        cur_type = lv_ta_get_cursor_type(ext->ta);
        lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
    }

    ext->ta = ta;

    /*Show the cursor of the new Text area if cursor management is enabled*/
    if(ext->ta && ext->cursor_mng) {
        cur_type = lv_ta_get_cursor_type(ext->ta);
        lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xc4d3
testq %rbx, %rbx
je 0xc48d
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0xc4e4
movq %r14, %rdi
callq 0x6747
movq %rax, %r14
movq 0x48(%rax), %rdi
testq %rdi, %rdi
je 0xc4bb
testb $0x1, 0x51(%r14)
je 0xc4bb
callq 0x1e6f8
movq 0x48(%r14), %rdi
orb $0x8, %al
movzbl %al, %esi
callq 0x1e2f4
movq %rbx, 0x48(%r14)
testq %rbx, %rbx
je 0xc4cb
testb $0x1, 0x51(%r14)
jne 0xc4f5
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2ec6a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xc4e2
leaq 0x2ec59(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xc4f3
movq %rbx, %rdi
callq 0x1e6f8
movq 0x48(%r14), %rdi
andb $-0x9, %al
movzbl %al, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x1e2f4
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_kb.c
// Function: lv_kb_set_mode
void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
{
    LV_ASSERT_OBJ(kb, LV_OBJX_NAME);

    lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
    if(ext->mode == mode) return;

    ext->mode = mode;
    if(mode == LV_KB_MODE_TEXT) {
        lv_btnm_set_map(kb, kb_map_lc);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
    } else if(mode == LV_KB_MODE_NUM) {
        lv_btnm_set_map(kb, kb_map_num);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_num_map);
    } else if(mode == LV_KB_MODE_TEXT_UPPER) {
        lv_btnm_set_map(kb, kb_map_uc);
        lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xc570
movq %rbx, %rdi
callq 0x6747
cmpb %bpl, 0x50(%rax)
je 0xc581
movb %bpl, 0x50(%rax)
cmpb $0x2, %bpl
ja 0xc581
leaq 0x4477d(%rip), %rax     # 0x50cc0
movzbl %bpl, %ecx
movq (%rax,%rcx,8), %rsi
leaq 0x2ef5e(%rip), %rax     # 0x3b4b0
movslq (%rax,%rcx,4), %r14
addq %rax, %r14
movq %rbx, %rdi
callq 0x1fe53
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x203e1
leaq 0x2ebcd(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xc57f
popq %rbx
popq %r14
popq %rbp
retq