// File: FFY00[P]uicc/include/uicc.h
// Function: UICC::encodeIMSI(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
vector<string> encodeIMSI(string imsi) {
        vector<string> encoded;
        encoded.push_back("");

        if (imsi.size() %2 ==1 ) {
            encoded[0]+=(char)(imsi.size()/2 + 1);
            encoded[0]+=(char)(9 | (imsi[0]-'0')<<4);
        } else {
            encoded[0]+=(char)(imsi.size()/2);
            encoded[0]+=(char)(1 | (imsi[0]-'0')<<4);
        }

        encoded[0]+=makeBcd(imsi.substr(1));
        return encoded;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe0, %rsp
movq %rdx, -0xb8(%rbp)
movq %rdi, -0xb0(%rbp)
movq %rdi, %rax
movq %rax, -0xa8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb $0x0, -0x19(%rbp)
callq 0xec50
leaq -0x41(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
callq 0x34d0
movq -0xa0(%rbp), %rdx
leaq 0x1498e(%rip), %rsi     # 0x25c64
leaq -0x40(%rbp), %rdi
callq 0x33e0
jmp 0x112e1
movq -0xb0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x11160
jmp 0x112f3
leaq -0x40(%rbp), %rdi
callq 0x31a0
leaq -0x41(%rbp), %rdi
callq 0x3300
movq -0xb8(%rbp), %rdi
callq 0x31f0
andq $0x1, %rax
cmpq $0x1, %rax
jne 0x113f3
movq -0xb8(%rbp), %rdi
callq 0x31f0
movq -0xb0(%rbp), %rdi
shrl %eax
incl %eax
movl %eax, -0xbc(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf690
movq %rax, %rdi
movl -0xbc(%rbp), %eax
movsbl %al, %esi
callq 0x31b0
jmp 0x11358
movq -0xb8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3520
movq %rax, -0xc8(%rbp)
jmp 0x11371
movq -0xb0(%rbp), %rdi
movq -0xc8(%rbp), %rax
movzbl (%rax), %eax
shll $0x4, %eax
addl $0xfffffd09, %eax       # imm = 0xFFFFFD09
movl %eax, -0xcc(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf690
movq %rax, %rdi
movl -0xcc(%rbp), %eax
movsbl %al, %esi
callq 0x31b0
jmp 0x113ac
jmp 0x11480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x113d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x31a0
leaq -0x41(%rbp), %rdi
callq 0x3300
jmp 0x11546
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x11546
movq -0xb8(%rbp), %rdi
callq 0x31f0
movq -0xb0(%rbp), %rdi
shrl %eax
movl %eax, -0xd0(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf690
movq %rax, %rdi
movl -0xd0(%rbp), %eax
movsbl %al, %esi
callq 0x31b0
jmp 0x1142a
movq -0xb8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3520
movq %rax, -0xd8(%rbp)
jmp 0x11443
movq -0xb0(%rbp), %rdi
movq -0xd8(%rbp), %rax
movzbl (%rax), %eax
shll $0x4, %eax
addl $0xfffffd01, %eax       # imm = 0xFFFFFD01
movl %eax, -0xdc(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0xf690
movq %rax, %rdi
movl -0xdc(%rbp), %eax
movsbl %al, %esi
callq 0x31b0
jmp 0x1147e
jmp 0x11480
movq -0xb8(%rbp), %rsi
leaq -0x98(%rbp), %rdi
movl $0x1, %edx
movq $-0x1, %rcx
callq 0x32c0
jmp 0x114a1
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x7ca0
jmp 0x114ba
movq -0xb0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xf690
movq %rax, %rdi
leaq -0x78(%rbp), %rsi
callq 0x33b0
jmp 0x114d8
leaq -0x78(%rbp), %rdi
callq 0x31a0
leaq -0x98(%rbp), %rdi
callq 0x31a0
movb $0x1, -0x19(%rbp)
testb $0x1, -0x19(%rbp)
jne 0x11536
jmp 0x1152a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x1151c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x31a0
leaq -0x98(%rbp), %rdi
callq 0x31a0
jmp 0x11546
movq -0xb0(%rbp), %rdi
callq 0xf6b0
movq -0xa8(%rbp), %rax
addq $0xe0, %rsp
popq %rbp
retq
movq -0xb0(%rbp), %rdi
callq 0xf6b0
movq -0x50(%rbp), %rdi
callq 0x34b0
nopl (%rax,%rax)