	#include "asm/constants/gba_constants.inc"
	#include "asm/macros.inc"

	.syntax unified

	.text

	thumb_func_start sub_8009A1C
sub_8009A1C:
	push {r4-r6,lr}
	adds r6, r0, 0
	ldr r0, _08009A30
	str r3, [r0]
	ldr r3, [r6, 0xC]
	movs r0, 0xC0
	lsls r0, 19
	adds r2, r0
	movs r5, 0
	b _08009A56
	.align 2, 0
_08009A30: .4byte gUnknown_202D2A0
_08009A34:
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	ldm r3!, {r0}
	stm r2!, {r0}
	adds r5, 0x1
_08009A56:
	ldr r0, [r6, 0x8]
	cmp r5, r0
	ble _08009A34
	movs r5, 0
	lsls r4, r1, 6
_08009A60:
	adds r0, r5, 0
	adds r0, 0xE0
	ldr r1, [r6, 0x10]
	adds r1, r4
	bl SetBGPaletteBufferColorArray
	adds r4, 0x4
	adds r5, 0x1
	cmp r5, 0xF
	ble _08009A60
	pop {r4-r6}
	pop {r0}
	bx r0
	thumb_func_end sub_8009A1C

	thumb_func_start sub_8009A7C
sub_8009A7C:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x18
	str r0, [sp]
	adds r5, r1, 0
	str r2, [sp, 0x4]
	str r3, [sp, 0x8]
	ldr r0, [sp, 0x38]
	ldr r3, [sp, 0x40]
	lsls r0, 24
	lsrs r4, r0, 24
	ldr r0, _08009AB4
	ldr r1, [r0]
	movs r2, 0
	str r2, [sp, 0x10]
	cmp r1, 0
	bne _08009AA8
	movs r7, 0x1
	str r7, [sp, 0x10]
_08009AA8:
	ldr r1, [sp]
	ldr r0, [r1]
	cmp r5, r0
	blt _08009AB8
	movs r0, 0
	b _08009BCE
	.align 2, 0
_08009AB4: .4byte gUnknown_202D2A0
_08009AB8:
	lsls r5, 2
	mov r8, r5
	cmp r4, 0
	beq _08009AFA
	movs r0, 0
	ldr r2, _08009B74
	mov r10, r2
	ldr r4, _08009B78
	mov r9, r4
	ldr r1, [sp, 0x10]
	lsls r7, r1, 1
_08009ACE:
	ldr r2, [sp, 0x10]
	adds r4, r0, 0x1
	mov r12, r4
	cmp r2, 0x1D
	bgt _08009AF4
	mov r6, r10
	mov r5, r9
	movs r4, 0
	lsls r0, 6
	adds r1, r7, r0
_08009AE2:
	ldr r0, [r5]
	lsls r0, 11
	adds r0, r1, r0
	adds r0, r6
	strh r4, [r0]
	adds r1, 0x2
	adds r2, 0x1
	cmp r2, 0x1D
	ble _08009AE2
_08009AF4:
	mov r0, r12
	cmp r0, 0x13
	ble _08009ACE
_08009AFA:
	ldr r7, [sp]
	ldr r0, [r7, 0x4]
	add r0, r8
	ldr r5, [r0]
	ldrh r0, [r5, 0x4]
	mov r9, r0
	ldrh r1, [r5, 0x6]
	str r1, [sp, 0xC]
	ldr r2, [sp, 0x3C]
	cmp r2, 0
	beq _08009B14
	ldrh r0, [r5, 0x8]
	str r0, [r2]
_08009B14:
	cmp r3, 0
	beq _08009B28
	ldrh r0, [r5, 0xA]
	strh r0, [r3]
	ldrh r0, [r5, 0xC]
	strh r0, [r3, 0x2]
	ldrh r0, [r5, 0xE]
	strh r0, [r3, 0x4]
	ldrh r0, [r5, 0x10]
	strh r0, [r3, 0x6]
_08009B28:
	adds r5, 0x14
	ldr r4, [sp, 0x8]
	str r4, [sp, 0x14]
	movs r6, 0
	movs r0, 0
	ldr r7, [sp, 0xC]
	cmp r0, r7
	bge _08009BC4
	cmp r4, 0x13
	bgt _08009BC4
_08009B3C:
	ldr r3, [sp, 0x4]
	adds r0, 0x1
	mov r12, r0
	ldr r0, [sp, 0x14]
	adds r0, 0x1
	mov r8, r0
	mov r1, r9
	cmp r1, 0
	beq _08009BB4
	ldr r2, _08009B74
	mov r10, r2
	mov r2, r9
_08009B54:
	cmp r6, 0
	bne _08009B80
	ldrh r1, [r5]
	adds r5, 0x2
	adds r0, r1, 0
	movs r4, 0xF0
	lsls r4, 8
	ands r0, r4
	cmp r0, 0
	bne _08009B6E
	ldr r6, _08009B7C
	ands r6, r1
	movs r1, 0
_08009B6E:
	adds r4, r1, 0
	b _08009B82
	.align 2, 0
_08009B74: .4byte gUnknown_202B038
_08009B78: .4byte gUnknown_202D2A0
_08009B7C: .4byte 0x000003ff
_08009B80:
	movs r4, 0
_08009B82:
	cmp r6, 0
	beq _08009B88
	subs r6, 0x1
_08009B88:
	ldr r7, [sp, 0x10]
	cmp r3, r7
	blt _08009BAC
	cmp r3, 0x1D
	bgt _08009BAC
	ldr r0, [sp, 0x14]
	cmp r0, 0
	blt _08009BAC
	lsls r0, r3, 1
	ldr r7, [sp, 0x14]
	lsls r1, r7, 6
	adds r0, r1
	ldr r7, _08009BE0
	ldr r1, [r7]
	lsls r1, 11
	adds r0, r1
	add r0, r10
	strh r4, [r0]
_08009BAC:
	subs r2, 0x1
	adds r3, 0x1
	cmp r2, 0
	bne _08009B54
_08009BB4:
	mov r0, r12
	mov r1, r8
	str r1, [sp, 0x14]
	ldr r2, [sp, 0xC]
	cmp r0, r2
	bge _08009BC4
	cmp r1, 0x13
	ble _08009B3C
