402028:	3d 00 04 00 00       	cmp    $0x400,%eax
40202d:	77 17                	ja     0x402046
40202f:	8b c8                	mov    %eax,%ecx
402031:	e8 35 fa ff ff       	call   0x401a6b
402036:	84 c0                	test   %al,%al
402038:	8b 45 f8             	mov    -0x8(%ebp),%eax
40203b:	74 09                	je     0x402046
40203d:	e8 1e 36 00 00       	call   0x405660
402042:	8b f4                	mov    %esp,%esi
402044:	eb 1b                	jmp    0x402061
402046:	8d 48 08             	lea    0x8(%eax),%ecx
402049:	3b c8                	cmp    %eax,%ecx
40204b:	72 34                	jb     0x402081
40204d:	51                   	push   %ecx
40204e:	ff 15 84 71 40 00    	call   *0x407184
402054:	59                   	pop    %ecx
402055:	85 c0                	test   %eax,%eax
402057:	74 28                	je     0x402081
402059:	89 30                	mov    %esi,(%eax)
40205b:	8d 70 08             	lea    0x8(%eax),%esi
40205e:	89 45 ec             	mov    %eax,-0x14(%ebp)
402061:	85 f6                	test   %esi,%esi
402063:	74 1c                	je     0x402081
402065:	ff 75 f4             	push   -0xc(%ebp)
402068:	33 c0                	xor    %eax,%eax
40206a:	56                   	push   %esi
40206b:	6a ff                	push   $0xffffffff
40206d:	57                   	push   %edi
40206e:	53                   	push   %ebx
40206f:	53                   	push   %ebx
402070:	66 89 06             	mov    %ax,(%esi)
402073:	ff 15 08 71 40 00    	call   *0x407108
402079:	8b d8                	mov    %eax,%ebx
40207b:	f7 db                	neg    %ebx
40207d:	1b db                	sbb    %ebx,%ebx
40207f:	23 de                	and    %esi,%ebx
402081:	ff 75 14             	push   0x14(%ebp)
402084:	8d 4d e4             	lea    -0x1c(%ebp),%ecx
402087:	53                   	push   %ebx
402088:	e8 bb 09 00 00       	call   0x402a48
40208d:	8b f0                	mov    %eax,%esi
40208f:	ff 75 f0             	push   -0x10(%ebp)
402092:	ff 15 78 70 40 00    	call   *0x407078
402098:	8d 4d ec             	lea    -0x14(%ebp),%ecx
40209b:	e8 f6 26 00 00       	call   0x404796
4020a0:	8b c6                	mov    %esi,%eax
4020a2:	8d 65 d8             	lea    -0x28(%ebp),%esp
4020a5:	5f                   	pop    %edi
4020a6:	5e                   	pop    %esi
4020a7:	5b                   	pop    %ebx
4020a8:	8b 4d fc             	mov    -0x4(%ebp),%ecx
4020ab:	33 cd                	xor    %ebp,%ecx
4020ad:	e8 ee 2e 00 00       	call   0x404fa0
4020b2:	c9                   	leave
4020b3:	c2 10 00             	ret    $0x10
4020b6:	8b ff                	mov    %edi,%edi
4020b8:	55                   	push   %ebp
4020b9:	8b ec                	mov    %esp,%ebp
4020bb:	51                   	push   %ecx
4020bc:	51                   	push   %ecx
4020bd:	53                   	push   %ebx
4020be:	56                   	push   %esi
4020bf:	57                   	push   %edi
4020c0:	8b f9                	mov    %ecx,%edi
4020c2:	8d 47 0c             	lea    0xc(%edi),%eax
4020c5:	50                   	push   %eax
4020c6:	89 45 f8             	mov    %eax,-0x8(%ebp)
4020c9:	ff 15 38 71 40 00    	call   *0x407138
4020cf:	33 f6                	xor    %esi,%esi
4020d1:	8b de                	mov    %esi,%ebx
4020d3:	89 75 fc             	mov    %esi,-0x4(%ebp)
4020d6:	39 77 04             	cmp    %esi,0x4(%edi)
4020d9:	7e 24                	jle    0x4020ff
4020db:	8b 07                	mov    (%edi),%eax
4020dd:	ff 75 08             	push   0x8(%ebp)
4020e0:	8b 04 98             	mov    (%eax,%ebx,4),%eax
4020e3:	ff 30                	push   (%eax)
4020e5:	ff 15 1c 71 40 00    	call   *0x40711c
4020eb:	85 c0                	test   %eax,%eax
4020ed:	74 08                	je     0x4020f7
4020ef:	43                   	inc    %ebx
4020f0:	3b 5f 04             	cmp    0x4(%edi),%ebx
4020f3:	7c e6                	jl     0x4020db
4020f5:	eb 08                	jmp    0x4020ff
4020f7:	8b 07                	mov    (%edi),%eax
4020f9:	8b 04 98             	mov    (%eax,%ebx,4),%eax
4020fc:	8b 70 04             	mov    0x4(%eax),%esi
4020ff:	8d 4d fc             	lea    -0x4(%ebp),%ecx
402102:	e8 8f 26 00 00       	call   0x404796
402107:	ff 75 f8             	push   -0x8(%ebp)
40210a:	ff 15 2c 71 40 00    	call   *0x40712c
402110:	5f                   	pop    %edi
402111:	8b c6                	mov    %esi,%eax
402113:	5e                   	pop    %esi
402114:	5b                   	pop    %ebx
402115:	c9                   	leave
402116:	c2 04 00             	ret    $0x4
402119:	8b ff                	mov    %edi,%edi
40211b:	56                   	push   %esi
40211c:	33 f6                	xor    %esi,%esi
40211e:	57                   	push   %edi
40211f:	66 8b fa             	mov    %dx,%di
402122:	85 c9                	test   %ecx,%ecx
402124:	75 04                	jne    0x40212a
402126:	33 c0                	xor    %eax,%eax
402128:	eb 28                	jmp    0x402152
40212a:	0f b7 01             	movzwl (%ecx),%eax
40212d:	66 85 c0             	test   %ax,%ax
402130:	74 1e                	je     0x402150
402132:	8b d0                	mov    %eax,%edx
402134:	66 3b d7             	cmp    %di,%dx
402137:	74 15                	je     0x40214e
402139:	51                   	push   %ecx
40213a:	ff 15 14 71 40 00    	call   *0x407114
402140:	8b c8                	mov    %eax,%ecx
402142:	0f b7 01             	movzwl (%ecx),%eax
402145:	8b d0                	mov    %eax,%edx
402147:	66 85 c0             	test   %ax,%ax
40214a:	75 e8                	jne    0x402134
40214c:	eb 02                	jmp    0x402150
40214e:	8b f1                	mov    %ecx,%esi
402150:	8b c6                	mov    %esi,%eax
402152:	5f                   	pop    %edi
402153:	5e                   	pop    %esi
402154:	c3                   	ret
402155:	8b ff                	mov    %edi,%edi
402157:	55                   	push   %ebp
402158:	8b ec                	mov    %esp,%ebp
40215a:	51                   	push   %ecx
40215b:	51                   	push   %ecx
40215c:	33 c0                	xor    %eax,%eax
40215e:	89 55 f8             	mov    %edx,-0x8(%ebp)
402161:	57                   	push   %edi
402162:	8b f9                	mov    %ecx,%edi
402164:	66 39 02             	cmp    %ax,(%edx)
402167:	75 07                	jne    0x402170
402169:	8b c7                	mov    %edi,%eax
40216b:	e9 86 00 00 00       	jmp    0x4021f6
402170:	0f b7 07             	movzwl (%edi),%eax
402173:	53                   	push   %ebx
402174:	56                   	push   %esi
402175:	66 85 c0             	test   %ax,%ax
402178:	74 78                	je     0x4021f2
40217a:	8b f7                	mov    %edi,%esi
40217c:	8b da                	mov    %edx,%ebx
40217e:	66 85 c0             	test   %ax,%ax
402181:	74 52                	je     0x4021d5
402183:	0f b7 03             	movzwl (%ebx),%eax
402186:	66 85 c0             	test   %ax,%ax
402189:	74 6e                	je     0x4021f9
40218b:	0f b7 0e             	movzwl (%esi),%ecx
40218e:	2b c8                	sub    %eax,%ecx
402190:	75 43                	jne    0x4021d5
402192:	56                   	push   %esi
402193:	ff 15 14 71 40 00    	call   *0x407114
402199:	53                   	push   %ebx
40219a:	89 45 fc             	mov    %eax,-0x4(%ebp)
40219d:	ff 15 14 71 40 00    	call   *0x407114
4021a3:	8b 55 fc             	mov    -0x4(%ebp),%edx
4021a6:	8b c8                	mov    %eax,%ecx
4021a8:	8b c2                	mov    %edx,%eax
4021aa:	2b cb                	sub    %ebx,%ecx
4021ac:	2b c6                	sub    %esi,%eax
4021ae:	33 c8                	xor    %eax,%ecx
4021b0:	f7 c1 fe ff ff ff    	test   $0xfffffffe,%ecx
4021b6:	75 1d                	jne    0x4021d5
4021b8:	eb 10                	jmp    0x4021ca
4021ba:	83 c6 02             	add    $0x2,%esi
4021bd:	83 c3 02             	add    $0x2,%ebx
4021c0:	0f b7 03             	movzwl (%ebx),%eax
4021c3:	0f b7 0e             	movzwl (%esi),%ecx
4021c6:	2b c8                	sub    %eax,%ecx
4021c8:	74 04                	je     0x4021ce
4021ca:	3b f2                	cmp    %edx,%esi
4021cc:	72 ec                	jb     0x4021ba
4021ce:	33 c0                	xor    %eax,%eax
4021d0:	66 39 06             	cmp    %ax,(%esi)
4021d3:	75 ae                	jne    0x402183
4021d5:	33 d2                	xor    %edx,%edx
4021d7:	66 39 13             	cmp    %dx,(%ebx)
4021da:	74 1d                	je     0x4021f9
4021dc:	57                   	push   %edi
4021dd:	ff 15 14 71 40 00    	call   *0x407114
4021e3:	8b 55 f8             	mov    -0x8(%ebp),%edx
4021e6:	8b f8                	mov    %eax,%edi
4021e8:	0f b7 0f             	movzwl (%edi),%ecx
4021eb:	8b c1                	mov    %ecx,%eax
4021ed:	66 85 c9             	test   %cx,%cx
4021f0:	75 88                	jne    0x40217a
4021f2:	33 c0                	xor    %eax,%eax
4021f4:	5e                   	pop    %esi
4021f5:	5b                   	pop    %ebx
4021f6:	5f                   	pop    %edi
4021f7:	c9                   	leave
4021f8:	c3                   	ret
4021f9:	8b c7                	mov    %edi,%eax
4021fb:	eb f7                	jmp    0x4021f4
4021fd:	8b ff                	mov    %edi,%edi
4021ff:	56                   	push   %esi
402200:	8b f1                	mov    %ecx,%esi
402202:	8b 16                	mov    (%esi),%edx
402204:	0f b7 0a             	movzwl (%edx),%ecx
402207:	8b c1                	mov    %ecx,%eax
402209:	83 f8 09             	cmp    $0x9,%eax
40220c:	72 1a                	jb     0x402228
40220e:	83 f8 0a             	cmp    $0xa,%eax
402211:	76 0a                	jbe    0x40221d
402213:	83 f8 0d             	cmp    $0xd,%eax
402216:	74 05                	je     0x40221d
402218:	83 f9 20             	cmp    $0x20,%ecx
40221b:	75 0b                	jne    0x402228
40221d:	52                   	push   %edx
40221e:	ff 15 14 71 40 00    	call   *0x407114
402224:	89 06                	mov    %eax,(%esi)
402226:	eb da                	jmp    0x402202
402228:	5e                   	pop    %esi
402229:	c3                   	ret
40222a:	8b ff                	mov    %edi,%edi
40222c:	55                   	push   %ebp
40222d:	8b ec                	mov    %esp,%ebp
40222f:	51                   	push   %ecx
402230:	51                   	push   %ecx
402231:	53                   	push   %ebx
402232:	56                   	push   %esi
402233:	57                   	push   %edi
402234:	8b f1                	mov    %ecx,%esi
402236:	e8 c2 ff ff ff       	call   0x4021fd
40223b:	8b 3e                	mov    (%esi),%edi
40223d:	33 d2                	xor    %edx,%edx
40223f:	0f b7 07             	movzwl (%edi),%eax
402242:	8b c8                	mov    %eax,%ecx
402244:	66 3b d0             	cmp    %ax,%dx
402247:	74 70                	je     0x4022b9
402249:	8b 5d 08             	mov    0x8(%ebp),%ebx
40224c:	6a 27                	push   $0x27
40224e:	5a                   	pop    %edx
40224f:	89 5d fc             	mov    %ebx,-0x4(%ebp)
402252:	66 3b d0             	cmp    %ax,%dx
402255:	0f 85 a4 00 00 00    	jne    0x4022ff
40225b:	57                   	push   %edi
40225c:	ff 15 14 71 40 00    	call   *0x407114
402262:	8b d0                	mov    %eax,%edx
402264:	33 ff                	xor    %edi,%edi
402266:	89 16                	mov    %edx,(%esi)
402268:	0f b7 0a             	movzwl (%edx),%ecx
40226b:	8b c1                	mov    %ecx,%eax
40226d:	66 3b f9             	cmp    %cx,%di
402270:	74 73                	je     0x4022e5
402272:	6a 27                	push   $0x27
402274:	5f                   	pop    %edi
402275:	66 3b f8             	cmp    %ax,%di
402278:	75 0c                	jne    0x402286
40227a:	52                   	push   %edx
40227b:	ff 15 14 71 40 00    	call   *0x407114
402281:	66 3b 38             	cmp    (%eax),%di
402284:	75 5f                	jne    0x4022e5
402286:	8b 3e                	mov    (%esi),%edi
402288:	6a 27                	push   $0x27
40228a:	58                   	pop    %eax
40228b:	66 3b 07             	cmp    (%edi),%ax
40228e:	75 0b                	jne    0x40229b
402290:	57                   	push   %edi
402291:	ff 15 14 71 40 00    	call   *0x407114
402297:	8b f8                	mov    %eax,%edi
402299:	89 3e                	mov    %edi,(%esi)
40229b:	57                   	push   %edi
40229c:	ff 15 14 71 40 00    	call   *0x407114
4022a2:	8b d0                	mov    %eax,%edx
4022a4:	2b c7                	sub    %edi,%eax
4022a6:	d1 f8                	sar    $1,%eax
4022a8:	89 16                	mov    %edx,(%esi)
4022aa:	8d 0c 43             	lea    (%ebx,%eax,2),%ecx
4022ad:	8b 45 fc             	mov    -0x4(%ebp),%eax
4022b0:	05 00 20 00 00       	add    $0x2000,%eax
4022b5:	3b c8                	cmp    %eax,%ecx
4022b7:	72 1a                	jb     0x4022d3
4022b9:	b8 09 00 02 80       	mov    $0x80020009,%eax
4022be:	5f                   	pop    %edi
4022bf:	5e                   	pop    %esi
4022c0:	5b                   	pop    %ebx
4022c1:	c9                   	leave
4022c2:	c2 04 00             	ret    $0x4
4022c5:	66 8b 07             	mov    (%edi),%ax
4022c8:	83 c7 02             	add    $0x2,%edi
4022cb:	66 89 03             	mov    %ax,(%ebx)
4022ce:	83 c3 02             	add    $0x2,%ebx
4022d1:	8b 16                	mov    (%esi),%edx
4022d3:	3b fa                	cmp    %edx,%edi
4022d5:	72 ee                	jb     0x4022c5
4022d7:	0f b7 02             	movzwl (%edx),%eax
4022da:	33 ff                	xor    %edi,%edi
4022dc:	8b c8                	mov    %eax,%ecx
4022de:	66 3b f8             	cmp    %ax,%di
4022e1:	74 02                	je     0x4022e5
4022e3:	eb 8d                	jmp    0x402272
4022e5:	8b 06                	mov    (%esi),%eax
4022e7:	33 c9                	xor    %ecx,%ecx
4022e9:	66 3b 08             	cmp    (%eax),%cx
4022ec:	74 cb                	je     0x4022b9
4022ee:	33 c0                	xor    %eax,%eax
4022f0:	66 89 03             	mov    %ax,(%ebx)
4022f3:	ff 36                	push   (%esi)
4022f5:	ff 15 14 71 40 00    	call   *0x407114
4022fb:	89 06                	mov    %eax,(%esi)
4022fd:	eb 6b                	jmp    0x40236a
4022ff:	0f b7 c1             	movzwl %cx,%eax
402302:	0f b7 c9             	movzwl %cx,%ecx
402305:	83 f8 09             	cmp    $0x9,%eax
402308:	72 0f                	jb     0x402319
40230a:	83 f8 0a             	cmp    $0xa,%eax
40230d:	76 56                	jbe    0x402365
40230f:	83 f8 0d             	cmp    $0xd,%eax
402312:	74 51                	je     0x402365
402314:	83 f9 20             	cmp    $0x20,%ecx
402317:	74 4c                	je     0x402365
402319:	57                   	push   %edi
40231a:	ff 15 14 71 40 00    	call   *0x407114
402320:	8b c8                	mov    %eax,%ecx
402322:	89 45 f8             	mov    %eax,-0x8(%ebp)
402325:	2b cf                	sub    %edi,%ecx
402327:	89 06                	mov    %eax,(%esi)
402329:	d1 f9                	sar    $1,%ecx
40232b:	8d 14 4b             	lea    (%ebx,%ecx,2),%edx
40232e:	8b 4d fc             	mov    -0x4(%ebp),%ecx
402331:	81 c1 00 20 00 00    	add    $0x2000,%ecx
402337:	3b d1                	cmp    %ecx,%edx
402339:	0f 83 7a ff ff ff    	jae    0x4022b9
40233f:	eb 11                	jmp    0x402352
402341:	66 8b 07             	mov    (%edi),%ax
402344:	83 c7 02             	add    $0x2,%edi
402347:	66 89 03             	mov    %ax,(%ebx)
40234a:	83 c3 02             	add    $0x2,%ebx
40234d:	8b 06                	mov    (%esi),%eax
40234f:	89 45 f8             	mov    %eax,-0x8(%ebp)
402352:	3b f8                	cmp    %eax,%edi
402354:	72 eb                	jb     0x402341
402356:	0f b7 00             	movzwl (%eax),%eax
402359:	33 d2                	xor    %edx,%edx
40235b:	8b 7d f8             	mov    -0x8(%ebp),%edi
40235e:	8b c8                	mov    %eax,%ecx
402360:	66 3b d0             	cmp    %ax,%dx
402363:	75 9a                	jne    0x4022ff
402365:	33 c0                	xor    %eax,%eax
402367:	66 89 03             	mov    %ax,(%ebx)
40236a:	33 c0                	xor    %eax,%eax
40236c:	e9 4d ff ff ff       	jmp    0x4022be
402371:	8b ff                	mov    %edi,%edi
402373:	55                   	push   %ebp
402374:	8b ec                	mov    %esp,%ebp
402376:	83 ec 24             	sub    $0x24,%esp