LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_gauge.c
// Function: lv_gauge_get_value
int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle)
{
    LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);

    lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
    int16_t min          = lv_gauge_get_min_value(gauge);

    if(needle >= ext->needle_count) return min;

    return ext->values[needle];
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x18287
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movq %r14, %rdi
callq 0x22fd2
cmpb %bl, 0x20(%r15)
jbe 0x18281
movq 0x10(%r15), %rax
movzbl %bl, %ecx
movzwl (%rax,%rcx,2), %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x22eb6(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x18296
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_long_mode
void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

#if LV_USE_ANIMATION
    /*Delete the old animation (if exists)*/
    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_x);
    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_y);
    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
    lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
#endif
    ext->offset.x = 0;
    ext->offset.y = 0;

    if(long_mode == LV_LABEL_LONG_SROLL || long_mode == LV_LABEL_LONG_SROLL_CIRC || long_mode == LV_LABEL_LONG_CROP)
        ext->expand = 1;
    else
        ext->expand = 0;

    /*Restore the character under the dots*/
    if(ext->long_mode == LV_LABEL_LONG_DOT && ext->dot_end != LV_LABEL_DOT_END_INV) {
        lv_label_revert_dots(label);
    }

    ext->long_mode = long_mode;
    lv_label_refr_text(label);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18a89
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
leaq -0x1385d(%rip), %rsi    # 0x5192
movq %rbx, %rdi
callq 0x27715
leaq -0x1382e(%rip), %rsi    # 0x51d0
movq %rbx, %rdi
callq 0x27715
leaq 0xc49(%rip), %rsi       # 0x19656
movq %rbx, %rdi
callq 0x27715
leaq 0xc5b(%rip), %rsi       # 0x19677
movq %rbx, %rdi
callq 0x27715
andl $0x0, 0x12(%r15)
leal -0x3(%r14), %ecx
xorl %eax, %eax
cmpb $0x3, %cl
setb %al
movzwl 0x18(%r15), %ecx
movl %ecx, %edx
andl $0xff7f, %edx           # imm = 0xFF7F
shll $0x7, %eax
orl %edx, %eax
movw %ax, 0x18(%r15)
andl $0x7, %ecx
cmpw $0x2, %cx
jne 0x18a6a
cmpw $-0x1, 0x10(%r15)
je 0x18a6a
movq %rbx, %rdi
callq 0x19698
movzwl 0x18(%r15), %eax
andb $0x7, %r14b
movzbl %r14b, %ecx
andl $-0x8, %eax
orl %ecx, %eax
movw %ax, 0x18(%r15)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x18ee2
leaq 0x226b4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18a98
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_text
void lv_label_set_text(lv_obj_t * label, const char * text)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_obj_invalidate(label);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

    /*If text is NULL then refresh */
    if(text == NULL) {
        lv_label_refr_text(label);
        return;
    }

    LV_ASSERT_STR(text);

    if(ext->text == text) {
        /*If set its own text then reallocate it (maybe its size changed)*/
        ext->text = lv_mem_realloc(ext->text, strlen(ext->text) + 1);
        LV_ASSERT_MEM(ext->text);
        if(ext->text == NULL) return;
    } else {
        /*Allocate space for the new text*/
        size_t len = strlen(text) + 1;
        if(ext->text != NULL && ext->static_txt == 0) {
            lv_mem_free(ext->text);
            ext->text = NULL;
        }

        ext->text = lv_mem_alloc(len);
        LV_ASSERT_MEM(ext->text);
        if(ext->text == NULL) return;

        strcpy(ext->text, text);

        /*Now the text is dynamically allocated*/
        ext->static_txt = 0;
    }

    lv_label_refr_text(label);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18b41