_08009BC4:
	ldr r4, _08009BE0
	ldr r0, [r4]
	bl sub_80098F8
	movs r0, 0x1
_08009BCE:
	add sp, 0x18
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	.align 2, 0
_08009BE0: .4byte gUnknown_202D2A0
	thumb_func_end sub_8009A7C

	thumb_func_start sub_8009BE4
sub_8009BE4:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	movs r0, 0x20
	mov r12, r0
	ldr r0, _08009C54
	ldr r1, [r0]
	movs r2, 0
	mov r10, r2
	mov r9, r0
	cmp r1, 0
	bne _08009C04
	movs r7, 0x1
	mov r10, r7
_08009C04:
	movs r0, 0
	mov r1, r10
	lsls r1, 1
	mov r8, r1
_08009C0C:
	mov r1, r10
	adds r3, r0, 0x1
	cmp r1, r12
	bge _08009C36
	ldr r6, _08009C58
	ldr r5, _08009C54
	movs r4, 0
	lsls r0, 6
	mov r7, r8
	adds r2, r7, r0
	mov r0, r12
	subs r1, r0, r1
_08009C24:
	ldr r0, [r5]
	lsls r0, 11
	adds r0, r2, r0
	adds r0, r6
	strh r4, [r0]
	adds r2, 0x2
	subs r1, 0x1
	cmp r1, 0
	bne _08009C24
_08009C36:
	adds r0, r3, 0
	cmp r0, 0x1F
	ble _08009C0C
	mov r1, r9
	ldr r0, [r1]
	bl sub_80098F8
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.align 2, 0
_08009C54: .4byte gUnknown_202D2A0
_08009C58: .4byte gUnknown_202B038
	thumb_func_end sub_8009BE4

	thumb_func_start FastMod3
    @ return arg % 3
    @ Has a lookup table up to 0x100
FastMod3:
	push {lr}
	adds r1, r0, 0
	cmp r1, 0xFF
	ble _08009C6C
	movs r1, 0x3
	bl __modsi3
	b _08009C72
_08009C6C:
	ldr r0, =gFastMod3Lookup
	adds r0, r1, r0
	ldrb r0, [r0]
_08009C72:
	pop {r1}
	bx r1
.pool
	thumb_func_end FastMod3

	thumb_func_start sub_8009C7C
sub_8009C7C:
	push {lr}
	adds r2, r0, 0
	movs r3, 0xC0
	lsls r3, 4
	adds r1, r2, 0
	ands r1, r3
	movs r0, 0x80
	lsls r0, 3
	cmp r1, r0
	beq _08009CB8
	cmp r1, r0
	bgt _08009C9A
	cmp r1, 0
	beq _08009CA8
	b _08009CFC
_08009C9A:
	movs r0, 0x80
	lsls r0, 4
	cmp r1, r0
	beq _08009CD0
	cmp r1, r3
	beq _08009CE0
	b _08009CFC
_08009CA8:
	ldr r0, _08009CB0
	ldr r1, _08009CB4
	ands r1, r2
	b _08009CBE
	.align 2, 0
_08009CB0: .4byte gUnknown_80B8AE4
_08009CB4: .4byte 0x000003ff
_08009CB8:
	ldr r0, _08009CC8
	ldr r1, _08009CCC
	bics r1, r2
_08009CBE:
	lsls r1, 1
	adds r1, r0
	movs r2, 0
	ldrsh r0, [r1, r2]
	b _08009CFE
	.align 2, 0
_08009CC8: .4byte gUnknown_80B8AE4
_08009CCC: .4byte 0x000003ff
_08009CD0:
	ldr r0, _08009CD8
	ldr r1, _08009CDC
	ands r1, r2
	b _08009CE6
	.align 2, 0
_08009CD8: .4byte gUnknown_80B8AE4
_08009CDC: .4byte 0x000003ff
_08009CE0:
	ldr r0, _08009CF4
	ldr r1, _08009CF8
	bics r1, r2
_08009CE6:
	lsls r1, 1
	adds r1, r0
	movs r2, 0
	ldrsh r0, [r1, r2]
	negs r0, r0
	b _08009CFE
	.align 2, 0
_08009CF4: .4byte gUnknown_80B8AE4
_08009CF8: .4byte 0x000003ff
_08009CFC:
	movs r0, 0
_08009CFE:
	pop {r1}
	bx r1
	thumb_func_end sub_8009C7C

	thumb_func_start sub_8009D04
sub_8009D04:
	push {lr}
	adds r2, r0, 0
	movs r3, 0xC0
	lsls r3, 4
	adds r1, r2, 0
	ands r1, r3
	movs r0, 0x80
	lsls r0, 3
	cmp r1, r0
	beq _08009D40
	cmp r1, r0
	bgt _08009D22
	cmp r1, 0
	beq _08009D30
	b _08009D84
_08009D22:
	movs r0, 0x80
	lsls r0, 4
	cmp r1, r0
	beq _08009D50
	cmp r1, r3
	beq _08009D6C
	b _08009D84
_08009D30:
	ldr r0, _08009D38
	ldr r1, _08009D3C
	bics r1, r2
	b _08009D72
	.align 2, 0
_08009D38: .4byte gUnknown_80B8AE4
_08009D3C: .4byte 0x000003ff
_08009D40:
	ldr r0, _08009D48
	ldr r1, _08009D4C
	ands r1, r2
	b _08009D56
	.align 2, 0
_08009D48: .4byte gUnknown_80B8AE4
_08009D4C: .4byte 0x000003ff
_08009D50:
	ldr r0, _08009D64
	ldr r1, _08009D68
	bics r1, r2
_08009D56:
	lsls r1, 1
	adds r1, r0
	movs r2, 0
	ldrsh r0, [r1, r2]
	negs r0, r0
	b _08009D86
	.align 2, 0
_08009D64: .4byte gUnknown_80B8AE4
_08009D68: .4byte 0x000003ff
_08009D6C:
	ldr r0, _08009D7C
	ldr r1, _08009D80
	ands r1, r2
_08009D72:
	lsls r1, 1
	adds r1, r0
	movs r2, 0
	ldrsh r0, [r1, r2]
	b _08009D86
	.align 2, 0
_08009D7C: .4byte gUnknown_80B8AE4
_08009D80: .4byte 0x000003ff
_08009D84:
	movs r0, 0
