40a090:	ff 75 f0             	push   -0x10(%ebp)
40a093:	c7 00 01 00 00 00    	movl   $0x1,(%eax)
40a099:	ff 75 e8             	push   -0x18(%ebp)
40a09c:	8d 45 cc             	lea    -0x34(%ebp),%eax
40a09f:	50                   	push   %eax
40a0a0:	ff 75 ec             	push   -0x14(%ebp)
40a0a3:	ff 75 f4             	push   -0xc(%ebp)
40a0a6:	ff 75 0c             	push   0xc(%ebp)
40a0a9:	ff d7                	call   *%edi
40a0ab:	89 45 e0             	mov    %eax,-0x20(%ebp)
40a0ae:	3b c3                	cmp    %ebx,%eax
40a0b0:	75 70                	jne    0x40a122
40a0b2:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a0b5:	b8 00 00 00 c0       	mov    $0xc0000000,%eax
40a0ba:	23 c8                	and    %eax,%ecx
40a0bc:	3b c8                	cmp    %eax,%ecx
40a0be:	75 2b                	jne    0x40a0eb
40a0c0:	f6 45 10 01          	testb  $0x1,0x10(%ebp)
40a0c4:	74 25                	je     0x40a0eb
40a0c6:	81 65 f4 ff ff ff 7f 	andl   $0x7fffffff,-0xc(%ebp)
40a0cd:	6a 00                	push   $0x0
40a0cf:	ff 75 f0             	push   -0x10(%ebp)
40a0d2:	8d 45 cc             	lea    -0x34(%ebp),%eax
40a0d5:	ff 75 e8             	push   -0x18(%ebp)
40a0d8:	50                   	push   %eax
40a0d9:	ff 75 ec             	push   -0x14(%ebp)
40a0dc:	ff 75 f4             	push   -0xc(%ebp)
40a0df:	ff 75 0c             	push   0xc(%ebp)
40a0e2:	ff d7                	call   *%edi
40a0e4:	89 45 e0             	mov    %eax,-0x20(%ebp)
40a0e7:	3b c3                	cmp    %ebx,%eax
40a0e9:	75 37                	jne    0x40a122
40a0eb:	8b 36                	mov    (%esi),%esi
40a0ed:	8b c6                	mov    %esi,%eax
40a0ef:	c1 f8 05             	sar    $0x5,%eax
40a0f2:	8b 04 85 20 46 41 00 	mov    0x414620(,%eax,4),%eax
40a0f9:	83 e6 1f             	and    $0x1f,%esi
40a0fc:	c1 e6 06             	shl    $0x6,%esi
40a0ff:	8d 44 30 04          	lea    0x4(%eax,%esi,1),%eax
40a103:	80 20 fe             	andb   $0xfe,(%eax)
40a106:	ff 15 44 f0 40 00    	call   *0x40f044
40a10c:	50                   	push   %eax
40a10d:	e8 3b a0 ff ff       	call   0x40414d
40a112:	59                   	pop    %ecx
40a113:	e8 0f a0 ff ff       	call   0x404127
40a118:	8b 00                	mov    (%eax),%eax
40a11a:	89 45 f8             	mov    %eax,-0x8(%ebp)
40a11d:	e9 66 04 00 00       	jmp    0x40a588
40a122:	ff 75 e0             	push   -0x20(%ebp)
40a125:	ff 15 4c f0 40 00    	call   *0x40f04c
40a12b:	85 c0                	test   %eax,%eax
40a12d:	75 44                	jne    0x40a173
40a12f:	8b 36                	mov    (%esi),%esi
40a131:	8b c6                	mov    %esi,%eax
40a133:	c1 f8 05             	sar    $0x5,%eax
40a136:	8b 04 85 20 46 41 00 	mov    0x414620(,%eax,4),%eax
40a13d:	83 e6 1f             	and    $0x1f,%esi
40a140:	c1 e6 06             	shl    $0x6,%esi
40a143:	8d 44 30 04          	lea    0x4(%eax,%esi,1),%eax
40a147:	80 20 fe             	andb   $0xfe,(%eax)
40a14a:	ff 15 44 f0 40 00    	call   *0x40f044
40a150:	8b f0                	mov    %eax,%esi
40a152:	56                   	push   %esi
40a153:	e8 f5 9f ff ff       	call   0x40414d
40a158:	59                   	pop    %ecx
40a159:	ff 75 e0             	push   -0x20(%ebp)
40a15c:	ff 15 58 f0 40 00    	call   *0x40f058
40a162:	85 f6                	test   %esi,%esi
40a164:	75 ad                	jne    0x40a113
40a166:	e8 bc 9f ff ff       	call   0x404127
40a16b:	c7 00 0d 00 00 00    	movl   $0xd,(%eax)
40a171:	eb a0                	jmp    0x40a113
40a173:	83 f8 02             	cmp    $0x2,%eax
40a176:	75 06                	jne    0x40a17e
40a178:	80 4d ff 40          	orb    $0x40,-0x1(%ebp)
40a17c:	eb 09                	jmp    0x40a187
40a17e:	83 f8 03             	cmp    $0x3,%eax
40a181:	75 04                	jne    0x40a187
40a183:	80 4d ff 08          	orb    $0x8,-0x1(%ebp)
40a187:	ff 75 e0             	push   -0x20(%ebp)
40a18a:	ff 36                	push   (%esi)
40a18c:	e8 dd 8d ff ff       	call   0x402f6e
40a191:	8b 06                	mov    (%esi),%eax
40a193:	8b d0                	mov    %eax,%edx
40a195:	83 e0 1f             	and    $0x1f,%eax
40a198:	c1 fa 05             	sar    $0x5,%edx
40a19b:	8b 14 95 20 46 41 00 	mov    0x414620(,%edx,4),%edx
40a1a2:	59                   	pop    %ecx
40a1a3:	c1 e0 06             	shl    $0x6,%eax
40a1a6:	59                   	pop    %ecx
40a1a7:	8a 4d ff             	mov    -0x1(%ebp),%cl
40a1aa:	80 c9 01             	or     $0x1,%cl
40a1ad:	88 4c 02 04          	mov    %cl,0x4(%edx,%eax,1)
40a1b1:	8b 06                	mov    (%esi),%eax
40a1b3:	8b d0                	mov    %eax,%edx
40a1b5:	83 e0 1f             	and    $0x1f,%eax
40a1b8:	c1 fa 05             	sar    $0x5,%edx
40a1bb:	8b 14 95 20 46 41 00 	mov    0x414620(,%edx,4),%edx
40a1c2:	c1 e0 06             	shl    $0x6,%eax
40a1c5:	8d 44 02 24          	lea    0x24(%edx,%eax,1),%eax
40a1c9:	80 20 80             	andb   $0x80,(%eax)
40a1cc:	88 4d fd             	mov    %cl,-0x3(%ebp)
40a1cf:	80 65 fd 48          	andb   $0x48,-0x3(%ebp)
40a1d3:	88 4d ff             	mov    %cl,-0x1(%ebp)
40a1d6:	75 7f                	jne    0x40a257
40a1d8:	f6 c1 80             	test   $0x80,%cl
40a1db:	0f 84 a8 02 00 00    	je     0x40a489
40a1e1:	f6 45 10 02          	testb  $0x2,0x10(%ebp)
40a1e5:	74 70                	je     0x40a257
40a1e7:	6a 02                	push   $0x2
40a1e9:	53                   	push   %ebx
40a1ea:	ff 36                	push   (%esi)
40a1ec:	e8 db e4 ff ff       	call   0x4086cc
40a1f1:	8b f8                	mov    %eax,%edi
40a1f3:	83 c4 0c             	add    $0xc,%esp
40a1f6:	3b fb                	cmp    %ebx,%edi
40a1f8:	75 19                	jne    0x40a213
40a1fa:	e8 3b 9f ff ff       	call   0x40413a
40a1ff:	81 38 83 00 00 00    	cmpl   $0x83,(%eax)
40a205:	74 50                	je     0x40a257
40a207:	ff 36                	push   (%esi)
40a209:	e8 f1 96 ff ff       	call   0x4038ff
40a20e:	e9 ff fe ff ff       	jmp    0x40a112
40a213:	83 65 d8 00          	andl   $0x0,-0x28(%ebp)
40a217:	6a 01                	push   $0x1
40a219:	8d 45 d8             	lea    -0x28(%ebp),%eax
40a21c:	50                   	push   %eax
40a21d:	ff 36                	push   (%esi)
40a21f:	e8 8e d0 ff ff       	call   0x4072b2
40a224:	83 c4 0c             	add    $0xc,%esp
40a227:	85 c0                	test   %eax,%eax
40a229:	75 1a                	jne    0x40a245
40a22b:	66 83 7d d8 1a       	cmpw   $0x1a,-0x28(%ebp)
40a230:	75 13                	jne    0x40a245
40a232:	8b c7                	mov    %edi,%eax
40a234:	99                   	cltd
40a235:	52                   	push   %edx
40a236:	50                   	push   %eax
40a237:	ff 36                	push   (%esi)
40a239:	e8 e4 3d 00 00       	call   0x40e022
40a23e:	83 c4 0c             	add    $0xc,%esp
40a241:	3b c3                	cmp    %ebx,%eax
40a243:	74 c2                	je     0x40a207
40a245:	6a 00                	push   $0x0
40a247:	6a 00                	push   $0x0
40a249:	ff 36                	push   (%esi)
40a24b:	e8 7c e4 ff ff       	call   0x4086cc
40a250:	83 c4 0c             	add    $0xc,%esp
40a253:	3b c3                	cmp    %ebx,%eax
40a255:	74 b0                	je     0x40a207
40a257:	f6 45 ff 80          	testb  $0x80,-0x1(%ebp)
40a25b:	0f 84 28 02 00 00    	je     0x40a489
40a261:	bf 00 40 07 00       	mov    $0x74000,%edi
40a266:	b9 00 40 00 00       	mov    $0x4000,%ecx
40a26b:	85 7d 10             	test   %edi,0x10(%ebp)
40a26e:	75 0f                	jne    0x40a27f
40a270:	8b 45 dc             	mov    -0x24(%ebp),%eax
40a273:	23 c7                	and    %edi,%eax
40a275:	75 05                	jne    0x40a27c
40a277:	09 4d 10             	or     %ecx,0x10(%ebp)
40a27a:	eb 03                	jmp    0x40a27f
40a27c:	09 45 10             	or     %eax,0x10(%ebp)
40a27f:	8b 45 10             	mov    0x10(%ebp),%eax
40a282:	23 c7                	and    %edi,%eax
40a284:	3b c1                	cmp    %ecx,%eax
40a286:	74 44                	je     0x40a2cc
40a288:	3d 00 00 01 00       	cmp    $0x10000,%eax
40a28d:	74 29                	je     0x40a2b8
40a28f:	3d 00 40 01 00       	cmp    $0x14000,%eax
40a294:	74 22                	je     0x40a2b8
40a296:	3d 00 00 02 00       	cmp    $0x20000,%eax
40a29b:	74 29                	je     0x40a2c6
40a29d:	3d 00 40 02 00       	cmp    $0x24000,%eax
40a2a2:	74 22                	je     0x40a2c6
40a2a4:	3d 00 00 04 00       	cmp    $0x40000,%eax
40a2a9:	74 07                	je     0x40a2b2
40a2ab:	3d 00 40 04 00       	cmp    $0x44000,%eax
40a2b0:	75 1e                	jne    0x40a2d0
40a2b2:	c6 45 fe 01          	movb   $0x1,-0x2(%ebp)
40a2b6:	eb 18                	jmp    0x40a2d0
40a2b8:	8b 4d 10             	mov    0x10(%ebp),%ecx
40a2bb:	b8 01 03 00 00       	mov    $0x301,%eax
40a2c0:	23 c8                	and    %eax,%ecx
40a2c2:	3b c8                	cmp    %eax,%ecx
40a2c4:	75 0a                	jne    0x40a2d0
40a2c6:	c6 45 fe 02          	movb   $0x2,-0x2(%ebp)
40a2ca:	eb 04                	jmp    0x40a2d0
40a2cc:	c6 45 fe 00          	movb   $0x0,-0x2(%ebp)
40a2d0:	f7 45 10 00 00 07 00 	testl  $0x70000,0x10(%ebp)
40a2d7:	0f 84 ac 01 00 00    	je     0x40a489
40a2dd:	33 ff                	xor    %edi,%edi
40a2df:	f6 45 ff 40          	testb  $0x40,-0x1(%ebp)
40a2e3:	89 7d e4             	mov    %edi,-0x1c(%ebp)
40a2e6:	0f 85 9d 01 00 00    	jne    0x40a489
40a2ec:	8b 45 f4             	mov    -0xc(%ebp),%eax
40a2ef:	b9 00 00 00 c0       	mov    $0xc0000000,%ecx
40a2f4:	23 c1                	and    %ecx,%eax
40a2f6:	3d 00 00 00 40       	cmp    $0x40000000,%eax
40a2fb:	0f 84 b0 00 00 00    	je     0x40a3b1
40a301:	3d 00 00 00 80       	cmp    $0x80000000,%eax
40a306:	74 71                	je     0x40a379
40a308:	3b c1                	cmp    %ecx,%eax
40a30a:	0f 85 79 01 00 00    	jne    0x40a489
40a310:	8b 45 e8             	mov    -0x18(%ebp),%eax
40a313:	3b c7                	cmp    %edi,%eax
40a315:	0f 86 6e 01 00 00    	jbe    0x40a489
40a31b:	83 f8 02             	cmp    $0x2,%eax
40a31e:	76 0e                	jbe    0x40a32e
40a320:	83 f8 04             	cmp    $0x4,%eax
40a323:	76 2b                	jbe    0x40a350
40a325:	83 f8 05             	cmp    $0x5,%eax
40a328:	0f 85 5b 01 00 00    	jne    0x40a489
40a32e:	0f be 45 fe          	movsbl -0x2(%ebp),%eax
40a332:	33 ff                	xor    %edi,%edi
40a334:	48                   	dec    %eax
40a335:	0f 84 1e 01 00 00    	je     0x40a459
40a33b:	48                   	dec    %eax
40a33c:	0f 85 47 01 00 00    	jne    0x40a489
40a342:	c7 45 e4 ff fe 00 00 	movl   $0xfeff,-0x1c(%ebp)
40a349:	6a 02                	push   $0x2
40a34b:	e9 12 01 00 00       	jmp    0x40a462
40a350:	6a 02                	push   $0x2
40a352:	57                   	push   %edi
40a353:	57                   	push   %edi
40a354:	ff 36                	push   (%esi)
40a356:	e8 d0 34 00 00       	call   0x40d82b
40a35b:	83 c4 10             	add    $0x10,%esp
40a35e:	0b c2                	or     %edx,%eax
40a360:	74 cc                	je     0x40a32e
40a362:	57                   	push   %edi
40a363:	57                   	push   %edi
40a364:	57                   	push   %edi
40a365:	ff 36                	push   (%esi)
40a367:	e8 bf 34 00 00       	call   0x40d82b
40a36c:	23 c2                	and    %edx,%eax
40a36e:	83 c4 10             	add    $0x10,%esp
40a371:	3b c3                	cmp    %ebx,%eax
40a373:	0f 84 8e fe ff ff    	je     0x40a207
40a379:	6a 03                	push   $0x3
40a37b:	8d 45 e4             	lea    -0x1c(%ebp),%eax
40a37e:	50                   	push   %eax
40a37f:	ff 36                	push   (%esi)
40a381:	e8 2c cf ff ff       	call   0x4072b2
40a386:	83 c4 0c             	add    $0xc,%esp
40a389:	3b c3                	cmp    %ebx,%eax
40a38b:	0f 84 76 fe ff ff    	je     0x40a207
40a391:	83 f8 02             	cmp    $0x2,%eax
40a394:	74 6a                	je     0x40a400
40a396:	83 f8 03             	cmp    $0x3,%eax
40a399:	0f 85 ac 00 00 00    	jne    0x40a44b
40a39f:	81 7d e4 ef bb bf 00 	cmpl   $0xbfbbef,-0x1c(%ebp)
40a3a6:	75 58                	jne    0x40a400
40a3a8:	c6 45 fe 01          	movb   $0x1,-0x2(%ebp)
40a3ac:	e9 d8 00 00 00       	jmp    0x40a489
40a3b1:	8b 45 e8             	mov    -0x18(%ebp),%eax
40a3b4:	3b c7                	cmp    %edi,%eax
40a3b6:	0f 86 cd 00 00 00    	jbe    0x40a489
40a3bc:	83 f8 02             	cmp    $0x2,%eax
40a3bf:	0f 86 69 ff ff ff    	jbe    0x40a32e
40a3c5:	83 f8 04             	cmp    $0x4,%eax
40a3c8:	0f 87 57 ff ff ff    	ja     0x40a325
40a3ce:	6a 02                	push   $0x2
40a3d0:	57                   	push   %edi
40a3d1:	57                   	push   %edi
40a3d2:	ff 36                	push   (%esi)
40a3d4:	e8 52 34 00 00       	call   0x40d82b
40a3d9:	83 c4 10             	add    $0x10,%esp
40a3dc:	0b c2                	or     %edx,%eax
40a3de:	0f 84 4a ff ff ff    	je     0x40a32e
40a3e4:	57                   	push   %edi
40a3e5:	57                   	push   %edi
40a3e6:	57                   	push   %edi
40a3e7:	ff 36                	push   (%esi)
40a3e9:	e8 3d 34 00 00       	call   0x40d82b
40a3ee:	83 c4 10             	add    $0x10,%esp
40a3f1:	23 c2                	and    %edx,%eax
40a3f3:	3b c3                	cmp    %ebx,%eax
40a3f5:	0f 85 8e 00 00 00    	jne    0x40a489
40a3fb:	e9 07 fe ff ff       	jmp    0x40a207
40a400:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40a403:	25 ff ff 00 00       	and    $0xffff,%eax
40a408:	3d fe ff 00 00       	cmp    $0xfffe,%eax
40a40d:	75 1a                	jne    0x40a429
40a40f:	ff 36                	push   (%esi)
40a411:	e8 e9 94 ff ff       	call   0x4038ff
40a416:	59                   	pop    %ecx
40a417:	e8 0b 9d ff ff       	call   0x404127
40a41c:	6a 16                	push   $0x16
40a41e:	5e                   	pop    %esi
40a41f:	89 30                	mov    %esi,(%eax)
40a421:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a424:	e9 5f 01 00 00       	jmp    0x40a588
40a429:	3d ff fe 00 00       	cmp    $0xfeff,%eax
40a42e:	75 1b                	jne    0x40a44b
40a430:	57                   	push   %edi
40a431:	6a 02                	push   $0x2
40a433:	ff 36                	push   (%esi)
40a435:	e8 92 e2 ff ff       	call   0x4086cc
40a43a:	83 c4 0c             	add    $0xc,%esp
40a43d:	3b c3                	cmp    %ebx,%eax
40a43f:	0f 84 c2 fd ff ff    	je     0x40a207
40a445:	c6 45 fe 02          	movb   $0x2,-0x2(%ebp)
40a449:	eb 3e                	jmp    0x40a489
40a44b:	57                   	push   %edi
40a44c:	57                   	push   %edi
40a44d:	ff 36                	push   (%esi)
40a44f:	e8 78 e2 ff ff       	call   0x4086cc
40a454:	83 c4 0c             	add    $0xc,%esp
40a457:	eb 9a                	jmp    0x40a3f3
40a459:	c7 45 e4 ef bb bf 00 	movl   $0xbfbbef,-0x1c(%ebp)
40a460:	6a 03                	push   $0x3
40a462:	5b                   	pop    %ebx
40a463:	8b c3                	mov    %ebx,%eax
40a465:	2b c7                	sub    %edi,%eax
40a467:	50                   	push   %eax
40a468:	8d 44 3d e4          	lea    -0x1c(%ebp,%edi,1),%eax
40a46c:	50                   	push   %eax
40a46d:	ff 36                	push   (%esi)
40a46f:	e8 6a 25 00 00       	call   0x40c9de
40a474:	83 c4 0c             	add    $0xc,%esp
40a477:	83 f8 ff             	cmp    $0xffffffff,%eax
40a47a:	0f 84 87 fd ff ff    	je     0x40a207
40a480:	03 f8                	add    %eax,%edi
40a482:	3b df                	cmp    %edi,%ebx
40a484:	7f dd                	jg     0x40a463
40a486:	83 cb ff             	or     $0xffffffff,%ebx
40a489:	8b 06                	mov    (%esi),%eax
40a48b:	8b c8                	mov    %eax,%ecx
40a48d:	c1 f9 05             	sar    $0x5,%ecx
40a490:	8b 0c 8d 20 46 41 00 	mov    0x414620(,%ecx,4),%ecx
40a497:	83 e0 1f             	and    $0x1f,%eax
40a49a:	c1 e0 06             	shl    $0x6,%eax
40a49d:	8d 44 01 24          	lea    0x24(%ecx,%eax,1),%eax
40a4a1:	8a 08                	mov    (%eax),%cl
40a4a3:	32 4d fe             	xor    -0x2(%ebp),%cl
40a4a6:	80 e1 7f             	and    $0x7f,%cl
40a4a9:	30 08                	xor    %cl,(%eax)
40a4ab:	8b 06                	mov    (%esi),%eax
40a4ad:	8b c8                	mov    %eax,%ecx
40a4af:	c1 f9 05             	sar    $0x5,%ecx
40a4b2:	8b 0c 8d 20 46 41 00 	mov    0x414620(,%ecx,4),%ecx
40a4b9:	83 e0 1f             	and    $0x1f,%eax
40a4bc:	c1 e0 06             	shl    $0x6,%eax
40a4bf:	8d 44 01 24          	lea    0x24(%ecx,%eax,1),%eax
40a4c3:	8b 4d 10             	mov    0x10(%ebp),%ecx
40a4c6:	8a 10                	mov    (%eax),%dl
40a4c8:	c1 e9 10             	shr    $0x10,%ecx
40a4cb:	c0 e1 07             	shl    $0x7,%cl
40a4ce:	80 e2 7f             	and    $0x7f,%dl
40a4d1:	0a ca                	or     %dl,%cl