movq %rbx, %rdi
callq 0x493a
movq %rbx, %rdi
callq 0x6747
testq %r14, %r14
je 0x18b8e
movq %rax, %r15
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x18b52
movq (%r15), %r12
cmpq %r14, %r12
je 0x18b63
movq %r14, %rdi
callq 0x2070
movq %rax, %r13
incq %r13
testq %r12, %r12
je 0x18b0c
testb $0x8, 0x18(%r15)
jne 0x18b0c
movq %r12, %rdi
callq 0x27a7a
andq $0x0, (%r15)
movq %r13, %rdi
callq 0x279f9
movq %rax, (%r15)
movq %rax, %rdi
callq 0x7994
movq (%r15), %rsi
testb %al, %al
je 0x18b9f
testq %rsi, %rsi
je 0x18bbb
movq %rsi, %rdi
movq %r14, %rsi
callq 0x2040
andb $-0x9, 0x18(%r15)
jmp 0x18b8e
leaq 0x225fc(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18b50
leaq 0x225eb(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x18b61
movq %r12, %rdi
callq 0x2070
leaq 0x1(%rax), %rsi
movq %r12, %rdi
callq 0x27ad9
movq %rax, (%r15)
movq %rax, %rdi
callq 0x7994
movq (%r15), %rsi
testb %al, %al
je 0x18bad
testq %rsi, %rsi
je 0x18bbb
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x18ee2
leaq 0x2249a(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x18bab
leaq 0x2248c(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x18bb9
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_recolor
void lv_label_set_recolor(lv_obj_t * label, bool en)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->recolor == en) return;

    ext->recolor = en == false ? 0 : 1;

    lv_label_refr_text(label); /*Refresh the text because the potential colo codes in text needs to
                                  be hided or revealed*/
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18c21
movq %rbx, %rdi
callq 0x6747
movzwl 0x18(%rax), %ecx
testb $0x40, %cl
sete %dl
xorb %bpl, %dl
je 0x18c32
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2251c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18c30
movzbl %bpl, %edx
shll $0x6, %edx
andl $-0x41, %ecx
orl %edx, %ecx
movw %cx, 0x18(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x18ee2
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_body_draw
void lv_label_set_body_draw(lv_obj_t * label, bool en)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->body_draw == en) return;

    ext->body_draw = en == false ? 0 : 1;

    lv_obj_refresh_ext_draw_pad(label);

    lv_obj_invalidate(label);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18caf
movq %rbx, %rdi
callq 0x6747
movl 0x18(%rax), %ecx
btl $0x8, %ecx
setae %dl
xorb %bpl, %dl
je 0x18cc0
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2248e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18cbe
movzbl %bpl, %edx
shll $0x8, %edx
andl $0xfffffeff, %ecx       # imm = 0xFFFFFEFF
orl %edx, %ecx
movw %cx, 0x18(%rax)
movq %rbx, %rdi
callq 0x617f
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_label.c
// Function: lv_label_set_align
void lv_label_set_align(lv_obj_t * label, lv_label_align_t align)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->align == align) return;

    ext->align = align;

    lv_obj_invalidate(label); /*Enough to invalidate because alignment is only drawing related
                                 (lv_refr_label_text() not required)*/
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18d4b
movq %rbx, %rdi
callq 0x6747
movzwl 0x18(%rax), %ecx
movl %ecx, %edx
shrl $0x4, %edx
andl $0x3, %edx
movzbl %bpl, %esi
cmpw %si, %dx
jne 0x18d5c
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x223f2(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18d5a
shlb $0x4, %bpl
andb $0x30, %bpl
movzbl %bpl, %edx
andl $-0x31, %ecx
orl %edx, %ecx
movw %cx, 0x18(%rax)
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_label.c
// Function: lv_label_set_static_text
void lv_label_set_static_text(lv_obj_t * label, const char * text)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);
    LV_ASSERT_STR(text);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->static_txt == 0 && ext->text != NULL) {
        lv_mem_free(ext->text);
        ext->text = NULL;
    }

    if(text != NULL) {
        ext->static_txt = 1;
        ext->text       = (char *)text;
    }

    lv_label_refr_text(label);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x18e40
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x18e51
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
testb $0x8, 0x18(%rax)
jne 0x18e26
movq (%r15), %rdi
testq %rdi, %rdi
je 0x18e26
callq 0x27a7a
andq $0x0, (%r15)
testq %r14, %r14
je 0x18e33
orb $0x8, 0x18(%r15)
movq %r14, (%r15)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x18ee2
leaq 0x222fd(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x18e4f
leaq 0x222ec(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x18e60
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_dot_tmp
static bool lv_label_set_dot_tmp(lv_obj_t * label, char * data, uint16_t len)
{
    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    lv_label_dot_tmp_free(label); /* Deallocate any existing space */
    if(len > sizeof(char *)) {
        /* Memory needs to be allocated. Allocates an additional byte
         * for a NULL-terminator so it can be copied. */
        ext->dot.tmp_ptr = lv_mem_alloc(len + 1);
        if(ext->dot.tmp_ptr == NULL) {
            LV_LOG_ERROR("Failed to allocate memory for dot_tmp_ptr");
            return false;
        }
        memcpy(ext->dot.tmp_ptr, data, len);
        ext->dot.tmp_ptr[len] = '\0';
        ext->dot_tmp_alloc    = true;
    } else {
        /* Characters can be directly stored in object */
        ext->dot_tmp_alloc = false;
        memcpy(ext->dot.tmp, data, len);
    }
    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r15
callq 0x6747
movq %rax, %r14
movq %r15, %rdi
callq 0x1a22c
movl %ebp, %r15d
cmpw $0x9, %bp
jb 0x18eba
leaq 0x1(%r15), %rdi
callq 0x279f9
movq %rax, 0x8(%r14)
testq %rax, %rax
je 0x18ede
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x20f0
movq 0x8(%r14), %rax
movb $0x0, (%rax,%r15)
orb $0x2, 0x19(%r14)
jmp 0x18ed1
andb $-0x3, 0x19(%r14)
addq $0x8, %r14
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x20f0
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
jmp 0x18ed3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_text_fmt
void lv_label_set_text_fmt(lv_obj_t * label, const char * fmt, ...)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);
    LV_ASSERT_STR(fmt);

    lv_obj_invalidate(label);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

    /*If text is NULL then refresh */
    if(fmt == NULL) {
        lv_label_refr_text(label);
        return;
    }

    if(ext->text != NULL && ext->static_txt == 0) {
            lv_mem_free(ext->text);
            ext->text = NULL;
    }

    va_list ap, ap2;
    va_start(ap, fmt);
    va_copy(ap2, ap);

    /*Allocate space for the new text by using trick from C99 standard section 7.19.6.12 */
    uint32_t len = lv_vsnprintf(NULL, 0, fmt, ap);

    va_end(ap);
    

    ext->text = lv_mem_alloc(len+1);
    LV_ASSERT_MEM(ext->text);
    if(ext->text == NULL) return;
    ext->text[len-1] = 0; /* Ensure NULL termination */

    lv_vsnprintf(ext->text, len+1, fmt, ap2);

    va_end(ap2);
    ext->static_txt = 0; /*Now the text is dynamically allocated*/

    lv_label_refr_text(label);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf0, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, 0x50(%rsp)
movq %rcx, 0x58(%rsp)
movq %r8, 0x60(%rsp)
movq %r9, 0x68(%rsp)
testb %al, %al
je 0x19448
movaps %xmm0, 0x70(%rsp)
movaps %xmm1, 0x80(%rsp)
movaps %xmm2, 0x90(%rsp)
movaps %xmm3, 0xa0(%rsp)
movaps %xmm4, 0xb0(%rsp)
movaps %xmm5, 0xc0(%rsp)
movaps %xmm6, 0xd0(%rsp)
movaps %xmm7, 0xe0(%rsp)
callq 0x7994
testb %al, %al
je 0x1953e
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x1954f
movq %rbx, %rdi
callq 0x493a
movq %rbx, %rdi
callq 0x6747
testq %r14, %r14
je 0x19560
movq %rax, %r15
movq (%rax), %rdi
testq %rdi, %rdi
je 0x19499
testb $0x8, 0x18(%r15)
jne 0x19499
callq 0x27a7a
andq $0x0, (%r15)
movabsq $0x3000000010, %rax     # imm = 0x3000000010
leaq 0x20(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x120(%rsp), %rax
movq %rax, 0x8(%rcx)
leaq 0x40(%rsp), %rax
movq %rax, 0x10(%rcx)
movq %rax, 0x10(%rsp)
movq (%rcx), %rax
movq %rax, (%rsp)
movq 0x8(%rcx), %rax
movq %rax, 0x8(%rsp)
xorl %edi, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x29aae
movl %eax, %r13d
leal 0x1(%r13), %r12d
movq %r12, %rdi
callq 0x279f9
movq %rax, (%r15)
movq %rax, %rdi
callq 0x7994
movq (%r15), %rsi
testb %al, %al
je 0x19578
testq %rsi, %rsi
je 0x1952d
decl %r13d
movb $0x0, (%rsi,%r13)
movq (%r15), %rdi
movq %rsp, %rcx
movq %r12, %rsi
movq %r14, %rdx
callq 0x29aae
andb $-0x9, 0x18(%r15)
movq %rbx, %rdi
callq 0x18ee2
addq $0xf0, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0x21bff(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1954d
leaq 0x21bee(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1955e
movq %rbx, %rdi
addq $0xf0, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x18ee2
leaq 0x21ac1(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x19584
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_array_text
void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_obj_invalidate(label);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

    /*If trying to set its own text or the array is NULL then refresh */
    if(array == ext->text || array == NULL) {
        lv_label_refr_text(label);
        return;
    }

    /*Allocate space for the new text*/
    if(ext->text != NULL && ext->static_txt == 0) {
        lv_mem_free(ext->text);
        ext->text = NULL;
    }
    ext->text = lv_mem_alloc(size + 1);
    LV_ASSERT_MEM(ext->text);
    if(ext->text == NULL) return;

    memcpy(ext->text, array, size);
    ext->text[size] = '\0';
    ext->static_txt = 0; /*Now the text is dynamically allocated*/

    lv_label_refr_text(label);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1962e
movq %rbx, %rdi
callq 0x493a
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
movq (%rax), %rdi
cmpq %r14, %rdi
sete %al
testq %r14, %r14
sete %cl
orb %al, %cl
jne 0x1961e
testq %rdi, %rdi
je 0x195de
testb $0x8, 0x18(%r15)
jne 0x195de
callq 0x27a7a
andq $0x0, (%r15)
movzwl %bp, %r12d
leaq 0x1(%r12), %rdi
callq 0x279f9
movq %rax, (%r15)
movq %rax, %rdi
callq 0x7994
movq (%r15), %rsi
testb %al, %al
je 0x1963f
testq %rsi, %rsi
je 0x1964d
movq %rsi, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x20f0
movq (%r15), %rax
movb $0x0, (%rax,%r12)
andb $-0x9, 0x18(%r15)
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x18ee2
leaq 0x21b0f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1963d
leaq 0x219fa(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x1964b
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_label.c
// Function: lv_label_revert_dots
static void lv_label_revert_dots(lv_obj_t * label)
{
    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->long_mode != LV_LABEL_LONG_DOT) return;
    if(ext->dot_end == LV_LABEL_DOT_END_INV) return;
    uint32_t letter_i = ext->dot_end - LV_LABEL_DOT_NUM;
    uint32_t byte_i   = lv_txt_encoded_get_byte_id(ext->text, letter_i);

    /*Restore the characters*/
    uint8_t i      = 0;
    char * dot_tmp = lv_label_get_dot_tmp(label);
    while(ext->text[byte_i + i] != '\0') {
        ext->text[byte_i + i] = dot_tmp[i];
        i++;
    }
    ext->text[byte_i + i] = dot_tmp[i];
    lv_label_dot_tmp_free(label);

    ext->dot_end = LV_LABEL_DOT_END_INV;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x6747
movq %rax, %r14
movzwl 0x18(%rax), %eax
andl $0x7, %eax
cmpw $0x2, %ax
jne 0x19715
movzwl 0x10(%r14), %esi
cmpl $0xffff, %esi           # imm = 0xFFFF
je 0x19715
addl $-0x3, %esi
leaq 0x37f74(%rip), %rax     # 0x51640
movq (%r14), %rdi
callq *(%rax)
movl %eax, %r15d
movq %rbx, %rdi
callq 0x6747
leaq 0x8(%rax), %rcx
testb $0x2, 0x19(%rax)
je 0x196e9
movq (%rcx), %rcx
xorl %eax, %eax
movq (%r14), %rdx
movzbl %al, %esi
leal (%r15,%rsi), %edi
cmpb $0x0, (%rdx,%rdi)
movb (%rcx,%rsi), %sil
movb %sil, (%rdx,%rdi)
je 0x19707
incb %al
jmp 0x196eb
movq %rbx, %rdi
callq 0x1a22c
orw $-0x1, 0x10(%r14)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_set_anim_speed
void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->anim_speed == anim_speed) return;

    ext->anim_speed = anim_speed;

    if(ext->long_mode == LV_LABEL_LONG_SROLL || ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
        lv_label_refr_text(label);
    }
#else
    (void)label;      /*Unused*/
    (void)anim_speed; /*Unused*/
#endif
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1975c
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x16(%rax)
je 0x1976d
movw %bp, 0x16(%rax)
movzwl 0x18(%rax), %eax
andl $0x7, %eax
addl $-0x3, %eax
cmpw $0x1, %ax
ja 0x1976d
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x18ee2
leaq 0x219e1(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1976b
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_get_anim_speed
uint16_t lv_label_get_anim_speed(const lv_obj_t * label)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    return ext->anim_speed;
#else
    (void)label;      /*Unused*/
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x197cf
movq %rbx, %rdi
callq 0x6747
movzwl 0x16(%rax), %eax
popq %rbx
retq
leaq 0x2196e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x197de
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_ins_text
void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);
    LV_ASSERT_STR(txt);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

    /*Can not append to static text*/
    if(ext->static_txt != 0) return;

    lv_obj_invalidate(label);

    /*Allocate space for the new text*/
    size_t old_len = strlen(ext->text);
    size_t ins_len = strlen(txt);
    size_t new_len = ins_len + old_len;
    ext->text        = lv_mem_realloc(ext->text, new_len + 1);
    LV_ASSERT_MEM(ext->text);
    if(ext->text == NULL) return;

    if(pos == LV_LABEL_POS_LAST) {
        pos = lv_txt_get_encoded_length(ext->text);
    }

    lv_txt_ins(ext->text, pos, txt);
    lv_label_refr_text(label);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1a18b
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x1a19c
movq %rbx, %rdi
callq 0x6747
testb $0x8, 0x18(%rax)
jne 0x1a1ad
movq %rax, %r15
movq %rbx, %rdi
callq 0x493a
movq (%r15), %r12
movq %r12, %rdi
callq 0x2070
movq %rax, %r13
movq %r14, %rdi
callq 0x2070
leaq (%rax,%r13), %rsi
incq %rsi
movq %r12, %rdi
callq 0x27ad9
movq %rax, (%r15)
movq %rax, %rdi
callq 0x7994
movq (%r15), %rsi
testb %al, %al
je 0x1a1bc
testq %rsi, %rsi
je 0x1a1ad
cmpl $0xffff, %ebp           # imm = 0xFFFF
jne 0x1a168
leaq 0x374f2(%rip), %rax     # 0x51650
movq %rsi, %rdi
callq *(%rax)
movl %eax, %ebp
movq (%r15), %rsi
movq %rsi, %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x28cce
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x18ee2
leaq 0x20fb2(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1a19a
leaq 0x20fa1(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1a1ab
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x20e7d(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x1a1c8
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_cut_text
void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt)
{
    LV_ASSERT_OBJ(label, LV_OBJX_NAME);

    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);

    /*Can not append to static text*/
    if(ext->static_txt != 0) return;

    lv_obj_invalidate(label);

    char * label_txt = lv_label_get_text(label);
    /*Delete the characters*/
    lv_txt_cut(label_txt, pos, cnt);

    /*Refresh the label*/
    lv_label_refr_text(label);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1a216
movq %rbx, %rdi
callq 0x6747
testb $0x8, 0x18(%rax)
jne 0x1a227
movq %rbx, %rdi
callq 0x493a
movq %rbx, %rdi
callq 0x18db9
movq %rax, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0x28d35
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x18ee2
leaq 0x20f27(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1a225
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_label.c
// Function: lv_label_dot_tmp_free
static void lv_label_dot_tmp_free(lv_obj_t * label)
{
    lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
    if(ext->dot_tmp_alloc && ext->dot.tmp_ptr) {
        lv_mem_free(ext->dot.tmp_ptr);
    }
    ext->dot_tmp_alloc = false;
    ext->dot.tmp_ptr   = NULL;
}

// Assembly:
pushq %rbx
callq 0x6747
movq %rax, %rbx
movl 0x18(%rax), %eax
btl $0x9, %eax
jae 0x1a250
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x1a250
callq 0x27a7a
movzwl 0x18(%rbx), %eax
andl $0xfdff, %eax           # imm = 0xFDFF
movw %ax, 0x18(%rbx)
andq $0x0, 0x8(%rbx)
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_next_btn
lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    /* Not a good practice but user can add/create objects to the lists manually.
     * When getting the next button try to be sure that it is at least a button */

    lv_obj_t * btn;
    lv_obj_t * scrl = lv_page_get_scrl(list);

    btn = lv_obj_get_child_back(scrl, prev_btn);
    if(btn == NULL) return NULL;

    while(lv_list_is_list_btn(btn) == false) {
        btn = lv_obj_get_child_back(scrl, btn);
        if(btn == NULL) break;
    }

    return btn;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1a909
movq %r14, %rdi
callq 0x245d9
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x61b6
testq %rax, %rax
je 0x1a8fc
movq %rax, %rbx
movq %rbx, %rdi
callq 0x1b1c5
testb %al, %al
jne 0x1a8fe
movq %r14, %rdi
movq %rbx, %rsi
callq 0x61b6
movq %rax, %rbx
testq %rax, %rax
jne 0x1a8dd
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x20834(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1a918
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_btn_img
lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn)
{
    LV_ASSERT_OBJ(btn, "lv_btn");

#if LV_USE_IMG != 0
    lv_obj_t * img = lv_obj_get_child(btn, NULL);
    if(img == NULL) return NULL;

    while(lv_list_is_list_img(img) == false) {
        img = lv_obj_get_child(btn, img);
        if(img == NULL) break;
    }

    return img;
#else
    return NULL;
#endif
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1a9a7
xorl %r14d, %r14d
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4e4d
testq %rax, %rax
je 0x1a996
movq %rsp, %r15
leaq 0x20ecd(%rip), %r12     # 0x3b81c
movq %rax, %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x676b
xorl %r13d, %r13d
cmpq $0x8, %r13
je 0x1a980
movq (%rsp,%r13,8), %rdi
testq %rdi, %rdi
je 0x1a980
movq %r12, %rsi
callq 0x20e0
incq %r13
testl %eax, %eax
jne 0x1a960
jmp 0x1a996
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4e4d
movq %rax, %r14
testq %rax, %rax
jne 0x1a952
xorl %r14d, %r14d
movq %r14, %rax
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0x20796(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1a9b6
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_btn_text
const char * lv_list_get_btn_text(const lv_obj_t * btn)
{
    LV_ASSERT_OBJ(btn, "lv_btn");

    lv_obj_t * label = lv_list_get_btn_label(btn);
    if(label == NULL) return "";
    return lv_label_get_text(label);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1abe1
movq %rbx, %rdi
callq 0x1b127
testq %rax, %rax
je 0x1abf2
movq %rax, %rdi
popq %rbx
jmp 0x18db9
leaq 0x2055c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1abf0
leaq 0x2484c(%rip), %rax     # 0x3f445
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_clean
void lv_list_clean(lv_obj_t * list)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    lv_obj_t * scrl = lv_page_get_scrl(list);
    lv_obj_clean(scrl);
    lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
    ext->size           = 0;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1ac2a
movq %rbx, %rdi
callq 0x245d9
movq %rax, %rdi
callq 0x4df8
movq %rbx, %rdi
callq 0x6747
andw $0x0, 0x80(%rax)
popq %rbx
retq
leaq 0x20513(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1ac39
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_set_btn_selected
void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);
    if(btn) LV_ASSERT_OBJ(list, "lv_btn");

    lv_list_ext_t * ext = lv_obj_get_ext_attr(list);

    if(ext->selected_btn) {
        lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
        if(s == LV_BTN_STATE_PR)
            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_REL);
        else if(s == LV_BTN_STATE_TGL_PR)
            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_REL);
    }

    ext->selected_btn = btn;

    /*Don't forget which button was selected.
     * It will be restored when the list is focused.*/
    if(btn != NULL) {
        ext->last_sel = btn;
    }

    if(ext->selected_btn) {
        lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
        if(s == LV_BTN_STATE_REL)
            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_PR);
        else if(s == LV_BTN_STATE_TGL_REL)
            lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_PR);

        lv_page_focus(list, ext->selected_btn, LV_ANIM_ON);
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r15
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1ae66
testq %r15, %r15
je 0x1ae3a
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x1ae77
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movq 0x90(%rax), %rdi
testq %rdi, %rdi
je 0x1ae99
callq 0x1289a
cmpb $0x1, %al
je 0x1ae88
movzbl %al, %eax
cmpl $0x3, %eax
jne 0x1ae99
movb $0x2, %al
jmp 0x1ae8a
leaq 0x202d7(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1ae75
leaq 0x202c6(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1ae86
xorl %eax, %eax
movq 0x90(%r14), %rdi
movzbl %al, %esi
callq 0x1278e
movq %r15, 0x90(%r14)
testq %r15, %r15
je 0x1aec4
movq %r15, 0x88(%r14)
movq %r15, %rdi
callq 0x1289a
testb %al, %al
je 0x1aeca
movzbl %al, %eax
cmpl $0x2, %eax
jne 0x1aedb
movb $0x3, %al
jmp 0x1aecc
popq %rbx
popq %r14
popq %r15
retq
movb $0x1, %al
movq 0x90(%r14), %rdi
movzbl %al, %esi
callq 0x1278e
movq 0x90(%r14), %rsi
pushq $0x1
popq %rdx
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x248fe
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_remove
bool lv_list_remove(const lv_obj_t * list, uint16_t index)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
    if(index >= ext->size) return false;
    uint16_t count = 0;
    lv_obj_t * e   = lv_list_get_next_btn(list, NULL);
    while(e != NULL) {
        if(count == index) {
            lv_obj_del(e);
            ext->size--;
            return true;
        }
        e = lv_list_get_next_btn(list, e);
        count++;
    }
    return false;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1af35
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x80(%rax)
jbe 0x1af46
movq %rax, %r14
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1a8ac
testq %rax, %rax
je 0x1af46
subw $0x1, %bp
jb 0x1af4a
movq %rbx, %rdi
movq %rax, %rsi
jmp 0x1af1d
leaq 0x20208(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1af44
xorl %eax, %eax
jmp 0x1af5c
movq %rax, %rdi
callq 0x4a42
decw 0x80(%r14)
movb $0x1, %al
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_prev_btn
lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    /* Not a good practice but user can add/create objects to the lists manually.
     * When getting the next button try to be sure that it is at least a button */

    lv_obj_t * btn;
    lv_obj_t * scrl = lv_page_get_scrl(list);

    btn = lv_obj_get_child(scrl, prev_btn);
    if(btn == NULL) return NULL;

    while(lv_list_is_list_btn(btn) == false) {
        btn = lv_obj_get_child(scrl, btn);
        if(btn == NULL) break;
    }

    return btn;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1b002
movq %r14, %rdi
callq 0x245d9
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4e4d
testq %rax, %rax
je 0x1aff5
movq %rax, %rbx
movq %rbx, %rdi
callq 0x1b1c5
testb %al, %al
jne 0x1aff7
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4e4d
movq %rax, %rbx
testq %rax, %rax
jne 0x1afd6
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2013b(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1b011
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_set_layout
void lv_list_set_layout(lv_obj_t * list, lv_layout_t layout)
 {
     LV_ASSERT_OBJ(list, LV_OBJX_NAME);

	/* Update list layout if necessary */
	if (layout == lv_list_get_layout(list)) return;

    /* Get the first button on the list */
    lv_obj_t * btn = lv_list_get_prev_btn(list, NULL);

    /* Visit all buttons on the list and update their layout  */
    while(btn != NULL) {
        /*If a column layout set the buttons' width to list width*/
        if(layout == LV_LAYOUT_COL_M || layout == LV_LAYOUT_COL_L || layout == LV_LAYOUT_COL_R) {
            lv_btn_set_fit2(list, LV_FIT_FLOOD, LV_FIT_TIGHT);
        }
        /*If a row layout set the buttons' width according to the content*/
        else if (layout == LV_LAYOUT_ROW_M || layout == LV_LAYOUT_ROW_T || layout == LV_LAYOUT_ROW_B) {
            lv_btn_set_fit(list, LV_FIT_TIGHT);
        }

        btn = lv_list_get_prev_btn(list, btn);
    }

    lv_page_set_scrl_layout(list, layout);
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1b049
movq %rbx, %rdi
callq 0x1b0c8
cmpb %r14b, %al
jne 0x1b05a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x200f4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b058
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1afa5
movq %rax, %r15
leal -0x2(%r14), %r12d
leal -0x5(%r14), %r13d
pushq $0x1
popq %rbp
testq %r15, %r15
je 0x1b0ae
cmpb $0x2, %r12b
ja 0x1b087
movq %rbx, %rdi
callq 0x1b5c2
jmp 0x1b09e
cmpb $0x2, %r13b
ja 0x1b09e
movq %rbx, %rdi
movl %ebp, %esi
movl %ebp, %edx
movl %ebp, %ecx
movl %ebp, %r8d
callq 0x20c30
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1afa5
movq %rax, %r15
jmp 0x1b072
movzbl %r14b, %esi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1a7ce
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_btn_label
lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn)
{
    LV_ASSERT_OBJ(btn, "lv_btn");

    lv_obj_t * label = lv_obj_get_child(btn, NULL);
    if(label == NULL) return NULL;

    while(lv_list_is_list_label(label) == false) {
        label = lv_obj_get_child(btn, label);
        if(label == NULL) break;
    }

    return label;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1b1b4
xorl %r14d, %r14d
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4e4d
testq %rax, %rax
je 0x1b1a3
movq %rsp, %r15
leaq 0x20619(%rip), %r12     # 0x3b775
movq %rax, %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x676b
xorl %r13d, %r13d
cmpq $0x8, %r13
je 0x1b18d
movq (%rsp,%r13,8), %rdi
testq %rdi, %rdi
je 0x1b18d
movq %r12, %rsi
callq 0x20e0
incq %r13
testl %eax, %eax
jne 0x1b16d
jmp 0x1b1a3
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4e4d
movq %rax, %r14
testq %rax, %rax
jne 0x1b15f
xorl %r14d, %r14d
movq %r14, %rax
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0x1ff89(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b1c3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_is_list_btn
static bool lv_list_is_list_btn(lv_obj_t * list_btn)
{
    lv_obj_type_t type;

    lv_obj_get_type(list_btn, &type);
    uint8_t cnt;
    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
        if(type.type[cnt] == NULL) break;
        if(!strcmp(type.type[cnt], "lv_btn")) return true;
    }
    return false;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x48, %rsp
leaq 0x8(%rsp), %rsi
callq 0x676b
xorl %r14d, %r14d
leaq 0x20454(%rip), %rbx     # 0x3b634
cmpq $0x8, %r14
je 0x1b203
movq 0x8(%rsp,%r14,8), %rdi
testq %rdi, %rdi
je 0x1b203
movq %rbx, %rsi
callq 0x20e0
incq %r14
testl %eax, %eax
jne 0x1b1e0
movb $0x1, %al
jmp 0x1b205
xorl %eax, %eax
addq $0x48, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_get_btn_index
int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);
    LV_ASSERT_OBJ(btn, "lv_btn");

    int index = 0;
    if(list == NULL) {
        /* no list provided, assuming btn is part of a list */
        list = lv_obj_get_parent(lv_obj_get_parent(btn));
    }
    lv_obj_t * e = lv_list_get_next_btn(list, NULL);
    while(e != NULL) {
        if(e == btn) {
            return index;
        }
        index++;
        e = lv_list_get_next_btn(list, e);
    }
    return -1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1b271
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x1b282
testq %r14, %r14
jne 0x1b247
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rdi
callq 0x47bc
movq %rax, %r14
xorl %r15d, %r15d
movq %r14, %rdi
xorl %esi, %esi
callq 0x1a8ac
pushq $-0x1
popq %rbp
testq %rax, %rax
je 0x1b296
cmpq %rbx, %rax
je 0x1b293
incl %r15d
movq %r14, %rdi
movq %rax, %rsi
callq 0x1a8ac
jmp 0x1b257
leaq 0x1fecc(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1b280
leaq 0x1febb(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b291
movl %r15d, %ebp
movl %ebp, %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_list.c
// Function: lv_list_get_style
const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_list_ext_t * ext      = lv_obj_get_ext_attr(list);

    switch(type) {
        case LV_LIST_STYLE_BG: style = lv_page_get_style(list, LV_PAGE_STYLE_BG); break;
        case LV_LIST_STYLE_SCRL: style = lv_page_get_style(list, LV_PAGE_STYLE_SCRL); break;
        case LV_LIST_STYLE_SB: style = lv_page_get_style(list, LV_PAGE_STYLE_SB); break;
        case LV_LIST_STYLE_EDGE_FLASH: style = lv_page_get_style(list, LV_PAGE_STYLE_EDGE_FLASH); break;
        case LV_LIST_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; break;
        case LV_LIST_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; break;
        case LV_LIST_STYLE_BTN_TGL_REL: style = ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
        case LV_LIST_STYLE_BTN_TGL_PR: style = ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
        case LV_LIST_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_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 0x1b33b
movq %rbx, %rdi
callq 0x6747
cmpb $0x8, %bpl
ja 0x1b383
movzbl %bpl, %ecx
leaq 0x204c5(%rip), %rdx     # 0x3b7f0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x1b366
leaq 0x1fe02(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b34a
movq 0x50(%rax), %rax
jmp 0x1b385
pushq $0x2
jmp 0x1b362
pushq $0x3
jmp 0x1b362
movq 0x68(%rax), %rax
jmp 0x1b385
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x24149
movq 0x58(%rax), %rax
jmp 0x1b385
movq 0x60(%rax), %rax
jmp 0x1b385
movq 0x70(%rax), %rax
jmp 0x1b385
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_list.c
// Function: lv_list_up
void lv_list_up(const lv_obj_t * list)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    /*Search the first list element which 'y' coordinate is below the parent
     * and position the list to show this element on the bottom*/
    lv_obj_t * scrl = lv_page_get_scrl(list);
    lv_obj_t * e;
    lv_obj_t * e_prev = NULL;

    e                 = lv_list_get_prev_btn(list, NULL);
    while(e != NULL) {
        if(e->coords.y2 <= list->coords.y2) {
            if(e_prev != NULL) {
                lv_coord_t new_y = lv_obj_get_height(list) - (lv_obj_get_y(e_prev) + lv_obj_get_height(e_prev));
                if(lv_list_get_anim_time(list) == 0) {
                    lv_obj_set_y(scrl, new_y);
                } else {
#if LV_USE_ANIMATION
                    lv_anim_t a;
                    a.var            = scrl;
                    a.start          = lv_obj_get_y(scrl);
                    a.end            = new_y;
                    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
                    a.path_cb        = lv_anim_path_linear;
                    a.ready_cb       = NULL;
                    a.act_time       = 0;
                    a.time           = LV_LIST_DEF_ANIM_TIME;
                    a.playback       = 0;
                    a.playback_pause = 0;
                    a.repeat         = 0;
                    a.repeat_pause   = 0;
                    lv_anim_create(&a);
#endif
                }
            }
            break;
        }
        e_prev = e;
        e      = lv_list_get_prev_btn(list, e);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1b3e4
movq %rbx, %rdi
callq 0x245d9
movq %rax, %r14
xorl %r15d, %r15d
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1afa5
movq %rax, %r12
testq %rax, %rax
je 0x1b472
movzwl 0x26(%r12), %eax
cmpw 0x26(%rbx), %ax
jle 0x1b3f5
movq %rbx, %rdi
movq %r12, %rsi
callq 0x1afa5
movq %r12, %r15
jmp 0x1b3bc
leaq 0x1fd59(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b3f3
testq %r15, %r15
je 0x1b472
movq %rbx, %rdi
callq 0x5332
movl %eax, %ebp
movq %r15, %rdi
callq 0x4902
movl %eax, %r12d
movq %r15, %rdi
callq 0x5332
addl %r12d, %eax
subl %eax, %ebp
movq %rbx, %rdi
callq 0x246b8
testw %ax, %ax
je 0x1b47f
leaq 0x8(%rsp), %rbx
movq %r14, (%rbx)
movq %r14, %rdi
callq 0x4902
cwtl
movl %eax, 0x20(%rbx)
movswl %bp, %eax
movl %eax, 0x24(%rbx)
leaq -0x1627a(%rip), %rax    # 0x51d0
movq %rax, 0x8(%rbx)
leaq 0xc204(%rip), %rax      # 0x27659
movq %rax, 0x10(%rbx)
andq $0x0, 0x18(%rbx)
movq $0x64, 0x28(%rbx)
movb $0x0, 0x30(%rbx)
movq %rbx, %rdi
callq 0x27685
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movswl %bp, %esi
movq %r14, %rdi
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x51d0
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_down
void lv_list_down(const lv_obj_t * list)
{
    LV_ASSERT_OBJ(list, LV_OBJX_NAME);

    /*Search the first list element which 'y' coordinate is above the parent
     * and position the list to show this element on the top*/
    lv_obj_t * scrl = lv_page_get_scrl(list);
    lv_obj_t * e;
    e = lv_list_get_prev_btn(list, NULL);
    while(e != NULL) {
        if(e->coords.y1 < list->coords.y1) {
            lv_coord_t new_y = -lv_obj_get_y(e);
            if(lv_list_get_anim_time(list) == 0) {
                lv_obj_set_y(scrl, new_y);
            } else {
#if LV_USE_ANIMATION
                lv_anim_t a;
                a.var            = scrl;
                a.start          = lv_obj_get_y(scrl);
                a.end            = new_y;
                a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
                a.path_cb        = lv_anim_path_linear;
                a.ready_cb       = NULL;
                a.act_time       = 0;
                a.time           = LV_LIST_DEF_ANIM_TIME;
                a.playback       = 0;
                a.playback_pause = 0;
                a.repeat         = 0;
                a.repeat_pause   = 0;
                lv_anim_create(&a);
#endif
            }
            break;
        }
        e = lv_list_get_prev_btn(list, e);
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1b4da
movq %rbx, %rdi
callq 0x245d9
movq %rax, %r14
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1afa5
testq %rax, %rax
je 0x1b54d
movzwl 0x22(%rax), %ecx
cmpw 0x22(%rbx), %cx
jl 0x1b4eb
movq %rbx, %rdi
movq %rax, %rsi
jmp 0x1b4ba
leaq 0x1fc63(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b4e9
movq %rax, %rdi
callq 0x4902
movl %eax, %ebp
negl %ebp
movq %rbx, %rdi
callq 0x246b8
testw %ax, %ax
je 0x1b556
leaq 0x8(%rsp), %rbx
movq %r14, (%rbx)
movq %r14, %rdi
callq 0x4902
cwtl
movl %eax, 0x20(%rbx)
movswl %bp, %eax
movl %eax, 0x24(%rbx)
leaq -0x16355(%rip), %rax    # 0x51d0
movq %rax, 0x8(%rbx)
leaq 0xc129(%rip), %rax      # 0x27659
movq %rax, 0x10(%rbx)
andq $0x0, 0x18(%rbx)
movq $0x64, 0x28(%rbx)
movb $0x0, 0x30(%rbx)
movq %rbx, %rdi
callq 0x27685
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movswl %bp, %esi
movq %r14, %rdi
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x51d0
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_list.c
// Function: lv_list_focus
void lv_list_focus(const lv_obj_t * btn, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(btn, "");

#if LV_USE_ANIMATION == 0
    anim = false;
#endif

    lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));

    lv_page_focus(list, btn, anim == LV_ANIM_OFF ? 0 : lv_list_get_anim_time(list));
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1b59d
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rdi
callq 0x47bc
movq %rax, %r14
testb %bpl, %bpl
je 0x1b5ae
movq %r14, %rdi
callq 0x246b8
jmp 0x1b5b0
leaq 0x1fba0(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1b5ac
xorl %eax, %eax
movzbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x248fe
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_slider.c
// Function: lv_slider_set_style
void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);

    lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);

    switch(type) {
        case LV_SLIDER_STYLE_BG: lv_bar_set_style(slider, LV_BAR_STYLE_BG, style); break;
        case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(slider, LV_BAR_STYLE_INDIC, style); break;
        case LV_SLIDER_STYLE_KNOB:
            ext->style_knob = style;
            lv_obj_refresh_ext_draw_pad(slider);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1c176
movq %r14, %rdi
callq 0x6747
cmpb $0x2, %bpl
je 0x1c199
movzbl %bpl, %eax
cmpl $0x1, %eax
je 0x1c187
testl %eax, %eax
jne 0x1c1a9
movq %r14, %rdi
xorl %esi, %esi
jmp 0x1c18d
leaq 0x1efc7(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1c185
pushq $0x1
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x8b13
movq %rbx, 0x18(%rax)
movq %r14, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x617f
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_slider.c
// Function: lv_slider_set_knob_in
void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
{
    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);

    lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
    if(ext->knob_in == in) return;

    ext->knob_in = in == false ? 0 : 1;
    lv_obj_invalidate(slider);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1c1eb
movq %rbx, %rdi
callq 0x6747
movb 0x22(%rax), %cl
movl %ecx, %edx
andb $0x1, %dl
cmpb %bpl, %dl
je 0x1c1fc
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0x22(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x1ef52(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1c1fa
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_slider.c
// Function: lv_slider_get_value
int16_t lv_slider_get_value(const lv_obj_t * slider)
{
    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);

    lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);

    if(ext->drag_value != LV_SLIDER_NOT_PRESSED)
        return ext->drag_value;
    else
        return lv_bar_get_value(slider);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1c22b
movq %rbx, %rdi
callq 0x6747
movzwl 0x20(%rax), %eax
cmpw $0x8000, %ax            # imm = 0x8000
jne 0x1c23c
movq %rbx, %rdi
popq %rbx
jmp 0x8cc7
leaq 0x1ef12(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1c23a
popq %rbx
retq