_08009D86:
	pop {r1}
	bx r1
	thumb_func_end sub_8009D04

	thumb_func_start sub_8009D8C
sub_8009D8C:
	push {lr}
	cmp r0, r2
	bcc _08009D9A
	cmp r0, r2
	bhi _08009D9E
	cmp r1, r3
	bcs _08009D9E
_08009D9A:
	movs r0, 0x1
	b _08009DA0
_08009D9E:
	movs r0, 0
_08009DA0:
	pop {r1}
	bx r1
	thumb_func_end sub_8009D8C

	thumb_func_start sub_8009DA4
sub_8009DA4:
	push {r4,r5,lr}
	lsrs r2, r0, 31
	adds r5, r2, 0
	lsrs r3, r1, 31
	adds r4, r3, 0
	cmp r0, 0
	beq _08009DB6
	cmp r1, 0
	bne _08009DBA
_08009DB6:
	movs r0, 0
	b _08009DD0
_08009DBA:
	cmp r2, 0
	beq _08009DC0
	negs r0, r0
_08009DC0:
	cmp r3, 0
	beq _08009DC6
	negs r1, r1
_08009DC6:
	bl sub_8009E14
	cmp r5, r4
	beq _08009DD0
	negs r0, r0
_08009DD0:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end sub_8009DA4

	thumb_func_start sub_8009DD8
sub_8009DD8:
	push {r4,r5,lr}
	lsrs r2, r0, 31
	adds r5, r2, 0
	lsrs r3, r1, 31
	adds r4, r3, 0
	cmp r1, 0
	bne _08009DF0
	ldr r0, _08009DEC
	b _08009E0E
	.align 2, 0
_08009DEC: .4byte 0x7fffffff
_08009DF0:
	cmp r0, 0
	bne _08009DF8
	movs r0, 0
	b _08009E0E
_08009DF8:
	cmp r2, 0
	beq _08009DFE
	negs r0, r0
_08009DFE:
	cmp r3, 0
	beq _08009E04
	negs r1, r1
_08009E04:
	bl sub_8009EA0
	cmp r5, r4
	beq _08009E0E
	negs r0, r0
_08009E0E:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end sub_8009DD8

	thumb_func_start sub_8009E14
sub_8009E14:
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	cmp r0, 0
	beq _08009E24
	cmp r1, 0
	bne _08009E28
_08009E24:
	movs r0, 0
	b _08009E94
_08009E28:
	movs r5, 0
	adds r3, r0, 0
	mov r12, r5
	movs r6, 0
	movs r4, 0
	movs r0, 0x80
	lsls r0, 24
	mov r8, r0
	movs r7, 0x3F
	mov r9, r7
_08009E3C:
	adds r2, r4, 0
	movs r0, 0x1
	ands r0, r1
	cmp r0, 0
	beq _08009E50
	adds r4, r3
	adds r6, r5
	cmp r2, r4
	bls _08009E50
	adds r6, 0x1
_08009E50:
	lsrs r1, 1
	movs r2, 0x1
	mov r0, r12
	ands r0, r2
	cmp r0, 0
	beq _08009E60
	mov r0, r8
	orrs r1, r0
_08009E60:
	mov r7, r12
	lsrs r7, 1
	mov r12, r7
	lsls r5, 1
	adds r0, r3, 0
	mov r7, r8
	ands r0, r7
	cmp r0, 0
	beq _08009E74
	orrs r5, r2
_08009E74:
	lsls r3, 1
	movs r0, 0x1
	negs r0, r0
	add r9, r0
	mov r7, r9
	cmp r7, 0
	bge _08009E3C
	lsrs r1, r4, 7
	ands r1, r2
	lsrs r4, 8
	lsls r0, r6, 24
	orrs r4, r0
	cmp r1, 0
	beq _08009E92
	adds r4, 0x1
_08009E92:
	adds r0, r4, 0
_08009E94:
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8009E14

	thumb_func_start sub_8009EA0
sub_8009EA0:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x4
	cmp r1, 0
	bne _08009EB8
	ldr r0, _08009EB4
	b _08009F58
	.align 2, 0
_08009EB4: .4byte 0x7fffffff
_08009EB8:
	cmp r0, 0
	bne _08009EC0
	movs r0, 0
	b _08009F58
_08009EC0:
	lsrs r7, r0, 24
	lsls r6, r0, 8
	mov r10, r1
	movs r0, 0
	mov r9, r0
	movs r5, 0
	movs r4, 0
	movs r1, 0x1
	mov r8, r1
	movs r2, 0x3F
	str r2, [sp]
_08009ED6:
	lsls r5, 1
	adds r0, r4, 0
	movs r1, 0x80
	lsls r1, 24
	ands r0, r1
	cmp r0, 0
	beq _08009EE8
	mov r2, r8
	orrs r5, r2
_08009EE8:
	movs r1, 0x2
	negs r1, r1
	lsls r4, 1
	adds r0, r7, 0
	movs r2, 0x80
	lsls r2, 24
	ands r0, r2
	cmp r0, 0
	beq _08009EFE
	mov r0, r8
	orrs r4, r0
_08009EFE:
	lsls r7, 1
	adds r0, r6, 0
	movs r2, 0x80
	lsls r2, 24
	ands r0, r2
	cmp r0, 0
	beq _08009F10
	mov r0, r8
	orrs r7, r0
_08009F10:
	lsls r6, 1
	ands r6, r1
	adds r0, r5, 0
	adds r1, r4, 0
	movs r2, 0
	mov r3, r10
	bl sub_8009D8C
	lsls r0, 24
	cmp r0, 0
	bne _08009F3A
	adds r0, r4, 0
	movs r1, 0x1
	mov r2, r10
	subs r4, r2
	movs r2, 0
	subs r5, r2
	cmp r0, r4
	bcs _08009F3C
	subs r5, 0x1
	b _08009F3C
_08009F3A:
	movs r1, 0
_08009F3C:
	mov r0, r9
	lsls r0, 1
	mov r9, r0
	cmp r1, 0
	beq _08009F4C
	mov r1, r8
	orrs r0, r1
	mov r9, r0
_08009F4C:
	ldr r2, [sp]
	subs r2, 0x1
	str r2, [sp]
	cmp r2, 0
	bge _08009ED6
	mov r0, r9
