40a441:	e8 60 fe ff ff       	call   0x40a2a6
40a446:	6a 2e                	push   $0x2e
40a448:	50                   	push   %eax
40a449:	e8 21 20 01 00       	call   0x41c46f
40a44e:	59                   	pop    %ecx
40a44f:	59                   	pop    %ecx
40a450:	c2 04 00             	ret    $0x4
40a453:	ff 74 24 04          	push   0x4(%esp)
40a457:	e8 d9 ff ff ff       	call   0x40a435
40a45c:	85 c0                	test   %eax,%eax
40a45e:	74 14                	je     0x40a474
40a460:	ff 74 24 08          	push   0x8(%esp)
40a464:	83 c0 02             	add    $0x2,%eax
40a467:	50                   	push   %eax
40a468:	e8 2b 76 00 00       	call   0x411a98
40a46d:	85 c0                	test   %eax,%eax
40a46f:	75 03                	jne    0x40a474
40a471:	40                   	inc    %eax
40a472:	eb 02                	jmp    0x40a476
40a474:	33 c0                	xor    %eax,%eax
40a476:	c2 08 00             	ret    $0x8
40a479:	8b 44 24 0c          	mov    0xc(%esp),%eax
40a47d:	85 c0                	test   %eax,%eax
40a47f:	74 3a                	je     0x40a4bb
40a481:	56                   	push   %esi
40a482:	57                   	push   %edi
40a483:	8b 7c 24 0c          	mov    0xc(%esp),%edi
40a487:	57                   	push   %edi
40a488:	8d 70 ff             	lea    -0x1(%eax),%esi
40a48b:	e8 16 fe ff ff       	call   0x40a2a6
40a490:	2b c7                	sub    %edi,%eax
40a492:	d1 f8                	sar    $1,%eax
40a494:	3b f0                	cmp    %eax,%esi
40a496:	72 0c                	jb     0x40a4a4
40a498:	57                   	push   %edi
40a499:	e8 08 fe ff ff       	call   0x40a2a6
40a49e:	8b f0                	mov    %eax,%esi
40a4a0:	2b f7                	sub    %edi,%esi
40a4a2:	d1 fe                	sar    $1,%esi
40a4a4:	56                   	push   %esi
40a4a5:	57                   	push   %edi
40a4a6:	8b 7c 24 18          	mov    0x18(%esp),%edi
40a4aa:	57                   	push   %edi
40a4ab:	e8 01 1f 01 00       	call   0x41c3b1
40a4b0:	83 c4 0c             	add    $0xc,%esp
40a4b3:	33 c0                	xor    %eax,%eax
40a4b5:	66 89 04 77          	mov    %ax,(%edi,%esi,2)
40a4b9:	5f                   	pop    %edi
40a4ba:	5e                   	pop    %esi
40a4bb:	c2 0c 00             	ret    $0xc
40a4be:	56                   	push   %esi
40a4bf:	8b 74 24 08          	mov    0x8(%esp),%esi
40a4c3:	56                   	push   %esi
40a4c4:	e8 dd fd ff ff       	call   0x40a2a6
40a4c9:	8d 4e 04             	lea    0x4(%esi),%ecx
40a4cc:	3b c1                	cmp    %ecx,%eax
40a4ce:	72 10                	jb     0x40a4e0
40a4d0:	66 83 7e 02 3a       	cmpw   $0x3a,0x2(%esi)
40a4d5:	75 07                	jne    0x40a4de
40a4d7:	83 c6 08             	add    $0x8,%esi
40a4da:	3b c6                	cmp    %esi,%eax
40a4dc:	72 02                	jb     0x40a4e0
40a4de:	48                   	dec    %eax
40a4df:	48                   	dec    %eax
40a4e0:	33 c9                	xor    %ecx,%ecx
40a4e2:	66 89 08             	mov    %cx,(%eax)
40a4e5:	5e                   	pop    %esi
40a4e6:	c2 04 00             	ret    $0x4
40a4e9:	53                   	push   %ebx
40a4ea:	8b 5c 24 08          	mov    0x8(%esp),%ebx
40a4ee:	56                   	push   %esi
40a4ef:	57                   	push   %edi
40a4f0:	53                   	push   %ebx
40a4f1:	e8 95 fc 00 00       	call   0x41a18b
40a4f6:	59                   	pop    %ecx
40a4f7:	8d 7c 43 fe          	lea    -0x2(%ebx,%eax,2),%edi
40a4fb:	eb 06                	jmp    0x40a503
40a4fd:	3b fb                	cmp    %ebx,%edi
40a4ff:	76 0f                	jbe    0x40a510
40a501:	4f                   	dec    %edi
40a502:	4f                   	dec    %edi
40a503:	0f b7 07             	movzwl (%edi),%eax
40a506:	50                   	push   %eax
40a507:	e8 e4 63 00 00       	call   0x4108f0
40a50c:	84 c0                	test   %al,%al
40a50e:	74 ed                	je     0x40a4fd
40a510:	0f b7 07             	movzwl (%edi),%eax
40a513:	8b f7                	mov    %edi,%esi
40a515:	eb 09                	jmp    0x40a520
40a517:	3b f3                	cmp    %ebx,%esi
40a519:	76 49                	jbe    0x40a564
40a51b:	4e                   	dec    %esi
40a51c:	4e                   	dec    %esi
40a51d:	0f b7 06             	movzwl (%esi),%eax
40a520:	50                   	push   %eax
40a521:	e8 ca 63 00 00       	call   0x4108f0
40a526:	84 c0                	test   %al,%al
40a528:	75 ed                	jne    0x40a517
40a52a:	eb 18                	jmp    0x40a544
40a52c:	0f b7 06             	movzwl (%esi),%eax
40a52f:	66 83 f8 2e          	cmp    $0x2e,%ax
40a533:	74 2f                	je     0x40a564
40a535:	0f b7 c0             	movzwl %ax,%eax
40a538:	50                   	push   %eax
40a539:	e8 b2 63 00 00       	call   0x4108f0
40a53e:	84 c0                	test   %al,%al
40a540:	75 08                	jne    0x40a54a
40a542:	4e                   	dec    %esi
40a543:	4e                   	dec    %esi
40a544:	3b f3                	cmp    %ebx,%esi
40a546:	77 e4                	ja     0x40a52c
40a548:	eb 1a                	jmp    0x40a564
40a54a:	53                   	push   %ebx
40a54b:	e8 56 fd ff ff       	call   0x40a2a6
40a550:	6a 2e                	push   $0x2e
40a552:	50                   	push   %eax
40a553:	e8 f1 1e 01 00       	call   0x41c449
40a558:	59                   	pop    %ecx
40a559:	59                   	pop    %ecx
40a55a:	85 c0                	test   %eax,%eax
40a55c:	74 06                	je     0x40a564
40a55e:	3b c6                	cmp    %esi,%eax
40a560:	73 02                	jae    0x40a564
40a562:	8b fe                	mov    %esi,%edi
40a564:	8b c7                	mov    %edi,%eax
40a566:	5f                   	pop    %edi
40a567:	5e                   	pop    %esi
40a568:	5b                   	pop    %ebx
40a569:	c2 04 00             	ret    $0x4
40a56c:	53                   	push   %ebx
40a56d:	8b 5c 24 08          	mov    0x8(%esp),%ebx
40a571:	56                   	push   %esi
40a572:	57                   	push   %edi
40a573:	53                   	push   %ebx
40a574:	e8 bc fe ff ff       	call   0x40a435
40a579:	8b f0                	mov    %eax,%esi
40a57b:	85 f6                	test   %esi,%esi
40a57d:	75 19                	jne    0x40a598
40a57f:	ff 74 24 14          	push   0x14(%esp)
40a583:	68 90 a6 42 00       	push   $0x42a690
40a588:	53                   	push   %ebx
40a589:	e8 be 63 00 00       	call   0x41094c
40a58e:	53                   	push   %ebx
40a58f:	e8 a1 fe ff ff       	call   0x40a435
40a594:	8b f0                	mov    %eax,%esi
40a596:	eb 46                	jmp    0x40a5de
40a598:	8d 7e 02             	lea    0x2(%esi),%edi
40a59b:	66 83 3f 00          	cmpw   $0x0,(%edi)
40a59f:	75 12                	jne    0x40a5b3
40a5a1:	53                   	push   %ebx
40a5a2:	e8 e4 fb 00 00       	call   0x41a18b
40a5a7:	59                   	pop    %ecx
40a5a8:	8b 4c 24 14          	mov    0x14(%esp),%ecx
40a5ac:	83 c1 fd             	add    $0xfffffffd,%ecx
40a5af:	3b c1                	cmp    %ecx,%eax
40a5b1:	72 1e                	jb     0x40a5d1
40a5b3:	68 88 a6 42 00       	push   $0x42a688
40a5b8:	57                   	push   %edi
40a5b9:	e8 da 74 00 00       	call   0x411a98
40a5be:	85 c0                	test   %eax,%eax
40a5c0:	74 0f                	je     0x40a5d1
40a5c2:	68 80 a6 42 00       	push   $0x42a680
40a5c7:	57                   	push   %edi
40a5c8:	e8 cb 74 00 00       	call   0x411a98
40a5cd:	85 c0                	test   %eax,%eax
40a5cf:	75 0d                	jne    0x40a5de
40a5d1:	68 fc a5 42 00       	push   $0x42a5fc
40a5d6:	57                   	push   %edi
40a5d7:	e8 f7 fb 00 00       	call   0x41a1d3
40a5dc:	59                   	pop    %ecx
40a5dd:	59                   	pop    %ecx
40a5de:	80 7c 24 18 00       	cmpb   $0x0,0x18(%esp)
40a5e3:	75 53                	jne    0x40a638
40a5e5:	53                   	push   %ebx
40a5e6:	e8 fe fe ff ff       	call   0x40a4e9
40a5eb:	8b f0                	mov    %eax,%esi
40a5ed:	eb 19                	jmp    0x40a608
40a5ef:	6a 30                	push   $0x30
40a5f1:	58                   	pop    %eax
40a5f2:	66 89 06             	mov    %ax,(%esi)
40a5f5:	4e                   	dec    %esi
40a5f6:	4e                   	dec    %esi
40a5f7:	3b f3                	cmp    %ebx,%esi
40a5f9:	72 1b                	jb     0x40a616
40a5fb:	0f b7 06             	movzwl (%esi),%eax
40a5fe:	50                   	push   %eax
40a5ff:	e8 ec 62 00 00       	call   0x4108f0
40a604:	84 c0                	test   %al,%al
40a606:	74 0e                	je     0x40a616
40a608:	66 ff 06             	incw   (%esi)
40a60b:	0f b7 06             	movzwl (%esi),%eax
40a60e:	66 83 f8 3a          	cmp    $0x3a,%ax
40a612:	74 db                	je     0x40a5ef
40a614:	eb 7a                	jmp    0x40a690
40a616:	53                   	push   %ebx
40a617:	e8 6f fb 00 00       	call   0x41a18b
40a61c:	59                   	pop    %ecx
40a61d:	8d 04 43             	lea    (%ebx,%eax,2),%eax
40a620:	eb 09                	jmp    0x40a62b
40a622:	66 8b 08             	mov    (%eax),%cx
40a625:	66 89 48 02          	mov    %cx,0x2(%eax)
40a629:	48                   	dec    %eax
40a62a:	48                   	dec    %eax
40a62b:	3b c6                	cmp    %esi,%eax
40a62d:	75 f3                	jne    0x40a622
40a62f:	6a 31                	push   $0x31
40a631:	58                   	pop    %eax
40a632:	66 89 46 02          	mov    %ax,0x2(%esi)
40a636:	eb 58                	jmp    0x40a690
40a638:	8d 7e 04             	lea    0x4(%esi),%edi
40a63b:	0f b7 07             	movzwl (%edi),%eax
40a63e:	50                   	push   %eax
40a63f:	e8 ac 62 00 00       	call   0x4108f0
40a644:	84 c0                	test   %al,%al
40a646:	74 3b                	je     0x40a683
40a648:	83 c6 06             	add    $0x6,%esi
40a64b:	0f b7 06             	movzwl (%esi),%eax
40a64e:	50                   	push   %eax
40a64f:	e8 9c 62 00 00       	call   0x4108f0
40a654:	84 c0                	test   %al,%al
40a656:	74 2b                	je     0x40a683
40a658:	8b c6                	mov    %esi,%eax
40a65a:	eb 11                	jmp    0x40a66d
40a65c:	8d 48 fe             	lea    -0x2(%eax),%ecx
40a65f:	66 83 39 2e          	cmpw   $0x2e,(%ecx)
40a663:	74 16                	je     0x40a67b
40a665:	6a 30                	push   $0x30
40a667:	5a                   	pop    %edx
40a668:	66 89 10             	mov    %dx,(%eax)
40a66b:	8b c1                	mov    %ecx,%eax
40a66d:	66 ff 00             	incw   (%eax)
40a670:	0f b7 08             	movzwl (%eax),%ecx
40a673:	66 83 f9 3a          	cmp    $0x3a,%cx
40a677:	74 e3                	je     0x40a65c
40a679:	eb 15                	jmp    0x40a690
40a67b:	6a 41                	push   $0x41
40a67d:	59                   	pop    %ecx
40a67e:	66 89 08             	mov    %cx,(%eax)
40a681:	eb 0d                	jmp    0x40a690
40a683:	68 78 a6 42 00       	push   $0x42a678
40a688:	57                   	push   %edi
40a689:	e8 45 fb 00 00       	call   0x41a1d3
40a68e:	59                   	pop    %ecx
40a68f:	59                   	pop    %ecx
40a690:	5f                   	pop    %edi
40a691:	5e                   	pop    %esi
40a692:	5b                   	pop    %ebx
40a693:	c2 0c 00             	ret    $0xc
40a696:	56                   	push   %esi
40a697:	8b 74 24 08          	mov    0x8(%esp),%esi
40a69b:	66 83 3e 5c          	cmpw   $0x5c,(%esi)
40a69f:	75 07                	jne    0x40a6a8
40a6a1:	66 83 7e 02 5c       	cmpw   $0x5c,0x2(%esi)
40a6a6:	74 18                	je     0x40a6c0
40a6a8:	56                   	push   %esi
40a6a9:	e8 41 fb ff ff       	call   0x40a1ef
40a6ae:	84 c0                	test   %al,%al
40a6b0:	74 13                	je     0x40a6c5
40a6b2:	0f b7 46 04          	movzwl 0x4(%esi),%eax
40a6b6:	50                   	push   %eax
40a6b7:	e8 1b f9 ff ff       	call   0x409fd7
40a6bc:	84 c0                	test   %al,%al
40a6be:	74 05                	je     0x40a6c5
40a6c0:	33 c0                	xor    %eax,%eax
40a6c2:	40                   	inc    %eax
40a6c3:	eb 02                	jmp    0x40a6c7
40a6c5:	33 c0                	xor    %eax,%eax
40a6c7:	5e                   	pop    %esi
40a6c8:	c2 04 00             	ret    $0x4
40a6cb:	53                   	push   %ebx
40a6cc:	8b 5c 24 0c          	mov    0xc(%esp),%ebx
40a6d0:	56                   	push   %esi
40a6d1:	8b 74 24 0c          	mov    0xc(%esp),%esi
40a6d5:	33 c0                	xor    %eax,%eax
40a6d7:	56                   	push   %esi
40a6d8:	66 89 03             	mov    %ax,(%ebx)
40a6db:	e8 0f fb ff ff       	call   0x40a1ef
40a6e0:	84 c0                	test   %al,%al
40a6e2:	74 18                	je     0x40a6fc
40a6e4:	0f b7 06             	movzwl (%esi),%eax
40a6e7:	50                   	push   %eax
40a6e8:	68 9c a6 42 00       	push   $0x42a69c
40a6ed:	ff 74 24 1c          	push   0x1c(%esp)
40a6f1:	53                   	push   %ebx
40a6f2:	e8 eb 2e 00 00       	call   0x40d5e2
40a6f7:	83 c4 10             	add    $0x10,%esp
40a6fa:	eb 59                	jmp    0x40a755
40a6fc:	57                   	push   %edi
40a6fd:	6a 5c                	push   $0x5c
40a6ff:	5f                   	pop    %edi
40a700:	66 39 3e             	cmp    %di,(%esi)
40a703:	75 4f                	jne    0x40a754
40a705:	66 39 7e 02          	cmp    %di,0x2(%esi)
40a709:	75 49                	jne    0x40a754
40a70b:	8d 46 04             	lea    0x4(%esi),%eax
40a70e:	57                   	push   %edi
40a70f:	50                   	push   %eax
40a710:	e8 34 1d 01 00       	call   0x41c449
40a715:	59                   	pop    %ecx
40a716:	59                   	pop    %ecx
40a717:	85 c0                	test   %eax,%eax
40a719:	74 39                	je     0x40a754
40a71b:	83 c0 02             	add    $0x2,%eax
40a71e:	57                   	push   %edi
40a71f:	50                   	push   %eax
40a720:	e8 24 1d 01 00       	call   0x41c449
40a725:	59                   	pop    %ecx
40a726:	59                   	pop    %ecx
40a727:	85 c0                	test   %eax,%eax
40a729:	74 07                	je     0x40a732
40a72b:	2b c6                	sub    %esi,%eax
40a72d:	d1 f8                	sar    $1,%eax
40a72f:	40                   	inc    %eax
40a730:	eb 07                	jmp    0x40a739
40a732:	56                   	push   %esi
40a733:	e8 53 fa 00 00       	call   0x41a18b
40a738:	59                   	pop    %ecx
40a739:	8b f8                	mov    %eax,%edi
40a73b:	3b 7c 24 18          	cmp    0x18(%esp),%edi
40a73f:	72 02                	jb     0x40a743
40a741:	33 ff                	xor    %edi,%edi
40a743:	57                   	push   %edi
40a744:	56                   	push   %esi
40a745:	53                   	push   %ebx
40a746:	e8 66 1c 01 00       	call   0x41c3b1
40a74b:	83 c4 0c             	add    $0xc,%esp
40a74e:	33 c0                	xor    %eax,%eax
40a750:	66 89 04 7b          	mov    %ax,(%ebx,%edi,2)
40a754:	5f                   	pop    %edi
40a755:	5e                   	pop    %esi
40a756:	5b                   	pop    %ebx
40a757:	c2 0c 00             	ret    $0xc
40a75a:	55                   	push   %ebp
40a75b:	8b ec                	mov    %esp,%ebp
40a75d:	b8 00 10 00 00       	mov    $0x1000,%eax
40a762:	e8 69 fd 00 00       	call   0x41a4d0
40a767:	56                   	push   %esi
40a768:	8b 75 08             	mov    0x8(%ebp),%esi
40a76b:	66 83 3e 00          	cmpw   $0x0,(%esi)
40a76f:	75 07                	jne    0x40a778
40a771:	32 c0                	xor    %al,%al
40a773:	e9 8a 01 00 00       	jmp    0x40a902
40a778:	53                   	push   %ebx
40a779:	57                   	push   %edi
40a77a:	56                   	push   %esi
40a77b:	e8 6f fa ff ff       	call   0x40a1ef
40a780:	56                   	push   %esi
40a781:	e8 05 fa 00 00       	call   0x41a18b
40a786:	59                   	pop    %ecx
40a787:	56                   	push   %esi