summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf34
-rw-r--r--arm9/global.inc37
-rw-r--r--arm9/modules/79/asm/module_79_arm.s4890
-rw-r--r--arm9/modules/79/asm/module_79_thumb.s851
-rw-r--r--arm9/undefined_syms.txt1
5 files changed, 5810 insertions, 3 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index f4ba6edf..610a68c2 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -3036,7 +3036,24 @@ SECTIONS {
SDK_OVERLAY_MODULE_79_ID = 79;
SDK_OVERLAY.MODULE_79.ID = 79;
SDK_OVERLAY.MODULE_79.START = .;
- FILE_2D9E00.o (.text) /* 0x2D5E00 */
+ module_79_thumb.o (.text)
+ module_79_arm.o (.text)
+ module_79_thumb.o (.rodata)
+ module_79_arm.o (.rodata)
+ module_79_thumb.o (.init)
+ module_79_arm.o (.init)
+ SDK_OVERLAY.MODULE_79.SINIT_START = .;
+ module_79_thumb.o (.ctor)
+ module_79_arm.o (.ctor)
+ module_79_thumb.o (.sinit)
+ module_79_arm.o (.sinit)
+ WRITEW 0;
+ SDK_OVERLAY.MODULE_79.SINIT_END = .;
+ . = ALIGN(32);
+ module_79_thumb.o (.sdata)
+ module_79_arm.o (.sdata)
+ module_79_thumb.o (.data)
+ module_79_arm.o (.data)
. = ALIGN(32);
SDK_OVERLAY.MODULE_79.END = .;
SDK_OVERLAY.MODULE_79.SIZE = SDK_OVERLAY.MODULE_79.END - SDK_OVERLAY.MODULE_79.START;
@@ -3046,7 +3063,10 @@ SECTIONS {
{
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_79.BSS_START = .;
- FILE_2D9E00.o (.bss)
+ module_79_thumb.o (.bss)
+ module_79_arm.o (.bss)
+ module_79_thumb.o (.sbss)
+ module_79_arm.o (.sbss)
. = ALIGN(32);
SDK_OVERLAY.MODULE_79.BSS_END = .;
SDK_OVERLAY.MODULE_79.BSS_SIZE = SDK_OVERLAY.MODULE_79.BSS_END - SDK_OVERLAY.MODULE_79.BSS_START;
@@ -4035,7 +4055,15 @@ SECTIONS {
WRITEW 78;
WRITEW 0;
- OVERLAY_TABLE(MODULE_79, 79)
+ WRITEW 79;
+ WRITEW ADDR(.MODULE_79);
+ WRITEW SDK_OVERLAY.MODULE_79.SIZE;
+ WRITEW SDK_OVERLAY.MODULE_79.BSS_SIZE;
+ WRITEW SDK_OVERLAY.MODULE_79.SINIT_START;
+ WRITEW SDK_OVERLAY.MODULE_79.SINIT_END;
+ WRITEW 79;
+ WRITEW 0;
+
OVERLAY_TABLE(MODULE_80, 80)
OVERLAY_TABLE(MODULE_81, 81)
OVERLAY_TABLE(MODULE_82, 82)
diff --git a/arm9/global.inc b/arm9/global.inc
index 9278357b..abbdb3ea 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5802,6 +5802,43 @@
.extern MOD04_021D8640
.extern MOD04_021D8678
.extern FUN_02029B08
+.extern FUN_021EB550
+.extern MOD04_021DD904
+.extern MOD04_021DD944
+.extern MOD04_021EB3B8
+.extern MOD04_021EB524
+.extern MOD04_021EB59C
+.extern MOD04_021EF820
+.extern strncat
+.extern fclose
+.extern fread
+.extern fseek
+.extern ftell
+.extern MOD04_021DD82C
+.extern MOD04_021DD844
+.extern MOD04_021DD860
+.extern MOD04_021EEFA8
+.extern MOD04_021EEFFC
+.extern MOD04_021EF06C
+.extern MOD04_021EF074
+.extern MOD04_021EF0E4
+.extern MOD04_021EFB28
+.extern MOD04_021EFB38
+.extern MOD04_021EFC24
+.extern MOD04_021EFC78
+.extern MOD04_021EFCE4
+.extern MOD04_021EFD80
+.extern MOD04_021EFD9C
+.extern MOD04_021EFDB8
+.extern MOD04_021EFF5C
+.extern MOD04_021F0130
+.extern MOD04_021F017C
+.extern MOD04_021F0208
+.extern MOD04_021F024C
+.extern MOD04_021F0250
+.extern MOD04_021F025C
+.extern rewind
+.extern strspn
.extern FUN_02029B40
.extern FUN_02029C00
.extern FUN_02088D1C
diff --git a/arm9/modules/79/asm/module_79_arm.s b/arm9/modules/79/asm/module_79_arm.s
new file mode 100644
index 00000000..3b45bc8c
--- /dev/null
+++ b/arm9/modules/79/asm/module_79_arm.s
@@ -0,0 +1,4890 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ arm_func_start MOD79_0221248C
+MOD79_0221248C: ; 0x0221248C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ movs r7, r0
+ mov r6, r1
+ mov r5, r2
+ bne _022124B8
+ ldr r0, _02212544 ; =0x02216858
+ ldr r1, _02212548 ; =0x0221686C
+ ldr r3, _0221254C ; =0x000001B7
+ mov r2, #0
+ bl __msl_assertion_failed
+_022124B8:
+ cmp r5, #0
+ bne _022124D4
+ ldr r0, _02212550 ; =0x0221687C
+ ldr r1, _02212548 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x1b8
+ bl __msl_assertion_failed
+_022124D4:
+ ldr r4, [r5]
+ cmp r4, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r3, [r7, #0x10]
+ ldr r0, [r7, #0xc]
+ sub r0, r0, r3
+ cmp r0, #0
+ addle sp, sp, #4
+ movle r0, #0
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ ldr r1, [r7, #4]
+ cmp r4, r0
+ movge r4, r0
+ mov r0, r6
+ mov r2, r4
+ add r1, r1, r3
+ bl memcpy
+ mov r0, #0
+ strb r0, [r6, r4]
+ str r4, [r5]
+ ldr r1, [r7, #0x10]
+ mov r0, #1
+ add r1, r1, r4
+ str r1, [r7, #0x10]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02212544: .word 0x02216858
+_02212548: .word 0x0221686C
+_0221254C: .word 0x000001B7
+_02212550: .word 0x0221687C
+ arm_func_end MOD79_0221248C
+
+ arm_func_start MOD79_02212554
+MOD79_02212554: ; 0x02212554
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
+ sub sp, sp, #0xc
+ mov r8, r0
+ add r6, sp, #0
+ add r5, sp, #4
+ add r4, r8, #0x60
+ mov r7, #0
+ mvn sb, #0
+_02212574:
+ ldr r0, [r8, #0x48]
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ bl MOD04_021EFF5C
+ cmp r0, sb
+ beq _0221259C
+ ldr r0, [sp, #4]
+ cmp r0, #0
+ beq _022125C4
+_0221259C:
+ mov r0, #1
+ str r0, [r8, #0xfc]
+ mov r0, #5
+ str r0, [r8, #0x38]
+ ldr r0, [r8, #0x48]
+ bl MOD04_021EFB28
+ str r0, [r8, #0x4c]
+ add sp, sp, #0xc
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_022125C4:
+ ldr r0, [sp]
+ cmp r0, #0
+ addeq sp, sp, #0xc
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ ldr r3, [r8, #0x60]
+ ldr r1, [r8, #0x54]
+ ldr r2, [r8, #0x5c]
+ mov r0, r8
+ add r1, r1, r3
+ sub r2, r2, r3
+ bl MOD79_02212F68
+ cmp r0, sb
+ addeq sp, sp, #0xc
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ ldr r1, [r4]
+ add r0, r1, r0
+ str r0, [r4]
+ ldr r1, [r8, #0x60]
+ ldr r0, [r8, #0x5c]
+ cmp r1, r0
+ blt _02212574
+ mov r0, #1
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ arm_func_end MOD79_02212554
+
+ arm_func_start MOD79_0221262C
+MOD79_0221262C: ; 0x0221262C
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ bne _0221264C
+ ldr r0, _02212664 ; =0x02216888
+ ldr r1, _02212668 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x16c
+ bl __msl_assertion_failed
+_0221264C:
+ mov r1, #0
+ str r1, [r4, #0xc]
+ str r1, [r4, #0x10]
+ ldr r0, [r4, #4]
+ strb r1, [r0]
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02212664: .word 0x02216888
+_02212668: .word 0x0221686C
+ arm_func_end MOD79_0221262C
+
+ arm_func_start MOD79_0221266C
+MOD79_0221266C: ; 0x0221266C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #0x10
+ mov r2, r1
+ mov r4, r0
+ ldr r1, _022126A0 ; =0x02216890
+ add r0, sp, #0
+ bl sprintf
+ add r1, sp, #0
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ add sp, sp, #0x10
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_022126A0: .word 0x02216890
+ arm_func_end MOD79_0221266C
+
+ arm_func_start MOD79_022126A4
+MOD79_022126A4: ; 0x022126A4
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ movs r4, r0
+ strb r1, [sp]
+ bne _022126CC
+ ldr r0, _022126F4 ; =0x02216888
+ ldr r1, _022126F8 ; =0x0221686C
+ ldr r3, _022126FC ; =0x00000131
+ mov r2, #0
+ bl __msl_assertion_failed
+_022126CC:
+ cmp r4, #0
+ addeq sp, sp, #8
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ add r1, sp, #0
+ mov r0, r4
+ mov r2, #1
+ bl MOD79_02212794
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_022126F4: .word 0x02216888
+_022126F8: .word 0x0221686C
+_022126FC: .word 0x00000131
+ arm_func_end MOD79_022126A4
+
+ arm_func_start MOD79_02212700
+MOD79_02212700: ; 0x02212700
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r2
+ mov r2, #0
+ mov r5, r0
+ bl MOD79_02212794
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r1, _0221278C ; =0x02216894
+ mov r0, r5
+ mov r2, #2
+ bl MOD79_02212794
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0
+ bl MOD79_02212794
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r1, _02212790 ; =0x02216898
+ mov r0, r5
+ mov r2, #2
+ bl MOD79_02212794
+ cmp r0, #0
+ movne r0, #1
+ moveq r0, #0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_0221278C: .word 0x02216894
+_02212790: .word 0x02216898
+ arm_func_end MOD79_02212700
+
+ arm_func_start MOD79_02212794
+MOD79_02212794: ; 0x02212794
+ stmdb sp!, {r0, r1, r2, r3}
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #0xc
+ movs r7, r0
+ mov r6, r1
+ ldr r5, [r7]
+ bne _022127C4
+ ldr r0, _02212A40 ; =0x02216888
+ ldr r1, _02212A44 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0xb7
+ bl __msl_assertion_failed
+_022127C4:
+ cmp r6, #0
+ bne _022127E0
+ ldr r0, _02212A48 ; =0x0221689C
+ ldr r1, _02212A44 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0xb8
+ bl __msl_assertion_failed
+_022127E0:
+ ldr r0, [sp, #0x28]
+ cmp r0, #0
+ bge _02212800
+ ldr r0, _02212A4C ; =0x022168A4
+ ldr r1, _02212A44 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0xb9
+ bl __msl_assertion_failed
+_02212800:
+ cmp r7, #0
+ addeq sp, sp, #0xc
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ cmp r6, #0
+ addeq sp, sp, #0xc
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x28]
+ cmp r0, #0
+ addlt sp, sp, #0xc
+ movlt r0, #0
+ ldmltia sp!, {r4, r5, r6, r7, lr}
+ addlt sp, sp, #0x10
+ bxlt lr
+ cmp r0, #0
+ bne _02212860
+ mov r0, r6
+ bl strlen
+ str r0, [sp, #0x28]
+_02212860:
+ ldr r0, [r7, #0x20]
+ cmp r0, #1
+ bne _02212968
+ ldr r0, [r5, #0x168]
+ cmp r0, #0
+ bne _0221288C
+ ldr r0, _02212A50 ; =0x022168B4
+ ldr r1, _02212A44 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0xce
+ bl __msl_assertion_failed
+_0221288C:
+ ldr r2, [r7, #8]
+ ldr r1, [r7, #0xc]
+ add r0, sp, #8
+ sub r1, r2, r1
+ str r1, [sp, #8]
+ ldr r2, [r7, #4]
+ ldr r1, [r7, #0xc]
+ add r3, sp, #0x28
+ add r1, r2, r1
+ str r1, [sp]
+ str r0, [sp, #4]
+ ldr r4, [r5, #0x17c]
+ mov r0, r5
+ mov r2, r6
+ add r1, r5, #0x164
+ .word 0xE12FFF34
+ mov r4, r0
+ cmp r4, #2
+ bne _0221294C
+ ldr r0, [r7, #0x18]
+ cmp r0, #0
+ beq _02212910
+ ldr r0, [r7]
+ mov r1, #1
+ str r1, [r0, #0xfc]
+ ldr r0, [r7]
+ mov r1, #2
+ str r1, [r0, #0x38]
+ add sp, sp, #0xc
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ add sp, sp, #0x10
+ bx lr
+_02212910:
+ ldr r1, [r7, #0x14]
+ mov r0, r7
+ bl MOD79_02212CF0
+ cmp r0, #0
+ beq _0221295C
+ ldr r0, [r7]
+ mov r2, #1
+ str r2, [r0, #0xfc]
+ ldr r1, [r7]
+ add sp, sp, #0xc
+ str r2, [r1, #0x38]
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ add sp, sp, #0x10
+ bx lr
+_0221294C:
+ ldr r1, [r7, #0xc]
+ ldr r0, [sp, #8]
+ add r0, r1, r0
+ str r0, [r7, #0xc]
+_0221295C:
+ cmp r4, #2
+ beq _0221288C
+ b _02212A2C
+_02212968:
+ ldr r2, [r7, #0xc]
+ ldr r1, [sp, #0x28]
+ ldr r0, [r7, #8]
+ add r4, r2, r1
+ cmp r4, r0
+ blt _02212A00
+_02212980:
+ ldr r0, [r7, #0x18]
+ cmp r0, #0
+ beq _022129B8
+ ldr r0, [r7]
+ mov r1, #1
+ str r1, [r0, #0xfc]
+ ldr r0, [r7]
+ mov r1, #2
+ str r1, [r0, #0x38]
+ add sp, sp, #0xc
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ add sp, sp, #0x10
+ bx lr
+_022129B8:
+ ldr r1, [r7, #0x14]
+ mov r0, r7
+ bl MOD79_02212CF0
+ cmp r0, #0
+ bne _022129F4
+ ldr r0, [r7]
+ mov r2, #1
+ str r2, [r0, #0xfc]
+ ldr r1, [r7]
+ add sp, sp, #0xc
+ str r2, [r1, #0x38]
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ add sp, sp, #0x10
+ bx lr
+_022129F4:
+ ldr r0, [r7, #8]
+ cmp r4, r0
+ bge _02212980
+_02212A00:
+ ldr r3, [r7, #4]
+ ldr r0, [r7, #0xc]
+ ldr r2, [sp, #0x28]
+ mov r1, r6
+ add r0, r3, r0
+ bl memcpy
+ str r4, [r7, #0xc]
+ ldr r1, [r7, #4]
+ ldr r0, [r7, #0xc]
+ mov r2, #0
+ strb r2, [r1, r0]
+_02212A2C:
+ mov r0, #1
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ add sp, sp, #0x10
+ bx lr
+ .align 2, 0
+_02212A40: .word 0x02216888
+_02212A44: .word 0x0221686C
+_02212A48: .word 0x0221689C
+_02212A4C: .word 0x022168A4
+_02212A50: .word 0x022168B4
+ arm_func_end MOD79_02212794
+
+ arm_func_start MOD79_02212A54
+MOD79_02212A54: ; 0x02212A54
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ bne _02212A74
+ ldr r0, _02212AAC ; =0x02216888
+ ldr r1, _02212AB0 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x9b
+ bl __msl_assertion_failed
+_02212A74:
+ cmp r4, #0
+ ldmeqia sp!, {r4, pc}
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ ldmeqia sp!, {r4, pc}
+ ldr r1, [r4, #0x1c]
+ cmp r1, #0
+ bne _02212A98
+ bl MOD04_021DD82C
+_02212A98:
+ mov r0, r4
+ mov r1, #0
+ mov r2, #0x24
+ bl Call_FillMemWithValue
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02212AAC: .word 0x02216888
+_02212AB0: .word 0x0221686C
+ arm_func_end MOD79_02212A54
+
+ arm_func_start MOD79_02212AB4
+MOD79_02212AB4: ; 0x02212AB4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ movs r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bne _02212AE4
+ ldr r0, _02212BB0 ; =0x022168F0
+ ldr r1, _02212BB4 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x74
+ bl __msl_assertion_failed
+_02212AE4:
+ cmp r6, #0
+ bne _02212B00
+ ldr r0, _02212BB8 ; =0x02216888
+ ldr r1, _02212BB4 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x75
+ bl __msl_assertion_failed
+_02212B00:
+ cmp r5, #0
+ bne _02212B1C
+ ldr r0, _02212BBC ; =0x022168FC
+ ldr r1, _02212BB4 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x76
+ bl __msl_assertion_failed
+_02212B1C:
+ cmp r4, #0
+ bgt _02212B38
+ ldr r0, _02212BC0 ; =0x02216908
+ ldr r1, _02212BB4 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x77
+ bl __msl_assertion_failed
+_02212B38:
+ cmp r7, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ cmp r6, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ cmp r5, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ cmp r4, #0
+ addle sp, sp, #4
+ movle r0, #0
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ str r7, [r6]
+ str r5, [r6, #4]
+ str r4, [r6, #8]
+ mov r2, #0
+ str r2, [r6, #0xc]
+ str r2, [r6, #0x14]
+ mov r0, #1
+ str r0, [r6, #0x18]
+ str r0, [r6, #0x1c]
+ str r2, [r6, #0x20]
+ ldr r1, [r6, #4]
+ strb r2, [r1]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02212BB0: .word 0x022168F0
+_02212BB4: .word 0x0221686C
+_02212BB8: .word 0x02216888
+_02212BBC: .word 0x022168FC
+_02212BC0: .word 0x02216908
+ arm_func_end MOD79_02212AB4
+
+ arm_func_start MOD79_02212BC4
+MOD79_02212BC4: ; 0x02212BC4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ movs r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bne _02212BF4
+ ldr r0, _02212CDC ; =0x022168F0
+ ldr r1, _02212CE0 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x43
+ bl __msl_assertion_failed
+_02212BF4:
+ cmp r6, #0
+ bne _02212C10
+ ldr r0, _02212CE4 ; =0x02216888
+ ldr r1, _02212CE0 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x44
+ bl __msl_assertion_failed
+_02212C10:
+ cmp r5, #0
+ bgt _02212C2C
+ ldr r0, _02212CE8 ; =0x02216914
+ ldr r1, _02212CE0 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x45
+ bl __msl_assertion_failed
+_02212C2C:
+ cmp r4, #0
+ bgt _02212C48
+ ldr r0, _02212CEC ; =0x02216924
+ ldr r1, _02212CE0 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x46
+ bl __msl_assertion_failed
+_02212C48:
+ cmp r7, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ cmp r6, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ cmp r5, #0
+ addle sp, sp, #4
+ movle r0, #0
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ cmp r4, #0
+ addle sp, sp, #4
+ movle r0, #0
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ str r7, [r6]
+ mov r2, #0
+ str r2, [r6, #4]
+ str r2, [r6, #8]
+ str r2, [r6, #0xc]
+ str r2, [r6, #0x10]
+ str r4, [r6, #0x14]
+ str r2, [r6, #0x18]
+ str r2, [r6, #0x1c]
+ mov r0, r6
+ mov r1, r5
+ str r2, [r6, #0x20]
+ bl MOD79_02212CF0
+ cmp r0, #0
+ moveq r0, #0
+ ldrne r0, [r6, #4]
+ movne r1, #0
+ strneb r1, [r0]
+ movne r0, #1
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02212CDC: .word 0x022168F0
+_02212CE0: .word 0x0221686C
+_02212CE4: .word 0x02216888
+_02212CE8: .word 0x02216914
+_02212CEC: .word 0x02216924
+ arm_func_end MOD79_02212BC4
+
+ arm_func_start MOD79_02212CF0
+MOD79_02212CF0: ; 0x02212CF0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ movs r5, r0
+ mov r4, r1
+ bne _02212D18
+ ldr r0, _02212D84 ; =0x02216888
+ ldr r1, _02212D88 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x20
+ bl __msl_assertion_failed
+_02212D18:
+ cmp r4, #0
+ bgt _02212D34
+ ldr r0, _02212D8C ; =0x02216924
+ ldr r1, _02212D88 ; =0x0221686C
+ mov r2, #0
+ mov r3, #0x21
+ bl __msl_assertion_failed
+_02212D34:
+ cmp r5, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ cmp r4, #0
+ addle sp, sp, #4
+ movle r0, #0
+ ldmleia sp!, {r4, r5, pc}
+ ldr r1, [r5, #8]
+ ldr r0, [r5, #4]
+ add r4, r1, r4
+ mov r1, r4
+ bl MOD04_021DD844
+ cmp r0, #0
+ moveq r0, #0
+ strne r0, [r5, #4]
+ strne r4, [r5, #8]
+ movne r0, #1
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02212D84: .word 0x02216888
+_02212D88: .word 0x0221686C
+_02212D8C: .word 0x02216924
+ arm_func_end MOD79_02212CF0
+
+ arm_func_start MOD79_02212D90
+MOD79_02212D90: ; 0x02212D90
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ movs r4, r0
+ bne _02212DB4
+ ldr r0, _02212DF8 ; =0x02216938
+ ldr r1, _02212DFC ; =0x02216944
+ mov r2, #0
+ mov r3, #0x5e
+ bl __msl_assertion_failed
+_02212DB4:
+ ldr r0, [r4, #0x150]
+ cmp r0, #0
+ addeq sp, sp, #8
+ ldmeqia sp!, {r4, pc}
+ ldr r0, [r4, #0x140]
+ bl MOD04_021EF06C
+ str r0, [sp]
+ ldr r0, [r4, #0x44]
+ str r0, [sp, #4]
+ ldr r0, [r4, #4]
+ ldr r1, [r4, #0x148]
+ ldr r2, [r4, #0x14c]
+ ldr r3, [r4, #0x144]
+ ldr ip, [r4, #0x150]
+ .word 0xE12FFF3C
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02212DF8: .word 0x02216938
+_02212DFC: .word 0x02216944
+ arm_func_end MOD79_02212D90
+
+ arm_func_start MOD79_02212E00
+MOD79_02212E00: ; 0x02212E00
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x10
+ movs r6, r0
+ mov r5, r1
+ mov r4, r2
+ bne _02212E2C
+ ldr r0, _02212E70 ; =0x02216938
+ ldr r1, _02212E74 ; =0x02216944
+ mov r2, #0
+ mov r3, #0x45
+ bl __msl_assertion_failed
+_02212E2C:
+ ldr ip, [r6, #0x3c]
+ cmp ip, #0
+ addeq sp, sp, #0x10
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r0, [r6, #0x100]
+ mov r2, r5
+ str r0, [sp]
+ ldr r0, [r6, #0x104]
+ mov r3, r4
+ str r0, [sp, #4]
+ ldr r0, [r6, #0x44]
+ str r0, [sp, #8]
+ ldr r0, [r6, #4]
+ ldr r1, [r6, #0x10]
+ .word 0xE12FFF3C
+ add sp, sp, #0x10
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_02212E70: .word 0x02216938
+_02212E74: .word 0x02216944
+ arm_func_end MOD79_02212E00
+
+ arm_func_start MOD79_02212E78
+MOD79_02212E78: ; 0x02212E78
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ movs r5, r0
+ bne _02212E9C
+ ldr r0, _02212EFC ; =0x02216938
+ ldr r1, _02212F00 ; =0x02216944
+ mov r2, #0
+ mov r3, #0x1b
+ bl __msl_assertion_failed
+_02212E9C:
+ ldr ip, [r5, #0x40]
+ cmp ip, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r0, [r5, #0xc]
+ cmp r0, #0
+ movne r4, #0
+ movne r3, r4
+ ldreq r4, [r5, #0xc0]
+ ldreq r3, [r5, #0x100]
+ ldr r0, [r5, #0x44]
+ mov r2, r4
+ str r0, [sp]
+ ldr r0, [r5, #4]
+ ldr r1, [r5, #0x38]
+ .word 0xE12FFF3C
+ cmp r4, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, pc}
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r5, #0xd8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02212EFC: .word 0x02216938
+_02212F00: .word 0x02216944
+ arm_func_end MOD79_02212E78
+
+ arm_func_start MOD79_02212F04
+MOD79_02212F04: ; 0x02212F04
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ ldr r3, [r6, #0x5c]
+ mov r5, r1
+ mov r4, r2
+ cmp r3, #0
+ mov r3, #0
+ bne _02212F48
+ bl MOD79_02212F68
+ mov r3, r0
+ mvn r0, #0
+ cmp r3, r0
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ cmp r3, r4
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, pc}
+_02212F48:
+ add r0, r6, #0x50
+ add r1, r5, r3
+ sub r2, r4, r3
+ bl MOD79_02212794
+ cmp r0, #0
+ moveq r0, #0
+ movne r0, #2
+ ldmia sp!, {r4, r5, r6, pc}
+ arm_func_end MOD79_02212F04
+
+ arm_func_start MOD79_02212F68
+MOD79_02212F68: ; 0x02212F68
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, [r4, #0x48]
+ mov r3, #0
+ bl MOD04_021EFC24
+ mvn r1, #0
+ cmp r0, r1
+ bne _02212FD8
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ mvn r1, #5
+ cmp r0, r1
+ beq _02212FB4
+ mvn r1, #0x19
+ cmp r0, r1
+ beq _02212FB4
+ mvn r1, #0x4b
+ cmp r0, r1
+ bne _02212FBC
+_02212FB4:
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+_02212FBC:
+ mov r1, #1
+ str r1, [r4, #0xfc]
+ mov r1, #5
+ str r1, [r4, #0x38]
+ str r0, [r4, #0x4c]
+ mvn r0, #0
+ ldmia sp!, {r4, pc}
+_02212FD8:
+ ldr r1, [r4, #0x10]
+ cmp r1, #4
+ ldreq r1, [r4, #0x148]
+ addeq r1, r1, r0
+ streq r1, [r4, #0x148]
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD79_02212F68
+
+ arm_func_start MOD79_02212FF0
+MOD79_02212FF0: ; 0x02212FF0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r5, r2
+ ldr r2, [r5]
+ ldr r0, [r7, #0x134]
+ mov r6, r1
+ cmp r0, #0
+ sub r4, r2, #1
+ beq _02213050
+ bl MOD04_021F025C
+ ldr r1, _02213230 ; =0x02216958
+ ldr r2, [r7, #0x138]
+ ldr r1, [r1]
+ add r1, r2, r1
+ cmp r0, r1
+ addlo sp, sp, #4
+ movlo r0, #1
+ ldmloia sp!, {r4, r5, r6, r7, pc}
+ ldr r1, _02213234 ; =0x0221695C
+ str r0, [r7, #0x138]
+ ldr r0, [r1]
+ cmp r4, r0
+ movge r4, r0
+_02213050:
+ ldr r1, [r7, #0x84]
+ ldr r0, [r7, #0x80]
+ cmp r1, r0
+ bge _02213098
+ mov r1, r6
+ mov r2, r5
+ add r0, r7, #0x74
+ bl MOD79_0221248C
+ ldr r1, [r7, #0x84]
+ ldr r0, [r7, #0x80]
+ add sp, sp, #4
+ cmp r1, r0
+ ldreq r0, [r7, #0xf8]
+ streq r0, [r7, #0x80]
+ ldreq r0, [r7, #0xf8]
+ streq r0, [r7, #0x84]
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_02213098:
+ ldr r0, [r7, #0x48]
+ mov r1, r6
+ mov r2, r4
+ mov r3, #0
+ bl MOD04_021EFC78
+ mov r2, r0
+ mvn r0, #0
+ str r2, [sp]
+ cmp r2, r0
+ bne _0221311C
+ ldr r0, [r7, #0x48]
+ bl MOD04_021EFB28
+ mvn r1, #5
+ cmp r0, r1
+ beq _022130EC
+ mvn r1, #0x19
+ cmp r0, r1
+ beq _022130EC
+ mvn r1, #0x4b
+ cmp r0, r1
+ bne _022130F8
+_022130EC:
+ add sp, sp, #4
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_022130F8:
+ mov r2, #1
+ str r2, [r7, #0xfc]
+ mov r1, #5
+ str r1, [r7, #0x38]
+ str r0, [r7, #0x4c]
+ add sp, sp, #4
+ str r2, [r7, #0x130]
+ mov r0, #3
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_0221311C:
+ cmp r2, #0
+ moveq r0, #1
+ streq r0, [r7, #0x130]
+ addeq sp, sp, #4
+ moveq r0, #2
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, [r7, #0x168]
+ cmp r0, #0
+ beq _0221320C
+ mov r1, r6
+ add r0, r7, #0x98
+ bl MOD79_02212794
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #3
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ mov r0, r7
+ bl MOD79_02213238
+ cmp r0, #0
+ bne _02213188
+ mov r0, #1
+ str r0, [r7, #0xfc]
+ mov r0, #0x11
+ str r0, [r7, #0x38]
+ add sp, sp, #4
+ mov r0, #3
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_02213188:
+ ldr r1, [r7, #0x80]
+ ldr r0, [r7, #0x84]
+ sub r0, r1, r0
+ cmp r0, #0
+ movle r0, #0
+ strleb r0, [r6]
+ strle r0, [r5]
+ addle sp, sp, #4
+ movle r0, #1
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, [r5]
+ add r2, sp, #0
+ sub r3, r0, #1
+ mov r1, r6
+ add r0, r7, #0x74
+ str r3, [sp]
+ bl MOD79_0221248C
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #3
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r1, [r7, #0x84]
+ ldr r0, [r7, #0x80]
+ cmp r1, r0
+ ldreq r0, [r7, #0xf8]
+ streq r0, [r7, #0x80]
+ ldreq r0, [r7, #0xf8]
+ streq r0, [r7, #0x84]
+ ldr r2, [sp]
+ cmp r2, #0
+ addle sp, sp, #4
+ movle r0, #1
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+_0221320C:
+ mov r0, #0
+ strb r0, [r6, r2]
+ ldr r1, [sp]
+ str r1, [r5]
+ ldr r1, [sp]
+ cmp r1, #0
+ movle r0, #1
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02213230: .word 0x02216958
+_02213234: .word 0x0221695C
+ arm_func_end MOD79_02212FF0
+
+ arm_func_start MOD79_02213238
+MOD79_02213238: ; 0x02213238
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
+ sub sp, sp, #0x14
+ mov r1, #0
+ mov r4, r0
+ str r1, [sp, #8]
+ str r1, [sp, #0xc]
+ add r8, sp, #0xc
+ add r6, sp, #8
+ add r5, r4, #0x74
+ add r7, r4, #0x164
+_02213260:
+ ldr ip, [r4, #0xa8]
+ ldr r0, [r4, #0xa4]
+ ldr r2, [r4, #0x9c]
+ sub r0, r0, ip
+ str r0, [sp, #8]
+ ldr r3, [r4, #0x80]
+ ldr r0, [r4, #0x7c]
+ ldr r1, [r4, #0x78]
+ sub r0, r0, r3
+ str r0, [sp, #0xc]
+ add r0, r1, r3
+ str r0, [sp]
+ str r8, [sp, #4]
+ ldr sb, [r4, #0x180]
+ mov r0, r4
+ mov r1, r7
+ mov r3, r6
+ add r2, r2, ip
+ .word 0xE12FFF39
+ mov sb, r0
+ cmp sb, #2
+ bne _022132D4
+ ldr r1, [r4, #0x88]
+ mov r0, r5
+ bl MOD79_02212CF0
+ cmp r0, #0
+ addeq sp, sp, #0x14
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_022132D4:
+ cmp sb, #2
+ bne _022132E8
+ ldr r0, [sp, #0xc]
+ cmp r0, #0
+ beq _02213260
+_022132E8:
+ ldr r1, [r4, #0xa8]
+ ldr r0, [sp, #8]
+ add r0, r1, r0
+ str r0, [r4, #0xa8]
+ ldr r1, [r4, #0x80]
+ ldr r0, [sp, #0xc]
+ add r0, r1, r0
+ str r0, [r4, #0x80]
+ ldr r1, [r4, #0xa8]
+ cmp r1, #0xff
+ ble _02213348
+ ldr r0, [r4, #0xa4]
+ subs r5, r0, r1
+ bne _0221332C
+ add r0, r4, #0x98
+ bl MOD79_0221262C
+ b _02213348
+_0221332C:
+ ldr r0, [r4, #0x9c]
+ mov r2, r5
+ add r1, r0, r1
+ bl memmove
+ mov r0, #0
+ str r0, [r4, #0xa8]
+ str r5, [r4, #0xa4]
+_02213348:
+ cmp sb, #3
+ addne sp, sp, #0x14
+ movne r0, #1
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #0x11
+ str r0, [r4, #0x38]
+ mov r0, #0
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ arm_func_end MOD79_02213238
+
+ arm_func_start MOD79_02213374
+MOD79_02213374: ; 0x02213374
+ bx lr
+ arm_func_end MOD79_02213374
+
+ arm_func_start MOD79_02213378
+MOD79_02213378: ; 0x02213378
+ bx lr
+ arm_func_end MOD79_02213378
+
+ arm_func_start MOD79_0221337C
+MOD79_0221337C: ; 0x0221337C
+ bx lr
+ arm_func_end MOD79_0221337C
+
+ arm_func_start MOD79_02213380
+MOD79_02213380: ; 0x02213380
+ bx lr
+ arm_func_end MOD79_02213380
+
+ arm_func_start MOD79_02213384
+MOD79_02213384: ; 0x02213384
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr r0, _02213400 ; =0x02217138
+ ldr r0, [r0]
+ cmp r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r0, _02213404 ; =MOD79_02213638
+ bl MOD79_02213510
+ ldr r5, _02213408 ; =0x0221712C
+ mov r6, #0
+ ldr r0, [r5]
+ cmp r0, #0
+ ble _022133D4
+ ldr r4, _02213400 ; =0x02217138
+_022133B8:
+ ldr r0, [r4]
+ ldr r0, [r0, r6, lsl #2]
+ bl MOD04_021DD82C
+ ldr r0, [r5]
+ add r6, r6, #1
+ cmp r6, r0
+ blt _022133B8
+_022133D4:
+ ldr r0, _02213400 ; =0x02217138
+ ldr r0, [r0]
+ bl MOD04_021DD82C
+ ldr r2, _02213400 ; =0x02217138
+ mov r3, #0
+ ldr r1, _02213408 ; =0x0221712C
+ ldr r0, _0221340C ; =0x02217130
+ str r3, [r2]
+ str r3, [r1]
+ str r3, [r0]
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_02213400: .word 0x02217138
+_02213404: .word MOD79_02213638
+_02213408: .word 0x0221712C
+_0221340C: .word 0x02217130
+ arm_func_end MOD79_02213384
+
+ arm_func_start MOD79_02213410
+MOD79_02213410: ; 0x02213410
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ bne _02213430
+ ldr r0, _022134FC ; =0x02216960
+ ldr r1, _02213500 ; =0x0221696C
+ ldr r3, _02213504 ; =0x00000132
+ mov r2, #0
+ bl __msl_assertion_failed
+_02213430:
+ ldr r0, [r4, #0x108]
+ cmp r0, #0
+ bne _02213450
+ ldr r0, _02213508 ; =0x02216980
+ ldr r1, _02213500 ; =0x0221696C
+ ldr r3, _0221350C ; =0x00000133
+ mov r2, #0
+ bl __msl_assertion_failed
+_02213450:
+ mov r0, #0
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x14]
+ bl MOD04_021DD82C
+ ldr r1, [r4, #0x108]
+ mov r0, #0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x108]
+ ldr r0, [r4, #0x18]
+ bl MOD04_021DD82C
+ mov r0, #0
+ str r0, [r4, #0x18]
+ str r0, [r4, #0x1c]
+ strh r0, [r4, #0x20]
+ ldr r0, [r4, #0x24]
+ bl MOD04_021DD82C
+ mov r0, #0
+ str r0, [r4, #0x24]
+ ldr r0, [r4, #0x48]
+ mov r1, #2
+ bl MOD04_021EFD80
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFD9C
+ mvn r1, #0
+ add r0, r4, #0x50
+ str r1, [r4, #0x48]
+ bl MOD79_0221262C
+ add r0, r4, #0x74
+ bl MOD79_0221262C
+ add r0, r4, #0x98
+ bl MOD79_0221262C
+ mov r0, #0
+ str r0, [r4, #0xe4]
+ str r0, [r4, #0xe8]
+ str r0, [r4, #0xec]
+ str r0, [r4, #0xf0]
+ str r0, [r4, #0xf4]
+ str r0, [r4, #0xf8]
+ str r0, [r4, #0x130]
+ ldr r0, [r4, #0x10c]
+ add r0, r0, #1
+ str r0, [r4, #0x10c]
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_022134FC: .word 0x02216960
+_02213500: .word 0x0221696C
+_02213504: .word 0x00000132
+_02213508: .word 0x02216980
+_0221350C: .word 0x00000133
+ arm_func_end MOD79_02213410
+
+ arm_func_start MOD79_02213510
+MOD79_02213510: ; 0x02213510
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r1, _02213580 ; =0x02217130
+ mov r5, r0
+ ldr r0, [r1]
+ cmp r0, #0
+ addle sp, sp, #4
+ ldmleia sp!, {r4, r5, r6, r7, pc}
+ bl MOD79_02213378
+ ldr r7, _02213584 ; =0x0221712C
+ mov r4, #0
+ ldr r0, [r7]
+ cmp r0, #0
+ ble _02213574
+ ldr r6, _02213588 ; =0x02217138
+_0221354C:
+ ldr r0, [r6]
+ ldr r0, [r0, r4, lsl #2]
+ ldr r1, [r0]
+ cmp r1, #0
+ beq _02213564
+ .word 0xE12FFF35
+_02213564:
+ ldr r0, [r7]
+ add r4, r4, #1
+ cmp r4, r0
+ blt _0221354C
+_02213574:
+ bl MOD79_02213374
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02213580: .word 0x02217130
+_02213584: .word 0x0221712C
+_02213588: .word 0x02217138
+ arm_func_end MOD79_02213510
+
+ arm_func_start MOD79_0221358C
+MOD79_0221358C: ; 0x0221358C
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ bpl _022135AC
+ ldr r0, _0221361C ; =0x02216998
+ ldr r1, _02213620 ; =0x0221696C
+ ldr r3, _02213624 ; =0x00000101
+ mov r2, #0
+ bl __msl_assertion_failed
+_022135AC:
+ ldr r0, _02213628 ; =0x0221712C
+ ldr r0, [r0]
+ cmp r4, r0
+ blt _022135D0
+ ldr r0, _0221362C ; =0x022169A8
+ ldr r1, _02213620 ; =0x0221696C
+ ldr r3, _02213630 ; =0x00000102
+ mov r2, #0
+ bl __msl_assertion_failed
+_022135D0:
+ bl MOD79_02213378
+ cmp r4, #0
+ blt _022135EC
+ ldr r0, _02213628 ; =0x0221712C
+ ldr r0, [r0]
+ cmp r4, r0
+ blt _022135F8
+_022135EC:
+ bl MOD79_02213374
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+_022135F8:
+ ldr r0, _02213634 ; =0x02217138
+ ldr r0, [r0]
+ ldr r4, [r0, r4, lsl #2]
+ ldr r0, [r4]
+ cmp r0, #0
+ moveq r4, #0
+ bl MOD79_02213374
+ mov r0, r4
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_0221361C: .word 0x02216998
+_02213620: .word 0x0221696C
+_02213624: .word 0x00000101
+_02213628: .word 0x0221712C
+_0221362C: .word 0x022169A8
+_02213630: .word 0x00000102
+_02213634: .word 0x02217138
+ arm_func_end MOD79_0221358C
+
+ arm_func_start MOD79_02213638
+MOD79_02213638: ; 0x02213638
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ bne _02213658
+ ldr r0, _02213800 ; =0x02216960
+ ldr r1, _02213804 ; =0x0221696C
+ mov r2, #0
+ mov r3, #0xb3
+ bl __msl_assertion_failed
+_02213658:
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ bge _02213678
+ ldr r0, _02213808 ; =0x022169C4
+ ldr r1, _02213804 ; =0x0221696C
+ mov r2, #0
+ mov r3, #0xb4
+ bl __msl_assertion_failed
+_02213678:
+ ldr r0, _0221380C ; =0x0221712C
+ ldr r1, [r4, #4]
+ ldr r0, [r0]
+ cmp r1, r0
+ blt _022136A0
+ ldr r0, _02213810 ; =0x022169E0
+ ldr r1, _02213804 ; =0x0221696C
+ mov r2, #0
+ mov r3, #0xb5
+ bl __msl_assertion_failed
+_022136A0:
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _022136C0
+ ldr r0, _02213814 ; =0x02216A08
+ ldr r1, _02213804 ; =0x0221696C
+ mov r2, #0
+ mov r3, #0xb6
+ bl __msl_assertion_failed
+_022136C0:
+ cmp r4, #0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ ldr r0, [r4]
+ cmp r0, #0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ ldr r1, [r4, #4]
+ cmp r1, #0
+ movlt r0, #0
+ ldmltia sp!, {r4, pc}
+ ldr r0, _0221380C ; =0x0221712C
+ ldr r0, [r0]
+ cmp r1, r0
+ movge r0, #0
+ ldmgeia sp!, {r4, pc}
+ bl MOD79_02213378
+ ldr r0, [r4, #0x14]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x18]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x24]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x28]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x108]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x15c]
+ bl MOD04_021DD82C
+ ldr r0, [r4, #0x48]
+ mvn r1, #0
+ cmp r0, r1
+ beq _02213754
+ mov r1, #2
+ bl MOD04_021EFD80
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFD9C
+_02213754:
+ add r0, r4, #0x50
+ bl MOD79_02212A54
+ add r0, r4, #0x74
+ bl MOD79_02212A54
+ add r0, r4, #0x98
+ bl MOD79_02212A54
+ add r0, r4, #0xbc
+ bl MOD79_02212A54
+ ldr r0, [r4, #0x140]
+ cmp r0, #0
+ beq _02213788
+ mov r0, r4
+ bl MOD79_022149E4
+_02213788:
+ ldr r0, [r4, #0x13c]
+ cmp r0, #0
+ beq _022137B0
+ bl MOD79_02215074
+ cmp r0, #0
+ beq _022137B0
+ ldr r0, [r4, #0x13c]
+ bl MOD79_02215058
+ mov r0, #0
+ str r0, [r4, #0x13c]
+_022137B0:
+ ldr r0, [r4, #0x16c]
+ cmp r0, #0
+ beq _022137DC
+ ldr r2, [r4, #0x178]
+ cmp r2, #0
+ beq _022137D4
+ mov r0, r4
+ add r1, r4, #0x164
+ .word 0xE12FFF32
+_022137D4:
+ mov r0, #0
+ str r0, [r4, #0x16c]
+_022137DC:
+ mov r1, #0
+ ldr r0, _02213818 ; =0x02217130
+ str r1, [r4]
+ ldr r1, [r0]
+ sub r1, r1, #1
+ str r1, [r0]
+ bl MOD79_02213374
+ mov r0, #1
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02213800: .word 0x02216960
+_02213804: .word 0x0221696C
+_02213808: .word 0x022169C4
+_0221380C: .word 0x0221712C
+_02213810: .word 0x022169E0
+_02213814: .word 0x02216A08
+_02213818: .word 0x02217130
+ arm_func_end MOD79_02213638
+
+ arm_func_start MOD79_0221381C
+MOD79_0221381C: ; 0x0221381C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ bl MOD79_02213378
+ bl MOD79_022139CC
+ mov r5, r0
+ mvn r0, #0
+ cmp r5, r0
+ bne _0221384C
+ bl MOD79_02213374
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, pc}
+_0221384C:
+ ldr r0, _022139C0 ; =0x02217138
+ mov r1, #0
+ ldr r0, [r0]
+ mov r2, #0x184
+ ldr r4, [r0, r5, lsl #2]
+ mov r0, r4
+ bl Call_FillMemWithValue
+ mov r0, #1
+ str r0, [r4]
+ ldr r0, _022139C4 ; =0x02217134
+ str r5, [r4, #4]
+ ldr r2, [r0]
+ mov ip, #0
+ add r1, r2, #1
+ str r1, [r0]
+ str r2, [r4, #8]
+ str ip, [r4, #0xc]
+ str ip, [r4, #0x10]
+ str ip, [r4, #0x14]
+ str ip, [r4, #0x18]
+ str ip, [r4, #0x1c]
+ strh ip, [r4, #0x20]
+ str ip, [r4, #0x24]
+ str ip, [r4, #0x28]
+ str ip, [r4, #0x2c]
+ str ip, [r4, #0x30]
+ str ip, [r4, #0x34]
+ str ip, [r4, #0x38]
+ str ip, [r4, #0x3c]
+ str ip, [r4, #0x40]
+ str ip, [r4, #0x44]
+ mvn r0, #0
+ str r0, [r4, #0x48]
+ str ip, [r4, #0x4c]
+ str ip, [r4, #0xe0]
+ str ip, [r4, #0xe4]
+ str ip, [r4, #0xe8]
+ str ip, [r4, #0xec]
+ str ip, [r4, #0xf0]
+ str ip, [r4, #0xf4]
+ str ip, [r4, #0xf8]
+ str ip, [r4, #0xfc]
+ str ip, [r4, #0x100]
+ str r0, [r4, #0x104]
+ str ip, [r4, #0x108]
+ str ip, [r4, #0x10c]
+ str ip, [r4, #0x110]
+ str ip, [r4, #0x12c]
+ str ip, [r4, #0x134]
+ str ip, [r4, #0x138]
+ str ip, [r4, #0x13c]
+ mov r0, #0x1f4
+ str r0, [r4, #0x158]
+ add r0, r4, #0x100
+ mov r1, #0x50
+ strh r1, [r0, #0x60]
+ str ip, [r4, #0x15c]
+ mov r0, r4
+ add r1, r4, #0x50
+ mov r2, #0x800
+ mov r3, #0x1000
+ str ip, [r4, #0x164]
+ bl MOD79_02212BC4
+ cmp r0, #0
+ beq _02213964
+ mov r2, #0x800
+ mov r0, r4
+ mov r3, r2
+ add r1, r4, #0x74
+ bl MOD79_02212BC4
+_02213964:
+ cmp r0, #0
+ beq _02213980
+ mov r0, r4
+ add r1, r4, #0x98
+ mov r2, #0x800
+ mov r3, #0x400
+ bl MOD79_02212BC4
+_02213980:
+ cmp r0, #0
+ bne _022139A0
+ mov r0, r4
+ bl MOD79_02213638
+ bl MOD79_02213374
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, pc}
+_022139A0:
+ ldr r0, _022139C8 ; =0x02217130
+ ldr r1, [r0]
+ add r1, r1, #1
+ str r1, [r0]
+ bl MOD79_02213374
+ mov r0, r4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_022139C0: .word 0x02217138
+_022139C4: .word 0x02217134
+_022139C8: .word 0x02217130
+ arm_func_end MOD79_0221381C
+
+ arm_func_start MOD79_022139CC
+MOD79_022139CC: ; 0x022139CC
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
+ sub sp, sp, #4
+ ldr r1, _02213AF4 ; =0x0221712C
+ mov r0, #0
+ ldr r2, [r1]
+ cmp r2, #0
+ ble _02213A10
+ ldr r1, _02213AF8 ; =0x02217138
+ ldr r3, [r1]
+_022139F0:
+ ldr r1, [r3, r0, lsl #2]
+ ldr r1, [r1]
+ cmp r1, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ add r0, r0, #1
+ cmp r0, r2
+ blt _022139F0
+_02213A10:
+ ldr r0, _02213AFC ; =0x02217130
+ ldr r0, [r0]
+ cmp r0, r2
+ beq _02213A34
+ ldr r0, _02213B00 ; =0x02216A1C
+ ldr r1, _02213B04 ; =0x0221696C
+ mov r2, #0
+ mov r3, #0x33
+ bl __msl_assertion_failed
+_02213A34:
+ ldr r1, _02213AF4 ; =0x0221712C
+ ldr r0, _02213AF8 ; =0x02217138
+ ldr r7, [r1]
+ ldr r0, [r0]
+ add r6, r7, #4
+ mov r1, r6, lsl #2
+ bl MOD04_021DD844
+ cmp r0, #0
+ addeq sp, sp, #4
+ mvneq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ ldr r8, _02213AF8 ; =0x02217138
+ mov r5, r7
+ str r0, [r8]
+ cmp r7, r6
+ bge _02213AE0
+ mov sb, #0
+ mov r4, #0x184
+_02213A7C:
+ mov r0, r4
+ bl MOD04_021DD860
+ ldr r1, [r8]
+ str r0, [r1, r5, lsl #2]
+ ldr r0, [r8]
+ ldr r0, [r0, r5, lsl #2]
+ cmp r0, #0
+ bne _02213AD0
+ sub r5, r5, #1
+ cmp r5, r7
+ blt _02213AC4
+ ldr r4, _02213AF8 ; =0x02217138
+_02213AAC:
+ ldr r0, [r4]
+ ldr r0, [r0, r5, lsl #2]
+ bl MOD04_021DD82C
+ sub r5, r5, #1
+ cmp r5, r7
+ bge _02213AAC
+_02213AC4:
+ add sp, sp, #4
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_02213AD0:
+ add r5, r5, #1
+ str sb, [r0]
+ cmp r5, r6
+ blt _02213A7C
+_02213AE0:
+ ldr r1, _02213AF4 ; =0x0221712C
+ mov r0, r7
+ str r6, [r1]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ .align 2, 0
+_02213AF4: .word 0x0221712C
+_02213AF8: .word 0x02217138
+_02213AFC: .word 0x02217130
+_02213B00: .word 0x02216A1C
+_02213B04: .word 0x0221696C
+ arm_func_end MOD79_022139CC
+
+ arm_func_start MOD79_02213B08
+MOD79_02213B08: ; 0x02213B08
+ ldr ip, _02213B14 ; =MOD79_02213510
+ ldr r0, _02213B18 ; =MOD79_02213E84
+ bx ip
+ .align 2, 0
+_02213B14: .word MOD79_02213510
+_02213B18: .word MOD79_02213E84
+ arm_func_end MOD79_02213B08
+
+ arm_func_start MOD79_02213B1C
+MOD79_02213B1C: ; 0x02213B1C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ movs r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ beq _02213B40
+ ldrsb r0, [r8]
+ cmp r0, #0
+ bne _02213B54
+_02213B40:
+ ldr r0, _02213D64 ; =0x02216A50
+ ldr r1, _02213D68 ; =0x02216A44
+ mov r2, #0
+ mov r3, #0x128
+ bl __msl_assertion_failed
+_02213B54:
+ cmp r5, #0
+ bge _02213B70
+ ldr r0, _02213D6C ; =0x02216A60
+ ldr r1, _02213D68 ; =0x02216A44
+ ldr r3, _02213D70 ; =0x00000129
+ mov r2, #0
+ bl __msl_assertion_failed
+_02213B70:
+ cmp r6, #0
+ beq _02213B94
+ cmp r5, #0
+ bne _02213B94
+ ldr r0, _02213D74 ; =0x02216A70
+ ldr r1, _02213D68 ; =0x02216A44
+ ldr r3, _02213D78 ; =0x0000012A
+ mov r2, #0
+ bl __msl_assertion_failed
+_02213B94:
+ cmp r8, #0
+ beq _02213BA8
+ ldrsb r0, [r8]
+ cmp r0, #0
+ bne _02213BB0
+_02213BA8:
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213BB0:
+ cmp r5, #0
+ mvnlt r0, #0
+ ldmltia sp!, {r4, r5, r6, r7, r8, pc}
+ cmp r6, #0
+ beq _02213BD0
+ cmp r5, #0
+ mvneq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+_02213BD0:
+ ldr r0, _02213D7C ; =0x0221713C
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _02213BE4
+ bl MOD79_02213E24
+_02213BE4:
+ bl MOD79_0221381C
+ movs r4, r0
+ mvneq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ mov r1, #0
+ mov r0, r8
+ str r1, [r4, #0xc]
+ bl MOD04_021F0208
+ str r0, [r4, #0x14]
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ bne _02213C24
+ mov r0, r4
+ bl MOD79_02213638
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213C24:
+ cmp r7, #0
+ beq _02213C60
+ ldrsb r0, [r7]
+ cmp r0, #0
+ beq _02213C60
+ mov r0, r7
+ bl MOD04_021F0208
+ str r0, [r4, #0x28]
+ ldr r0, [r4, #0x28]
+ cmp r0, #0
+ bne _02213C60
+ mov r0, r4
+ bl MOD79_02213638
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213C60:
+ ldr r1, [sp, #0x18]
+ ldr r0, [sp, #0x20]
+ str r1, [r4, #0x13c]
+ str r0, [r4, #0x30]
+ ldr r1, [sp, #0x24]
+ ldr r0, [sp, #0x28]
+ str r1, [r4, #0x3c]
+ str r0, [r4, #0x40]
+ ldr r1, [sp, #0x2c]
+ ldr r0, [sp, #0x1c]
+ str r1, [r4, #0x44]
+ str r0, [r4, #0x134]
+ cmp r6, #0
+ movne r0, #1
+ moveq r0, #0
+ str r0, [r4, #0xe0]
+ ldr r0, [r4, #0xe0]
+ cmp r0, #0
+ beq _02213CC4
+ mov r0, r4
+ mov r2, r6
+ mov r3, r5
+ add r1, r4, #0xbc
+ bl MOD79_02212AB4
+ b _02213CD8
+_02213CC4:
+ mov r2, #0x800
+ mov r0, r4
+ mov r3, r2
+ add r1, r4, #0xbc
+ bl MOD79_02212BC4
+_02213CD8:
+ cmp r0, #0
+ bne _02213CF0
+ mov r0, r4
+ bl MOD79_02213638
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213CF0:
+ ldr r0, [sp, #0x18]
+ cmp r0, #0
+ beq _02213D1C
+ mov r0, r4
+ bl MOD79_02214A60
+ cmp r0, #0
+ bne _02213D1C
+ mov r0, r4
+ bl MOD79_02213638
+ mvn r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213D1C:
+ ldr r0, [sp, #0x20]
+ cmp r0, #0
+ beq _02213D5C
+ mov r0, r4
+ bl MOD79_02213E84
+ cmp r0, #0
+ bne _02213D54
+ mov r5, #0xa
+_02213D3C:
+ mov r0, r5
+ bl MOD04_021F0250
+ mov r0, r4
+ bl MOD79_02213E84
+ cmp r0, #0
+ beq _02213D3C
+_02213D54:
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02213D5C:
+ ldr r0, [r4, #4]
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+ .align 2, 0
+_02213D64: .word 0x02216A50
+_02213D68: .word 0x02216A44
+_02213D6C: .word 0x02216A60
+_02213D70: .word 0x00000129
+_02213D74: .word 0x02216A70
+_02213D78: .word 0x0000012A
+_02213D7C: .word 0x0221713C
+ arm_func_end MOD79_02213B1C
+
+ arm_func_start MOD79_02213D80
+MOD79_02213D80: ; 0x02213D80
+ stmdb sp!, {lr}
+ sub sp, sp, #0x1c
+ mov ip, #0
+ str ip, [sp]
+ str ip, [sp, #4]
+ str r1, [sp, #8]
+ str ip, [sp, #0xc]
+ str r2, [sp, #0x10]
+ str r3, [sp, #0x14]
+ mov r1, ip
+ mov r2, ip
+ mov r3, ip
+ bl MOD79_02213B1C
+ add sp, sp, #0x1c
+ ldmia sp!, {pc}
+ arm_func_end MOD79_02213D80
+
+ arm_func_start MOD79_02213DBC
+MOD79_02213DBC: ; 0x02213DBC
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD79_02213378
+ ldr r0, _02213E1C ; =0x0221713C
+ ldr r1, [r0]
+ subs r1, r1, #1
+ str r1, [r0]
+ bne _02213E10
+ bl MOD79_02213384
+ ldr r0, _02213E20 ; =0x02217128
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _02213E00
+ bl MOD04_021DD82C
+ ldr r0, _02213E20 ; =0x02217128
+ mov r1, #0
+ str r1, [r0]
+_02213E00:
+ bl MOD79_02213374
+ bl MOD79_0221337C
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_02213E10:
+ bl MOD79_02213374
+ add sp, sp, #4
+ ldmia sp!, {pc}
+ .align 2, 0
+_02213E1C: .word 0x0221713C
+_02213E20: .word 0x02217128
+ arm_func_end MOD79_02213DBC
+
+ arm_func_start MOD79_02213E24
+MOD79_02213E24: ; 0x02213E24
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD79_02213378
+ ldr r0, _02213E78 ; =0x0221713C
+ ldr r1, [r0]
+ add r1, r1, #1
+ str r1, [r0]
+ cmp r1, #1
+ bne _02213E6C
+ bl MOD79_02213380
+ ldr r1, _02213E7C ; =0x0221695C
+ mov r3, #0x7d
+ ldr r0, _02213E80 ; =0x02216958
+ mov r2, #0xfa
+ str r3, [r1]
+ str r2, [r0]
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_02213E6C:
+ bl MOD79_02213374
+ add sp, sp, #4
+ ldmia sp!, {pc}
+ .align 2, 0
+_02213E78: .word 0x0221713C
+_02213E7C: .word 0x0221695C
+_02213E80: .word 0x02216958
+ arm_func_end MOD79_02213E24
+
+ arm_func_start MOD79_02213E84
+MOD79_02213E84: ; 0x02213E84
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ movs r4, r0
+ bne _02213EA8
+ ldr r0, _02213FE8 ; =0x02216A88
+ ldr r1, _02213FEC ; =0x02216A44
+ mov r2, #0
+ mov r3, #0x5b
+ bl __msl_assertion_failed
+_02213EA8:
+ ldr r0, [r4, #4]
+ bl MOD79_0221358C
+ cmp r0, r4
+ beq _02213ECC
+ ldr r0, _02213FF0 ; =0x02216A94
+ ldr r1, _02213FEC ; =0x02216A44
+ mov r2, #0
+ mov r3, #0x5c
+ bl __msl_assertion_failed
+_02213ECC:
+ ldr r0, [r4, #0x12c]
+ cmp r0, #0
+ addne sp, sp, #4
+ movne r0, #0
+ ldmneia sp!, {r4, r5, pc}
+ mov r0, #1
+ str r0, [r4, #0x12c]
+ ldr r0, [r4, #0x10]
+ cmp r0, #0
+ bne _02213EFC
+ mov r0, r4
+ bl MOD79_02216478
+_02213EFC:
+ ldr r0, [r4, #0x10]
+ cmp r0, #1
+ bne _02213F10
+ mov r0, r4
+ bl MOD79_0221621C
+_02213F10:
+ ldr r0, [r4, #0x10]
+ cmp r0, #2
+ bne _02213F24
+ mov r0, r4
+ bl MOD79_022160C0
+_02213F24:
+ ldr r0, [r4, #0x10]
+ cmp r0, #3
+ bne _02213F38
+ mov r0, r4
+ bl MOD79_02215E40
+_02213F38:
+ ldr r0, [r4, #0x10]
+ cmp r0, #4
+ bne _02213F4C
+ mov r0, r4
+ bl MOD79_02215DA8
+_02213F4C:
+ ldr r0, [r4, #0x10]
+ cmp r0, #5
+ bne _02213F60
+ mov r0, r4
+ bl MOD79_02215D28
+_02213F60:
+ ldr r0, [r4, #0x10]
+ cmp r0, #6
+ bne _02213F74
+ mov r0, r4
+ bl MOD79_02215AA8
+_02213F74:
+ ldr r0, [r4, #0x10]
+ cmp r0, #7
+ bne _02213F88
+ mov r0, r4
+ bl MOD79_02215174
+_02213F88:
+ ldr r0, [r4, #0x10]
+ cmp r0, #8
+ bne _02213F9C
+ mov r0, r4
+ bl MOD79_0221507C
+_02213F9C:
+ ldr r0, [r4, #0x108]
+ cmp r0, #0
+ beq _02213FB0
+ mov r0, r4
+ bl MOD79_02213410
+_02213FB0:
+ ldr r5, [r4, #0xfc]
+ cmp r5, #0
+ moveq r0, #0
+ streq r0, [r4, #0x12c]
+ beq _02213FDC
+ mov r0, r4
+ bl MOD79_02213FF4
+ mov r0, r4
+ bl MOD79_02212E78
+ mov r0, r4
+ bl MOD79_02213638
+_02213FDC:
+ mov r0, r5
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02213FE8: .word 0x02216A88
+_02213FEC: .word 0x02216A44
+_02213FF0: .word 0x02216A94
+ arm_func_end MOD79_02213E84
+
+ arm_func_start MOD79_02213FF4
+MOD79_02213FF4: ; 0x02213FF4
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr lr, [r0, #0xec]
+ ldr r3, _022140CC ; =0x51EB851F
+ mov r1, lr, lsr #0x1f
+ smull r2, ip, r3, lr
+ mov ip, ip, asr #5
+ add ip, r1, ip
+ cmp ip, #5
+ addls pc, pc, ip, lsl #2
+ b _022140C4
+_02214020: ; jump table
+ b _022140C4 ; case 0
+ b _02214038 ; case 1
+ b _02214038 ; case 2
+ b _02214038 ; case 3
+ b _02214040 ; case 4
+ b _022140BC ; case 5
+_02214038:
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_02214040:
+ ldr r1, _022140D0 ; =0x00000191
+ sub r1, lr, r1
+ cmp r1, #9
+ addls pc, pc, r1, lsl #2
+ b _022140AC
+_02214054: ; jump table
+ b _0221407C ; case 0
+ b _022140AC ; case 1
+ b _0221408C ; case 2
+ b _0221409C ; case 3
+ b _022140AC ; case 4
+ b _022140AC ; case 5
+ b _022140AC ; case 6
+ b _022140AC ; case 7
+ b _022140AC ; case 8
+ b _0221409C ; case 9
+_0221407C:
+ mov r1, #9
+ str r1, [r0, #0x38]
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_0221408C:
+ mov r1, #0xa
+ str r1, [r0, #0x38]
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_0221409C:
+ mov r1, #0xb
+ str r1, [r0, #0x38]
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_022140AC:
+ mov r1, #8
+ str r1, [r0, #0x38]
+ add sp, sp, #4
+ ldmia sp!, {pc}
+_022140BC:
+ mov r1, #0xc
+ str r1, [r0, #0x38]
+_022140C4:
+ add sp, sp, #4
+ ldmia sp!, {pc}
+ .align 2, 0
+_022140CC: .word 0x51EB851F
+_022140D0: .word 0x00000191
+ arm_func_end MOD79_02213FF4
+
+ arm_func_start MOD79_022140D4
+MOD79_022140D4: ; 0x022140D4
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #4
+ movs sl, r0
+ bne _022140F8
+ ldr r0, _02214330 ; =0x02216AD0
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214338 ; =0x00000404
+ mov r2, #0
+ bl __msl_assertion_failed
+_022140F8:
+ ldr r0, [sl, #0x13c]
+ cmp r0, #0
+ bne _02214118
+ ldr r0, _0221433C ; =0x02216AE8
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214340 ; =0x00000405
+ mov r2, #0
+ bl __msl_assertion_failed
+_02214118:
+ ldr r0, [sl, #0x140]
+ cmp r0, #0
+ bne _02214138
+ ldr r0, _02214344 ; =0x02216AFC
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214348 ; =0x00000406
+ mov r2, #0
+ bl __msl_assertion_failed
+_02214138:
+ ldr r0, [sl, #0x13c]
+ ldr r0, [r0]
+ bl MOD04_021EF06C
+ mov r4, r0
+ ldr r0, [sl, #0x140]
+ bl MOD04_021EF06C
+ cmp r4, r0
+ beq _0221416C
+ ldr r0, _0221434C ; =0x02216B1C
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214350 ; =0x00000407
+ mov r2, #0
+ bl __msl_assertion_failed
+_0221416C:
+ ldr r0, [sl, #0x144]
+ cmp r0, #0
+ bge _0221418C
+ ldr r0, _02214354 ; =0x02216B70
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214358 ; =0x00000408
+ mov r2, #0
+ bl __msl_assertion_failed
+_0221418C:
+ ldr r0, [sl, #0x140]
+ bl MOD04_021EF06C
+ ldr r1, [sl, #0x144]
+ cmp r1, r0
+ ble _022141B4
+ ldr r0, _0221435C ; =0x02216B94
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214360 ; =0x00000409
+ mov r2, #0
+ bl __msl_assertion_failed
+_022141B4:
+ ldr r0, [sl, #0x140]
+ add sb, sl, #0x140
+ bl MOD04_021EF06C
+ ldr r1, [sl, #0x5c]
+ mov r7, r0
+ cmp r1, #0
+ beq _0221421C
+ mov r0, sl
+ bl MOD79_02212554
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r1, [sl, #0x60]
+ ldr r0, [sl, #0x5c]
+ cmp r1, r0
+ addlt sp, sp, #4
+ movlt r0, #2
+ ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ add r0, sl, #0x50
+ bl MOD79_0221262C
+ ldr r0, [sl, #0x144]
+ cmp r0, r7
+ addeq sp, sp, #4
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_0221421C:
+ ldr r1, [sb, #4]
+ cmp r1, r7
+ bge _022142E0
+ ldr r6, _02214364 ; =0x02216BE4
+ ldr fp, _02214334 ; =0x02216ADC
+ mov r5, #0
+ mov r4, #1
+_02214238:
+ ldr r0, [sb]
+ bl MOD04_021EEFFC
+ movs r8, r0
+ bne _0221425C
+ ldr r3, _02214368 ; =0x0000042F
+ mov r0, r6
+ mov r1, fp
+ mov r2, r5
+ bl __msl_assertion_failed
+_0221425C:
+ ldr r0, [sb, #4]
+ mov r1, sl
+ cmp r0, #0
+ moveq r2, r4
+ movne r2, r5
+ mov r0, r8
+ bl MOD79_02214378
+ cmp r0, #0
+ bne _022142B8
+ ldr r0, [sl, #0xfc]
+ cmp r0, #0
+ beq _02214298
+ ldr r0, [sl, #0x38]
+ cmp r0, #0
+ bne _022142AC
+_02214298:
+ ldr r0, _0221436C ; =0x02216BF0
+ ldr r1, _02214334 ; =0x02216ADC
+ ldr r3, _02214370 ; =0x0000043B
+ mov r2, #0
+ bl __msl_assertion_failed
+_022142AC:
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_022142B8:
+ cmp r0, #2
+ addeq sp, sp, #4
+ moveq r0, #2
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r0, [sb, #4]
+ add r0, r0, #1
+ str r0, [sb, #4]
+ ldr r1, [sb, #4]
+ cmp r1, r7
+ blt _02214238
+_022142E0:
+ ldr r0, [sl, #0x13c]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0
+ beq _02214318
+ ldr r0, _02214374 ; =0x02216C1C
+ bl strlen
+ mov r2, r0
+ ldr r1, _02214374 ; =0x02216C1C
+ mov r0, sl
+ bl MOD79_02212F04
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02214318:
+ ldr r0, [sl, #0x5c]
+ cmp r0, #0
+ movne r0, #2
+ moveq r0, #1
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_02214330: .word 0x02216AD0
+_02214334: .word 0x02216ADC
+_02214338: .word 0x00000404
+_0221433C: .word 0x02216AE8
+_02214340: .word 0x00000405
+_02214344: .word 0x02216AFC
+_02214348: .word 0x00000406
+_0221434C: .word 0x02216B1C
+_02214350: .word 0x00000407
+_02214354: .word 0x02216B70
+_02214358: .word 0x00000408
+_0221435C: .word 0x02216B94
+_02214360: .word 0x00000409
+_02214364: .word 0x02216BE4
+_02214368: .word 0x0000042F
+_0221436C: .word 0x02216BF0
+_02214370: .word 0x0000043B
+_02214374: .word 0x02216C1C
+ arm_func_end MOD79_022140D4
+
+ arm_func_start MOD79_02214378
+MOD79_02214378: ; 0x02214378
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr ip, _02214554 ; =0x00000808
+ sub sp, sp, ip
+ mov r6, r0
+ ldr r3, [r6, #4]
+ mvn r0, #0
+ mov r5, r1
+ mov r4, r2
+ cmp r3, r0
+ bne _022144D8
+ mov r2, #0
+ str r2, [r6, #4]
+ ldr r0, [r5, #0x13c]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0
+ bne _02214410
+ ldr r0, [r6]
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _022143D8
+ ldr r0, _02214558 ; =0x02216C48
+ ldr r1, _0221455C ; =0x02216ADC
+ ldr r3, _02214560 ; =0x000003A9
+ bl __msl_assertion_failed
+_022143D8:
+ cmp r4, #0
+ beq _022143F8
+ ldr r1, [r6]
+ add r0, sp, #8
+ ldr r2, [r1, #4]
+ ldr r1, _02214564 ; =0x02216C68
+ bl sprintf
+ b _02214498
+_022143F8:
+ ldr r1, [r6]
+ add r0, sp, #8
+ ldr r2, [r1, #4]
+ ldr r1, _02214568 ; =0x02216C6C
+ bl sprintf
+ b _02214498
+_02214410:
+ ldr r3, [r6]
+ ldr r1, [r3]
+ cmp r1, #0
+ bne _02214440
+ cmp r4, #0
+ ldrne r2, _0221456C ; =0x02216C74
+ ldr r3, [r3, #4]
+ ldreq r2, _02214570 ; =0x02216C9C
+ ldr r1, _02214574 ; =0x02216CC8
+ add r0, sp, #8
+ bl sprintf
+ b _02214498
+_02214440:
+ sub r0, r1, #1
+ cmp r0, #1
+ bhi _02214488
+ cmp r1, #1
+ ldreq r1, [r3, #0xc]
+ ldreq r0, [r3, #0x10]
+ ldrne r1, [r3, #0x10]
+ ldrne r0, [r3, #0x14]
+ cmp r4, #0
+ str r1, [sp]
+ str r0, [sp, #4]
+ ldrne r2, _0221456C ; =0x02216C74
+ ldr r3, [r3, #4]
+ ldreq r2, _02214570 ; =0x02216C9C
+ ldr r1, _02214578 ; =0x02216CF8
+ add r0, sp, #8
+ bl sprintf
+ b _02214498
+_02214488:
+ ldr r0, _0221457C ; =0x02216D4C
+ ldr r1, _0221455C ; =0x02216ADC
+ mov r3, #0x3dc
+ bl __msl_assertion_failed
+_02214498:
+ add r0, sp, #8
+ bl strlen
+ mov r2, r0
+ add r1, sp, #8
+ mov r0, r5
+ bl MOD79_02212F04
+ cmp r0, #0
+ ldreq ip, _02214554 ; =0x00000808
+ moveq r0, #0
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, pc}
+ cmp r0, #2
+ ldreq ip, _02214554 ; =0x00000808
+ moveq r0, #2
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, pc}
+_022144D8:
+ ldr r0, [r6]
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _02214500
+ mov r0, r6
+ mov r1, r5
+ bl MOD79_022147E8
+ ldr ip, _02214554 ; =0x00000808
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, pc}
+_02214500:
+ cmp r0, #1
+ bne _02214520
+ mov r0, r6
+ mov r1, r5
+ bl MOD79_0221467C
+ ldr ip, _02214554 ; =0x00000808
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, pc}
+_02214520:
+ cmp r0, #2
+ beq _0221453C
+ ldr r0, _02214580 ; =0x02216D50
+ ldr r1, _0221455C ; =0x02216ADC
+ ldr r3, _02214584 ; =0x000003F5
+ mov r2, #0
+ bl __msl_assertion_failed
+_0221453C:
+ mov r0, r6
+ mov r1, r5
+ bl MOD79_02214588
+ ldr ip, _02214554 ; =0x00000808
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_02214554: .word 0x00000808
+_02214558: .word 0x02216C48
+_0221455C: .word 0x02216ADC
+_02214560: .word 0x000003A9
+_02214564: .word 0x02216C68
+_02214568: .word 0x02216C6C
+_0221456C: .word 0x02216C74
+_02214570: .word 0x02216C9C
+_02214574: .word 0x02216CC8
+_02214578: .word 0x02216CF8
+_0221457C: .word 0x02216D4C
+_02214580: .word 0x02216D50
+_02214584: .word 0x000003F5
+ arm_func_end MOD79_02214378
+
+ arm_func_start MOD79_02214588
+MOD79_02214588: ; 0x02214588
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r0, [r5, #4]
+ mov r4, r1
+ cmp r0, #0
+ bge _022145B8
+ ldr r0, _02214668 ; =0x02216D74
+ ldr r1, _0221466C ; =0x02216ADC
+ ldr r3, _02214670 ; =0x0000036E
+ mov r2, #0
+ bl __msl_assertion_failed
+_022145B8:
+ ldr r0, [r5]
+ ldr r1, [r0, #0xc]
+ cmp r1, #0
+ addeq sp, sp, #4
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r0, [r5, #4]
+ cmp r0, r1
+ blt _022145F0
+ ldr r0, _02214674 ; =0x02216D84
+ ldr r1, _0221466C ; =0x02216ADC
+ ldr r3, _02214678 ; =0x00000375
+ mov r2, #0
+ bl __msl_assertion_failed
+_022145F0:
+ ldr r1, [r5]
+ ldr r3, [r5, #4]
+ ldr r0, [r1, #0xc]
+ ldr r1, [r1, #8]
+ sub r2, r0, r3
+ cmp r2, #0x8000
+ movge r2, #0x8000
+ mov r0, r4
+ add r1, r1, r3
+ bl MOD79_02212F68
+ mvn r1, #0
+ cmp r0, r1
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r1, [r5, #4]
+ add r1, r1, r0
+ str r1, [r5, #4]
+ ldr r2, [r5]
+ ldr r1, [r5, #4]
+ ldr r2, [r2, #0xc]
+ cmp r2, r1
+ addeq sp, sp, #4
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, pc}
+ cmp r0, #0
+ bne _022145F0
+ mov r0, #2
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02214668: .word 0x02216D74
+_0221466C: .word 0x02216ADC
+_02214670: .word 0x0000036E
+_02214674: .word 0x02216D84
+_02214678: .word 0x00000375
+ arm_func_end MOD79_02214588
+
+ arm_func_start MOD79_0221467C
+MOD79_0221467C: ; 0x0221467C
+ stmdb sp!, {r4, r5, lr}
+ ldr ip, _022147CC ; =0x00001004
+ sub sp, sp, ip
+ mov r5, r0
+ ldr r0, [r5, #4]
+ mov r4, r1
+ cmp r0, #0
+ bge _022146B0
+ ldr r0, _022147D0 ; =0x02216D74
+ ldr r1, _022147D4 ; =0x02216ADC
+ ldr r3, _022147D8 ; =0x00000336
+ mov r2, #0
+ bl __msl_assertion_failed
+_022146B0:
+ ldr r1, [r5, #4]
+ ldr r0, [r5, #0xc]
+ cmp r1, r0
+ blt _022146D4
+ ldr r0, _022147DC ; =0x02216DB4
+ ldr r1, _022147D4 ; =0x02216ADC
+ ldr r3, _022147E0 ; =0x00000337
+ mov r2, #0
+ bl __msl_assertion_failed
+_022146D4:
+ ldr r0, [r5, #8]
+ bl ftell
+ ldr r1, [r5, #4]
+ cmp r1, r0
+ beq _022146FC
+ ldr r0, _022147E4 ; =0x02216DDC
+ ldr r1, _022147D4 ; =0x02216ADC
+ mov r2, #0
+ mov r3, #0x338
+ bl __msl_assertion_failed
+_022146FC:
+ ldr r3, [r5, #8]
+ add r0, sp, #0
+ mov r1, #1
+ mov r2, #0x1000
+ bl fread
+ mov r2, r0
+ cmp r2, #0
+ bgt _0221473C
+ ldr ip, _022147CC ; =0x00001004
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #0xe
+ str r0, [r4, #0x38]
+ add sp, sp, ip
+ mov r0, #0
+ ldmia sp!, {r4, r5, pc}
+_0221473C:
+ ldr r0, [r5, #4]
+ add r0, r0, r2
+ str r0, [r5, #4]
+ ldr r1, [r5, #4]
+ ldr r0, [r5, #0xc]
+ cmp r1, r0
+ ble _02214778
+ ldr ip, _022147CC ; =0x00001004
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #0xe
+ str r0, [r4, #0x38]
+ add sp, sp, ip
+ mov r0, #0
+ ldmia sp!, {r4, r5, pc}
+_02214778:
+ add r1, sp, #0
+ mov r0, r4
+ bl MOD79_02212F04
+ cmp r0, #0
+ ldreq ip, _022147CC ; =0x00001004
+ moveq r0, #0
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r2, [r5, #4]
+ ldr r1, [r5, #0xc]
+ cmp r2, r1
+ ldreq ip, _022147CC ; =0x00001004
+ moveq r0, #1
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+ cmp r0, #1
+ beq _022146FC
+ mov r0, #2
+ ldr ip, _022147CC ; =0x00001004
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_022147CC: .word 0x00001004
+_022147D0: .word 0x02216D74
+_022147D4: .word 0x02216ADC
+_022147D8: .word 0x00000336
+_022147DC: .word 0x02216DB4
+_022147E0: .word 0x00000337
+_022147E4: .word 0x02216DDC
+ arm_func_end MOD79_0221467C
+
+ arm_func_start MOD79_022147E8
+MOD79_022147E8: ; 0x022147E8
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ ldr r0, [r4, #4]
+ mov sl, r1
+ cmp r0, #0
+ bge _02214818
+ ldr r0, _022149BC ; =0x02216D74
+ ldr r1, _022149C0 ; =0x02216ADC
+ ldr r3, _022149C4 ; =0x000002E7
+ mov r2, #0
+ bl __msl_assertion_failed
+_02214818:
+ ldr r0, [r4]
+ ldr r1, [r0, #0xc]
+ cmp r1, #0
+ addeq sp, sp, #4
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r0, [r4, #4]
+ cmp r0, r1
+ blt _02214850
+ ldr r0, _022149C8 ; =0x02216E14
+ ldr r1, _022149C0 ; =0x02216ADC
+ ldr r3, _022149CC ; =0x000002EE
+ mov r2, #0
+ bl __msl_assertion_failed
+_02214850:
+ ldr r0, [sl, #0x13c]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0
+ bne _02214968
+ ldr r1, [r4]
+ ldr r0, [r1, #0x10]
+ cmp r0, #0
+ beq _02214968
+ ldr r0, _022149D0 ; =0x02216738
+ ldr r7, [r1, #8]
+ ldrb r3, [r0]
+ ldrb r2, [r0, #1]
+ ldrb r1, [r0, #2]
+ ldrb r0, [r0, #3]
+ strb r3, [sp]
+ strb r2, [sp, #1]
+ strb r1, [sp, #2]
+ strb r0, [sp, #3]
+ ldrsb r8, [r7]
+ mov sb, #0
+ cmp r8, #0
+ beq _0221495C
+ mov fp, sb
+ mov r4, #3
+ mov r5, #0x2b
+_022148B4:
+ ldr r0, _022149D4 ; =0x02216E40
+ mov r1, r8
+ bl strchr
+ cmp r0, #0
+ beq _022148D8
+ mov r1, r8
+ add r0, sl, #0x50
+ bl MOD79_022126A4
+ b _0221494C
+_022148D8:
+ cmp r8, #0x20
+ bne _022148F0
+ mov r1, r5
+ add r0, sl, #0x50
+ bl MOD79_022126A4
+ b _0221494C
+_022148F0:
+ mov r0, r8, asr #3
+ add r0, r8, r0, lsr #28
+ mov r6, r0, asr #4
+ cmp r6, #0x10
+ blt _02214918
+ ldr r0, _022149D8 ; =0x02216E84
+ ldr r1, _022149C0 ; =0x02216ADC
+ ldr r3, _022149DC ; =0x0000030D
+ mov r2, fp
+ bl __msl_assertion_failed
+_02214918:
+ ldr r0, _022149E0 ; =0x02216E94
+ mov r1, r8, lsr #0x1f
+ ldrsb r2, [r0, r6]
+ rsb r0, r1, r8, lsl #28
+ add r1, r1, r0, ror #28
+ ldr r0, _022149E0 ; =0x02216E94
+ strb r2, [sp, #1]
+ ldrsb r2, [r0, r1]
+ add r1, sp, #0
+ add r0, sl, #0x50
+ strb r2, [sp, #2]
+ mov r2, r4
+ bl MOD79_02212794
+_0221494C:
+ add sb, sb, #1
+ ldrsb r8, [r7, sb]
+ cmp r8, #0
+ bne _022148B4
+_0221495C:
+ add sp, sp, #4
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02214968:
+ ldr r1, [r4]
+ ldr r0, [r4, #4]
+ ldr r2, [r1, #0xc]
+ ldr r1, [r1, #8]
+ sub r5, r2, r0
+ mov r0, sl
+ mov r2, r5
+ bl MOD79_02212F68
+ mvn r1, #0
+ cmp r0, r1
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r1, [r4, #4]
+ cmp r0, r5
+ add r0, r1, r0
+ str r0, [r4, #4]
+ moveq r0, #1
+ movne r0, #2
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_022149BC: .word 0x02216D74
+_022149C0: .word 0x02216ADC
+_022149C4: .word 0x000002E7
+_022149C8: .word 0x02216E14
+_022149CC: .word 0x000002EE
+_022149D0: .word 0x02216738
+_022149D4: .word 0x02216E40
+_022149D8: .word 0x02216E84
+_022149DC: .word 0x0000030D
+_022149E0: .word 0x02216E94
+ arm_func_end MOD79_022147E8
+
+ arm_func_start MOD79_022149E4
+MOD79_022149E4: ; 0x022149E4
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ ldr r0, [r6, #0x140]
+ cmp r0, #0
+ beq _02214A38
+ bl MOD04_021EF06C
+ mov r4, r0
+ cmp r4, #0
+ mov r5, #0
+ ble _02214A28
+_02214A0C:
+ ldr r0, [r6, #0x140]
+ mov r1, r5
+ bl MOD04_021EEFFC
+ bl MOD79_02214BF4
+ add r5, r5, #1
+ cmp r5, r4
+ blt _02214A0C
+_02214A28:
+ ldr r0, [r6, #0x140]
+ bl MOD04_021EF074
+ mov r0, #0
+ str r0, [r6, #0x140]
+_02214A38:
+ ldr r0, [r6, #0x13c]
+ cmp r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r1, [r0, #0x10]
+ cmp r1, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ bl MOD79_02215058
+ mov r0, #0
+ str r0, [r6, #0x13c]
+ ldmia sp!, {r4, r5, r6, pc}
+ arm_func_end MOD79_022149E4
+
+ arm_func_start MOD79_02214A60
+MOD79_02214A60: ; 0x02214A60
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ sub sp, sp, #0x10
+ mov r4, r0
+ ldr r0, [r4, #0x13c]
+ cmp r0, #0
+ bne _02214A8C
+ ldr r0, _02214BE4 ; =0x02216AE8
+ ldr r1, _02214BE8 ; =0x02216ADC
+ mov r2, #0
+ mov r3, #0x278
+ bl __msl_assertion_failed
+_02214A8C:
+ ldr r0, [r4, #0x13c]
+ cmp r0, #0
+ addeq sp, sp, #0x10
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ mov r0, #0
+ str r0, [r4, #0x144]
+ str r0, [r4, #0x148]
+ str r0, [r4, #0x14c]
+ ldr r0, [r4, #0x13c]
+ ldr r0, [r0, #4]
+ str r0, [r4, #0x150]
+ ldr r0, [r4, #0x13c]
+ ldr r0, [r0, #8]
+ str r0, [r4, #0x154]
+ ldr r0, [r4, #0x13c]
+ ldr r0, [r0]
+ bl MOD04_021EF06C
+ mov r7, r0
+ mov r1, r7
+ mov r0, #0x10
+ mov r2, #0
+ bl MOD04_021EF0E4
+ str r0, [r4, #0x140]
+ ldr r0, [r4, #0x140]
+ cmp r0, #0
+ addeq sp, sp, #0x10
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ cmp r7, #0
+ mov r8, #0
+ ble _02214B98
+ add r6, sp, #0
+ mov r5, r8
+_02214B14:
+ ldr r0, [r4, #0x13c]
+ mov r1, r8
+ ldr r0, [r0]
+ bl MOD04_021EEFFC
+ str r5, [r6]
+ str r5, [r6, #4]
+ str r5, [r6, #8]
+ str r5, [r6, #0xc]
+ str r0, [sp]
+ mov r0, r6
+ bl MOD79_02214C5C
+ cmp r0, #0
+ bne _02214B80
+ subs r8, r8, #1
+ bmi _02214B68
+_02214B50:
+ ldr r0, [r4, #0x140]
+ mov r1, r8
+ bl MOD04_021EEFFC
+ bl MOD79_02214BF4
+ subs r8, r8, #1
+ bpl _02214B50
+_02214B68:
+ ldr r0, [r4, #0x140]
+ bl MOD04_021EF074
+ mov r0, #0
+ add sp, sp, #0x10
+ str r0, [r4, #0x140]
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_02214B80:
+ ldr r0, [r4, #0x140]
+ mov r1, r6
+ bl MOD04_021EEFA8
+ add r8, r8, #1
+ cmp r8, r7
+ blt _02214B14
+_02214B98:
+ ldr r0, [r4, #0x13c]
+ ldr r0, [r0]
+ bl MOD04_021EF06C
+ mov r5, r0
+ ldr r0, [r4, #0x140]
+ bl MOD04_021EF06C
+ cmp r5, r0
+ beq _02214BCC
+ ldr r0, _02214BEC ; =0x02216B1C
+ ldr r1, _02214BE8 ; =0x02216ADC
+ ldr r3, _02214BF0 ; =0x000002B1
+ mov r2, #0
+ bl __msl_assertion_failed
+_02214BCC:
+ mov r0, r4
+ bl MOD79_02214D0C
+ str r0, [r4, #0x14c]
+ mov r0, #1
+ add sp, sp, #0x10
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+ .align 2, 0
+_02214BE4: .word 0x02216AE8
+_02214BE8: .word 0x02216ADC
+_02214BEC: .word 0x02216B1C
+_02214BF0: .word 0x000002B1
+ arm_func_end MOD79_02214A60
+
+ arm_func_start MOD79_02214BF4
+MOD79_02214BF4: ; 0x02214BF4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, [r4]
+ ldr r0, [r0]
+ cmp r0, #0
+ ldmeqia sp!, {r4, pc}
+ cmp r0, #1
+ bne _02214C30
+ ldr r0, [r4, #8]
+ cmp r0, #0
+ beq _02214C24
+ bl fclose
+_02214C24:
+ mov r0, #0
+ str r0, [r4, #8]
+ ldmia sp!, {r4, pc}
+_02214C30:
+ cmp r0, #2
+ ldmeqia sp!, {r4, pc}
+ ldr r0, _02214C50 ; =0x02216D4C
+ ldr r1, _02214C54 ; =0x02216ADC
+ ldr r3, _02214C58 ; =0x00000269
+ mov r2, #0
+ bl __msl_assertion_failed
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02214C50: .word 0x02216D4C
+_02214C54: .word 0x02216ADC
+_02214C58: .word 0x00000269
+ arm_func_end MOD79_02214BF4
+
+ arm_func_start MOD79_02214C5C
+MOD79_02214C5C: ; 0x02214C5C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r1, [r4]
+ mvn r0, #0
+ ldr r1, [r1]
+ str r0, [r4, #4]
+ cmp r1, #0
+ beq _02214CFC
+ cmp r1, #1
+ bne _02214CD8
+ ldr r0, [r4, #8]
+ cmp r0, #0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ mov r1, #0
+ mov r2, #2
+ bl fseek
+ cmp r0, #0
+ movne r0, #0
+ ldmneia sp!, {r4, pc}
+ ldr r0, [r4, #8]
+ bl ftell
+ str r0, [r4, #0xc]
+ ldr r1, [r4, #0xc]
+ mvn r0, #0
+ cmp r1, r0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ ldr r0, [r4, #8]
+ bl rewind
+ b _02214CFC
+_02214CD8:
+ cmp r1, #2
+ beq _02214CFC
+ ldr r0, _02214D04 ; =0x02216D4C
+ ldr r1, _02214D08 ; =0x02216ADC
+ mov r2, #0
+ mov r3, #0x244
+ bl __msl_assertion_failed
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+_02214CFC:
+ mov r0, #1
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02214D04: .word 0x02216D4C
+_02214D08: .word 0x02216ADC
+ arm_func_end MOD79_02214C5C
+
+ arm_func_start MOD79_02214D0C
+MOD79_02214D0C: ; 0x02214D0C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r4, [r5, #0x13c]
+ cmp r4, #0
+ bne _02214D38
+ ldr r0, _02214D74 ; =0x02216EA8
+ ldr r1, _02214D78 ; =0x02216ADC
+ mov r2, #0
+ mov r3, #0x20c
+ bl __msl_assertion_failed
+_02214D38:
+ cmp r4, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ beq _02214D64
+ mov r0, r5
+ bl MOD79_02214D7C
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+_02214D64:
+ mov r0, r5
+ bl MOD79_02214F48
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02214D74: .word 0x02216EA8
+_02214D78: .word 0x02216ADC
+ arm_func_end MOD79_02214D0C
+
+ arm_func_start MOD79_02214D7C
+MOD79_02214D7C: ; 0x02214D7C
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r1, _02214F24 ; =0x0221714C
+ mov r8, r0
+ ldr r0, [r1]
+ ldr r7, [r8, #0x13c]
+ cmp r0, #0
+ mov r4, #0
+ bne _02214DD4
+ ldr r0, _02214F28 ; =0x02216EB0
+ bl strlen
+ ldr r5, _02214F24 ; =0x0221714C
+ ldr r3, _02214F2C ; =0x02217148
+ add sl, r0, #0x2f
+ ldr r2, _02214F30 ; =0x02217144
+ add sb, r0, #0x4c
+ ldr r1, _02214F34 ; =0x02217140
+ add r6, r0, #4
+ str r0, [r5]
+ str sl, [r3]
+ str sb, [r2]
+ str r6, [r1]
+_02214DD4:
+ ldr r0, [r7]
+ bl MOD04_021EF06C
+ mov r5, r0
+ cmp r5, #0
+ mov r6, #0
+ ble _02214F10
+ mov fp, r6
+ mov sb, #0x1ec
+_02214DF4:
+ ldr r0, [r7]
+ mov r1, r6
+ bl MOD04_021EEFFC
+ mov sl, r0
+ ldr r0, [sl]
+ cmp r0, #0
+ bne _02214E34
+ ldr r0, _02214F2C ; =0x02217148
+ ldr r1, [r0]
+ ldr r0, [sl, #4]
+ add r4, r4, r1
+ bl strlen
+ add r1, r4, r0
+ ldr r0, [sl, #0xc]
+ add r4, r1, r0
+ b _02214F04
+_02214E34:
+ cmp r0, #1
+ bne _02214EA0
+ ldr r0, _02214F30 ; =0x02217144
+ ldr r1, [r0]
+ ldr r0, [sl, #4]
+ add r4, r4, r1
+ bl strlen
+ add r4, r4, r0
+ ldr r0, [sl, #0xc]
+ bl strlen
+ add r4, r4, r0
+ ldr r0, [sl, #0x10]
+ bl strlen
+ add r4, r4, r0
+ ldr r0, [r8, #0x140]
+ mov r1, r6
+ bl MOD04_021EEFFC
+ movs sl, r0
+ bne _02214E94
+ ldr r0, _02214F38 ; =0x02216ED8
+ ldr r1, _02214F3C ; =0x02216ADC
+ mov r2, fp
+ mov r3, sb
+ bl __msl_assertion_failed
+_02214E94:
+ ldr r0, [sl, #0xc]
+ add r4, r4, r0
+ b _02214F04
+_02214EA0:
+ cmp r0, #2
+ bne _02214EE4
+ ldr r0, _02214F30 ; =0x02217144
+ ldr r1, [r0]
+ ldr r0, [sl, #4]
+ add r4, r4, r1
+ bl strlen
+ add r4, r4, r0
+ ldr r0, [sl, #0x10]
+ bl strlen
+ add r4, r4, r0
+ ldr r0, [sl, #0x14]
+ bl strlen
+ add r1, r4, r0
+ ldr r0, [sl, #0xc]
+ add r4, r1, r0
+ b _02214F04
+_02214EE4:
+ ldr r0, _02214F40 ; =0x02216D4C
+ ldr r1, _02214F3C ; =0x02216ADC
+ ldr r3, _02214F44 ; =0x000001F9
+ mov r2, #0
+ bl __msl_assertion_failed
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02214F04:
+ add r6, r6, #1
+ cmp r6, r5
+ blt _02214DF4
+_02214F10:
+ ldr r0, _02214F34 ; =0x02217140
+ ldr r0, [r0]
+ add r0, r4, r0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_02214F24: .word 0x0221714C
+_02214F28: .word 0x02216EB0
+_02214F2C: .word 0x02217148
+_02214F30: .word 0x02217144
+_02214F34: .word 0x02217140
+_02214F38: .word 0x02216ED8
+_02214F3C: .word 0x02216ADC
+_02214F40: .word 0x02216D4C
+_02214F44: .word 0x000001F9
+ arm_func_end MOD79_02214D7C
+
+ arm_func_start MOD79_02214F48
+MOD79_02214F48: ; 0x02214F48
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #4
+ ldr sl, [r0, #0x13c]
+ mov r6, #0
+ ldr r0, [sl]
+ bl MOD04_021EF06C
+ movs r7, r0
+ addeq sp, sp, #4
+ moveq r0, r6
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ cmp r7, #0
+ mov r8, r6
+ ble _02214FE4
+ ldr fp, _02214FF4 ; =0x02216EE0
+ mov r5, r8
+ mov r4, #0x1b0
+_02214F88:
+ ldr r0, [sl]
+ mov r1, r8
+ bl MOD04_021EEFFC
+ mov sb, r0
+ ldr r0, [sb]
+ cmp r0, #0
+ beq _02214FB8
+ ldr r1, _02214FF8 ; =0x02216ADC
+ mov r0, fp
+ mov r2, r5
+ mov r3, r4
+ bl __msl_assertion_failed
+_02214FB8:
+ ldr r0, [sb, #4]
+ bl strlen
+ add r8, r8, #1
+ ldr r1, [sb, #0xc]
+ add r2, r6, r0
+ ldr r0, [sb, #0x14]
+ add r1, r2, r1
+ add r0, r1, r0, lsl #1
+ cmp r8, r7
+ add r6, r0, #1
+ blt _02214F88
+_02214FE4:
+ sub r0, r7, #1
+ add r0, r6, r0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_02214FF4: .word 0x02216EE0
+_02214FF8: .word 0x02216ADC
+ arm_func_end MOD79_02214F48
+
+ arm_func_start MOD79_02214FFC
+MOD79_02214FFC: ; 0x02214FFC
+ stmdb sp!, {r4, lr}
+ ldr r4, [r0, #0x13c]
+ cmp r4, #0
+ bne _02215020
+ ldr r0, _02215040 ; =0x02216EA8
+ ldr r1, _02215044 ; =0x02216ADC
+ ldr r3, _02215048 ; =0x00000192
+ mov r2, #0
+ bl __msl_assertion_failed
+_02215020:
+ cmp r4, #0
+ ldreq r0, _0221504C ; =0x02216EF8
+ ldmeqia sp!, {r4, pc}
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ ldrne r0, _02215050 ; =0x02216EFC
+ ldreq r0, _02215054 ; =0x02216F40
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02215040: .word 0x02216EA8
+_02215044: .word 0x02216ADC
+_02215048: .word 0x00000192
+_0221504C: .word 0x02216EF8
+_02215050: .word 0x02216EFC
+_02215054: .word 0x02216F40
+ arm_func_end MOD79_02214FFC
+
+ arm_func_start MOD79_02215058
+MOD79_02215058: ; 0x02215058
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, [r4]
+ bl MOD04_021EF074
+ mov r0, r4
+ bl MOD04_021DD82C
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD79_02215058
+
+ arm_func_start MOD79_02215074
+MOD79_02215074: ; 0x02215074
+ ldr r0, [r0, #0x10]
+ bx lr
+ arm_func_end MOD79_02215074
+
+ arm_func_start MOD79_0221507C
+MOD79_0221507C: ; 0x0221507C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ ldr ip, _02215170 ; =0x00002008
+ sub sp, sp, ip
+ mov r5, r0
+ bl MOD04_021F025C
+ mov r4, r0
+ mov r1, #0
+ mov r8, #0x2000
+ add r7, sp, #4
+ add r6, sp, #0
+ b _02215144
+_022150A8:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r6
+ str r8, [sp]
+ bl MOD79_02212FF0
+ cmp r0, #3
+ ldreq ip, _02215170 ; =0x00002008
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ cmp r0, #1
+ ldreq ip, _02215170 ; =0x00002008
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ cmp r0, #2
+ bne _0221511C
+ mov r0, #1
+ str r0, [r5, #0xfc]
+ ldr r1, [r5, #0x104]
+ cmp r1, #0
+ ldrle ip, _02215170 ; =0x00002008
+ addle sp, sp, ip
+ ldmleia sp!, {r4, r5, r6, r7, r8, pc}
+ ldr r0, [r5, #0x100]
+ ldr ip, _02215170 ; =0x00002008
+ cmp r0, r1
+ movlt r0, #0xf
+ add sp, sp, ip
+ strlt r0, [r5, #0x38]
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+_0221511C:
+ ldr r2, [sp]
+ mov r0, r5
+ mov r1, r7
+ bl MOD79_02215640
+ cmp r0, #0
+ ldreq ip, _02215170 ; =0x00002008
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
+ bl MOD04_021F025C
+ sub r1, r0, r4
+_02215144:
+ ldr r0, [r5, #0xfc]
+ cmp r0, #0
+ ldrne ip, _02215170 ; =0x00002008
+ addne sp, sp, ip
+ ldmneia sp!, {r4, r5, r6, r7, r8, pc}
+ ldr r0, [r5, #0x158]
+ cmp r1, r0
+ blo _022150A8
+ ldr ip, _02215170 ; =0x00002008
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, r7, r8, pc}
+ .align 2, 0
+_02215170: .word 0x00002008
+ arm_func_end MOD79_0221507C
+
+ arm_func_start MOD79_02215174
+MOD79_02215174: ; 0x02215174
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
+ ldr ip, _02215618 ; =0x00001018
+ sub sp, sp, ip
+ mov r3, #0x1000
+ add r1, sp, #0x13
+ add r2, sp, #4
+ mov r6, r0
+ str r3, [sp, #4]
+ bl MOD79_02212FF0
+ mov r4, r0
+ cmp r4, #3
+ ldreq ip, _02215618 ; =0x00001018
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ cmp r4, #1
+ bne _022151CC
+ ldr r1, [r6, #0x84]
+ ldr r0, [r6, #0x80]
+ cmp r1, r0
+ ldreq ip, _02215618 ; =0x00001018
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_022151CC:
+ cmp r4, #0
+ bne _022151F4
+ ldr r2, [sp, #4]
+ add r1, sp, #0x13
+ add r0, r6, #0x74
+ bl MOD79_02212794
+ cmp r0, #0
+ ldreq ip, _02215618 ; =0x00001018
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_022151F4:
+ ldr r2, [r6, #0x84]
+ ldr r0, [r6, #0x78]
+ ldr r1, _0221561C ; =0x02216F64
+ add r5, r0, r2
+ mov r0, r5
+ str r2, [r6, #0xf4]
+ bl strstr
+ cmp r0, #0
+ bne _02215224
+ ldr r1, _02215620 ; =0x02216F6C
+ mov r0, r5
+ bl strstr
+_02215224:
+ cmp r0, #0
+ beq _022155E0
+ mov r1, #0
+ strb r1, [r0, #2]
+ ldr r7, [r6, #0x78]
+ add r3, r0, #2
+ ldr r1, [r6, #0x80]
+ sub r2, r3, r7
+ str r2, [r6, #0x80]
+ ldr r2, [r6, #0x78]
+ add r4, r0, #4
+ sub r0, r3, r2
+ str r0, [r6, #0xf8]
+ ldr r0, [r6, #0xf8]
+ sub r8, r4, r7
+ str r0, [r6, #0x84]
+ ldr r2, [r6, #0xec]
+ ldr r3, _02215624 ; =0x51EB851F
+ mov r0, r2, lsr #0x1f
+ smull r2, r7, r3, r2
+ mov r7, r7, asr #5
+ add r7, r0, r7
+ cmp r7, #1
+ sub sl, r1, r8
+ bne _022152DC
+ cmp sl, #0
+ beq _022152B0
+ ldr r0, [r6, #0x78]
+ mov r1, r4
+ add r2, sl, #1
+ bl memmove
+ str sl, [r6, #0x80]
+ mov r0, #0
+ str r0, [r6, #0x84]
+ b _022152B8
+_022152B0:
+ add r0, r6, #0x74
+ bl MOD79_0221262C
+_022152B8:
+ mov r1, #0
+ mov r3, #6
+ mov r0, r6
+ mov r2, r1
+ str r3, [r6, #0x10]
+ bl MOD79_02212E00
+ ldr ip, _02215618 ; =0x00001018
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_022152DC:
+ cmp r7, #3
+ bne _02215448
+ ldr r0, [r6, #0x10c]
+ cmp r0, #0xa
+ ldrgt ip, _02215618 ; =0x00001018
+ movgt r0, #1
+ strgt r0, [r6, #0xfc]
+ movgt r0, #0xb
+ addgt sp, sp, ip
+ strgt r0, [r6, #0x38]
+ ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ ldr r1, _02215628 ; =0x02216F70
+ mov r0, r5
+ bl strstr
+ cmp r0, #0
+ beq _02215448
+ add r4, r0, #9
+ ldr r1, _0221562C ; =0x0210430C
+ mov r2, #0
+ b _02215330
+_0221532C:
+ add r4, r4, #1
+_02215330:
+ ldrsb r0, [r4]
+ cmp r0, #0
+ blt _02215344
+ cmp r0, #0x80
+ blt _0221534C
+_02215344:
+ mov r0, r2
+ b _02215358
+_0221534C:
+ mov r0, r0, lsl #1
+ ldrh r0, [r1, r0]
+ and r0, r0, #0x100
+_02215358:
+ cmp r0, #0
+ bne _0221532C
+ mov r3, r4
+ ldr r1, _0221562C ; =0x0210430C
+ mov r2, #0
+ b _02215374
+_02215370:
+ add r3, r3, #1
+_02215374:
+ ldrsb r0, [r3]
+ cmp r0, #0
+ beq _022153AC
+ cmp r0, #0
+ blt _02215390
+ cmp r0, #0x80
+ blt _02215398
+_02215390:
+ mov r0, r2
+ b _022153A4
+_02215398:
+ mov r0, r0, lsl #1
+ ldrh r0, [r1, r0]
+ and r0, r0, #0x100
+_022153A4:
+ cmp r0, #0
+ beq _02215370
+_022153AC:
+ mov r0, #0
+ strb r0, [r3]
+ ldrsb r0, [r4]
+ cmp r0, #0x2f
+ bne _0221541C
+ ldr r0, [r6, #0x18]
+ bl strlen
+ mov r5, r0
+ mov r0, r4
+ bl strlen
+ add r1, r5, #0xe
+ add r0, r1, r0
+ bl MOD04_021DD860
+ str r0, [r6, #0x108]
+ ldr r0, [r6, #0x108]
+ ldr r1, _02215630 ; =0x02216F7C
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r6, #0xfc]
+ streq r0, [r6, #0x38]
+ str r4, [sp]
+ ldrh r3, [r6, #0x20]
+ ldr r0, [r6, #0x108]
+ ldr r2, [r6, #0x18]
+ bl sprintf
+ ldr ip, _02215618 ; =0x00001018
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_0221541C:
+ mov r0, r4
+ bl MOD04_021F0208
+ str r0, [r6, #0x108]
+ ldr r0, [r6, #0x108]
+ ldr ip, _02215618 ; =0x00001018
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r6, #0xfc]
+ add sp, sp, ip
+ streq r0, [r6, #0x38]
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_02215448:
+ ldr r1, _02215634 ; =0x02216F8C
+ mov r0, r5
+ bl strstr
+ movs sb, r0
+ beq _02215530
+ ldr r7, _02215638 ; =0x0221673C
+ add r3, sp, #8
+ mov r2, #5
+_02215468:
+ ldrb r1, [r7], #1
+ ldrb r0, [r7], #1
+ subs r2, r2, #1
+ strb r1, [r3], #1
+ strb r0, [r3], #1
+ bne _02215468
+ ldrb r1, [r7]
+ add r8, sb, #0x10
+ add r0, sp, #8
+ mov r7, r8
+ strb r1, [r3]
+ bl strlen
+ b _022154A0
+_0221549C:
+ add r7, r7, #1
+_022154A0:
+ cmp r7, #0
+ beq _022154CC
+ ldrsb r1, [r7]
+ cmp r1, #0
+ beq _022154CC
+ cmp r1, #0xa
+ beq _022154CC
+ cmp r1, #0xd
+ beq _022154CC
+ cmp r1, #0x20
+ bne _0221549C
+_022154CC:
+ sub r2, r7, r8
+ cmp r2, r0
+ ldrgt ip, _02215618 ; =0x00001018
+ movgt r0, #1
+ strgt r0, [r6, #0xfc]
+ movgt r0, #0x10
+ addgt sp, sp, ip
+ strgt r0, [r6, #0x38]
+ ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ cmp r0, r2
+ bne _02215524
+ add r1, sp, #8
+ mov r0, r8
+ bl strncmp
+ cmp r0, #0
+ ldrge ip, _02215618 ; =0x00001018
+ movge r0, #1
+ strge r0, [r6, #0xfc]
+ movge r0, #0x10
+ addge sp, sp, ip
+ strge r0, [r6, #0x38]
+ ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_02215524:
+ mov r0, r8
+ bl atol
+ str r0, [r6, #0x104]
+_02215530:
+ ldr r1, _0221563C ; =0x02216F9C
+ mov r0, r5
+ bl strstr
+ cmp r0, #0
+ movne r0, #1
+ moveq r0, #0
+ str r0, [r6, #0x110]
+ ldr r0, [r6, #0x110]
+ cmp r0, #0
+ movne r0, #0
+ strneb r0, [r6, #0x114]
+ strne r0, [r6, #0x120]
+ strne r0, [r6, #0x124]
+ strne r0, [r6, #0x128]
+ ldr r0, [r6, #0xc]
+ sub r0, r0, #3
+ cmp r0, #1
+ ldrls ip, _02215618 ; =0x00001018
+ movls r0, #1
+ addls sp, sp, ip
+ strls r0, [r6, #0xfc]
+ ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ mov r0, #8
+ str r0, [r6, #0x10]
+ cmp sb, #0
+ beq _022155B4
+ ldr r0, [r6, #0x104]
+ cmp r0, #0
+ ldreq ip, _02215618 ; =0x00001018
+ moveq r0, #1
+ addeq sp, sp, ip
+ streq r0, [r6, #0xfc]
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_022155B4:
+ cmp sl, #0
+ ldrle ip, _02215618 ; =0x00001018
+ addle sp, sp, ip
+ ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ mov r0, r6
+ mov r1, r4
+ mov r2, sl
+ bl MOD79_02215640
+ ldr ip, _02215618 ; =0x00001018
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+_022155E0:
+ cmp r4, #2
+ ldrne ip, _02215618 ; =0x00001018
+ addne sp, sp, ip
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ mov r0, #1
+ str r0, [r6, #0xfc]
+ mov r0, #7
+ str r0, [r6, #0x38]
+ ldr r0, [r6, #0x48]
+ bl MOD04_021EFB28
+ str r0, [r6, #0x4c]
+ ldr ip, _02215618 ; =0x00001018
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
+ .align 2, 0
+_02215618: .word 0x00001018
+_0221561C: .word 0x02216F64
+_02215620: .word 0x02216F6C
+_02215624: .word 0x51EB851F
+_02215628: .word 0x02216F70
+_0221562C: .word 0x0210430C
+_02215630: .word 0x02216F7C
+_02215634: .word 0x02216F8C
+_02215638: .word 0x0221673C
+_0221563C: .word 0x02216F9C
+ arm_func_end MOD79_02215174
+
+ arm_func_start MOD79_02215640
+MOD79_02215640: ; 0x02215640
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #0xc
+ movs r6, r0
+ mov r5, r1
+ mov r4, r2
+ bne _0221566C
+ ldr r0, _02215884 ; =0x02216FB8
+ ldr r1, _02215888 ; =0x02216FC4
+ ldr r3, _0221588C ; =0x0000035D
+ mov r2, #0
+ bl __msl_assertion_failed
+_0221566C:
+ cmp r5, #0
+ bne _02215688
+ ldr r0, _02215890 ; =0x02216FD4
+ ldr r1, _02215888 ; =0x02216FC4
+ ldr r3, _02215894 ; =0x0000035E
+ mov r2, #0
+ bl __msl_assertion_failed
+_02215688:
+ cmp r4, #0
+ bgt _022156A4
+ ldr r0, _02215898 ; =0x02216FDC
+ ldr r1, _02215888 ; =0x02216FC4
+ ldr r3, _0221589C ; =0x0000035F
+ mov r2, #0
+ bl __msl_assertion_failed
+_022156A4:
+ ldr r0, [r6, #0x110]
+ cmp r0, #0
+ beq _0221586C
+ cmp r4, #0
+ ble _02215860
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #1
+ add r8, r6, #0x124
+ mov sl, #0xa
+ mov r7, #0
+ str r0, [sp]
+ mov fp, #3
+_022156D8:
+ ldr r0, [r6, #0x128]
+ cmp r0, #0
+ bne _02215780
+ mov r0, r5
+ mov r1, sl
+ bl strchr
+ movs sb, r0
+ beq _02215764
+ mov r0, r6
+ mov r1, r5
+ sub r2, sb, r5
+ bl MOD79_022158A8
+ add r1, sb, #1
+ sub r2, r1, r5
+ mov r0, r6
+ mov r5, r1
+ sub r4, r4, r2
+ bl MOD79_02215984
+ str r0, [r6, #0x124]
+ ldr r1, [r6, #0x124]
+ mvn r0, #0
+ cmp r1, r0
+ bne _02215750
+ mov r0, #1
+ str r0, [r6, #0xfc]
+ mov r0, #7
+ str r0, [r6, #0x38]
+ add sp, sp, #0xc
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02215750:
+ cmp r1, #0
+ ldrne r0, [sp]
+ streq fp, [r6, #0x128]
+ strne r0, [r6, #0x128]
+ b _02215858
+_02215764:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MOD79_022158A8
+ add sp, sp, #0xc
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02215780:
+ cmp r0, #1
+ bne _022157DC
+ ldr sb, [r6, #0x124]
+ mov r0, r6
+ cmp sb, r4
+ movge sb, r4
+ mov r1, r5
+ mov r2, sb
+ bl MOD79_022159E4
+ cmp r0, #0
+ addeq sp, sp, #0xc
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r0, [r8]
+ add r5, r5, sb
+ sub r0, r0, sb
+ str r0, [r8]
+ ldr r0, [r6, #0x124]
+ sub r4, r4, sb
+ cmp r0, #0
+ ldreq r0, [sp, #4]
+ streq r0, [r6, #0x128]
+ b _02215858
+_022157DC:
+ cmp r0, #2
+ bne _02215824
+ mov r0, r5
+ mov r1, sl
+ bl strchr
+ cmp r0, #0
+ addeq sp, sp, #0xc
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ strb r7, [r6, #0x114]
+ str r7, [r6, #0x120]
+ add r0, r0, #1
+ sub r1, r0, r5
+ str r7, [r6, #0x124]
+ mov r5, r0
+ str r7, [r6, #0x128]
+ sub r4, r4, r1
+ b _02215858
+_02215824:
+ cmp r0, #3
+ moveq r0, #1
+ addeq sp, sp, #0xc
+ streq r0, [r6, #0xfc]
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r0, _022158A0 ; =0x02216FE4
+ ldr r1, _02215888 ; =0x02216FC4
+ ldr r3, _022158A4 ; =0x000003E3
+ mov r2, #0
+ bl __msl_assertion_failed
+ add sp, sp, #0xc
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_02215858:
+ cmp r4, #0
+ bgt _022156D8
+_02215860:
+ add sp, sp, #0xc
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_0221586C:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MOD79_022159E4
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_02215884: .word 0x02216FB8
+_02215888: .word 0x02216FC4
+_0221588C: .word 0x0000035D
+_02215890: .word 0x02216FD4
+_02215894: .word 0x0000035E
+_02215898: .word 0x02216FDC
+_0221589C: .word 0x0000035F
+_022158A0: .word 0x02216FE4
+_022158A4: .word 0x000003E3
+ arm_func_end MOD79_02215640
+
+ arm_func_start MOD79_022158A8
+MOD79_022158A8: ; 0x022158A8
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ movs r4, r0
+ mov r7, r1
+ mov r6, r2
+ bne _022158D4
+ ldr r0, _0221596C ; =0x02216FB8
+ ldr r1, _02215970 ; =0x02216FC4
+ ldr r3, _02215974 ; =0x00000333
+ mov r2, #0
+ bl __msl_assertion_failed
+_022158D4:
+ cmp r7, #0
+ bne _022158F0
+ ldr r0, _02215978 ; =0x02216FD4
+ ldr r1, _02215970 ; =0x02216FC4
+ mov r2, #0
+ mov r3, #0x334
+ bl __msl_assertion_failed
+_022158F0:
+ cmp r6, #0
+ bge _0221590C
+ ldr r0, _0221597C ; =0x02216FE8
+ ldr r1, _02215970 ; =0x02216FC4
+ ldr r3, _02215980 ; =0x00000335
+ mov r2, #0
+ bl __msl_assertion_failed
+_0221590C:
+ cmp r6, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r3, [r4, #0x120]
+ cmp r3, #0xa
+ addge sp, sp, #4
+ ldmgeia sp!, {r4, r5, r6, r7, pc}
+ rsb r5, r3, #0xa
+ cmp r5, r6
+ movge r5, r6
+ add r0, r4, #0x114
+ mov r1, r7
+ mov r2, r5
+ add r0, r0, r3
+ bl memcpy
+ ldr r0, [r4, #0x120]
+ mov r1, #0
+ add r0, r0, r5
+ str r0, [r4, #0x120]
+ ldr r0, [r4, #0x120]
+ add r0, r4, r0
+ strb r1, [r0, #0x114]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0221596C: .word 0x02216FB8
+_02215970: .word 0x02216FC4
+_02215974: .word 0x00000333
+_02215978: .word 0x02216FD4
+_0221597C: .word 0x02216FE8
+_02215980: .word 0x00000335
+ arm_func_end MOD79_022158A8
+
+ arm_func_start MOD79_02215984
+MOD79_02215984: ; 0x02215984
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ldr r1, [r0, #0x120]
+ add r4, r0, #0x114
+ cmp r1, #0
+ bne _022159B0
+ ldr r0, _022159D4 ; =0x02216FF4
+ ldr r1, _022159D8 ; =0x02216FC4
+ ldr r3, _022159DC ; =0x00000321
+ mov r2, #0
+ bl __msl_assertion_failed
+_022159B0:
+ ldr r1, _022159E0 ; =0x02216FF8
+ add r2, sp, #0
+ mov r0, r4
+ bl sscanf
+ cmp r0, #1
+ mvnne r0, #0
+ ldreq r0, [sp]
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_022159D4: .word 0x02216FF4
+_022159D8: .word 0x02216FC4
+_022159DC: .word 0x00000321
+_022159E0: .word 0x02216FF8
+ arm_func_end MOD79_02215984
+
+ arm_func_start MOD79_022159E4
+MOD79_022159E4: ; 0x022159E4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, [r4, #0x100]
+ mov lr, #0
+ add r0, r0, r2
+ str r0, [r4, #0x100]
+ ldr r3, [r4, #0x100]
+ ldr r0, [r4, #0x104]
+ mov ip, lr
+ cmp r3, r0
+ beq _02215A1C
+ ldr r0, [r4, #0x130]
+ cmp r0, #0
+ beq _02215A24
+_02215A1C:
+ mov r0, #1
+ str r0, [r4, #0xfc]
+_02215A24:
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ bne _02215A50
+ add r0, r4, #0xbc
+ bl MOD79_02212794
+ cmp r0, #0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ ldr lr, [r4, #0xc0]
+ ldr ip, [r4, #0xc8]
+ b _02215A90
+_02215A50:
+ cmp r0, #1
+ bne _02215A84
+ cmp r2, #0
+ beq _02215A78
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #0xd
+ str r0, [r4, #0x38]
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+_02215A78:
+ mov lr, r1
+ mov ip, r2
+ b _02215A90
+_02215A84:
+ cmp r0, #2
+ moveq lr, r1
+ moveq ip, r2
+_02215A90:
+ mov r0, r4
+ mov r1, lr
+ mov r2, ip
+ bl MOD79_02212E00
+ mov r0, #1
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD79_022159E4
+
+ arm_func_start MOD79_02215AA8
+MOD79_02215AA8: ; 0x02215AA8
+ stmdb sp!, {r4, r5, lr}
+ ldr ip, _02215BD0 ; =0x00000404
+ sub sp, sp, ip
+ mov r3, #0x400
+ add r1, sp, #4
+ add r2, sp, #0
+ mov r4, r0
+ str r3, [sp]
+ bl MOD79_02212FF0
+ mov r5, r0
+ cmp r5, #3
+ ldreq ip, _02215BD0 ; =0x00000404
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+ cmp r5, #1
+ bne _02215B00
+ ldr r1, [r4, #0x84]
+ ldr r0, [r4, #0x80]
+ cmp r1, r0
+ ldreq ip, _02215BD0 ; =0x00000404
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+_02215B00:
+ cmp r5, #0
+ bne _02215B28
+ ldr r2, [sp]
+ add r1, sp, #4
+ add r0, r4, #0x74
+ bl MOD79_02212794
+ cmp r0, #0
+ ldreq ip, _02215BD0 ; =0x00000404
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+_02215B28:
+ ldr r0, [r4, #0x78]
+ ldr r1, _02215BD4 ; =0x02216FFC
+ bl strstr
+ cmp r0, #0
+ beq _02215B98
+ mov r1, #0
+ strb r1, [r0]
+ ldr r1, [r4, #0x78]
+ sub r5, r0, r1
+ add r1, r5, #1
+ mov r0, r4
+ str r1, [r4, #0xf8]
+ bl MOD79_02215BD8
+ cmp r0, #0
+ ldreq ip, _02215BD0 ; =0x00000404
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, r5, pc}
+ add r3, r5, #2
+ mov r1, #0
+ str r3, [r4, #0x84]
+ mov r3, #7
+ mov r0, r4
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ ldr ip, _02215BD0 ; =0x00000404
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, pc}
+_02215B98:
+ cmp r5, #2
+ ldrne ip, _02215BD0 ; =0x00000404
+ addne sp, sp, ip
+ ldmneia sp!, {r4, r5, pc}
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #7
+ str r0, [r4, #0x38]
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ str r0, [r4, #0x4c]
+ ldr ip, _02215BD0 ; =0x00000404
+ add sp, sp, ip
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02215BD0: .word 0x00000404
+_02215BD4: .word 0x02216FFC
+ arm_func_end MOD79_02215AA8
+
+ arm_func_start MOD79_02215BD8
+MOD79_02215BD8: ; 0x02215BD8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #0x18
+ movs r4, r0
+ bne _02215BFC
+ ldr r0, _02215D0C ; =0x02216FB8
+ ldr r1, _02215D10 ; =0x02216FC4
+ ldr r3, _02215D14 ; =0x0000024E
+ mov r2, #0
+ bl __msl_assertion_failed
+_02215BFC:
+ ldr r0, [r4, #0x80]
+ cmp r0, #0
+ bgt _02215C1C
+ ldr r0, _02215D18 ; =0x02217000
+ ldr r1, _02215D10 ; =0x02216FC4
+ ldr r3, _02215D1C ; =0x0000024F
+ mov r2, #0
+ bl __msl_assertion_failed
+_02215C1C:
+ add r1, sp, #0x10
+ str r1, [sp]
+ add r0, sp, #0x14
+ str r0, [sp, #4]
+ ldr r0, [r4, #0x78]
+ ldr r1, _02215D20 ; =0x02217020
+ add r2, sp, #8
+ add r3, sp, #0xc
+ bl sscanf
+ mov r3, #0
+ mov ip, #1
+ ldr r2, _02215D24 ; =0x0210430C
+ b _02215C5C
+_02215C50:
+ ldr r1, [sp, #0x14]
+ add r1, r1, #1
+ str r1, [sp, #0x14]
+_02215C5C:
+ ldr lr, [r4, #0x78]
+ ldr r1, [sp, #0x14]
+ ldrsb lr, [lr, r1]
+ cmp lr, #0
+ beq _02215CA0
+ mov r1, ip
+ cmp lr, #0
+ blt _02215C84
+ cmp lr, #0x80
+ movlt r1, r3
+_02215C84:
+ cmp r1, #0
+ movne r1, r3
+ moveq r1, lr, lsl #1
+ ldreqh r1, [r2, r1]
+ andeq r1, r1, #0x100
+ cmp r1, #0
+ bne _02215C50
+_02215CA0:
+ cmp r0, #3
+ bne _02215CC8
+ ldr r1, [sp, #8]
+ cmp r1, #1
+ blt _02215CC8
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x64
+ blt _02215CC8
+ cmp r0, #0x258
+ blt _02215CE4
+_02215CC8:
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #7
+ str r0, [r4, #0x38]
+ add sp, sp, #0x18
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+_02215CE4:
+ str r1, [r4, #0xe4]
+ ldr r1, [sp, #0xc]
+ mov r0, #1
+ str r1, [r4, #0xe8]
+ ldr r1, [sp, #0x10]
+ str r1, [r4, #0xec]
+ ldr r1, [sp, #0x14]
+ str r1, [r4, #0xf0]
+ add sp, sp, #0x18
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02215D0C: .word 0x02216FB8
+_02215D10: .word 0x02216FC4
+_02215D14: .word 0x0000024E
+_02215D18: .word 0x02217000
+_02215D1C: .word 0x0000024F
+_02215D20: .word 0x02217020
+_02215D24: .word 0x0210430C
+ arm_func_end MOD79_02215BD8
+
+ arm_func_start MOD79_02215D28
+MOD79_02215D28: ; 0x02215D28
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ mov r2, #0
+ ldr r0, [r4, #0x48]
+ add r1, sp, #0
+ mov r3, r2
+ bl MOD04_021EFF5C
+ mvn r1, #0
+ cmp r0, r1
+ bne _02215D78
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #5
+ str r0, [r4, #0x38]
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ add sp, sp, #8
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4, pc}
+_02215D78:
+ ldr r0, [sp]
+ cmp r0, #0
+ addeq sp, sp, #8
+ ldmeqia sp!, {r4, pc}
+ mov r1, #0
+ mov r3, #6
+ mov r0, r4
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD79_02215D28
+
+ arm_func_start MOD79_02215DA8
+MOD79_02215DA8: ; 0x02215DA8
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ ldr r4, [r6, #0x148]
+ bl MOD79_022140D4
+ movs r5, r0
+ bne _02215DF8
+ ldr r0, [r6, #0xfc]
+ cmp r0, #0
+ beq _02215DD8
+ ldr r0, [r6, #0x38]
+ cmp r0, #0
+ bne _02215DEC
+_02215DD8:
+ ldr r0, _02215E38 ; =0x02217030
+ ldr r1, _02215E3C ; =0x02216FC4
+ mov r2, #0
+ mov r3, #0x200
+ bl __msl_assertion_failed
+_02215DEC:
+ mov r0, r6
+ bl MOD79_022149E4
+ ldmia sp!, {r4, r5, r6, pc}
+_02215DF8:
+ ldr r0, [r6, #0x148]
+ cmp r4, r0
+ beq _02215E0C
+ mov r0, r6
+ bl MOD79_02212D90
+_02215E0C:
+ cmp r5, #1
+ ldmneia sp!, {r4, r5, r6, pc}
+ mov r0, r6
+ bl MOD79_022149E4
+ mov r1, #0
+ mov r3, #5
+ mov r0, r6
+ mov r2, r1
+ str r3, [r6, #0x10]
+ bl MOD79_02212E00
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_02215E38: .word 0x02217030
+_02215E3C: .word 0x02216FC4
+ arm_func_end MOD79_02215DA8
+
+ arm_func_start MOD79_02215E40
+MOD79_02215E40: ; 0x02215E40
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ ldr r0, [r5, #0x5c]
+ cmp r0, #0
+ bne _02216020
+ ldr r0, [r5, #0x13c]
+ add r4, r5, #0x50
+ cmp r0, #0
+ ldrne r1, _02216080 ; =0x0221705C
+ bne _02215E7C
+ ldr r0, [r5, #0xc]
+ cmp r0, #3
+ ldreq r1, _02216084 ; =0x02217064
+ ldrne r1, _02216088 ; =0x0221706C
+_02215E7C:
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ ldr r0, [r5, #0x15c]
+ cmp r0, #0
+ bne _02215EA4
+ ldr r0, _0221608C ; =0x02217128
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _02215EB8
+_02215EA4:
+ ldr r1, [r5, #0x14]
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ b _02215EC8
+_02215EB8:
+ ldr r1, [r5, #0x24]
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+_02215EC8:
+ ldr r1, _02216090 ; =0x02217074
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ ldrh r0, [r5, #0x20]
+ cmp r0, #0x50
+ bne _02215EF8
+ ldr r2, [r5, #0x18]
+ ldr r1, _02216094 ; =0x02217080
+ mov r0, r4
+ bl MOD79_02212700
+ b _02215F40
+_02215EF8:
+ ldr r1, _02216098 ; =0x02217088
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ ldr r1, [r5, #0x18]
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+ mov r0, r4
+ mov r1, #0x3a
+ bl MOD79_022126A4
+ ldrh r1, [r5, #0x20]
+ mov r0, r4
+ bl MOD79_0221266C
+ mov r0, r4
+ ldr r1, _0221609C ; =0x02216FFC
+ mov r2, #2
+ bl MOD79_02212794
+_02215F40:
+ ldr r0, [r5, #0x28]
+ cmp r0, #0
+ beq _02215F5C
+ ldr r1, _022160A0 ; =0x02217090
+ bl strstr
+ cmp r0, #0
+ bne _02215F6C
+_02215F5C:
+ ldr r1, _022160A0 ; =0x02217090
+ ldr r2, _022160A4 ; =0x0221709C
+ mov r0, r4
+ bl MOD79_02212700
+_02215F6C:
+ ldr r0, [r5, #0x34]
+ cmp r0, #0
+ beq _02215F8C
+ ldr r1, _022160A8 ; =0x022170AC
+ ldr r2, _022160AC ; =0x022170B8
+ mov r0, r4
+ bl MOD79_02212700
+ b _02215F9C
+_02215F8C:
+ ldr r1, _022160A8 ; =0x022170AC
+ ldr r2, _022160B0 ; =0x022170C4
+ mov r0, r4
+ bl MOD79_02212700
+_02215F9C:
+ ldr r0, [r5, #0x13c]
+ cmp r0, #0
+ beq _02215FE0
+ ldr r2, [r5, #0x14c]
+ ldr r1, _022160B4 ; =0x022170CC
+ add r0, sp, #0
+ bl sprintf
+ ldr r1, _022160B8 ; =0x022170D0
+ add r2, sp, #0
+ mov r0, r4
+ bl MOD79_02212700
+ mov r0, r5
+ bl MOD79_02214FFC
+ mov r2, r0
+ ldr r1, _022160BC ; =0x022170E0
+ mov r0, r4
+ bl MOD79_02212700
+_02215FE0:
+ ldr r1, [r5, #0x28]
+ cmp r1, #0
+ beq _02215FF8
+ mov r0, r4
+ mov r2, #0
+ bl MOD79_02212794
+_02215FF8:
+ ldr r1, _0221609C ; =0x02216FFC
+ mov r0, r4
+ mov r2, #2
+ bl MOD79_02212794
+ add r0, r5, #0x50
+ cmp r4, r0
+ beq _02216020
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #0xc]
+ bl MOD79_02212794
+_02216020:
+ mov r0, r5
+ bl MOD79_02212554
+ cmp r0, #0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r1, [r5, #0x60]
+ ldr r0, [r5, #0x5c]
+ cmp r1, r0
+ addlt sp, sp, #0x14
+ ldmltia sp!, {r4, r5, pc}
+ add r0, r5, #0x50
+ bl MOD79_0221262C
+ ldr r0, [r5, #0x13c]
+ mov r1, #0
+ cmp r0, #0
+ movne r0, #4
+ strne r0, [r5, #0x10]
+ moveq r0, #5
+ streq r0, [r5, #0x10]
+ mov r0, r5
+ mov r2, r1
+ bl MOD79_02212E00
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02216080: .word 0x0221705C
+_02216084: .word 0x02217064
+_02216088: .word 0x0221706C
+_0221608C: .word 0x02217128
+_02216090: .word 0x02217074
+_02216094: .word 0x02217080
+_02216098: .word 0x02217088
+_0221609C: .word 0x02216FFC
+_022160A0: .word 0x02217090
+_022160A4: .word 0x0221709C
+_022160A8: .word 0x022170AC
+_022160AC: .word 0x022170B8
+_022160B0: .word 0x022170C4
+_022160B4: .word 0x022170CC
+_022160B8: .word 0x022170D0
+_022160BC: .word 0x022170E0
+ arm_func_end MOD79_02215E40
+
+ arm_func_start MOD79_022160C0
+MOD79_022160C0: ; 0x022160C0
+ stmdb sp!, {r4, lr}
+ ldr ip, _02216208 ; =0x00000408
+ sub sp, sp, ip
+ mov r4, r0
+ ldr r1, [r4, #0x168]
+ cmp r1, #0
+ bne _02216130
+ ldr r0, [r4, #0x14]
+ ldr r1, _0221620C ; =0x022170F0
+ mov r2, #8
+ bl strncmp
+ cmp r0, #0
+ ldreq ip, _02216208 ; =0x00000408
+ moveq r0, #1
+ streq r0, [r4, #0xfc]
+ moveq r0, #0x11
+ addeq sp, sp, ip
+ streq r0, [r4, #0x38]
+ ldmeqia sp!, {r4, pc}
+ mov r1, #0
+ mov r3, #3
+ mov r0, r4
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ ldr ip, _02216208 ; =0x00000408
+ add sp, sp, ip
+ ldmia sp!, {r4, pc}
+_02216130:
+ ldr r1, [r4, #0x170]
+ cmp r1, #0
+ beq _0221615C
+ mov r1, #0
+ mov r3, #3
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ ldr ip, _02216208 ; =0x00000408
+ add sp, sp, ip
+ ldmia sp!, {r4, pc}
+_0221615C:
+ ldr r1, [r4, #0x16c]
+ cmp r1, #0
+ bne _0221619C
+ ldr r2, [r4, #0x174]
+ add r1, r4, #0x164
+ .word 0xE12FFF32
+ cmp r0, #3
+ bne _0221619C
+ ldr r0, _02216210 ; =0x02216FE4
+ ldr r1, _02216214 ; =0x02216FC4
+ ldr r3, _02216218 ; =0x00000146
+ mov r2, #0
+ bl __msl_assertion_failed
+ ldr ip, _02216208 ; =0x00000408
+ add sp, sp, ip
+ ldmia sp!, {r4, pc}
+_0221619C:
+ ldr r1, [r4, #0x60]
+ ldr r0, [r4, #0x5c]
+ cmp r1, r0
+ bge _022161E4
+ mov r0, r4
+ bl MOD79_02212554
+ cmp r0, #0
+ ldreq ip, _02216208 ; =0x00000408
+ addeq sp, sp, ip
+ ldmeqia sp!, {r4, pc}
+ ldr r1, [r4, #0x60]
+ ldr r0, [r4, #0x5c]
+ cmp r1, r0
+ ldrlt ip, _02216208 ; =0x00000408
+ addlt sp, sp, ip
+ ldmltia sp!, {r4, pc}
+ add r0, r4, #0x50
+ bl MOD79_0221262C
+_022161E4:
+ mov r3, #0x400
+ add r1, sp, #4
+ add r2, sp, #0
+ mov r0, r4
+ str r3, [sp]
+ bl MOD79_02212FF0
+ ldr ip, _02216208 ; =0x00000408
+ add sp, sp, ip
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_02216208: .word 0x00000408
+_0221620C: .word 0x022170F0
+_02216210: .word 0x02216FE4
+_02216214: .word 0x02216FC4
+_02216218: .word 0x00000146
+ arm_func_end MOD79_022160C0
+
+ arm_func_start MOD79_0221621C
+MOD79_0221621C: ; 0x0221621C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #0x10
+ mov r4, r0
+ ldr r1, [r4, #0x48]
+ mvn r0, #0
+ cmp r1, r0
+ bne _022163D4
+ mov r0, #2
+ mov r1, #1
+ mov r2, #0
+ bl MOD04_021EFDB8
+ str r0, [r4, #0x48]
+ ldr r0, [r4, #0x48]
+ mvn r1, #0
+ cmp r0, r1
+ bne _02216280
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #5
+ str r0, [r4, #0x38]
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ add sp, sp, #0x10
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4, pc}
+_02216280:
+ mov r1, #0
+ bl MOD04_021F017C
+ cmp r0, #0
+ bne _022162B4
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #5
+ str r0, [r4, #0x38]
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ add sp, sp, #0x10
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4, pc}
+_022162B4:
+ ldr r0, [r4, #0x134]
+ cmp r0, #0
+ beq _022162D0
+ ldr r1, _0221646C ; =0x0221695C
+ ldr r0, [r4, #0x48]
+ ldr r1, [r1]
+ bl MOD04_021F0130
+_022162D0:
+ add r1, sp, #0
+ mov r0, #0
+ str r0, [r1]
+ str r0, [r1, #4]
+ mov r0, #2
+ strb r0, [sp, #1]
+ ldr r0, [r4, #0x15c]
+ cmp r0, #0
+ beq _02216318
+ add r0, r4, #0x100
+ ldrh r0, [r0, #0x60]
+ mov r1, r0, asr #8
+ mov r0, r0, lsl #8
+ and r1, r1, #0xff
+ and r0, r0, #0xff00
+ orr r0, r1, r0
+ strh r0, [sp, #2]
+ b _02216368
+_02216318:
+ ldr r0, _02216470 ; =0x02217128
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _0221634C
+ ldr r0, _02216474 ; =0x02217124
+ ldrh r0, [r0]
+ mov r1, r0, asr #8
+ mov r0, r0, lsl #8
+ and r1, r1, #0xff
+ and r0, r0, #0xff00
+ orr r0, r1, r0
+ strh r0, [sp, #2]
+ b _02216368
+_0221634C:
+ ldrh r0, [r4, #0x20]
+ mov r1, r0, asr #8
+ mov r0, r0, lsl #8
+ and r1, r1, #0xff
+ and r0, r0, #0xff00
+ orr r0, r1, r0
+ strh r0, [sp, #2]
+_02216368:
+ ldr r0, [r4, #0x1c]
+ add r1, sp, #0
+ str r0, [sp, #4]
+ ldr r0, [r4, #0x48]
+ mov r2, #8
+ bl MOD04_021EFCE4
+ mvn r1, #0
+ cmp r0, r1
+ bne _022163D4
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ mvn r1, #5
+ cmp r0, r1
+ beq _022163D4
+ mvn r1, #0x19
+ cmp r0, r1
+ beq _022163D4
+ mvn r1, #0x4b
+ cmp r0, r1
+ beq _022163D4
+ mov r1, #1
+ str r1, [r4, #0xfc]
+ mov r1, #6
+ str r1, [r4, #0x38]
+ add sp, sp, #0x10
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4, pc}
+_022163D4:
+ ldr r0, [r4, #0x48]
+ add r2, sp, #8
+ add r3, sp, #0xc
+ mov r1, #0
+ bl MOD04_021EFF5C
+ cmp r0, #0
+ movgt r1, #1
+ movle r1, #0
+ mvn r0, #0
+ cmp r1, r0
+ beq _0221640C
+ ldr r0, [sp, #0xc]
+ cmp r0, #0
+ beq _0221643C
+_0221640C:
+ mov r0, #1
+ str r0, [r4, #0xfc]
+ mov r0, #6
+ cmp r1, #0
+ addne sp, sp, #0x10
+ str r0, [r4, #0x38]
+ ldmneia sp!, {r4, pc}
+ ldr r0, [r4, #0x48]
+ bl MOD04_021EFB28
+ add sp, sp, #0x10
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4, pc}
+_0221643C:
+ ldr r0, [sp, #8]
+ cmp r0, #0
+ addeq sp, sp, #0x10
+ ldmeqia sp!, {r4, pc}
+ mov r1, #0
+ mov r3, #2
+ mov r0, r4
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ add sp, sp, #0x10
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_0221646C: .word 0x0221695C
+_02216470: .word 0x02217128
+_02216474: .word 0x02217124
+ arm_func_end MOD79_0221621C
+
+ arm_func_start MOD79_02216478
+MOD79_02216478: ; 0x02216478
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r1, #0
+ mov r4, r0
+ mov r2, r1
+ bl MOD79_02212E00
+ bl MOD04_021F024C
+ mov r0, r4
+ bl MOD79_02216548
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r4, #0xfc]
+ moveq r0, #3
+ addeq sp, sp, #4
+ streq r0, [r4, #0x38]
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r5, [r4, #0x15c]
+ cmp r5, #0
+ bne _022164D4
+ ldr r0, _02216544 ; =0x02217128
+ ldr r5, [r0]
+ cmp r5, #0
+ ldreq r5, [r4, #0x18]
+_022164D4:
+ mov r0, r5
+ bl MOD04_021EFB38
+ str r0, [r4, #0x1c]
+ ldr r1, [r4, #0x1c]
+ mvn r0, #0
+ cmp r1, r0
+ bne _02216524
+ mov r0, r5
+ bl FUN_0209A6EC
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r4, #0xfc]
+ moveq r0, #4
+ addeq sp, sp, #4
+ streq r0, [r4, #0x38]
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r0, [r0, #0xc]
+ ldr r0, [r0]
+ ldr r0, [r0]
+ str r0, [r4, #0x1c]
+_02216524:
+ mov r1, #0
+ mov r3, #1
+ mov r0, r4
+ mov r2, r1
+ str r3, [r4, #0x10]
+ bl MOD79_02212E00
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_02216544: .word 0x02217128
+ arm_func_end MOD79_02216478
+
+ arm_func_start MOD79_02216548
+MOD79_02216548: ; 0x02216548
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
+ sub sp, sp, #4
+ movs r7, r0
+ bne _0221656C
+ ldr r0, _02216704 ; =0x02216FB8
+ ldr r1, _02216708 ; =0x02216FC4
+ mov r2, #0
+ mov r3, #0x25
+ bl __msl_assertion_failed
+_0221656C:
+ cmp r7, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ ldr r0, [r7, #0x14]
+ cmp r0, #0
+ bne _0221659C
+ ldr r0, _0221670C ; =0x022170FC
+ ldr r1, _02216708 ; =0x02216FC4
+ mov r2, #0
+ mov r3, #0x2b
+ bl __msl_assertion_failed
+_0221659C:
+ ldr r6, [r7, #0x14]
+ cmp r6, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ ldr r1, _02216710 ; =0x0221710C
+ mov r0, r6
+ mov r2, #7
+ bl strncmp
+ cmp r0, #0
+ addeq r6, r6, #7
+ moveq r4, #0
+ beq _022165FC
+ ldr r1, _02216714 ; =0x022170F0
+ mov r0, r6
+ mov r2, #8
+ bl strncmp
+ cmp r0, #0
+ addeq r6, r6, #8
+ moveq r4, #1
+ beq _022165FC
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_022165FC:
+ ldr r1, _02216718 ; =0x02217114
+ mov r0, r6
+ bl strspn
+ mov r8, r0
+ ldrsb r5, [r6, r8]
+ mov r1, #0
+ mov r0, r6
+ strb r1, [r6, r8]
+ add sb, r6, r8
+ bl MOD04_021F0208
+ str r0, [r7, #0x18]
+ ldr r0, [r7, #0x18]
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ strb r5, [sb]
+ ldrsb r0, [r6, r8]!
+ cmp r0, #0x3a
+ bne _02216688
+ add r6, r6, #1
+ mov r0, r6
+ bl atol
+ strh r0, [r7, #0x20]
+ ldrh r0, [r7, #0x20]
+ cmp r0, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_02216670:
+ ldrsb r0, [r6, #1]!
+ cmp r0, #0
+ beq _0221669C
+ cmp r0, #0x2f
+ bne _02216670
+ b _0221669C
+_02216688:
+ cmp r4, #0
+ ldrne r0, _0221671C ; =0x000001BB
+ strneh r0, [r7, #0x20]
+ moveq r0, #0x50
+ streqh r0, [r7, #0x20]
+_0221669C:
+ ldrsb r0, [r6]
+ cmp r0, #0
+ ldreq r6, _02216720 ; =0x02217118
+ mov r0, r6
+ bl MOD04_021F0208
+ str r0, [r7, #0x24]
+ ldr r6, [r7, #0x24]
+ mov r1, #0x20
+ mov r0, r6
+ bl strchr
+ cmp r0, #0
+ beq _022166F0
+ mov r5, #0x2b
+ mov r4, #0x20
+_022166D4:
+ strb r5, [r0]
+ ldr r6, [r7, #0x24]
+ mov r1, r4
+ mov r0, r6
+ bl strchr
+ cmp r0, #0
+ bne _022166D4
+_022166F0:
+ cmp r6, #0
+ movne r0, #1
+ moveq r0, #0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ .align 2, 0
+_02216704: .word 0x02216FB8
+_02216708: .word 0x02216FC4
+_0221670C: .word 0x022170FC
+_02216710: .word 0x0221710C
+_02216714: .word 0x022170F0
+_02216718: .word 0x02217114
+_0221671C: .word 0x000001BB
+_02216720: .word 0x02217118
+ arm_func_end MOD79_02216548
+ ; 0x02216724
+
+ .section .rodata
+ ; 0x02216738
+ .incbin "baserom.nds", 0x2DE6D8, 0x10
+
+ .section .data
+ ; 0x0221686C
+ .incbin "baserom.nds", 0x2DE80C, 0x8B4
diff --git a/arm9/modules/79/asm/module_79_thumb.s b/arm9/modules/79/asm/module_79_thumb.s
new file mode 100644
index 00000000..ac0c1188
--- /dev/null
+++ b/arm9/modules/79/asm/module_79_thumb.s
@@ -0,0 +1,851 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD79_02211E60
+MOD79_02211E60: ; 0x02211E60
+ lsl r1, r0, #0x10
+ orr r1, r0
+ ldr r0, _02211E6C ; =0x02217120
+ str r1, [r0]
+ bx lr
+ nop
+_02211E6C: .word 0x02217120
+ thumb_func_end MOD79_02211E60
+
+ thumb_func_start MOD79_02211E70
+MOD79_02211E70: ; 0x02211E70
+ ldr r1, _02211E8C ; =0x02217120
+ mov r0, #0x45
+ ldr r2, [r1]
+ add r3, r2, #0
+ mul r3, r0
+ ldr r0, _02211E90 ; =0x00001111
+ add r2, r3, r0
+ ldr r0, _02211E94 ; =0x7FFFFFFF
+ and r0, r2
+ str r0, [r1]
+ asr r0, r0, #0x10
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+ .align 2, 0
+_02211E8C: .word 0x02217120
+_02211E90: .word 0x00001111
+_02211E94: .word 0x7FFFFFFF
+ thumb_func_end MOD79_02211E70
+
+ thumb_func_start MOD79_02211E98
+MOD79_02211E98: ; 0x02211E98
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ add r4, r0, #0
+ mov r0, #0
+ add r5, r2, #0
+ str r0, [sp, #0x14]
+ add r0, r5, #0
+ str r0, [sp, #0x10]
+ add r0, #8
+ add r7, r1, #0
+ str r3, [sp]
+ str r0, [sp, #0x10]
+ bl MOD79_02211FA4
+ ldr r1, [sp, #0x30]
+ add r0, r0, #1
+ cmp r1, r0
+ bge _02211EC2
+ add sp, #0x18
+ mov r0, #2
+ pop {r3, r4, r5, r6, r7, pc}
+_02211EC2:
+ ldr r1, [sp, #0x10]
+ mov r0, #0xa
+ bl MOD04_021DD944
+ add r6, r0, #0
+ bne _02211ED4
+ add sp, #0x18
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02211ED4:
+ lsr r0, r4, #0x18
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #4]
+ lsl r0, r0, #0x18
+ lsr r1, r0, #0x18
+ ldr r0, [sp, #0x14]
+ add r0, r0, r1
+ lsr r1, r4, #0x10
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ str r1, [sp, #8]
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ add r0, r0, r1
+ lsr r1, r4, #8
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ str r1, [sp, #0xc]
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ add r0, r0, r1
+ lsl r1, r4, #0x18
+ lsr r4, r1, #0x18
+ lsl r1, r4, #0x18
+ lsr r1, r1, #0x18
+ add r0, r0, r1
+ str r0, [sp, #0x14]
+ mov r0, #0
+ cmp r5, #0
+ ble _02211F20
+_02211F12:
+ ldrb r2, [r7, r0]
+ ldr r1, [sp, #0x14]
+ add r0, r0, #1
+ add r1, r1, r2
+ str r1, [sp, #0x14]
+ cmp r0, r5
+ blt _02211F12
+_02211F20:
+ ldr r0, [sp, #0x14]
+ bl MOD79_02211E60
+ bl MOD79_02211E70
+ eor r0, r4
+ strb r0, [r6, #4]
+ bl MOD79_02211E70
+ ldr r1, [sp, #0xc]
+ eor r0, r1
+ strb r0, [r6, #5]
+ bl MOD79_02211E70
+ ldr r1, [sp, #8]
+ eor r0, r1
+ strb r0, [r6, #6]
+ bl MOD79_02211E70
+ ldr r1, [sp, #4]
+ mov r4, #0
+ eor r0, r1
+ strb r0, [r6, #7]
+ cmp r5, #0
+ ble _02211F64
+_02211F52:
+ bl MOD79_02211E70
+ ldrb r1, [r7, r4]
+ eor r1, r0
+ add r0, r6, r4
+ add r4, r4, #1
+ strb r1, [r0, #8]
+ cmp r4, r5
+ blt _02211F52
+_02211F64:
+ ldr r1, _02211FA0 ; =0x4A3B2C1D
+ ldr r0, [sp, #0x14]
+ add r5, #8
+ eor r1, r0
+ lsr r0, r1, #0x18
+ strb r0, [r6]
+ lsr r0, r1, #0x10
+ strb r0, [r6, #1]
+ lsr r0, r1, #8
+ strb r0, [r6, #2]
+ strb r1, [r6, #3]
+ ldr r1, [sp]
+ add r0, r6, #0
+ add r2, r5, #0
+ mov r3, #2
+ bl MOD04_021EF820
+ ldr r0, [sp, #0x10]
+ bl MOD79_02211FA4
+ ldr r1, [sp]
+ mov r2, #0
+ strb r2, [r1, r0]
+ mov r0, #0xa
+ add r1, r6, #0
+ bl MOD04_021DD904
+ mov r0, #0
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02211FA0: .word 0x4A3B2C1D
+ thumb_func_end MOD79_02211E98
+
+ thumb_func_start MOD79_02211FA4
+MOD79_02211FA4: ; 0x02211FA4
+ push {r3, r4, r5, lr}
+ mov r1, #3
+ add r5, r0, #0
+ bl _u32_div_f
+ cmp r1, #0
+ beq _02211FB6
+ mov r4, #1
+ b _02211FB8
+_02211FB6:
+ mov r4, #0
+_02211FB8:
+ add r0, r5, #0
+ mov r1, #3
+ bl _u32_div_f
+ add r0, r0, r4
+ lsl r0, r0, #2
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD79_02211FA4
+
+ thumb_func_start MOD79_02211FC8
+MOD79_02211FC8: ; 0x02211FC8
+ add r0, #8
+ cmp r0, #7
+ bhi _02212022
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02211FDA: ; jump table
+ .short _02211FEA - _02211FDA - 2 ; case 0
+ .short _02212022 - _02211FDA - 2 ; case 1
+ .short _02211FF2 - _02211FDA - 2 ; case 2
+ .short _02211FFA - _02211FDA - 2 ; case 3
+ .short _02212002 - _02211FDA - 2 ; case 4
+ .short _0221200A - _02211FDA - 2 ; case 5
+ .short _02212012 - _02211FDA - 2 ; case 6
+ .short _0221201A - _02211FDA - 2 ; case 7
+_02211FEA:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #0
+ str r1, [r0, #8]
+ bx lr
+_02211FF2:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #1
+ str r1, [r0, #8]
+ bx lr
+_02211FFA:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #2
+ str r1, [r0, #8]
+ bx lr
+_02212002:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #3
+ str r1, [r0, #8]
+ bx lr
+_0221200A:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #4
+ str r1, [r0, #8]
+ bx lr
+_02212012:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #5
+ str r1, [r0, #8]
+ bx lr
+_0221201A:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #6
+ str r1, [r0, #8]
+ bx lr
+_02212022:
+ ldr r0, _0221202C ; =0x02216760
+ mov r1, #0
+ str r1, [r0, #8]
+ bx lr
+ nop
+_0221202C: .word 0x02216760
+ thumb_func_end MOD79_02211FC8
+
+ thumb_func_start MOD79_02212030
+MOD79_02212030: ; 0x02212030
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x4c
+ add r4, r1, #0
+ mov r3, #0
+ ldr r1, _022122B8 ; =0x02216760
+ mvn r3, r3
+ str r3, [r1, #4]
+ ldr r3, [r1]
+ add r6, r0, #0
+ cmp r3, #1
+ bne _02212048
+ b _022122B2
+_02212048:
+ cmp r2, #0
+ beq _0221204E
+ b _02212202
+_0221204E:
+ cmp r3, #4
+ beq _0221205A
+ cmp r3, #6
+ beq _02212126
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221205A:
+ cmp r4, #0x20
+ bne _0221211E
+ ldr r5, [r1, #0x28]
+ ldr r3, _022122BC ; =0x02216724
+ add r5, #0x14
+ add r2, sp, #4
+ mov r1, #0x11
+_02212068:
+ ldrb r0, [r3]
+ add r3, r3, #1
+ strb r0, [r2]
+ add r2, r2, #1
+ sub r1, r1, #1
+ bne _02212068
+ add r3, sp, #0x14
+ ldr r2, _022122C0 ; =0x02216794
+ add r3, #1
+ mov r1, #0x15
+_0221207C:
+ ldrb r0, [r2]
+ add r2, r2, #1
+ strb r0, [r3]
+ add r3, r3, #1
+ sub r1, r1, #1
+ bne _0221207C
+ add r0, sp, #0x14
+ add r0, #1
+ add r1, r6, #0
+ add r2, r4, #0
+ bl strncat
+ add r0, sp, #0x14
+ add r0, #1
+ bl strlen
+ add r1, sp, #0x14
+ add r2, r0, #0
+ add r0, r5, #0
+ add r1, #1
+ bl MATH_CalcSHA1
+ ldr r0, _022122B8 ; =0x02216760
+ ldr r1, _022122C4 ; =0x022167AC
+ ldr r0, [r0, #0x24]
+ bl strcat
+ mov r2, #0
+ ldr r4, _022122B8 ; =0x02216760
+ add r3, r2, #0
+ add r1, sp, #4
+ mov r7, #0xf
+_022120BC:
+ ldrb r0, [r5, r2]
+ asr r0, r0, #4
+ ldrsb r6, [r1, r0]
+ ldr r0, [r4, #0x28]
+ strb r6, [r0, r3]
+ ldrb r0, [r5, r2]
+ ldr r6, [r4, #0x28]
+ add r2, r2, #1
+ and r0, r7
+ ldrsb r0, [r1, r0]
+ add r6, r6, r3
+ add r3, r3, #2
+ strb r0, [r6, #1]
+ cmp r2, #0x14
+ blt _022120BC
+ ldr r0, _022122B8 ; =0x02216760
+ mov r2, #0
+ ldr r1, [r0, #0x28]
+ add r1, #0x28
+ strb r2, [r1]
+ ldr r0, [r0, #0x24]
+ ldr r1, _022122C8 ; =0x022167B4
+ bl strcat
+ ldr r3, _022122B8 ; =0x02216760
+ ldr r0, [r3, #0x30]
+ str r0, [sp]
+ ldr r0, [r3, #0x10]
+ ldr r1, [r3, #0x14]
+ ldr r2, [r3, #0x18]
+ ldr r3, [r3, #0x2c]
+ bl MOD79_02211E98
+ cmp r0, #0
+ beq _02212114
+ cmp r0, #1
+ beq _0221210A
+ cmp r0, #2
+ bne _02212114
+_0221210A:
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212114:
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #5
+ str r1, [r0]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221211E:
+ mov r0, #1
+ str r0, [r1]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212126:
+ cmp r4, #0x16
+ bne _022121D0
+ ldr r1, _022122CC ; =0x022167BC
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _02212144
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1a
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212144:
+ ldr r1, _022122D0 ; =0x022167D4
+ add r0, r6, #0
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _02212160
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1b
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212160:
+ ldr r1, _022122D4 ; =0x022167EC
+ add r0, r6, #0
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _0221217C
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1c
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221217C:
+ ldr r1, _022122D8 ; =0x02216804
+ add r0, r6, #0
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _02212198
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1d
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212198:
+ ldr r1, _022122DC ; =0x0221681C
+ add r0, r6, #0
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _022121B4
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1e
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_022121B4:
+ ldr r1, _022122E0 ; =0x02216834
+ add r0, r6, #0
+ mov r2, #0x16
+ bl strncmp
+ cmp r0, #0
+ bne _022121D0
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x1f
+ str r1, [r0, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_022121D0:
+ ldr r0, _022122B8 ; =0x02216760
+ ldr r2, [r0, #0x20]
+ cmp r4, r2
+ ldr r0, [r0, #0x1c]
+ bgt _022121EA
+ add r1, r6, #0
+ add r2, r4, #0
+ bl memcpy
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #7
+ str r1, [r0]
+ b _022121FA
+_022121EA:
+ add r1, r6, #0
+ bl memcpy
+ ldr r0, _022122B8 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ mov r1, #0x20
+ str r1, [r0, #8]
+_022121FA:
+ ldr r0, _022122B8 ; =0x02216760
+ add sp, #0x4c
+ str r4, [r0, #0xc]
+ pop {r4, r5, r6, r7, pc}
+_02212202:
+ mov r0, #1
+ str r0, [r1]
+ cmp r2, #0x13
+ bhi _022122B2
+ add r0, r2, r2
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02212216: ; jump table
+ .short _022122B2 - _02212216 - 2 ; case 0
+ .short _0221223E - _02212216 - 2 ; case 1
+ .short _02212246 - _02212216 - 2 ; case 2
+ .short _0221224E - _02212216 - 2 ; case 3
+ .short _02212256 - _02212216 - 2 ; case 4
+ .short _0221225E - _02212216 - 2 ; case 5
+ .short _02212266 - _02212216 - 2 ; case 6
+ .short _0221226E - _02212216 - 2 ; case 7
+ .short _02212276 - _02212216 - 2 ; case 8
+ .short _0221227E - _02212216 - 2 ; case 9
+ .short _02212286 - _02212216 - 2 ; case 10
+ .short _0221228E - _02212216 - 2 ; case 11
+ .short _02212296 - _02212216 - 2 ; case 12
+ .short _022122B2 - _02212216 - 2 ; case 13
+ .short _022122B2 - _02212216 - 2 ; case 14
+ .short _0221229E - _02212216 - 2 ; case 15
+ .short _022122A6 - _02212216 - 2 ; case 16
+ .short _022122B2 - _02212216 - 2 ; case 17
+ .short _022122B2 - _02212216 - 2 ; case 18
+ .short _022122AE - _02212216 - 2 ; case 19
+_0221223E:
+ mov r0, #8
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212246:
+ mov r0, #9
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221224E:
+ mov r0, #0xa
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212256:
+ mov r0, #0xb
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221225E:
+ mov r0, #0xc
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212266:
+ mov r0, #0xd
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221226E:
+ mov r0, #0xe
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212276:
+ mov r0, #0xf
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221227E:
+ mov r0, #0x10
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212286:
+ mov r0, #0x11
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221228E:
+ mov r0, #0x12
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_02212296:
+ mov r0, #0x13
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_0221229E:
+ mov r0, #0x16
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_022122A6:
+ mov r0, #0x17
+ str r0, [r1, #8]
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+_022122AE:
+ mov r0, #0x19
+ str r0, [r1, #8]
+_022122B2:
+ add sp, #0x4c
+ pop {r4, r5, r6, r7, pc}
+ nop
+_022122B8: .word 0x02216760
+_022122BC: .word 0x02216724
+_022122C0: .word 0x02216794
+_022122C4: .word 0x022167AC
+_022122C8: .word 0x022167B4
+_022122CC: .word 0x022167BC
+_022122D0: .word 0x022167D4
+_022122D4: .word 0x022167EC
+_022122D8: .word 0x02216804
+_022122DC: .word 0x0221681C
+_022122E0: .word 0x02216834
+ thumb_func_end MOD79_02212030
+
+ thumb_func_start MOD79_022122E4
+MOD79_022122E4: ; 0x022122E4
+ push {r3, lr}
+ ldr r0, _02212304 ; =0x02216760
+ mov r1, #2
+ str r1, [r0]
+ sub r1, r1, #3
+ str r1, [r0, #4]
+ mov r0, #0
+ bl MOD04_021EB59C
+ cmp r0, #0
+ bne _02212300
+ ldr r0, _02212304 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+_02212300:
+ pop {r3, pc}
+ nop
+_02212304: .word 0x02216760
+ thumb_func_end MOD79_022122E4
+
+ thumb_func_start MOD79_02212308
+MOD79_02212308: ; 0x02212308
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r1, #0
+ ldr r1, _02212398 ; =0x02216760
+ add r4, r3, #0
+ ldr r3, [r1]
+ add r7, r0, #0
+ cmp r3, #2
+ beq _0221231C
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_0221231C:
+ str r5, [r1, #0x10]
+ str r2, [r1, #0x14]
+ str r4, [r1, #0x18]
+ ldr r2, [sp, #0x18]
+ add r4, #8
+ str r2, [r1, #0x1c]
+ ldr r2, [sp, #0x1c]
+ str r2, [r1, #0x20]
+ bl strlen
+ add r6, r0, #0
+ add r0, r4, #0
+ bl MOD79_02211FA4
+ add r1, r0, #0
+ add r6, #0x45
+ mov r0, #0xa
+ add r1, r6, r1
+ bl MOD04_021DD944
+ ldr r1, _02212398 ; =0x02216760
+ cmp r0, #0
+ str r0, [r1, #0x24]
+ bne _02212350
+ mov r0, #2
+ pop {r3, r4, r5, r6, r7, pc}
+_02212350:
+ ldr r1, _0221239C ; =0x0221684C
+ add r2, r7, #0
+ add r3, r5, #0
+ bl sprintf
+ ldr r0, _02212398 ; =0x02216760
+ ldr r5, [r0, #0x24]
+ add r0, r5, #0
+ bl strlen
+ add r6, r0, #0
+ ldr r0, _022123A0 ; =0x022167AC
+ bl strlen
+ add r1, r5, r6
+ add r1, r1, r0
+ ldr r0, _02212398 ; =0x02216760
+ str r1, [r0, #0x28]
+ ldr r0, _022123A4 ; =0x022167B4
+ bl strlen
+ ldr r1, _02212398 ; =0x02216760
+ ldr r2, [r1, #0x28]
+ add r2, #0x28
+ add r0, r2, r0
+ str r0, [r1, #0x2c]
+ add r0, r4, #0
+ bl MOD79_02211FA4
+ add r1, r0, #1
+ ldr r0, _02212398 ; =0x02216760
+ str r1, [r0, #0x30]
+ mov r1, #3
+ str r1, [r0]
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02212398: .word 0x02216760
+_0221239C: .word 0x0221684C
+_022123A0: .word 0x022167AC
+_022123A4: .word 0x022167B4
+ thumb_func_end MOD79_02212308
+
+ thumb_func_start MOD79_022123A8
+MOD79_022123A8: ; 0x022123A8
+ push {r3, lr}
+ ldr r1, _02212440 ; =0x02216760
+ ldr r0, [r1]
+ cmp r0, #7
+ bhi _02212438
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_022123BE: ; jump table
+ .short _02212438 - _022123BE - 2 ; case 0
+ .short _02212438 - _022123BE - 2 ; case 1
+ .short _02212438 - _022123BE - 2 ; case 2
+ .short _022123CE - _022123BE - 2 ; case 3
+ .short _022123F4 - _022123BE - 2 ; case 4
+ .short _02212404 - _022123BE - 2 ; case 5
+ .short _0221242A - _022123BE - 2 ; case 6
+ .short _02212438 - _022123BE - 2 ; case 7
+_022123CE:
+ ldr r0, [r1, #0x24]
+ ldr r1, _02212444 ; =MOD79_02212030
+ ldr r2, _02212448 ; =0x02216760
+ bl MOD04_021EB3B8
+ ldr r1, _02212440 ; =0x02216760
+ str r0, [r1, #4]
+ bl MOD79_02211FC8
+ ldr r0, _02212440 ; =0x02216760
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ blt _022123EE
+ mov r1, #4
+ str r1, [r0]
+ b _02212438
+_022123EE:
+ mov r1, #1
+ str r1, [r0]
+ b _02212438
+_022123F4:
+ bl MOD04_021EB524
+ cmp r0, #0
+ bne _02212438
+ ldr r0, _02212440 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ b _02212438
+_02212404:
+ ldr r0, [r1, #0x24]
+ ldr r1, _02212444 ; =MOD79_02212030
+ ldr r2, _02212448 ; =0x02216760
+ bl MOD04_021EB3B8
+ ldr r1, _02212440 ; =0x02216760
+ str r0, [r1, #4]
+ bl MOD79_02211FC8
+ ldr r0, _02212440 ; =0x02216760
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ blt _02212424
+ mov r1, #6
+ str r1, [r0]
+ b _02212438
+_02212424:
+ mov r1, #1
+ str r1, [r0]
+ b _02212438
+_0221242A:
+ bl MOD04_021EB524
+ cmp r0, #0
+ bne _02212438
+ ldr r0, _02212440 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+_02212438:
+ ldr r0, _02212440 ; =0x02216760
+ ldr r0, [r0]
+ pop {r3, pc}
+ nop
+_02212440: .word 0x02216760
+_02212444: .word MOD79_02212030
+_02212448: .word 0x02216760
+ thumb_func_end MOD79_022123A8
+
+ thumb_func_start MOD79_0221244C
+MOD79_0221244C: ; 0x0221244C
+ push {r3, lr}
+ ldr r0, _02212470 ; =0x02216760
+ ldr r1, [r0, #0x24]
+ cmp r1, #0
+ beq _02212464
+ mov r0, #0xa
+ mov r2, #0
+ bl MOD04_021DD904
+ ldr r0, _02212470 ; =0x02216760
+ mov r1, #0
+ str r1, [r0, #0x24]
+_02212464:
+ blx FUN_021EB550
+ ldr r0, _02212470 ; =0x02216760
+ mov r1, #1
+ str r1, [r0]
+ pop {r3, pc}
+ .align 2, 0
+_02212470: .word 0x02216760
+ thumb_func_end MOD79_0221244C
+
+ thumb_func_start MOD79_02212474
+MOD79_02212474: ; 0x02212474
+ ldr r0, _0221247C ; =0x02216760
+ ldr r0, [r0, #8]
+ bx lr
+ nop
+_0221247C: .word 0x02216760
+ thumb_func_end MOD79_02212474
+
+ thumb_func_start MOD79_02212480
+MOD79_02212480: ; 0x02212480
+ ldr r0, _02212488 ; =0x02216760
+ ldr r0, [r0, #0xc]
+ bx lr
+ nop
+_02212488: .word 0x02216760
+ thumb_func_end MOD79_02212480
+
+ .section .rodata
+ ; 0x02216724
+ .incbin "baserom.nds", 0x2DE6C4, 0x14
+
+ .section .data
+ ; 0x02216760
+ .incbin "baserom.nds", 0x2DE700, 0x10C
+
+ .section .bss
+ ; 0x2217120
+ .space 0x40
diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt
index 4cca1421..6a81ad19 100644
--- a/arm9/undefined_syms.txt
+++ b/arm9/undefined_syms.txt
@@ -1,5 +1,6 @@
// Overlay
+FUN_021EB550 = 0x021EB550;
FUN_0222DAEC = 0x0222DAEC;
FUN_0222DD1C = 0x0222DD1C;
FUN_0222DD38 = 0x0222DD38;