_08009F58:
	add sp, 0x4
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8009EA0

	thumb_func_start sub_8009F68
sub_8009F68:
	push {r4-r7,lr}
	adds r5, r0, 0
	adds r6, r1, 0
	adds r4, r6, 0
	cmp r6, 0
	bge _08009F76
	negs r4, r6
_08009F76:
	movs r7, 0x80
	lsls r7, 1
	cmp r4, 0
	beq _08009FA0
_08009F7E:
	movs r0, 0x1
	ands r0, r4
	cmp r0, 0
	beq _08009F90
	adds r0, r7, 0
	adds r1, r5, 0
	bl sub_8009DA4
	adds r7, r0, 0
_08009F90:
	adds r0, r5, 0
	adds r1, r5, 0
	bl sub_8009DA4
	adds r5, r0, 0
	asrs r4, 1
	cmp r4, 0
	bne _08009F7E
_08009FA0:
	cmp r6, 0
	bge _08009FB0
	movs r0, 0x80
	lsls r0, 1
	adds r1, r7, 0
	bl sub_8009DD8
	b _08009FB2
_08009FB0:
	adds r0, r7, 0
_08009FB2:
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8009F68

	thumb_func_start sub_8009FB8
sub_8009FB8:
	push {r4-r7,lr}
	adds r5, r0, 0
	adds r6, r1, 0
	cmp r5, 0
	bge _08009FC4
	negs r5, r5
_08009FC4:
	cmp r6, 0
	bge _08009FCA
	negs r6, r6
_08009FCA:
	cmp r5, r6
	bge _08009FD4
	adds r4, r5, 0
	adds r5, r6, 0
	adds r6, r4, 0
_08009FD4:
	cmp r6, 0
	beq _0800A016
	movs r7, 0x2
_08009FDA:
	adds r0, r6, 0
	adds r1, r5, 0
	bl sub_8009DD8
	adds r4, r0, 0
	adds r1, r4, 0
	bl sub_8009DA4
	adds r4, r0, 0
	movs r0, 0x80
	lsls r0, 3
	adds r1, r4, r0
	adds r0, r4, 0
	bl sub_8009DD8
	adds r4, r0, 0
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_8009DA4
	lsls r0, 1
	adds r5, r0
	adds r0, r6, 0
	adds r1, r4, 0
	bl sub_8009DA4
	adds r6, r0, 0
	subs r7, 0x1
	cmp r7, 0
	bge _08009FDA
_0800A016:
	adds r0, r5, 0
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8009FB8

	thumb_func_start sub_800A020
sub_800A020:
	push {r4,lr}
	adds r3, r0, 0
	ldr r4, _0800A044
	lsrs r2, r1, 16
	str r2, [r3]
	lsls r0, r1, 16
	str r0, [r3, 0x4]
	movs r0, 0x80
	lsls r0, 8
	ands r0, r1
	cmp r0, 0
	beq _0800A03C
	orrs r2, r4
	str r2, [r3]
_0800A03C:
	pop {r4}
	pop {r0}
	bx r0
	.align 2, 0
_0800A044: .4byte 0xffff0000
	thumb_func_end sub_800A020

	thumb_func_start sub_800A048
sub_800A048:
	push {lr}
	ldrh r1, [r0]
	lsls r2, r1, 16
	ldr r0, [r0, 0x4]
	lsrs r1, r0, 16
	orrs r2, r1
	movs r1, 0x80
	lsls r1, 8
	ands r0, r1
	cmp r0, 0
	beq _0800A060
	adds r2, 0x1
_0800A060:
	adds r0, r2, 0
	pop {r1}
	bx r1
	thumb_func_end sub_800A048

	thumb_func_start sub_800A068
sub_800A068:
	push {lr}
	ldrb r1, [r0]
	lsls r2, r1, 24
	ldr r0, [r0, 0x4]
	lsrs r1, r0, 8
	orrs r2, r1
	movs r1, 0x80
	lsls r1, 8
	ands r0, r1
	cmp r0, 0
	beq _0800A080
	adds r2, 0x1
_0800A080:
	adds r0, r2, 0
	pop {r1}
	bx r1
	thumb_func_end sub_800A068

	thumb_func_start sub_800A088
sub_800A088:
	push {lr}
	adds r2, r0, 0
	lsls r0, r1, 8
	str r0, [r2, 0x4]
	asrs r1, 24
	str r1, [r2]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	beq _0800A0A4
	movs r0, 0x80
	negs r0, r0
	orrs r1, r0
	b _0800A0A8
_0800A0A4:
	movs r0, 0x7F
	ands r1, r0
_0800A0A8:
	str r1, [r2]
	pop {r0}
	bx r0
	thumb_func_end sub_800A088

	thumb_func_start sub_800A0B0
sub_800A0B0:
	push {lr}
	ldr r2, [r0, 0x4]
	ldr r3, [r0]
	cmp r2, 0
	bne _0800A0C2
	cmp r3, 0
	bne _0800A0C2
	movs r0, 0
	b _0800A254
_0800A0C2:
	cmp r2, 0
	ble _0800A18C
	cmp r3, 0
	ble _0800A124
	cmp r2, r3
	bge _0800A0F0
	asrs r1, r3, 8
	cmp r1, 0
	beq _0800A0FE
	adds r0, r2, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A0E2
	movs r2, 0xFF
_0800A0E2:
	ldr r0, _0800A0EC
	lsls r1, r2, 2
	adds r1, r0
	ldr r0, [r1]
	b _0800A252
	.align 2, 0
_0800A0EC: .4byte gUnknown_80B92E4
_0800A0F0:
	adds r1, r2, 0
	cmp r2, 0
	bge _0800A0F8
	adds r1, 0xFF
_0800A0F8:
	asrs r1, 8
	cmp r1, 0
	bne _0800A104
_0800A0FE:
	movs r0, 0x80
	lsls r0, 2
	b _0800A254
_0800A104:
	adds r0, r3, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A112
	movs r2, 0xFF
_0800A112:
	ldr r1, _0800A120
	lsls r0, r2, 2
	adds r0, r1
	ldr r1, [r0]
	movs r0, 0x40
	b _0800A250
	.align 2, 0
_0800A120: .4byte gUnknown_80B92E4
_0800A124:
	negs r3, r3
	cmp r2, r3
	bge _0800A158
	adds r1, r3, 0
	cmp r3, 0
	bge _0800A132
	adds r1, 0xFF
_0800A132:
	asrs r1, 8
	cmp r1, 0
	beq _0800A166
	adds r0, r2, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A146
	movs r2, 0xFF
_0800A146:
	ldr r1, _0800A154
	lsls r0, r2, 2
	adds r0, r1
	ldr r1, [r0]
	movs r0, 0x80
	b _0800A250
	.align 2, 0
_0800A154: .4byte gUnknown_80B92E4
_0800A158:
	adds r1, r2, 0
	cmp r2, 0
	bge _0800A160
	adds r1, 0xFF
_0800A160:
	asrs r1, 8
	cmp r1, 0
	bne _0800A16C
_0800A166:
	movs r0, 0xC0
	lsls r0, 3
	b _0800A254
_0800A16C:
	adds r0, r3, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A17A
	movs r2, 0xFF
_0800A17A:
	ldr r0, _0800A188
	lsls r1, r2, 2
	adds r1, r0
	ldr r0, [r1]
	adds r0, 0x40
	b _0800A252
	.align 2, 0
_0800A188: .4byte gUnknown_80B92E4
_0800A18C:
	negs r2, r2
	cmp r3, 0
	ble _0800A1F0
	cmp r2, r3
	bge _0800A1BC
	asrs r1, r3, 8
	cmp r1, 0
	beq _0800A1CA
	adds r0, r2, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A1AA
	movs r2, 0xFF
_0800A1AA:
	ldr r1, _0800A1B8
	lsls r0, r2, 2
	adds r0, r1
	ldr r1, [r0]
	movs r0, 0x80
	lsls r0, 1
	b _0800A250
	.align 2, 0
_0800A1B8: .4byte gUnknown_80B92E4
_0800A1BC:
	adds r1, r2, 0
	cmp r2, 0
	bge _0800A1C4
	adds r1, 0xFF
_0800A1C4:
	asrs r1, 8
	cmp r1, 0
	bne _0800A1D0
_0800A1CA:
	movs r0, 0xE0
	lsls r0, 4
	b _0800A254
_0800A1D0:
	adds r0, r3, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A1DE
	movs r2, 0xFF
_0800A1DE:
	ldr r0, _0800A1EC
	lsls r1, r2, 2
	adds r1, r0
	ldr r0, [r1]
	adds r0, 0xC0
	b _0800A252
	.align 2, 0
_0800A1EC: .4byte gUnknown_80B92E4
_0800A1F0:
	negs r3, r3
	cmp r2, r3
	bge _0800A224
	adds r1, r3, 0
	cmp r3, 0
	bge _0800A1FE
	adds r1, 0xFF
_0800A1FE:
	asrs r1, 8
	cmp r1, 0
	beq _0800A232
	adds r0, r2, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A212
	movs r2, 0xFF
_0800A212:
	ldr r0, _0800A220
	lsls r1, r2, 2
	adds r1, r0
	ldr r0, [r1]
	adds r0, 0x80
	b _0800A252
	.align 2, 0
_0800A220: .4byte gUnknown_80B92E4
_0800A224:
	adds r0, r2, 0
	cmp r0, 0
	bge _0800A22C
	adds r0, 0xFF
_0800A22C:
	asrs r1, r0, 8
	cmp r1, 0
	bne _0800A238
_0800A232:
	movs r0, 0xA0
	lsls r0, 4
	b _0800A254
_0800A238:
	adds r0, r3, 0
	bl __divsi3
	adds r2, r0, 0
	cmp r2, 0xFF
	ble _0800A246
	movs r2, 0xFF
_0800A246:
	ldr r1, _0800A258
	lsls r0, r2, 2
	adds r0, r1
	ldr r1, [r0]
	movs r0, 0xC0
_0800A250:
	subs r0, r1
_0800A252:
	lsls r0, 4
_0800A254:
	pop {r1}
	bx r1
	.align 2, 0
_0800A258: .4byte gUnknown_80B92E4
	thumb_func_end sub_800A0B0

	thumb_func_start sub_800A25C
sub_800A25C:
	push {lr}
	adds r1, r0, 0
	ldr r0, [r1]
	mvns r2, r0
	str r2, [r1]
	ldr r0, [r1, 0x4]
	mvns r0, r0
	adds r0, 0x1
	str r0, [r1, 0x4]
	cmp r0, 0
	bne _0800A276
	adds r0, r2, 0x1
	str r0, [r1]
_0800A276:
	pop {r0}
	bx r0
	thumb_func_end sub_800A25C

	thumb_func_start sub_800A27C
sub_800A27C:
	push {lr}
	adds r1, r0, 0
	ldr r0, [r1]
	cmp r0, 0
	bge _0800A29A
	mvns r2, r0
	str r2, [r1]
	ldr r0, [r1, 0x4]
	mvns r0, r0
	adds r0, 0x1
	str r0, [r1, 0x4]
	cmp r0, 0
	bne _0800A29A
	adds r0, r2, 0x1
	str r0, [r1]
_0800A29A:
	pop {r0}
	bx r0
	thumb_func_end sub_800A27C

	thumb_func_start sub_800A2A0
sub_800A2A0:
	push {lr}
	adds r1, r0, 0
	ldr r0, [r1]
	cmp r0, 0
	bne _0800A2B4
	ldr r0, [r1, 0x4]
	cmp r0, 0
	bne _0800A2B4
	movs r0, 0x1
	b _0800A2B6
_0800A2B4:
	movs r0, 0
_0800A2B6:
	pop {r1}
	bx r1
	thumb_func_end sub_800A2A0

	thumb_func_start sub_800A2BC
sub_800A2BC:
	push {lr}
	adds r2, r0, 0
	adds r3, r1, 0
	ldr r1, [r2]
	ldr r0, [r3]
	cmp r1, r0
	bne _0800A2D6
	ldr r1, [r2, 0x4]
	ldr r0, [r3, 0x4]
	cmp r1, r0
	bne _0800A2D6
	movs r0, 0x1
	b _0800A2D8
_0800A2D6:
	movs r0, 0
_0800A2D8:
	pop {r1}
	bx r1
	thumb_func_end sub_800A2BC

	thumb_func_start sub_800A2DC
sub_800A2DC:
	push {lr}
	ldr r0, [r0]
	cmp r0, 0
	blt _0800A2E8
	movs r0, 0
	b _0800A2EA
_0800A2E8:
	movs r0, 0x1
_0800A2EA:
	pop {r1}
	bx r1
	thumb_func_end sub_800A2DC

	thumb_func_start sub_800A2F0
sub_800A2F0:
	push {r4,r5,lr}
	adds r3, r0, 0
	adds r2, r1, 0
	ldr r4, [r3]
	lsrs r1, r4, 31
	ldr r5, [r2]
	cmp r5, 0
	bge _0800A304
	movs r0, 0x2
	orrs r1, r0
_0800A304:
	cmp r1, 0x1
	beq _0800A326
	cmp r1, 0x1
	ble _0800A314
	cmp r1, 0x2
	beq _0800A32A
	cmp r1, 0x3
	beq _0800A32E
_0800A314:
	ldr r1, [r3, 0x4]
	ldr r3, [r2, 0x4]
	adds r0, r4, 0
	adds r2, r5, 0
	bl sub_8009D8C
	lsls r0, 24
	lsrs r0, 24
	b _0800A346
_0800A326:
	movs r0, 0x1
	b _0800A346
_0800A32A:
	movs r0, 0
	b _0800A346
_0800A32E:
	ldr r1, [r3, 0x4]
	ldr r3, [r2, 0x4]
	adds r0, r4, 0
	adds r2, r5, 0
	bl sub_8009D8C
	movs r1, 0
	lsls r0, 24
	cmp r0, 0
	bne _0800A344
	movs r1, 0x1
_0800A344:
	adds r0, r1, 0
_0800A346:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end sub_800A2F0

	thumb_func_start sub_800A34C
sub_800A34C:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x18
	adds r6, r0, 0
	ldr r0, [r1]
	str r0, [sp]
	ldr r0, [r1, 0x4]
	str r0, [sp, 0x4]
	ldr r0, [r2]
	str r0, [sp, 0x8]
	ldr r0, [r2, 0x4]
	add r5, sp, 0x8
	str r0, [r5, 0x4]
	mov r0, sp
	bl sub_800A2DC
	lsls r0, 24
	lsrs r0, 24
	mov r8, r0
	mov r10, r8
	adds r0, r5, 0
	bl sub_800A2DC
	lsls r0, 24
	lsrs r7, r0, 24
	mov r9, r7
	mov r0, sp
	bl sub_800A2A0
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0
	beq _0800A39A
	movs r0, 0
	str r0, [r6]
	b _0800A3DE
_0800A39A:
	adds r0, r5, 0
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	beq _0800A3AC
	str r4, [r6]
	str r4, [r6, 0x4]
	b _0800A3E0
_0800A3AC:
	mov r0, r8
	cmp r0, 0
	beq _0800A3B8
	mov r0, sp
	bl sub_800A25C
_0800A3B8:
	cmp r7, 0
	beq _0800A3C2
	adds r0, r5, 0
	bl sub_800A25C
_0800A3C2:
	add r4, sp, 0x10
	adds r0, r4, 0
	mov r1, sp
	adds r2, r5, 0
	bl sub_800A4E4
	cmp r10, r9
	beq _0800A3D8
	adds r0, r4, 0
	bl sub_800A25C
_0800A3D8:
	ldr r0, [sp, 0x10]
	str r0, [r6]
	ldr r0, [r4, 0x4]
_0800A3DE:
	str r0, [r6, 0x4]
_0800A3E0:
	add sp, 0x18
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A34C

	thumb_func_start sub_800A3F0
sub_800A3F0:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x18
	adds r6, r0, 0
	ldr r0, [r1]
	str r0, [sp]
	ldr r0, [r1, 0x4]
	str r0, [sp, 0x4]
	ldr r0, [r2]
	str r0, [sp, 0x8]
	ldr r0, [r2, 0x4]
	add r5, sp, 0x8
	str r0, [r5, 0x4]
	mov r0, sp
	bl sub_800A2DC
	lsls r0, 24
	lsrs r0, 24
	mov r8, r0
	mov r10, r8
	adds r0, r5, 0
	bl sub_800A2DC
	lsls r0, 24
	lsrs r7, r0, 24
	mov r9, r7
	adds r0, r5, 0
	bl sub_800A2A0
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0
	beq _0800A448
	ldr r0, _0800A444
	str r0, [r6]
	movs r0, 0x1
	negs r0, r0
	b _0800A48C
	.align 2, 0
_0800A444: .4byte 0x7fffffff
_0800A448:
	mov r0, sp
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	beq _0800A45A
	str r4, [r6]
	str r4, [r6, 0x4]
	b _0800A48E
_0800A45A:
	mov r0, r8
	cmp r0, 0
	beq _0800A466
	mov r0, sp
	bl sub_800A25C
_0800A466:
	cmp r7, 0
	beq _0800A470
	adds r0, r5, 0
	bl sub_800A25C
_0800A470:
	add r4, sp, 0x10
	adds r0, r4, 0
	mov r1, sp
	adds r2, r5, 0
	bl sub_800A5A4
	cmp r10, r9
	beq _0800A486
	adds r0, r4, 0
	bl sub_800A25C
_0800A486:
	ldr r0, [sp, 0x10]
	str r0, [r6]
	ldr r0, [r4, 0x4]
_0800A48C:
	str r0, [r6, 0x4]
_0800A48E:
	add sp, 0x18
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A3F0

	thumb_func_start sub_800A4A0
sub_800A4A0:
	push {r4,r5,lr}
	sub sp, 0x10
	adds r5, r0, 0
	ldr r0, [r5]
	str r0, [sp]
	ldr r0, [r5, 0x4]
	str r0, [sp, 0x4]
	mov r0, sp
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	beq _0800A4C0
	movs r0, 0
	str r0, [r5]
	b _0800A4D8
_0800A4C0:
	mov r0, sp
	bl sub_800A27C
	add r4, sp, 0x8
	adds r0, r4, 0
	mov r1, sp
	mov r2, sp
	bl sub_800A4E4
	ldr r0, [sp, 0x8]
	str r0, [r5]
	ldr r0, [r4, 0x4]
_0800A4D8:
	str r0, [r5, 0x4]
	add sp, 0x10
	pop {r4,r5}
	pop {r0}
	bx r0
	thumb_func_end sub_800A4A0

	thumb_func_start sub_800A4E4
sub_800A4E4:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	mov r8, r0
	adds r5, r1, 0
	adds r6, r2, 0
	adds r0, r5, 0
	bl sub_800A2A0
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0
	beq _0800A50C
	movs r0, 0
	mov r1, r8
	str r0, [r1]
	str r0, [r1, 0x4]
	b _0800A596
_0800A50C:
	adds r0, r6, 0
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	beq _0800A520
	mov r7, r8
	str r4, [r7]
	str r4, [r7, 0x4]
	b _0800A596
_0800A520:
	ldr r1, [r5]
	ldr r4, [r5, 0x4]
	ldr r0, [r6]
	mov r10, r0
	ldr r2, [r6, 0x4]
	movs r6, 0
	movs r5, 0
	movs r7, 0x80
	lsls r7, 24
	mov r9, r7
	movs r0, 0x3F
	mov r12, r0
_0800A538:
	adds r3, r5, 0
	movs r0, 0x1
	ands r0, r2
	cmp r0, 0
	beq _0800A54C
	adds r5, r4
	adds r6, r1
	cmp r3, r5
	bls _0800A54C
	adds r6, 0x1
_0800A54C:
	lsrs r2, 1
	movs r3, 0x1
	mov r0, r10
	ands r0, r3
	cmp r0, 0
	beq _0800A55C
	mov r7, r9
	orrs r2, r7
_0800A55C:
	mov r0, r10
	lsrs r0, 1
	mov r10, r0
	lsls r1, 1
	adds r0, r4, 0
	mov r7, r9
	ands r0, r7
	cmp r0, 0
	beq _0800A570
	orrs r1, r3
_0800A570:
	lsls r4, 1
	movs r0, 0x1
	negs r0, r0
	add r12, r0
	mov r7, r12
	cmp r7, 0
	bge _0800A538
	lsrs r1, r5, 15
	ands r1, r3
	lsrs r5, 16
	lsls r0, r6, 16
	orrs r5, r0
	lsrs r6, 16
	cmp r1, 0
	beq _0800A590
	adds r5, 0x1
_0800A590:
	mov r0, r8
	str r6, [r0]
	str r5, [r0, 0x4]
_0800A596:
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A4E4

	thumb_func_start sub_800A5A4
sub_800A5A4:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x14
	str r0, [sp]
	adds r5, r1, 0
	mov r8, r2
	mov r0, r8
	bl sub_800A2A0
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0
	beq _0800A5D8
	ldr r0, _0800A5D4
	ldr r1, [sp]
	str r0, [r1]
	movs r0, 0x1
	negs r0, r0
	str r0, [r1, 0x4]
	b _0800A6BE
	.align 2, 0
_0800A5D4: .4byte 0x7fffffff
_0800A5D8:
	adds r0, r5, 0
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	beq _0800A5EC
	ldr r2, [sp]
	str r4, [r2]
	str r4, [r2, 0x4]
	b _0800A6BE
_0800A5EC:
	ldr r0, [r5]
	lsls r7, r0, 16
	ldr r1, [r5, 0x4]
	lsrs r0, r1, 16
	orrs r7, r0
	lsls r6, r1, 16
	movs r0, 0x80
	lsls r0, 8
	orrs r6, r0
	mov r0, r8
	ldr r0, [r0]
	str r0, [sp, 0x4]
	mov r1, r8
	ldr r1, [r1, 0x4]
	str r1, [sp, 0x8]
	movs r2, 0
	str r2, [sp, 0xC]
	mov r9, r2
	movs r5, 0
	movs r4, 0
	movs r0, 0x80
	lsls r0, 24
	mov r10, r0
	movs r1, 0x1
	mov r8, r1
	movs r2, 0x3F
	str r2, [sp, 0x10]
_0800A622:
	lsls r5, 1
	adds r0, r4, 0
	mov r1, r10
	ands r0, r1
	cmp r0, 0
	beq _0800A632
	mov r2, r8
	orrs r5, r2
_0800A632:
	movs r1, 0x2
	negs r1, r1
	lsls r4, 1
	adds r0, r7, 0
	mov r2, r10
	ands r0, r2
	cmp r0, 0
	beq _0800A646
	mov r0, r8
	orrs r4, r0
_0800A646:
	lsls r7, 1
	adds r0, r6, 0
	mov r2, r10
	ands r0, r2
	cmp r0, 0
	beq _0800A656
	mov r0, r8
	orrs r7, r0
_0800A656:
	lsls r6, 1
	ands r6, r1
	adds r0, r5, 0
	adds r1, r4, 0
	ldr r2, [sp, 0x4]
	ldr r3, [sp, 0x8]
	bl sub_8009D8C
	lsls r0, 24
	cmp r0, 0
	bne _0800A680
	adds r0, r4, 0
	movs r1, 0x1
	ldr r2, [sp, 0x8]
	subs r4, r2
	ldr r2, [sp, 0x4]
	subs r5, r2
	cmp r0, r4
	bcs _0800A682
	subs r5, 0x1
	b _0800A682
_0800A680:
	movs r1, 0
_0800A682:
	ldr r0, [sp, 0xC]
	lsls r0, 1
	str r0, [sp, 0xC]
	mov r0, r9
	mov r2, r10
	ands r0, r2
	cmp r0, 0
	beq _0800A69A
	ldr r0, [sp, 0xC]
	mov r2, r8
	orrs r0, r2
	str r0, [sp, 0xC]
_0800A69A:
	mov r0, r9
	lsls r0, 1
	mov r9, r0
	cmp r1, 0
	beq _0800A6AA
	mov r1, r8
	orrs r0, r1
	mov r9, r0
_0800A6AA:
	ldr r2, [sp, 0x10]
	subs r2, 0x1
	str r2, [sp, 0x10]
	cmp r2, 0
	bge _0800A622
	ldr r0, [sp, 0xC]
	ldr r1, [sp]
	str r0, [r1]
	mov r2, r9
	str r2, [r1, 0x4]
_0800A6BE:
	add sp, 0x14
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A5A4

	thumb_func_start sub_800A6D0
sub_800A6D0:
	push {r4,lr}
	adds r4, r0, 0
	ldr r3, [r1]
	ldr r0, [r2]
	adds r3, r0
	ldr r1, [r1, 0x4]
	ldr r0, [r2, 0x4]
	adds r0, r1, r0
	cmp r0, r1
	bcs _0800A6E6
	adds r3, 0x1
_0800A6E6:
	str r3, [r4]
	str r0, [r4, 0x4]
	pop {r4}
	pop {r0}
	bx r0
	thumb_func_end sub_800A6D0

	thumb_func_start sub_800A6F0
sub_800A6F0:
	push {r4,lr}
	adds r4, r0, 0
	ldr r3, [r1]
	ldr r0, [r2]
	subs r3, r0
	ldr r1, [r1, 0x4]
	ldr r0, [r2, 0x4]
	subs r0, r1, r0
	cmp r0, r1
	bls _0800A706
	subs r3, 0x1
_0800A706:
	str r3, [r4]
	str r0, [r4, 0x4]
	pop {r4}
	pop {r0}
	bx r0
	thumb_func_end sub_800A6F0

	thumb_func_start sub_800A710
sub_800A710:
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	sub sp, 0x18
	mov r8, r0
	adds r6, r2, 0
	ldr r0, [r1]
	str r0, [sp]
	ldr r0, [r1, 0x4]
	str r0, [sp, 0x4]
	adds r4, r6, 0
	cmp r6, 0
	bge _0800A72C
	negs r4, r6
_0800A72C:
	movs r0, 0
	str r0, [sp, 0x8]
	movs r1, 0x80
	lsls r1, 9
	add r0, sp, 0x8
	str r1, [r0, 0x4]
	adds r7, r0, 0
	cmp r4, 0
	beq _0800A75E
	adds r5, r7, 0
_0800A740:
	movs r0, 0x1
	ands r0, r4
	cmp r0, 0
	beq _0800A752
	adds r0, r5, 0
	adds r1, r5, 0
	mov r2, sp
	bl sub_800A34C
_0800A752:
	mov r0, sp
	bl sub_800A4A0
	asrs r4, 1
	cmp r4, 0
	bne _0800A740
_0800A75E:
	cmp r6, 0
	bge _0800A776
	movs r0, 0
	str r0, [sp, 0x10]
	movs r0, 0x80
	lsls r0, 9
	add r1, sp, 0x10
	str r0, [r1, 0x4]
	adds r0, r7, 0
	adds r2, r7, 0
	bl sub_800A3F0
_0800A776:
	ldr r0, [sp, 0x8]
	mov r1, r8
	str r0, [r1]
	ldr r0, [r7, 0x4]
	str r0, [r1, 0x4]
	add sp, 0x18
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A710

	thumb_func_start sub_800A78C
sub_800A78C:
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x20
	mov r10, r0
	ldr r0, [r1]
	ldr r1, [r1, 0x4]
	str r0, [sp]
	str r1, [sp, 0x4]
	ldr r0, [r2]
	ldr r1, [r2, 0x4]
	str r0, [sp, 0x8]
	str r1, [sp, 0xC]
	mov r0, sp
	bl sub_800A27C
	add r4, sp, 0x8
	adds r0, r4, 0
	bl sub_800A27C
	mov r0, sp
	adds r1, r4, 0
	bl sub_800A2F0
	lsls r0, 24
	mov r8, r4
	cmp r0, 0
	beq _0800A7DC
	ldr r2, [sp]
	ldr r3, [sp, 0x4]
	str r2, [sp, 0x10]
	str r3, [sp, 0x14]
	ldr r0, [sp, 0x8]
	ldr r1, [sp, 0xC]
	str r0, [sp]
	str r1, [sp, 0x4]
	str r2, [sp, 0x8]
	str r3, [sp, 0xC]
_0800A7DC:
	mov r0, r8
	bl sub_800A2A0
	lsls r0, 24
	cmp r0, 0
	bne _0800A878
	movs r0, 0
	mov r9, r0
	add r7, sp, 0x10
	add r6, sp, 0x18
	b _0800A800
_0800A7F2:
	mov r0, r8
	mov r1, r8
	adds r2, r7, 0
	bl sub_800A34C
	movs r2, 0x1
	add r9, r2
_0800A800:
	adds r4, r7, 0
	mov r1, r8
	adds r0, r4, 0
	mov r2, sp
	bl sub_800A3F0
	adds r0, r4, 0
	bl sub_800A4A0
	ldr r0, [sp, 0x10]
	str r0, [sp, 0x18]
	ldr r1, [r4, 0x4]
	movs r0, 0x80
	lsls r0, 11
	adds r1, r0
	adds r5, r6, 0
	str r1, [r5, 0x4]
	ldr r0, [r4, 0x4]
	cmp r1, r0
	bcs _0800A82E
	ldr r0, [sp, 0x18]
	adds r0, 0x1
	str r0, [sp, 0x18]
_0800A82E:
	adds r0, r4, 0
	adds r1, r4, 0
	adds r2, r5, 0
	bl sub_800A3F0
	adds r0, r5, 0
	mov r1, sp
	adds r2, r4, 0
	bl sub_800A34C
	ldr r0, [sp, 0x18]
	lsls r1, r0, 1
	str r1, [sp, 0x18]
	ldr r0, [r5, 0x4]
	cmp r0, 0
	bge _0800A854
	movs r0, 0x1
	orrs r1, r0
	str r1, [sp, 0x18]
_0800A854:
	ldr r0, [r6, 0x4]
	lsls r0, 1
	str r0, [r6, 0x4]
	ldr r2, [sp, 0x4]
	ldr r1, [sp]
	ldr r0, [sp, 0x18]
	adds r1, r0
	str r1, [sp]
	ldr r0, [r6, 0x4]
	adds r0, r2, r0
	str r0, [sp, 0x4]
	cmp r2, r0
	bls _0800A872
	adds r0, r1, 0x1
	str r0, [sp]
_0800A872:
	mov r2, r9
	cmp r2, 0x2
	bne _0800A7F2
_0800A878:
	ldr r0, [sp]
	ldr r1, [sp, 0x4]
	mov r2, r10
	str r0, [r2]
	str r1, [r2, 0x4]
	add sp, 0x20
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_800A78C

	.align 2, 0 @ Don't pad with nop.
