STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228127
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2561 · P5121

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/35423420?noj=FRM35423420-14DC" width="1" height="1"></div>

Dr. Vile - The Greater Good - arcade collecting game.swf

This is the info page for
Flash #131768

(Click the ID number above for more basic data on this flash file.)


Text
> Hello, Dr. Vile!
> I have missed you!
>>

Hello, Lexe.

> What would you like to do, today?
>>

The same thing we do everyday,
Lexe!

Check the World Scientist
Rankings!

> Okay!
> WORLD SCIENTIST RANKINGS
> 1. Dr. Ben Evolent
> 2. Dr. Harris
> 3. Dr. Davis
> 4. Dr. Anderson
> 5. Dr. Everest
> 6. Dr. Miyamoto
> 7. Dr. Link
> 8. Dr. Grossman
>>

CURSE THAT DR. BEN EVOLENT!
Number one since I can
remember!

WHAT IS MY RANKING?!

> .
> ..
> ...
> ....
> .....
> 99,992. Dr. Vile
>>

DOWN TWO SPOTS! I've had it,
Lexe! I'VE HAD IT!

Today, we complete the Death
Ray and destroy this world!

THAT will show them! THAT will
move me, the great Dr. Vile, to
the VERY TOP! HA HA HA HA!

> ... Sound reasoning, Dr. Vile.
>>

Let's get to work!

> *GASP!*
>>

What is it?!

> A meteor! A meteor is headed for
Earth! Collision is inevitable.
>>

Really?! Let me see!

> It is massive! We are all going to die.
>>

Hoooo... that IS big.

HA HA! EXCELLENT!

> What.
>>

The meteor will do my work for
me! The Earth is DOOMED! HA
HA HA!

Today, we celebrate!

> Wait! I have a wonderful idea.
>>

> Why don't we use the Death Ray to
destroy the meteor?
>>

Preposterous! You are defective!

> Think of the headlines, Dr. Vile.
> DR. VILE SAVES THE WORLD!
> SCIENTIST HAILED AS WORLD HERO!
> DR. VILE DECLARED GREATEST
SCIENTIST IN HISTORY!
>>

Hmmm. Interesting.

Hmmm...

HMMMM!

Alright! We will destroy this
meteor!

> Okay!
>>

> The Death Ray will need to be
upgraded. We will need parts.
>>

> Find the parts around town. Take
metal from cars, wood from tables and
trees, circuits from TVs - whatever it
takes! Say please!
>>

> Use the SPACE BAR to open the
Needed Parts List and collect the
necessary parts.
>>

HA! The simpletons in this town
will never let me take their
belongings!

... Likely due to the fact that I try
to kill them everyday.

> We must upgrade the Death Ray! You
can do it, Dr. Vile! Only YOU can save
the world!
>>

Very well! I will get the parts!

I WILL save this world! Even if I
have to KILL EVERYONE with a
BAT!

> N-no, no. Please don't kill anyone.
That is the point, Dr. Vile.
>>

I MUST! FOR THE GREATER
GOOD!

THE GREATER GOOD! HOOOOO!

> Yeah. We're gonna be just fine.
>>

Well done, Dr. Vile!
The Death Ray is ready
to destroy the meteor!

The fools in this town
were HAPPY to give me
the parts! They love me!

Now the whole world will
love you!

World Scientist Rankings
number one spot, HERE I
COME!

Activating Death Ray.

Targeting meteor.

Target locked.

Firing Death Ray in 3...

2...

1...

FIIIIIIIIIRE!!!

> We did it! We destroyed the meteor!
>>

YES! HA HA HA! YES!

> You are a hero! The whole world is
undoubtedly cheering your name right
now!
>>

As they should have been all this
time! I will FINALLY get the
respect and recognition I
deserve!

And, most importantly, the
FEAR! The world will fear me
and my all-powerful Death Ray!
HA HA HA!

Bring up the headlines, Lexe! Let
me witness the fruits of my
labour!

> Searching for headlines!
>>

> Found 'em!
>>

YES! Let me see!

> O-oh. Ah. Um...
>>

Display them! Come on, Lexe.
LET ME SEE! I'm giddy with
excitement!

> O-okay. Loading headlines...
>>

...

... C-close headlines.

> I'm so sorry, Dr. Vile.
>>

> You are still MY hero.
>>

... D-Dr. Ben Evolent...

DR. BEN EVOLENT...

DR. BEN
EVOLENT!!

> N-now, please calm down, Dr. Vile.
> Tomorrow is another day.
>>

Tomorrow...

... Tomorrow, I go after YOU, Dr.
Ben Evolent.

Tomorrow, I KILL DR. BEN
EVOLENT!!

HIM AND EVERYONE ON THIS
PLANET! HA HA HA!

I, DR. VILE, AM THE GREATEST
SCIENTIST THIS WORLD WILL
EVER KNOW!!

> That's the spirit, Dr. Vile!
>>

> You will always be my number one
scientist.
> I wuv you so much.
> MUAH!
>>

> Thank you for playing
DR. VILE in THE GREATER GOOD!
> We at GREEN PIXEL hope you had as
much fun playing it as we did making
it!
> Thank you to Ludum Dare for making
our first Jam so much fun!
>>

> We may take this game further and
pump it full of features so please give
us your feedback!
> We'll keep you updated on our
progress and our other projects on
Twitter, @GreenPixelDev, and on our
website, www.greenpixel.ca!
>>

> Please follow us and send us your
feedback or I'll be sad.
>>

> Thank you again for playing!
> Congratulations to all you other
Ludum Dare 25 devs! See you next
time!
> We wuv you so much!
> MUAH!
>>

> Now, off you go!
> Back to the main menu!
>>

ActionScript [AS3]

Section 1
//Sprite2D (greenpixel.game.sprite.Sprite2D) package greenpixel.game.sprite { import flash.display.*; import greenpixel.gut.anim.*; import flash.geom.*; public class Sprite2D extends Sprite { protected var drawData:DrawData; public var hitBox:Rectangle; private var currentAnimBundle:int; private var currentFrame:int; public var isAlive:Boolean; private var frameOpStatus:int; private var currentAnimIndex:int; private var frameCounter:int; public var isAnimFinished:Boolean; public function Sprite2D(){ currentAnimBundle = -1; currentAnimIndex = -1; } public function resetAnim(_arg1:int){ currentAnimIndex = -1; setAnim(currentAnimBundle, _arg1); } public function checkFrameOps():int{ var _local1:int; _local1 = frameOpStatus; frameOpStatus = FrameData.OP_NONE; return (_local1); } public function nextFrame():void{ if (frameCounter == drawData.numDrawFrames){ frameCounter = 0; if (currentFrame < (drawData.totalFrames - 1)){ currentFrame++; } else { if (drawData.loopType == AnimationBundle.ONESHOT){ isAnimFinished = true; } else { currentFrame = 0; }; }; if (!isAnimFinished){ setDrawData(); }; } else { frameCounter++; }; } public function setDrawData():void{ drawData = AnimManager.instance.getDrawData(currentAnimBundle, currentAnimIndex, currentFrame); frameOpStatus = drawData.frameOp; } public function setPos(_arg1:Number, _arg2:Number):void{ x = _arg1; y = _arg2; } public function setAnim(_arg1:int, _arg2:int){ if ((((currentAnimBundle == _arg1)) && ((currentAnimIndex == _arg2)))){ return; }; currentAnimBundle = _arg1; currentAnimIndex = _arg2; currentFrame = 0; frameCounter = 0; setDrawData(); isAnimFinished = false; } public function drawToBuffer(_arg1:BitmapData, _arg2:int, _arg3:int){ _arg1.copyPixels(drawData.img, drawData.bounds, new Point((_arg2 + drawData.imageOffsetX), (_arg3 + drawData.imageOffsetY))); } } }//package greenpixel.game.sprite
Section 2
//TextSprite (greenpixel.game.sprite.TextSprite) package greenpixel.game.sprite { import flash.display.*; import flash.geom.*; import flash.text.*; import greenpixel.game.ui.*; public class TextSprite extends Sprite2D { private var useBGAnim:Boolean; private var textArea:TextArea; public function TextSprite(_arg1:Rectangle, _arg2:int, _arg3:int, _arg4:Boolean){ textArea = new TextArea(_arg1, _arg2, _arg3); useBGAnim = _arg4; } public function isTextFinished():Boolean{ return (textArea.isTextFinished); } public function nextPage():void{ textArea.nextPage(); } public function showPage():void{ textArea.showPage(); } override public function nextFrame():void{ if (useBGAnim){ super.nextFrame(); }; textArea.nextFrame(); } public function isPageFinished():Boolean{ return (textArea.isPageFinished); } public function setText(_arg1:String, _arg2:int):void{ textArea.setText(_arg1, _arg2); } public function setFormat(_arg1:TextFormat):void{ textArea.setFormat(_arg1); } override public function drawToBuffer(_arg1:BitmapData, _arg2:int, _arg3:int){ var _local4:Matrix; if (useBGAnim){ super.drawToBuffer(_arg1, _arg2, _arg3); }; _local4 = new Matrix(); _local4.translate((_arg2 + textArea.x), (_arg3 + textArea.y)); _arg1.draw(textArea, _local4); } } }//package greenpixel.game.sprite
Section 3
//Tile (greenpixel.game.tilemap.Tile) package greenpixel.game.tilemap { public class Tile { public static var SPECIAL_SPAWN_COUCH = 16; public static var ROT90:int = (1 << 6); public static var TILE_YPOS_SHIFT:int = 8; public static var ROTFLAGS:int = ((ROT180 | ROT270) | ROT90); public static var FLIPFLAGS:int = (HFLIP | VFLIP); public static var SPECIAL_SPAWN_CAR = 21; public static var SPECIAL_SPAWN_ROCK = 9; public static var SPECIAL_SPAWN_BUSH = 8; public static var SPECIAL_SPAWN_STOVE = 10; public static var HFLIP:int = (1 << 0); public static var SPECIAL_SPAWN_NPC = 7; public static var VFLIP:int = (1 << 1); public static var SPECIAL_SPAWN_TABLE = 17; public static var SPECIAL_PLAYER = 2; public static var WALL:int = (1 << 2); public static var SPECIAL_SPAWN_TV = 15; public static var TILE_TYPE_SHIFT:int = 24; public static var SPECIAL_SPAWN_FRIDGE = 13; public static var SPECIAL_SPIKES_RIGHT = 4; public static var SPECIAL_SPAWN_TABLE_AND_CHAIRS = 14; public static var ROT180:int = (1 << 4); public static var OVER:int = (1 << 3); public static var SPECIAL_SPIKES_DOWN = 5; public static var SPECIAL_SPIKES_UP = 3; public static var SPECIAL_SPAWN_BED = 18; public static var SPECIAL_SPAWN_COUNTER = 12; public static var SPECIAL_SPAWN_SINK = 11; public static var SPECIAL_SPAWN_DESK = 20; public static var SPECIAL_VISIBILITY_NODE = 23; public static var SPECIAL_SPAWN_TREE = 22; public static var TILE_XPOS_SHIFT:int = 16; public static var ROT270:int = (1 << 5); public static var SPECIAL_SPAWN_DOOR = 6; public static var SPECIAL_GOAL = 1; public static var SPECIAL_SPAWN_DRESSER = 19; public static function hasFlag(_arg1:int, _arg2:int):Boolean{ return (((_arg1 & _arg2) == _arg2)); } public static function getType(_arg1:int):int{ return (((_arg1 >> Tile.TILE_TYPE_SHIFT) & 31)); } public static function getImageX(_arg1:int):int{ return (((_arg1 >> Tile.TILE_XPOS_SHIFT) & 0xFF)); } public static function getImageY(_arg1:int):int{ return (((_arg1 >> Tile.TILE_YPOS_SHIFT) & 0xFF)); } } }//package greenpixel.game.tilemap
Section 4
//TileMap (greenpixel.game.tilemap.TileMap) package greenpixel.game.tilemap { import flash.display.*; import flash.geom.*; import greenpixel.game.world.objects.*; import flash.utils.*; public class TileMap { private var special:Array; public var mapWidth:int; private var tileImage:BitmapData; public var tileSize:int; private var drawTileWidth:int; private var scrollOffsetX:int; private var scrollOffsetY:int; private var map:Array; private var drawTileHeight:int; public var mapHeight:int; private var drawTileStartY:int; private var drawTileStartX:int; private var screenHeight:int; private var animNum:int; private var screenWidth:int; public function TileMap(_arg1:int, _arg2:int){ screenWidth = _arg1; screenHeight = _arg2; drawTileStartX = 0; drawTileStartY = 0; drawTileWidth = 0; drawTileHeight = 0; } public function hasWall(_arg1:int, _arg2:int):Boolean{ return (Tile.hasFlag(map[_arg2][_arg1], Tile.WALL)); } public function nextFrame():void{ } public function centerMap(_arg1:Number, _arg2:Number):Point{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; _local3 = int((_arg1 / tileSize)); _local4 = int((_arg2 / tileSize)); _local5 = (_local3 - (drawTileWidth >> 1)); _local6 = (_local4 - (drawTileHeight >> 1)); _local7 = _arg1; _local8 = _arg2; drawTileStartX = 0; drawTileStartY = 0; scrollOffsetX = 0; scrollOffsetY = 0; if (((((_local5 + 1) > 0)) && ((mapWidth > drawTileWidth)))){ drawTileStartX = _local5; _local7 = ((drawTileWidth >> 1) * tileSize); if ((drawTileStartX + drawTileWidth) >= mapWidth){ drawTileStartX = (mapWidth - drawTileWidth); _local7 = (_arg1 - ((mapWidth - drawTileWidth) * tileSize)); } else { scrollOffsetX = (scrollOffsetX - (_arg1 % tileSize)); }; }; if (((((_local6 + 1) > 0)) && ((mapHeight > drawTileHeight)))){ drawTileStartY = _local6; _local8 = ((drawTileHeight >> 1) * tileSize); if ((drawTileStartY + drawTileHeight) >= mapHeight){ drawTileStartY = (mapHeight - drawTileHeight); _local8 = (_arg2 - ((mapHeight - drawTileHeight) * tileSize)); } else { scrollOffsetY = (scrollOffsetY - (_arg2 % tileSize)); }; }; return (new Point(_local7, _local8)); } public function moveSpriteRight(_arg1:Entity, _arg2:int):Boolean{ var _local3:int; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; _local3 = int(((((_arg1.x + _arg1.hitBox.x) + _arg1.hitBox.width) + _arg2) / tileSize)); _local4 = int(((_arg1.y + _arg1.hitBox.y) / tileSize)); _local5 = 0; _local6 = 0; _local7 = 0; _local8 = (tileSize / 2); if ((((_arg1.x + _arg1.hitBox.x) + _arg1.hitBox.width) + _arg2) > (mapWidth * tileSize)){ _arg1.x = ((mapWidth * tileSize) - (_arg1.hitBox.x + _arg1.hitBox.width)); return (false); }; _local6 = ((_arg1.y + _arg1.hitBox.y) - (_local4 * tileSize)); _local7 = (((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) - ((_local4 + 1) * tileSize)); if ((((((((((_local7 > 0)) && ((_local7 <= _local8)))) && (((_local4 + 1) < mapHeight)))) && (Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][_local3], Tile.WALL))))){ _arg1.x = ((_local3 * tileSize) - (_arg1.hitBox.x + _arg1.hitBox.width)); if (!_arg1.doingAction(Entity.ACTION_DOWN)){ _local5 = Math.min(_arg2, _local7); moveSpriteUp(_arg1, _local5); }; return (false); } else { if ((((((((_local6 > (tileSize - _local8))) && (((_local4 + 1) < mapHeight)))) && (Tile.hasFlag(map[_local4][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL))))){ _arg1.x = ((_local3 * tileSize) - (_arg1.hitBox.x + _arg1.hitBox.width)); if (!_arg1.doingAction(Entity.ACTION_UP)){ _local5 = Math.min(_arg2, (tileSize - _local6)); moveSpriteDown(_arg1, _local5); }; return (false); } else { if (((Tile.hasFlag(map[_local4][_local3], Tile.WALL)) || (((((((_local4 + 1) < mapHeight)) && ((((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) > ((_local4 + 1) * tileSize))))) && (Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL)))))){ _arg1.xSpeed = 0; _arg1.x = ((_local3 * tileSize) - (_arg1.hitBox.x + _arg1.hitBox.width)); return (false); }; }; }; _arg1.x = (_arg1.x + _arg2); return (true); } public function loadMap(_arg1:Array, _arg2:BitmapData){ var _local3:int; var _local4:int; var _local5:int; var _local6:int; _local5 = 0; var _temp1 = _local5; _local5 = (_local5 + 1); _local6 = _arg1[_temp1]; tileImage = _arg2; _local3 = 0; while (_local3 < _local6) { _local3++; }; var _temp2 = _local5; _local5 = (_local5 + 1); mapWidth = _arg1[_temp2]; var _temp3 = _local5; _local5 = (_local5 + 1); mapHeight = _arg1[_temp3]; var _temp4 = _local5; _local5 = (_local5 + 1); tileSize = _arg1[_temp4]; trace(((((mapWidth + " ") + mapHeight) + " ") + tileSize)); drawTileWidth = (screenWidth / tileSize); drawTileHeight = (screenHeight / tileSize); map = new Array(mapHeight); special = new Array(mapHeight); _local3 = 0; while (_local3 < mapHeight) { map[_local3] = new Array(mapWidth); special[_local3] = new Array(mapWidth); _local3++; }; _local3 = 0; while (_local3 < mapHeight) { _local4 = 0; while (_local4 < mapWidth) { var _temp5 = _local5; _local5 = (_local5 + 1); special[_local3][_local4] = _arg1[_temp5]; var _temp6 = _local5; _local5 = (_local5 + 1); map[_local3][_local4] = _arg1[_temp6]; _local4++; }; _local3++; }; } public function moveSpriteLeft(_arg1:Entity, _arg2:int):Boolean{ var _local3:int; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; _local3 = int((((_arg1.x + _arg1.hitBox.x) - _arg2) / tileSize)); _local4 = int(((_arg1.y + _arg1.hitBox.y) / tileSize)); _local5 = 0; _local6 = 0; _local7 = 0; _local8 = (tileSize / 2); if (((_arg1.x + _arg1.hitBox.x) - _arg2) < 0){ _arg1.xSpeed = 0; _arg1.x = -(_arg1.hitBox.x); return (false); }; _local6 = ((_arg1.y + _arg1.hitBox.y) - (_local4 * tileSize)); _local7 = (((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) - ((_local4 + 1) * tileSize)); if ((((((((((_local7 > 0)) && ((_local7 <= _local8)))) && (((_local4 + 1) < mapHeight)))) && (Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][_local3], Tile.WALL))))){ _arg1.x = (((_local3 + 1) * tileSize) - _arg1.hitBox.x); if (!_arg1.doingAction(Entity.ACTION_DOWN)){ _local5 = Math.min(_arg2, _local7); moveSpriteUp(_arg1, _local5); }; return (false); } else { if ((((((((_local6 > (tileSize - _local8))) && (((_local4 + 1) < mapHeight)))) && (Tile.hasFlag(map[_local4][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL))))){ _arg1.x = (((_local3 + 1) * tileSize) - _arg1.hitBox.x); if (!_arg1.doingAction(Entity.ACTION_UP)){ _local5 = Math.min(_arg2, (tileSize - _local6)); moveSpriteDown(_arg1, _local5); }; return (false); } else { if (((Tile.hasFlag(map[_local4][_local3], Tile.WALL)) || (((((((_local4 + 1) < mapHeight)) && ((((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) > ((_local4 + 1) * tileSize))))) && (Tile.hasFlag(map[(_local4 + 1)][_local3], Tile.WALL)))))){ _arg1.xSpeed = 0; _arg1.x = (((_local3 + 1) * tileSize) - _arg1.hitBox.x); return (false); }; }; }; _arg1.x = (_arg1.x - _arg2); return (true); } public function moveSpriteDown(_arg1:Entity, _arg2:int):Boolean{ var _local3:int; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; _local3 = int(((_arg1.x + _arg1.hitBox.x) / tileSize)); _local4 = int(((((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) + _arg2) / tileSize)); _local5 = 0; _local6 = 0; _local7 = 0; _local8 = (tileSize / 2); if ((((_arg1.y + _arg1.hitBox.y) + _arg1.hitBox.height) + _arg2) >= (mapHeight * tileSize)){ _arg1.y = ((mapHeight * tileSize) - (_arg1.hitBox.y + _arg1.hitBox.height)); return (false); }; _local6 = ((_arg1.x + _arg1.hitBox.x) - (_local3 * tileSize)); _local7 = (((_arg1.x + _arg1.hitBox.x) + _arg1.hitBox.width) - ((_local3 + 1) * tileSize)); if ((((((((((_local7 > 0)) && ((_local7 <= _local8)))) && (((_local3 + 1) < mapWidth)))) && (Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][_local3], Tile.WALL))))){ _arg1.y = ((_local4 * tileSize) - (_arg1.hitBox.y + _arg1.hitBox.height)); if (!_arg1.doingAction(Entity.ACTION_RIGHT)){ _local5 = Math.min(_arg2, _local7); moveSpriteLeft(_arg1, _local5); }; return (false); } else { if ((((((((_local6 > (tileSize - _local8))) && (((_local3 + 1) < mapWidth)))) && (Tile.hasFlag(map[_local4][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL))))){ _arg1.y = ((_local4 * tileSize) - (_arg1.hitBox.y + _arg1.hitBox.height)); if (!_arg1.doingAction(Entity.ACTION_LEFT)){ _local5 = Math.min(_arg2, (tileSize - _local6)); moveSpriteRight(_arg1, _local5); }; return (false); } else { if (((Tile.hasFlag(map[_local4][_local3], Tile.WALL)) || (((((((_local3 + 1) < mapWidth)) && (((_arg1.x + _arg1.hitBox.width) > ((_local3 + 1) * tileSize))))) && (Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL)))))){ _arg1.ySpeed = 0; _arg1.y = ((_local4 * tileSize) - (_arg1.hitBox.y + _arg1.hitBox.height)); return (false); }; }; }; _arg1.y = (_arg1.y + _arg2); return (true); } public function getMap():Array{ return (map); } public function loadByteMap(_arg1:Array, _arg2:BitmapData){ var _local3:int; var _local4:int; var _local5:ByteArray; _local5 = new ByteArray(); tileImage = _arg2; _local3 = 0; while (_local3 < _arg1.length) { _local5.writeByte(_arg1[_local3]); _local3++; }; _local5.position = 0; animNum = _local5.readInt(); _local3 = 0; while (_local3 < animNum) { _local5.readInt(); _local5.readInt(); _local3++; }; mapWidth = _local5.readInt(); mapHeight = _local5.readInt(); tileSize = _local5.readInt(); drawTileWidth = (screenWidth / tileSize); drawTileHeight = (screenHeight / tileSize); map = new Array(mapHeight); special = new Array(mapHeight); _local3 = 0; while (_local3 < mapHeight) { map[_local3] = new Array(mapWidth); special[_local3] = new Array(mapWidth); _local3++; }; _local3 = 0; while (_local3 < mapHeight) { _local4 = 0; while (_local4 < mapWidth) { special[_local3][_local4] = _local5.readInt(); map[_local3][_local4] = _local5.readInt(); _local4++; }; _local3++; }; } public function moveSpriteUp(_arg1:Entity, _arg2:int):Boolean{ var _local3:int; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; _local3 = int(((_arg1.x + _arg1.hitBox.x) / tileSize)); _local4 = int((((_arg1.y + _arg1.hitBox.y) - _arg2) / tileSize)); _local5 = 0; _local6 = 0; _local7 = 0; _local8 = (tileSize / 2); if ((_arg1.y - _arg2) < 0){ _arg1.y = 0; return (false); }; _local6 = ((_arg1.x + _arg1.hitBox.x) - (_local3 * tileSize)); _local7 = (((_arg1.x + _arg1.hitBox.x) + _arg1.hitBox.width) - ((_local3 + 1) * tileSize)); if ((((((((((_local7 > 0)) && ((_local7 <= _local8)))) && (((_local3 + 1) < mapWidth)))) && (Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][_local3], Tile.WALL))))){ _arg1.y = (((_local4 + 1) * tileSize) - _arg1.hitBox.y); if (!_arg1.doingAction(Entity.ACTION_RIGHT)){ _local5 = Math.min(_arg2, _local7); moveSpriteLeft(_arg1, _local5); }; return (false); } else { if ((((((((_local6 > (tileSize - _local8))) && (((_local3 + 1) < mapWidth)))) && (Tile.hasFlag(map[_local4][_local3], Tile.WALL)))) && (!(Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL))))){ _arg1.y = (((_local4 + 1) * tileSize) - _arg1.hitBox.y); if (!_arg1.doingAction(Entity.ACTION_LEFT)){ _local5 = Math.min(_arg2, (tileSize - _local6)); moveSpriteRight(_arg1, _local5); }; return (false); } else { if (((Tile.hasFlag(map[_local4][_local3], Tile.WALL)) || (((((((_local3 + 1) < mapWidth)) && ((((_arg1.x + _arg1.hitBox.x) + _arg1.hitBox.width) > ((_local3 + 1) * tileSize))))) && (Tile.hasFlag(map[_local4][(_local3 + 1)], Tile.WALL)))))){ _arg1.ySpeed = 0; _arg1.y = (((_local4 + 1) * tileSize) - _arg1.hitBox.y); return (false); }; }; }; _arg1.y = (_arg1.y - _arg2); return (true); } public function getCurrentOffset():Point{ return (new Point(((tileSize * drawTileStartX) - scrollOffsetX), ((tileSize * drawTileStartY) - scrollOffsetY))); } public function loadMap2D(_arg1:Array, _arg2:Array, _arg3:BitmapData, _arg4:int){ var _local5:int; var _local6:int; tileImage = _arg3; _local5 = 0; while (_local5 < animNum) { _local5++; }; mapWidth = _arg1[0].length; mapHeight = _arg1.length; tileSize = _arg4; drawTileWidth = (screenWidth / tileSize); drawTileHeight = (screenHeight / tileSize); map = new Array(mapHeight); special = new Array(mapHeight); _local5 = 0; while (_local5 < mapHeight) { map[_local5] = new Array(mapWidth); special[_local5] = new Array(mapWidth); _local5++; }; _local5 = 0; while (_local5 < mapHeight) { _local6 = 0; while (_local6 < mapWidth) { special[_local5][_local6] = _arg2[_local5][_local6]; map[_local5][_local6] = _arg1[_local5][_local6]; _local6++; }; _local5++; }; } public function removeWall(_arg1:int, _arg2:int):void{ map[_arg2][_arg1] = (map[_arg2][_arg1] & ~(Tile.WALL)); } public function drawToBuffer(_arg1:BitmapData){ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; _local2 = 0; while (_local2 <= drawTileHeight) { _local3 = 0; while (_local3 <= drawTileWidth) { if (((((_local2 + drawTileStartY) >= mapHeight)) || (((_local3 + drawTileStartX) >= mapWidth)))){ } else { _local4 = map[(_local2 + drawTileStartY)][(_local3 + drawTileStartX)]; _local5 = (Tile.getImageX(_local4) * tileSize); _local6 = (Tile.getImageY(_local4) * tileSize); _arg1.copyPixels(tileImage, new Rectangle(_local5, _local6, tileSize, tileSize), new Point(((_local3 * tileSize) + scrollOffsetX), ((_local2 * tileSize) + scrollOffsetY))); }; _local3++; }; _local2++; }; } public static function translateByteMapTo2D(_arg1:Array, _arg2:Array, _arg3:Array):void{ var _local4:int; var _local5:int; var _local6:ByteArray; var _local7:int; var _local8:int; var _local9:int; var _local10:int; _local6 = new ByteArray(); _local4 = 0; while (_local4 < _arg1.length) { _local6.writeByte(_arg1[_local4]); _local4++; }; _local6.position = 0; _local7 = _local6.readInt(); _local4 = 0; while (_local4 < _local7) { _local6.readInt(); _local6.readInt(); _local4++; }; _local8 = _local6.readInt(); _local9 = _local6.readInt(); _local10 = _local6.readInt(); _local4 = 0; while (_local4 < _local9) { _local5 = 0; while (_local5 < _local8) { _arg3[_local4][_local5] = _local6.readInt(); _arg2[_local4][_local5] = _local6.readInt(); _local5++; }; _local4++; }; } } }//package greenpixel.game.tilemap
Section 5
//TextArea (greenpixel.game.ui.TextArea) package greenpixel.game.ui { import flash.geom.*; import flash.text.*; public class TextArea extends TextField { private var counter:int; public var debug:Boolean;// = false public var isTextFinished:Boolean; private var maxCounter:int; private var testField:TextField; public var splitText:Array; public var textIndex:int; public var isPageFinished:Boolean; private var animType:int; public static var ANIMATED:int = 1; public static var LINE_BREAK:String = "^"; public static var STATIC:int = 0; public function TextArea(_arg1:Rectangle, _arg2:int, _arg3:uint){ debug = false; super(); x = _arg1.x; y = _arg1.y; width = _arg1.width; height = _arg1.height; selectable = false; textIndex = 0; isPageFinished = false; isTextFinished = false; wordWrap = true; animType = _arg2; textColor = _arg3; text = ""; testField = new TextField(); testField.width = _arg1.width; testField.height = _arg1.height; testField.wordWrap = true; if (debug){ background = true; backgroundColor = 0xFFFFFF; textColor = 0; }; } public function setFormat(_arg1:TextFormat):void{ defaultTextFormat = _arg1; } public function nextPage():void{ testField.text = ""; isPageFinished = false; counter = 0; } public function showPage():void{ while (!(((isPageFinished) || (isTextFinished)))) { testField.appendText(splitText[textIndex]); if (textIndex < (splitText.length - 1)){ testField.appendText(" "); }; if (testField.textHeight <= testField.height){ text = testField.text; textIndex++; if (textIndex == splitText.length){ isTextFinished = true; }; } else { if (testField.textHeight > testField.height){ isPageFinished = true; }; }; }; counter = 0; } public function nextFrame():void{ if (((isPageFinished) || (isTextFinished))){ return; }; if (counter == 0){ if (textIndex < splitText.length){ testField.appendText(splitText[textIndex]); if (textIndex < (splitText.length - 1)){ testField.appendText(" "); }; if (testField.textHeight <= testField.height){ text = testField.text; textIndex++; } else { if (testField.textHeight > testField.height){ isPageFinished = true; }; }; } else { isTextFinished = true; }; counter = maxCounter; } else { counter--; }; } public function setText(_arg1:String, _arg2:int):void{ testField.text = ""; text = ""; splitText = _arg1.split(" "); textIndex = 0; isPageFinished = false; isTextFinished = false; counter = 0; maxCounter = _arg2; if (animType == TextArea.STATIC){ showPage(); }; } } }//package greenpixel.game.ui
Section 6
//Character (greenpixel.game.world.objects.Character) package greenpixel.game.world.objects { public class Character extends Entity { public var health:int; public function Character(){ health = 100; } } }//package greenpixel.game.world.objects
Section 7
//Entity (greenpixel.game.world.objects.Entity) package greenpixel.game.world.objects { import flash.geom.*; import greenpixel.math.*; import greenpixel.game.sprite.*; public class Entity extends Sprite2D { public var heading:Vector2D; public var isMoveable:Boolean; public var directionsMovedLastFrame:int; public var id:int; public var entityName:String; public var type:int; public var ySpeed:Number; public var speed:Number; public var direction:int; public var state:int; public var dest:Vector2D; public var xSpeed:Number; public var hasArrivedAtPathDest:Boolean; private var actions:int; public static var ACTION_UP:int = 1; public static var ACTION_DOWN:int = 4; public static var ACTION_JUMP:int = 16; public static var DIR_LEFT:int = 3; public static var STATE_MOVING:int = 1; public static var ACTION_NONE:int = 0; public static var STATE_IDLE:int = 0; public static var DIR_RIGHT:int = 1; public static var DIR_UP:int = 0; public static var ACTION_LEFT:int = 8; public static var STATE_MOVING_ON_PATH:int = 2; public static var ACTION_RIGHT:int = 2; public static var DIR_DOWN:int = 2; private static var idCounter:int = 0; public function Entity(){ name = ""; xSpeed = 0; ySpeed = 0; isAlive = false; speed = 0; direction = DIR_UP; hitBox = new Rectangle(0, 0, 0, 0); heading = new Vector2D(0, 0); dest = new Vector2D(0, 0); directionsMovedLastFrame = 0; type = 0; actions = 0; isMoveable = false; id = idCounter; idCounter++; } private function clearActions():void{ actions = ACTION_NONE; } public function setAction(_arg1:int):void{ actions = (actions | _arg1); } public function doingAction(_arg1:int):Boolean{ return (((actions & _arg1) == _arg1)); } } }//package greenpixel.game.world.objects
Section 8
//BasicGame (greenpixel.game.BasicGame) package greenpixel.game { import flash.display.*; import greenpixel.gut.anim.*; import flash.media.*; import flash.events.*; import greenpixel.sound.*; public class BasicGame extends MovieClip { private var STATE_FADE_IN:int;// = 1 private var keyPressedIDs:Array; private var MAX_KEYS:int;// = 0x0100 private var fadeLayer:Shape; private var nextLayer:GameLayer; private var FADE_INCREMENT:Number;// = 0.1 private var currentLayer:GameLayer; private var keyDownIDs:Array; private var mouseButtonDown:Boolean; private var STATE_NEXT_LAYER:int;// = 3 private var STATE_RUN:int;// = 0 private var mouseButtonClick:Boolean; private var gameStates:Array; public var screenHeight:int; private var fadeAlpha:Number; public var screenWidth:int; private var gameLayers:Array; private var STATE_FADE_OUT:int;// = 2 private var canPressKeys:Array; public function BasicGame(_arg1:int, _arg2:int){ var _local3:Shape; var _local4:*; STATE_RUN = 0; STATE_FADE_IN = 1; STATE_FADE_OUT = 2; STATE_NEXT_LAYER = 3; MAX_KEYS = 0x0100; FADE_INCREMENT = 0.1; super(); stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(Event.ENTER_FRAME, gameLoop); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); stage.addEventListener(KeyboardEvent.KEY_UP, keyUp); screenWidth = _arg1; screenHeight = _arg2; _local3 = new Shape(); _local3.graphics.beginFill(0); _local3.graphics.drawRect(0, 0, _arg1, _arg2); _local3.graphics.endFill(); addChild(_local3); mask = _local3; fadeAlpha = 0; fadeLayer = new Shape(); addChild(fadeLayer); AnimManager.instance = new AnimManager(); SoundManager.instance = new SoundManager(); gameLayers = new Array(); gameStates = new Array(); gameStates.push(STATE_RUN); keyDownIDs = new Array(MAX_KEYS); keyPressedIDs = new Array(MAX_KEYS); canPressKeys = new Array(MAX_KEYS); _local4 = 0; while (_local4 < MAX_KEYS) { canPressKeys[_local4] = true; _local4++; }; mouseButtonDown = false; mouseButtonClick = false; } protected function addMusic(_arg1:Sound):void{ SoundManager.instance.addMusic(_arg1); } protected function mouseClick(_arg1:MouseEvent):void{ mouseButtonDown = false; mouseButtonClick = true; } public function fadeAndPushLayer(_arg1:GameLayer):void{ fadeAlpha = 0; nextLayer = _arg1; pushState(STATE_NEXT_LAYER); pushState(STATE_FADE_OUT); } private function getGameState():int{ return (gameStates[(gameStates.length - 1)]); } public function isKeyDown(_arg1:int):Boolean{ return (keyDownIDs[_arg1]); } public function isMouseClicked():Boolean{ var _local1:Boolean; _local1 = mouseButtonClick; mouseButtonClick = false; return (_local1); } public function fadeOut():void{ fadeAlpha = 0; pushState(STATE_FADE_OUT); } protected function mouseDown(_arg1:MouseEvent):void{ mouseButtonDown = true; } public function pushLayer(_arg1:GameLayer):void{ if (currentLayer != null){ removeChild(currentLayer); }; addChildAt(_arg1, 1); clearKeys(); _arg1.init(); gameLayers.push(_arg1); currentLayer = _arg1; } protected function keyUp(_arg1:KeyboardEvent):void{ keyDownIDs[_arg1.keyCode] = false; keyPressedIDs[_arg1.keyCode] = false; canPressKeys[_arg1.keyCode] = true; } protected function addAnimBundle(_arg1:Array, _arg2:BitmapData):void{ AnimManager.instance.addBundle(_arg1, _arg2); } private function pushState(_arg1:int):void{ gameStates.push(_arg1); } protected function addEffect(_arg1:Sound):void{ SoundManager.instance.addEffect(_arg1); } protected function keyDown(_arg1:KeyboardEvent):void{ keyDownIDs[_arg1.keyCode] = true; if (canPressKeys[_arg1.keyCode]){ keyPressedIDs[_arg1.keyCode] = true; canPressKeys[_arg1.keyCode] = false; }; } public function isKeyPressed(_arg1:int):Boolean{ var _local2:Boolean; _local2 = keyPressedIDs[_arg1]; keyPressedIDs[_arg1] = false; return (_local2); } private function gameLoop(_arg1:Event):void{ switch (getGameState()){ case STATE_RUN: if (currentLayer != null){ currentLayer.updateManager(); currentLayer.drawManager(); }; break; case STATE_FADE_IN: if (currentLayer != null){ currentLayer.drawManager(); }; fadeAlpha = (fadeAlpha - FADE_INCREMENT); if (fadeAlpha <= 0){ fadeAlpha = 0; drawFade(); popState(); } else { drawFade(); }; break; case STATE_FADE_OUT: if (currentLayer != null){ currentLayer.drawManager(); }; fadeAlpha = (fadeAlpha + FADE_INCREMENT); if (fadeAlpha >= 1){ fadeAlpha = 1; drawFade(); popState(); } else { drawFade(); }; break; case STATE_NEXT_LAYER: popState(); pushLayer(nextLayer); break; }; } public function fadeIn():void{ fadeAlpha = 1; pushState(STATE_FADE_IN); } public function isAnyKeyPressed():Boolean{ var _local1:int; var _local2:Boolean; _local2 = false; _local1 = 0; while (_local1 < MAX_KEYS) { if (keyPressedIDs[_local1]){ keyPressedIDs[_local1] = false; _local2 = true; }; _local1++; }; return (_local2); } private function popState():void{ gameStates.pop(); } public function isMouseDown():Boolean{ return (mouseButtonDown); } private function drawFade():void{ fadeLayer.graphics.clear(); fadeLayer.graphics.beginFill(0, fadeAlpha); fadeLayer.graphics.drawRect(0, 0, width, height); fadeLayer.graphics.endFill(); } public function clearKeys():void{ var _local1:*; _local1 = 0; while (_local1 < MAX_KEYS) { canPressKeys[_local1] = true; keyPressedIDs[_local1] = false; keyDownIDs[_local1] = false; _local1++; }; } } }//package greenpixel.game
Section 9
//GameLayer (greenpixel.game.GameLayer) package greenpixel.game { import flash.display.*; import flash.geom.*; import greenpixel.game.tilemap.*; import greenpixel.game.sprite.*; import greenpixel.io.*; public class GameLayer extends MovieClip { private var backBuffer:BitmapData; private var textPopup:TextSprite; protected var screenHeight:int; protected var screenWidth:int; protected var layerStates:Array; protected var game:BasicGame; public static var STATE_TEXT:int = 999; public static var STATE_BASE:int = 0; public function GameLayer(_arg1:BasicGame){ this.game = _arg1; screenWidth = _arg1.screenWidth; screenHeight = _arg1.screenHeight; backBuffer = new BitmapData(screenWidth, screenHeight, false, 0); addChild(new Bitmap(backBuffer)); layerStates = new Array(); pushState(STATE_BASE); } public function init():void{ } protected function isKeyDown(_arg1:int):Boolean{ return (game.isKeyDown(_arg1)); } protected function isMouseClicked():Boolean{ return (game.isMouseClicked()); } protected function drawSprite(_arg1:Sprite2D):void{ drawSpriteAt(_arg1, _arg1.x, _arg1.y); } protected function fadeOut():void{ game.fadeOut(); } public function clearBackBuffer():void{ backBuffer.fillRect(new Rectangle(0, 0, backBuffer.width, backBuffer.height), 0); } protected function drawSpriteAt(_arg1:Sprite2D, _arg2:Number, _arg3:Number):void{ _arg1.drawToBuffer(backBuffer, _arg2, _arg3); _arg1.nextFrame(); } public function draw():void{ } protected function initPopup(_arg1:Rectangle, _arg2:int, _arg3:int, _arg4:Boolean):void{ textPopup = new TextSprite(_arg1, _arg2, _arg3, _arg4); } public function drawText():void{ draw(); drawSprite(textPopup); } protected function pushState(_arg1:int):void{ layerStates.push(_arg1); } public function updateText():void{ if (isKeyPressed(KeyCodes.KEY_SPACE)){ if (textPopup.isPageFinished()){ textPopup.nextPage(); } else { if (textPopup.isTextFinished()){ popState(); } else { textPopup.showPage(); }; }; }; textPopup.nextFrame(); } protected function isKeyPressed(_arg1:int):Boolean{ return (game.isKeyPressed(_arg1)); } protected function setPopupText(_arg1:String, _arg2:int){ pushState(STATE_TEXT); textPopup.setText(_arg1, _arg2); } protected function drawObject(_arg1:DisplayObject):void{ var _local2:Matrix; _local2 = new Matrix(); _local2.translate(_arg1.x, _arg1.y); backBuffer.draw(_arg1, _local2); } protected function setPopupAnim(_arg1:int, _arg2:int):void{ textPopup.setAnim(_arg1, _arg2); } protected function fadeIn():void{ game.fadeIn(); } protected function isAnyKeyPressed():Boolean{ return (game.isAnyKeyPressed()); } public function update():void{ } protected function popState():void{ if (layerStates.length == 1){ trace("Cannot pop base state from game layer"); return; }; layerStates.pop(); } public function drawManager():void{ if (getState() == STATE_TEXT){ drawText(); } else { draw(); }; } public function updateManager():void{ if (getState() == STATE_TEXT){ updateText(); } else { update(); }; } protected function getState():int{ return (layerStates[(layerStates.length - 1)]); } protected function isMouseDown():Boolean{ return (game.isMouseDown()); } protected function drawTileMap(_arg1:TileMap):void{ _arg1.drawToBuffer(backBuffer); _arg1.nextFrame(); } } }//package greenpixel.game
Section 10
//Animation (greenpixel.gut.anim.Animation) package greenpixel.gut.anim { public class Animation { public var frameList:Array; public var name:String; public var type:int; public var loopType:int; public function Animation(_arg1:String):void{ this.name = _arg1; frameList = new Array(); type = 0; loopType = 0; } public function addFrame(_arg1:FrameData):void{ frameList.push(_arg1); } } }//package greenpixel.gut.anim
Section 11
//AnimationBundle (greenpixel.gut.anim.AnimationBundle) package greenpixel.gut.anim { import flash.display.*; import flash.geom.*; public class AnimationBundle { public var anims:Array; public var name:String; public var bounds:Array; public var spriteSheet:BitmapData; public static var LOOP:int = 0; public static var ONESHOT:int = 1; public function AnimationBundle(_arg1:String){ this.name = _arg1; bounds = new Array(); anims = new Array(); } public function loadData(_arg1:Array):void{ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:Rectangle; var _local7:Animation; var _local8:int; var _local9:int; var _local10:FrameData; _local2 = 0; var _temp1 = _local2; _local2 = (_local2 + 1); _local3 = _arg1[_temp1]; _local4 = 0; while (_local4 < _local3) { _local6 = new Rectangle(); var _temp2 = _local2; _local2 = (_local2 + 1); _local6.x = _arg1[_temp2]; var _temp3 = _local2; _local2 = (_local2 + 1); _local6.y = _arg1[_temp3]; var _temp4 = _local2; _local2 = (_local2 + 1); _local6.width = _arg1[_temp4]; var _temp5 = _local2; _local2 = (_local2 + 1); _local6.height = _arg1[_temp5]; bounds.push(_local6); _local4++; }; var _temp6 = _local2; _local2 = (_local2 + 1); _local5 = _arg1[_temp6]; _local4 = 0; while (_local4 < _local5) { _local7 = new Animation(""); var _temp7 = _local2; _local2 = (_local2 + 1); _local7.type = _arg1[_temp7]; var _temp8 = _local2; _local2 = (_local2 + 1); _local7.loopType = _arg1[_temp8]; var _temp9 = _local2; _local2 = (_local2 + 1); _local8 = _arg1[_temp9]; _local9 = 0; while (_local9 < _local8) { _local10 = new FrameData(); var _temp10 = _local2; _local2 = (_local2 + 1); _local10.numDrawFrames = _arg1[_temp10]; var _temp11 = _local2; _local2 = (_local2 + 1); _local10.frameIndex = _arg1[_temp11]; var _temp12 = _local2; _local2 = (_local2 + 1); _local10.offsetX = _arg1[_temp12]; var _temp13 = _local2; _local2 = (_local2 + 1); _local10.offsetY = _arg1[_temp13]; var _temp14 = _local2; _local2 = (_local2 + 1); _local10.frameOp = _arg1[_temp14]; var _temp15 = _local2; _local2 = (_local2 + 1); _local10.orientation = _arg1[_temp15]; _local7.addFrame(_local10); _local9++; }; anims.push(_local7); _local4++; }; } } }//package greenpixel.gut.anim
Section 12
//AnimManager (greenpixel.gut.anim.AnimManager) package greenpixel.gut.anim { import flash.display.*; public class AnimManager { public var animBundles:Array; public static var instance:AnimManager; public function AnimManager(){ animBundles = new Array(); } public function getDrawData(_arg1:int, _arg2:int, _arg3:int):DrawData{ var _local4:DrawData; var _local5:AnimationBundle; var _local6:Array; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; _local4 = new DrawData(); _local5 = animBundles[_arg1]; _local6 = _local5.anims; _local7 = _local6[_arg2].frameList[_arg3].frameIndex; _local8 = _local6[_arg2].frameList[_arg3].offsetX; _local9 = _local6[_arg2].frameList[_arg3].offsetY; _local10 = _local6[_arg2].loopType; _local11 = _local6[_arg2].frameList.length; _local12 = _local6[_arg2].frameList[_arg3].numDrawFrames; _local13 = _local6[_arg2].frameList[_arg3].frameOp; _local4.init(_local5.spriteSheet, _local5.bounds[_local7], _local8, _local9, _local10, _local11, _local12, _local13); return (_local4); } public function addBundle(_arg1:Array, _arg2:BitmapData):void{ var _local3:AnimationBundle; _local3 = new AnimationBundle(""); _local3.spriteSheet = _arg2; _local3.loadData(_arg1); animBundles.push(_local3); } } }//package greenpixel.gut.anim
Section 13
//DrawData (greenpixel.gut.anim.DrawData) package greenpixel.gut.anim { import flash.display.*; import flash.geom.*; public class DrawData { public var img:BitmapData; public var imageOffsetX:int; public var imageOffsetY:int; public var frameOp:int; public var numDrawFrames:int; public var bounds:Rectangle; public var totalFrames:int; public var loopType:int; public function init(_arg1:BitmapData, _arg2:Rectangle, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int, _arg8:int){ img = _arg1; bounds = _arg2; imageOffsetX = _arg3; imageOffsetY = _arg4; loopType = _arg5; totalFrames = _arg6; numDrawFrames = _arg7; frameOp = _arg8; } } }//package greenpixel.gut.anim
Section 14
//FrameData (greenpixel.gut.anim.FrameData) package greenpixel.gut.anim { public class FrameData { public var frameIndex:int; public var offsetY:int; public var frameOp:int; public var numDrawFrames:int; public var offsetX:int; public var orientation:int; public static var OP_ATTACK:int = 1; public static var OR_CENTER_X:int = 1; public static var OR_CENTER_Y:int = 2; public static var OR_CENTER_BOTH:int = 3; public static var OR_NONE:int = 0; public static var OP_NONE:int = 0; public function FrameData(){ numDrawFrames = 0; frameIndex = 0; offsetX = 0; offsetY = 0; frameOp = OP_NONE; orientation = OR_NONE; } } }//package greenpixel.gut.anim
Section 15
//KeyCodes (greenpixel.io.KeyCodes) package greenpixel.io { public class KeyCodes { public static var KEY_LEFT:int = 37; public static var KEY_UP:int = 38; public static var KEY_1:int = 49; public static var KEY_3:int = 51; public static var KEY_5:int = 53; public static var KEY_6:int = 54; public static var KEY_0:int = 48; public static var KEY_8:int = 56; public static var KEY_2:int = 50; public static var KEY_DOWN:int = 40; public static var KEY_4:int = 52; public static var KEY_7:int = 55; public static var KEY_ENTER:int = 13; public static var KEY_9:int = 57; public static var KEY_A:int = 65; public static var KEY_B:int = 66; public static var KEY_C:int = 67; public static var KEY_D:int = 68; public static var KEY_E:int = 69; public static var KEY_F:int = 70; public static var KEY_G:int = 71; public static var KEY_H:int = 72; public static var KEY_I:int = 73; public static var KEY_J:int = 74; public static var KEY_K:int = 75; public static var KEY_L:int = 76; public static var KEY_M:int = 77; public static var KEY_N:int = 78; public static var KEY_O:int = 79; public static var KEY_P:int = 80; public static var KEY_Q:int = 81; public static var KEY_R:int = 82; public static var KEY_S:int = 83; public static var KEY_T:int = 84; public static var KEY_U:int = 85; public static var KEY_V:int = 86; public static var KEY_W:int = 87; public static var KEY_X:int = 88; public static var KEY_Y:int = 89; public static var KEY_Z:int = 90; public static var KEY_SHIFT:int = 16; public static var KEY_CTRL:int = 17; public static var KEY_ESC:int = 27; public static var KEY_SPACE:int = 32; public static var KEY_RIGHT:int = 39; } }//package greenpixel.io
Section 16
//Utils (greenpixel.math.Utils) package greenpixel.math { import flash.geom.*; public class Utils { public static function lineInBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int, _arg8:int):Boolean{ var _local9:int; var _local10:int; var _local11:Array; var _local12:Array; var _local13:Vector2D; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; _local11 = new Array(); _local12 = new Array(); _local13 = new Vector2D((_arg3 - _arg1), (_arg4 - _arg2)); _local13.normalize(); _local13.y = (_local13.y * -1); _local11.push(_local13); _local11.push(new Vector2D(1, 0)); _local11.push(new Vector2D(0, 1)); _local12.push(new Vector2D(_arg5, _arg7)); _local12.push(new Vector2D((_arg5 + _arg6), (_arg7 + _arg8))); _local9 = 0; while (_local9 < _local11.length) { _local16 = int.MAX_VALUE; _local17 = -(int.MAX_VALUE); _local18 = Utils.dotProduct(_local11[_local9], new Vector2D(_arg1, _arg2)); _local19 = Utils.dotProduct(_local11[_local9], new Vector2D(_arg3, _arg4)); if (_local18 < _local19){ _local14 = _local18; _local15 = _local19; } else { _local14 = _local19; _local15 = _local18; }; _local10 = 0; while (_local10 < _local12.length) { _local20 = Utils.dotProduct(_local11[_local9], _local12[_local10]); if (_local20 < _local16){ _local16 = _local20; }; if (_local20 > _local17){ _local17 = _local20; }; _local10++; }; if ((((_local14 > _local17)) || ((_local15 < _local16)))){ return (false); }; _local9++; }; return (true); } public static function AABBCollision(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int, _arg8:int):Vector2D{ var _local9:Vector2D; var _local10:Vector2D; var _local11:Vector2D; var _local12:Vector2D; var _local13:Number; var _local14:Number; _local9 = new Vector2D(); _local10 = new Vector2D((_arg1 + _arg2), (_arg3 + _arg4)); _local11 = new Vector2D((_arg5 + _arg6), (_arg7 + _arg8)); _local12 = new Vector2D((_local11.x - _local10.x), (_local11.y - _local10.y)); _local13 = ((_arg2 + _arg6) - Math.abs(_local12.x)); _local14 = ((_arg4 + _arg8) - Math.abs(_local12.y)); if (_local13 > 0){ if (_local14 > 0){ if (_local13 < _local14){ if (_local12.x < 0){ return (new Vector2D(_local13, 0)); }; return (new Vector2D(-(_local13), 0)); } else { if (_local12.y < 0){ return (new Vector2D(0, _local14)); }; return (new Vector2D(0, -(_local14))); }; }; }; return (null); } public static function boxInRect(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:Rectangle){ return (boxInBox(_arg1, _arg2, _arg3, _arg4, _arg5.x, _arg5.width, _arg5.y, _arg5.height)); } public static function dotProduct(_arg1:Vector2D, _arg2:Vector2D):Number{ return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y))); } public static function pointInBox(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):Boolean{ return ((((((((_arg1 >= _arg3)) && ((_arg1 <= (_arg3 + _arg4))))) && ((_arg2 >= _arg5)))) && ((_arg2 <= (_arg5 + _arg6))))); } public static function boxInBox(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int, _arg8:int):Boolean{ return (!((((((((_arg1 >= (_arg5 + _arg6))) || ((_arg5 >= (_arg1 + _arg2))))) || ((_arg3 >= (_arg7 + _arg8))))) || ((_arg7 >= (_arg3 + _arg4)))))); } public static function rectInRect(_arg1:Rectangle, _arg2:Rectangle):Boolean{ return (boxInBox(_arg1.x, _arg1.width, _arg1.y, _arg1.height, _arg2.x, _arg2.width, _arg2.y, _arg2.height)); } } }//package greenpixel.math
Section 17
//Vector2D (greenpixel.math.Vector2D) package greenpixel.math { public class Vector2D { public var x:Number; public var y:Number; public function Vector2D(_arg1:Number=0, _arg2:Number=0){ x = _arg1; y = _arg2; } public function length():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function SquaredDistance():Number{ return (((x * x) + (y * y))); } public function normalize():void{ var _local1:Number; _local1 = Math.sqrt(SquaredDistance()); if (_local1 == 0){ x = 0; y = 0; } else { x = (x / _local1); y = (y / _local1); }; } } }//package greenpixel.math
Section 18
//SoundManager (greenpixel.sound.SoundManager) package greenpixel.sound { import flash.media.*; import flash.events.*; public class SoundManager { private var currentMusicIndex:int; public var state:int; private var effectsData:Array; private var loopMusic:Boolean; public var isMute:Boolean; private var music:SoundChannel; private var INIT_VOLUME:Number;// = 1 private var effectsInUse:Array; private var musicData:Array; private var currentVolume:Number; private var pausePosition:Number; public static var STATE_STOP:int = 0; public static var instance:SoundManager; public static var STATE_PAUSE:int = 2; public static var STATE_PLAY:int = 1; public function SoundManager(){ INIT_VOLUME = 1; super(); musicData = new Array(); effectsData = new Array(); effectsInUse = new Array(); currentVolume = INIT_VOLUME; loopMusic = false; isMute = false; currentMusicIndex = -1; pausePosition = -1; state = STATE_STOP; } public function stopMusic():void{ if (music == null){ trace("Cannot stop, no music playing"); return; }; currentMusicIndex = -1; music.stop(); state = STATE_STOP; } public function addMusic(_arg1:Sound):void{ musicData.push(_arg1); } public function toggleMute():void{ if (isMute){ SoundMixer.soundTransform = new SoundTransform(currentVolume); } else { SoundMixer.soundTransform = new SoundTransform(0); }; isMute = !(isMute); } public function pauseMusic():void{ if ((((music == null)) || (!((state == STATE_PLAY))))){ trace("Cannot pause, no music playing"); return; }; pausePosition = music.position; music.stop(); state = STATE_PAUSE; } public function addEffect(_arg1:Sound):void{ effectsData.push(_arg1); effectsInUse.push(false); } public function setVolume(_arg1:Number):void{ currentVolume = _arg1; SoundMixer.soundTransform = new SoundTransform(currentVolume); } public function playMusic(_arg1:int, _arg2:Boolean):void{ if (state == STATE_PLAY){ if (_arg1 == currentMusicIndex){ trace(("Already playing music: " + _arg1)); return; }; }; loopMusic = _arg2; if (music != null){ music.stop(); }; music = musicData[_arg1].play(0, 0); music.soundTransform = new SoundTransform(currentVolume); music.addEventListener(Event.SOUND_COMPLETE, musicFinished); currentMusicIndex = _arg1; state = STATE_PLAY; } public function playEffect(_arg1:int){ var _local2:SoundChannel; if (effectsInUse[_arg1]){ return; }; _local2 = effectsData[_arg1].play(0, 0); _local2.soundTransform = new SoundTransform(currentVolume); effectsInUse[_arg1] = true; } public function clearEffectsInUse():void{ var _local1:int; _local1 = 0; while (_local1 < effectsInUse.length) { effectsInUse[_local1] = false; _local1++; }; } private function musicFinished(_arg1:Event):void{ if (loopMusic){ music = musicData[currentMusicIndex].play(0, 0); music.soundTransform = new SoundTransform(currentVolume); music.addEventListener(Event.SOUND_COMPLETE, musicFinished); } else { stopMusic(); }; } public function resumeMusic():void{ if (state != STATE_PAUSE){ trace("Music is not paused"); return; }; music = musicData[currentMusicIndex].play(pausePosition, 0); music.soundTransform = new SoundTransform(currentVolume); music.addEventListener(Event.SOUND_COMPLETE, musicFinished); state = STATE_PLAY; } } }//package greenpixel.sound
Section 19
//MochiAd (mochi.as3.MochiAd) package mochi.as3 { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.net.*; import flash.system.*; public class MochiAd { public static function getVersion():String{ return (MochiServices.getVersion()); } public static function showClickAwayAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_timeout:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var options = _arg1; DEFAULTS = {ad_timeout:5500, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{ }, ad_finished:function ():void{ }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; ad_timeout = options.ad_timeout; delete options.ad_timeout; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Number; var _local3:Boolean; var _local4:Number; if (!this.parent){ delete this.onEnterFrame; return; }; _local1 = this.parent._mochiad_ctr; _local2 = (getTimer() - this.started); _local3 = false; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; _local3 = true; chk.started = getTimer(); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (this.root == null){ _local3 = true; }; if (_local3){ delete this.onEnterFrame; }; }; doOnEnterFrame(chk); } public static function _isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } public static function _allowDomains(_arg1:String):String{ var _local2:String; _local2 = _arg1.split("/")[2].split(":")[0]; if (Security.sandboxType == "application"){ return (_local2); }; Security.allowDomain("*"); Security.allowDomain(_local2); Security.allowInsecureDomain("*"); Security.allowInsecureDomain(_local2); return (_local2); } public static function unload(_arg1:Object):Boolean{ if (((_arg1.clip) && (_arg1.clip._mochiad))){ _arg1 = _arg1.clip; }; if (_arg1.origFrameRate != undefined){ _arg1.stage.frameRate = _arg1.origFrameRate; }; if (!_arg1._mochiad){ return (false); }; if (_arg1._mochiad._containerLCName != undefined){ _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "notify", {id:"unload"}); }; if (_arg1._mochiad.onUnload){ _arg1._mochiad.onUnload(); }; delete _arg1._mochiad_loaded; delete _arg1._mochiad; return (true); } public static function showInterLevelAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_msec:Number; var ad_timeout:Number; var fadeout_time:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var options = _arg1; DEFAULTS = {ad_timeout:5500, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; ad_msec = 11000; ad_timeout = options.ad_timeout; delete options.ad_timeout; fadeout_time = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ var _local1:Number; if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; _local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object; _local2 = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = (_arg1 - 250); }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Number; var _local3:Boolean; var _local4:Number; if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; _local1 = this.parent._mochiad_ctr; _local2 = (getTimer() - this.started); _local3 = false; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (_local2 > chk.ad_msec){ _local3 = true; }; if (_local3){ if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = this.fadeFunction; }; }; }; doOnEnterFrame(chk); } public static function _parseOptions(_arg1:Object, _arg2:Object):Object{ var _local3:Object; var _local4:String; var _local5:Array; var _local6:Number; var _local7:Array; _local3 = {}; for (_local4 in _arg2) { _local3[_local4] = _arg2[_local4]; }; if (_arg1){ for (_local4 in _arg1) { _local3[_local4] = _arg1[_local4]; }; }; if (_local3.clip == undefined){ throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite.")); }; _arg1 = _local3.clip.loaderInfo.parameters.mochiad_options; if (_arg1){ _local5 = _arg1.split("&"); _local6 = 0; while (_local6 < _local5.length) { _local7 = _local5[_local6].split("="); _local3[unescape(_local7[0])] = unescape(_local7[1]); _local6++; }; }; if (_local3.id == "test"){ trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!"); }; return (_local3); } public static function _cleanup(_arg1:Object):void{ var idx:Number; var k:String; var lc:LocalConnection; var f:Function; var mc = _arg1; if (("lc" in mc)){ lc = mc.lc; f = function ():void{ try { lc.client = null; lc.close(); } catch(e:Error) { }; }; setTimeout(f, 0); }; idx = DisplayObjectContainer(mc).numChildren; while (idx > 0) { idx = (idx - 1); DisplayObjectContainer(mc).removeChildAt(idx); }; for (k in mc) { delete mc[k]; }; } public static function load(_arg1:Object):MovieClip{ var DEFAULTS:Object; var clip:Object; var depth:Number; var mc:MovieClip; var wh:Array; var lv:URLVariables; var k:String; var server:String; var hostname:String; var lc:LocalConnection; var name:String; var loader:Loader; var g:Function; var req:URLRequest; var v:Object; var options = _arg1; DEFAULTS = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"}; options = MochiAd._parseOptions(options, DEFAULTS); options.swfv = 9; options.mav = MochiAd.getVersion(); clip = options.clip; if (!(clip is DisplayObject)){ trace("Warning: Object passed as container clip not a descendant of the DisplayObject type"); return (null); }; if (MovieClip(clip).stage == null){ trace("Warning: Container clip for ad is not attached to the stage"); return (null); }; if (!MochiAd._isNetworkAvailable()){ return (null); }; try { if (clip._mochiad_loaded){ return (null); }; } catch(e:Error) { throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic.")); }; depth = options.depth; delete options.depth; mc = createEmptyMovieClip(clip, "_mochiad", depth); wh = MochiAd._getRes(options, clip); options.res = ((wh[0] + "x") + wh[1]); options.server = (options.server + options.id); delete options.id; clip._mochiad_loaded = true; if (clip.loaderInfo.loaderURL.indexOf("http") == 0){ options.as3_swf = clip.loaderInfo.loaderURL; } else { trace("[MochiAd] NOTE: Security Sandbox Violation errors below are normal"); }; lv = new URLVariables(); for (k in options) { v = options[k]; if (!(v is Function)){ lv[k] = v; }; }; server = lv.server; delete lv.server; hostname = _allowDomains(server); lc = new LocalConnection(); lc.client = mc; name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_"); lc.allowDomain("*", "localhost"); lc.allowInsecureDomain("*", "localhost"); lc.connect(name); mc.lc = lc; mc.lcName = name; lv.lc = name; lv.st = getTimer(); mc.regContLC = function (_arg1:String):void{ mc._containerLCName = _arg1; }; loader = new Loader(); g = function (_arg1:Object):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); MochiAd.unload(clip); }; loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g); req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime())); req.contentType = "application/x-www-form-urlencoded"; req.method = URLRequestMethod.POST; req.data = lv; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:IOErrorEvent):void{ trace("[MochiAds] Blocked URL"); }); if (!options.skip){ loader.load(req); }; mc.addChild(loader); mc._mochiad_ctr = loader; return (mc); } public static function runMethod(_arg1:Object, _arg2:String, _arg3:Array):Object{ var _local4:Array; var _local5:Number; _local4 = _arg2.split("."); _local5 = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return (undefined); }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; if (typeof(_arg1[_local4[_local5]]) == "function"){ return (_arg1[_local4[_local5]].apply(_arg1, _arg3)); }; return (undefined); } public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{ var _local4:MovieClip; _local4 = new MovieClip(); if (((false) && (_arg3))){ _arg1.addChildAt(_local4, _arg3); } else { _arg1.addChild(_local4); }; _arg1[_arg2] = _local4; _local4["_name"] = _arg2; return (_local4); } public static function _getRes(_arg1:Object, _arg2:Object):Array{ var _local3:Object; var _local4:Number; var _local5:Number; var _local6:Array; _local3 = _arg2.getBounds(_arg2.root); _local4 = 0; _local5 = 0; if (typeof(_arg1.res) != "undefined"){ _local6 = _arg1.res.split("x"); _local4 = parseFloat(_local6[0]); _local5 = parseFloat(_local6[1]); } else { _local4 = (_local3.right - _local3.left); _local5 = (_local3.top - _local3.bottom); }; if ((((_local4 == 0)) || ((_local5 == 0)))){ _local4 = _arg2.stage.stageWidth; _local5 = _arg2.stage.stageHeight; }; return ([_local4, _local5]); } public static function adShowing(_arg1:Object):void{ _arg1.origFrameRate = _arg1.stage.frameRate; _arg1.stage.frameRate = 30; } public static function getValue(_arg1:Object, _arg2:String):Object{ var _local3:Array; var _local4:Number; _local3 = _arg2.split("."); _local4 = 0; while (_local4 < (_local3.length - 1)) { if ((((_arg1[_local3[_local4]] == undefined)) || ((_arg1[_local3[_local4]] == null)))){ return (undefined); }; _arg1 = _arg1[_local3[_local4]]; _local4++; }; return (_arg1[_local3[_local4]]); } public static function rpc(_arg1:Object, _arg2:Number, _arg3:Object):void{ var _local4:Object; var _local5:Object; switch (_arg3.id){ case "setValue": MochiAd.setValue(_arg1, _arg3.objectName, _arg3.value); break; case "getValue": _local4 = MochiAd.getValue(_arg1, _arg3.objectName); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local4); break; case "runMethod": _local5 = MochiAd.runMethod(_arg1, _arg3.method, _arg3.args); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local5); break; default: trace(("[mochiads rpc] unknown rpc id: " + _arg3.id)); }; } public static function setValue(_arg1:Object, _arg2:String, _arg3:Object):void{ var _local4:Array; var _local5:Number; _local4 = _arg2.split("."); _local5 = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return; }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; _arg1[_local4[_local5]] = _arg3; } public static function showPreGameAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_msec:Number; var ad_timeout:Number; var fadeout_time:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var bar:MovieClip; var bar_w:Number; var bar_color:Number; var bar_background:Number; var bar_outline:Number; var backing_mc:MovieClip; var backing:Object; var inside_mc:MovieClip; var inside:Object; var outline_mc:MovieClip; var outline:Object; var complete:Boolean; var unloaded:Boolean; var progress:Number; var f:Function; var sendHostProgress:Boolean; var fn:Function; var r:MovieClip; var options = _arg1; DEFAULTS = {ad_timeout:5500, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }, ad_progress:function (_arg1:Number):void{ }, progress_override:function (_arg1:Object):Number{ return (NaN); }, bar_offset:0}; options = MochiAd._parseOptions(options, DEFAULTS); if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){ options.ad_started(); fn = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); return; }; clip = options.clip; ad_msec = 11000; ad_timeout = options.ad_timeout; if (options.skip){ ad_timeout = 0; }; delete options.ad_timeout; fadeout_time = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ var fn:Function; MochiAd._cleanup(mc); fn = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.x = (w * -0.5); chk.y = (h * -0.5); bar = createEmptyMovieClip(chk, "_mochiad_bar", 4); if (options.no_progress_bar){ bar.visible = false; delete options.no_progress_bar; } else { bar.x = (10 + options.bar_offset); bar.y = (h - 20); }; bar_w = ((w - bar.x) - 10); bar_color = options.color; delete options.color; bar_background = options.background; delete options.background; bar_outline = options.outline; delete options.outline; backing_mc = createEmptyMovieClip(bar, "_outline", 1); backing = backing_mc.graphics; backing.beginFill(bar_background); backing.moveTo(0, 0); backing.lineTo(bar_w, 0); backing.lineTo(bar_w, 10); backing.lineTo(0, 10); backing.lineTo(0, 0); backing.endFill(); inside_mc = createEmptyMovieClip(bar, "_inside", 2); inside = inside_mc.graphics; inside.beginFill(bar_color); inside.moveTo(0, 0); inside.lineTo(bar_w, 0); inside.lineTo(bar_w, 10); inside.lineTo(0, 10); inside.lineTo(0, 0); inside.endFill(); inside_mc.scaleX = 0; outline_mc = createEmptyMovieClip(bar, "_outline", 3); outline = outline_mc.graphics; outline.lineStyle(0, bar_outline, 100); outline.moveTo(0, 0); outline.lineTo(bar_w, 0); outline.lineTo(bar_w, 10); outline.lineTo(0, 10); outline.lineTo(0, 0); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.last_pcnt = 0; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ var _local1:Number; _local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; complete = false; unloaded = false; progress = Math.min(1, options.progress_override(clip)); f = function (_arg1:Event):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); complete = true; if (unloaded){ MochiAd.unload(clip); }; }; if (!isNaN(progress)){ complete = (progress == 1); } else { if (clip.loaderInfo.bytesLoaded == clip.loaderInfo.bytesTotal){ complete = true; } else { if ((clip.root is MovieClip)){ r = (clip.root as MovieClip); if (r.framesLoaded >= r.totalFrames){ complete = true; } else { clip.loaderInfo.addEventListener(Event.COMPLETE, f); }; } else { clip.loaderInfo.addEventListener(Event.COMPLETE, f); }; }; }; mc.unloadAd = function ():void{ unloaded = true; if (complete){ MochiAd.unload(clip); }; }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object; _local2 = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = _arg1; }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; mc.rpcTestFn = function (_arg1:String):Object{ trace(("[MOCHIAD rpcTestFn] " + _arg1)); return (_arg1); }; sendHostProgress = false; mc.sendHostLoadProgress = function (_arg1:String):void{ sendHostProgress = true; }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Object; var _local3:Number; var _local4:Boolean; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Object; var _local11:Number; var _local12:Number; if (((!(this.parent)) || (!(this.parent.parent)))){ delete this["onEnterFrame"]; return; }; _local1 = this.parent.parent.root; _local2 = this.parent._mochiad_ctr; _local3 = (getTimer() - this.started); _local4 = false; _local5 = _local1.loaderInfo.bytesTotal; _local6 = _local1.loaderInfo.bytesLoaded; _local7 = Math.min(1, options.progress_override(_local1)); if (_local7 == 1){ complete = true; }; if (complete){ _local6 = Math.max(1, _local6); _local5 = _local6; }; _local8 = ((100 * _local6) / _local5); if (!isNaN(_local7)){ _local8 = (100 * _local7); }; _local9 = ((100 * _local3) / chk.ad_msec); _local10 = this._mochiad_bar._inside; _local11 = Math.min(100, Math.min(((_local8) || (0)), _local9)); _local11 = Math.max(this.last_pcnt, _local11); this.last_pcnt = _local11; _local10.scaleX = (_local11 * 0.01); options.ad_progress(_local11); if (sendHostProgress){ clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:_local8}); if (_local8 >= 100){ sendHostProgress = false; }; }; if (!chk.showing){ _local12 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local12 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if ((((_local3 > chk.ad_timeout)) && ((_local8 == 100)))){ options.ad_failed(); _local4 = true; }; }; }; if (_local3 > chk.ad_msec){ _local4 = true; }; if (((complete) && (_local4))){ if (unloaded){ MochiAd.unload(_local1); } else { if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = chk.fadeFunction; }; }; }; }; doOnEnterFrame(chk); } public static function showPreloaderAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0"); MochiAd.showPreGameAd(_arg1); } public static function showTimedAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0"); MochiAd.showInterLevelAd(_arg1); } public static function doOnEnterFrame(_arg1:MovieClip):void{ var f:Function; var mc = _arg1; f = function (_arg1:Object):void{ if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){ mc.onEnterFrame(); } else { _arg1.target.removeEventListener(_arg1.type, arguments.callee); }; }; mc.addEventListener(Event.ENTER_FRAME, f); } } }//package mochi.as3
Section 20
//MochiCoins (mochi.as3.MochiCoins) package mochi.as3 { public class MochiCoins { public static const STORE_HIDE:String = "StoreHide"; public static const NO_USER:String = "NoUser"; public static const IO_ERROR:String = "IOError"; public static const ITEM_NEW:String = "ItemNew"; public static const ITEM_OWNED:String = "ItemOwned"; public static const STORE_ITEMS:String = "StoreItems"; public static const ERROR:String = "Error"; public static const STORE_SHOW:String = "StoreShow"; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public static var _inventory:MochiInventory; public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } public static function getStoreItems():void{ MochiServices.send("coins_getStoreItems"); } public static function get inventory():MochiInventory{ return (_inventory); } public static function showStore(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("coins_showStore", {options:_arg1}, null, null); } public static function requestFunding(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_requestFunding", _arg1); } public static function showItem(_arg1:Object=null):void{ if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){ trace("ERROR: showItem call must pass an Object with an item key"); return; }; MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("coins_showItem", {options:_arg1}, null, null); } public static function getVersion():String{ return (MochiServices.getVersion()); } public static function showVideo(_arg1:Object=null):void{ if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){ trace("ERROR: showVideo call must pass an Object with an item key"); return; }; MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("coins_showVideo", {options:_arg1}, null, null); } addEventListener(MochiSocial.LOGGED_IN, function (_arg1:Object):void{ _inventory = new MochiInventory(); }); addEventListener(MochiSocial.LOGGED_OUT, function (_arg1:Object):void{ _inventory = null; }); } }//package mochi.as3
Section 21
//MochiDigits (mochi.as3.MochiDigits) package mochi.as3 { public final class MochiDigits { private var Sibling:MochiDigits; private var Fragment:Number; private var Encoder:Number; public function MochiDigits(_arg1:Number=0, _arg2:uint=0):void{ Encoder = 0; setValue(_arg1, _arg2); } public function set value(_arg1:Number):void{ setValue(_arg1); } public function reencode():void{ var _local1:uint; _local1 = int((2147483647 * Math.random())); Fragment = (Fragment ^ (_local1 ^ Encoder)); Encoder = _local1; } public function toString():String{ var _local1:String; _local1 = String.fromCharCode((Fragment ^ Encoder)); if (Sibling != null){ _local1 = (_local1 + Sibling.toString()); }; return (_local1); } public function get value():Number{ return (Number(this.toString())); } public function setValue(_arg1:Number=0, _arg2:uint=0):void{ var _local3:String; _local3 = _arg1.toString(); var _temp1 = _arg2; _arg2 = (_arg2 + 1); Fragment = (_local3.charCodeAt(_temp1) ^ Encoder); if (_arg2 < _local3.length){ Sibling = new MochiDigits(_arg1, _arg2); } else { Sibling = null; }; reencode(); } public function addValue(_arg1:Number):void{ value = (value + _arg1); } } }//package mochi.as3
Section 22
//MochiEventDispatcher (mochi.as3.MochiEventDispatcher) package mochi.as3 { public class MochiEventDispatcher { private var eventTable:Object; public function MochiEventDispatcher():void{ eventTable = {}; } public function triggerEvent(_arg1:String, _arg2:Object):void{ var _local3:Object; if (eventTable[_arg1] == undefined){ return; }; for (_local3 in eventTable[_arg1]) { var _local6 = eventTable[_arg1]; _local6[_local3](_arg2); }; } public function removeEventListener(_arg1:String, _arg2:Function):void{ var _local3:Object; if (eventTable[_arg1] == undefined){ eventTable[_arg1] = []; return; }; for (_local3 in eventTable[_arg1]) { if (eventTable[_arg1][_local3] != _arg2){ } else { eventTable[_arg1].splice(Number(_local3), 1); }; }; } public function addEventListener(_arg1:String, _arg2:Function):void{ removeEventListener(_arg1, _arg2); eventTable[_arg1].push(_arg2); } } }//package mochi.as3
Section 23
//MochiEvents (mochi.as3.MochiEvents) package mochi.as3 { public class MochiEvents { public static const FORMAT_NONE:String = "NoForm"; public static const ALIGN_BOTTOM_RIGHT:String = "ALIGN_BR"; public static const IO_ERROR:String = "IOError"; public static const FORMAT_SHORT:String = "ShortForm"; public static const ALIGN_TOP_RIGHT:String = "ALIGN_TR"; public static const ALIGN_LEFT:String = "ALIGN_L"; public static const ALIGN_RIGHT:String = "ALIGN_R"; public static const ACHIEVEMENTS_OWNED:String = "AchievementOwned"; public static const ALIGN_BOTTOM_LEFT:String = "ALIGN_BL"; public static const ALIGN_BOTTOM:String = "ALIGN_B"; public static const ACHIEVEMENT_NEW:String = "AchievementReceived"; public static const GAME_ACHIEVEMENTS:String = "GameAchievements"; public static const FORMAT_LONG:String = "LongForm"; public static const ALIGN_TOP:String = "ALIGN_T"; public static const IO_PENDING:String = "IOPending"; public static const ERROR:String = "Error"; public static const ALIGN_TOP_LEFT:String = "ALIGN_TL"; public static const ALIGN_CENTER:String = "ALIGN_C"; private static var gameStart:Number; private static var levelStart:Number; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public static function showAwards(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.stayOnTop(); MochiServices.send("events_showAwards", _arg1); } public static function trackEvent(_arg1:String, _arg2=null):void{ MochiServices.send("events_trackEvent", {tag:_arg1, value:_arg2}, null, null); } public static function getAchievements(_arg1:Object=null):void{ MochiServices.send("events_getAchievements", _arg1); } public static function setNotifications(_arg1:Object):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("events_setNotifications", _arg1, null, null); } public static function endPlay():void{ MochiServices.send("events_clearRoundID", null, null, null); } public static function getVersion():String{ return (MochiServices.getVersion()); } public static function startPlay(_arg1:String="gameplay"):void{ MochiServices.send("events_setRoundID", {tag:String(_arg1)}, null, null); } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function unlockAchievement(_arg1:Object):void{ MochiServices.send("events_unlockAchievement", _arg1); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } public static function startSession(_arg1:String):void{ MochiServices.send("events_beginSession", {achievementID:_arg1}, null, null); } } }//package mochi.as3
Section 24
//MochiInventory (mochi.as3.MochiInventory) package mochi.as3 { import flash.events.*; import flash.utils.*; public dynamic class MochiInventory extends Proxy { private var _timer:Timer; private var _names:Array; private var _consumableProperties:Object; private var _syncID:Number; private var _storeSync:Object; private var _outstandingID:Number; private var _syncPending:Boolean; public static const READY:String = "InvReady"; public static const ERROR:String = "Error"; public static const IO_ERROR:String = "IoError"; private static const KEY_SALT:String = " syncMaint"; public static const WRITTEN:String = "InvWritten"; public static const NOT_READY:String = "InvNotReady"; public static const VALUE_ERROR:String = "InvValueError"; private static const CONSUMER_KEY:String = "MochiConsumables"; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public function MochiInventory():void{ MochiCoins.addEventListener(MochiCoins.ITEM_OWNED, itemOwned); MochiCoins.addEventListener(MochiCoins.ITEM_NEW, newItems); MochiSocial.addEventListener(MochiSocial.LOGGED_IN, loggedIn); MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, loggedOut); _storeSync = new Object(); _syncPending = false; _outstandingID = 0; _syncID = 0; _timer = new Timer(1000); _timer.addEventListener(TimerEvent.TIMER, sync); _timer.start(); if (MochiSocial.loggedIn){ loggedIn(); } else { loggedOut(); }; } private function newItems(_arg1:Object):void{ if (!this[(_arg1.id + KEY_SALT)]){ this[(_arg1.id + KEY_SALT)] = 0; }; if (!this[_arg1.id]){ this[_arg1.id] = 0; }; this[(_arg1.id + KEY_SALT)] = (this[(_arg1.id + KEY_SALT)] + _arg1.count); this[_arg1.id] = (this[_arg1.id] + _arg1.count); if (((_arg1.privateProperties) && (_arg1.privateProperties.consumable))){ if (!this[_arg1.privateProperties.tag]){ this[_arg1.privateProperties.tag] = 0; }; this[_arg1.privateProperties.tag] = (this[_arg1.privateProperties.tag] + (_arg1.privateProperties.inc * _arg1.count)); }; } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(_arg1){ if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return (-1); }; if (_consumableProperties[_arg1]){ return (MochiDigits(_consumableProperties[_arg1]).value); }; return (undefined); } public function release():void{ MochiCoins.removeEventListener(MochiCoins.ITEM_NEW, newItems); MochiSocial.removeEventListener(MochiSocial.LOGGED_IN, loggedIn); MochiSocial.removeEventListener(MochiSocial.LOGGED_OUT, loggedOut); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function hasProperty(_arg1):Boolean{ if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return (false); }; if (_consumableProperties[_arg1] == undefined){ return (false); }; return (true); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextNameIndex(_arg1:int):int{ return (((_arg1)>=_names.length) ? 0 : (_arg1 + 1)); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(_arg1, _arg2):void{ var _local3:MochiDigits; if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return; }; if (!(_arg2 is Number)){ triggerEvent(ERROR, {type:VALUE_ERROR, error:"Invalid type", arg:_arg2}); return; }; if (_consumableProperties[_arg1]){ _local3 = MochiDigits(_consumableProperties[_arg1]); if (_local3.value == _arg2){ return; }; _local3.value = _arg2; } else { _names.push(_arg1); _consumableProperties[_arg1] = new MochiDigits(_arg2); }; _syncID++; } private function sync(_arg1:Event=null):void{ var _local2:Object; var _local3:String; if (((_syncPending) || ((_syncID == _outstandingID)))){ return; }; _outstandingID = _syncID; _local2 = {}; for (_local3 in _consumableProperties) { _local2[_local3] = MochiDigits(_consumableProperties[_local3]).value; }; MochiUserData.put(CONSUMER_KEY, _local2, putConsumableBag); _syncPending = true; } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextName(_arg1:int):String{ return (_names[(_arg1 - 1)]); } private function loggedIn(_arg1:Object=null):void{ MochiUserData.get(CONSUMER_KEY, getConsumableBag); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function deleteProperty(_arg1):Boolean{ if (!_consumableProperties[_arg1]){ return (false); }; _names.splice(_names.indexOf(_arg1), 1); delete _consumableProperties[_arg1]; return (true); } private function itemOwned(_arg1:Object):void{ _storeSync[_arg1.id] = {properties:_arg1.properties, count:_arg1.count}; } private function putConsumableBag(_arg1:MochiUserData):void{ _syncPending = false; if (_arg1.error){ triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error}); _outstandingID = -1; }; triggerEvent(WRITTEN, {}); } private function getConsumableBag(_arg1:MochiUserData):void{ var _local2:String; var _local3:Number; if (_arg1.error){ triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error}); return; }; _consumableProperties = {}; _names = new Array(); if (_arg1.data){ for (_local2 in _arg1.data) { _names.push(_local2); _consumableProperties[_local2] = new MochiDigits(_arg1.data[_local2]); }; }; for (_local2 in _storeSync) { _local3 = _storeSync[_local2].count; if (_consumableProperties[(_local2 + KEY_SALT)]){ _local3 = (_local3 - _consumableProperties[(_local2 + KEY_SALT)].value); }; if (_local3 == 0){ } else { newItems({id:_local2, count:_local3, properties:_storeSync[_local2].properties}); }; }; triggerEvent(READY, {}); } private function loggedOut(_arg1:Object=null):void{ _consumableProperties = null; } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } } }//package mochi.as3
Section 25
//MochiServices (mochi.as3.MochiServices) package mochi.as3 { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.utils.*; import flash.net.*; import flash.system.*; public class MochiServices { public static const CONNECTED:String = "onConnected"; private static var _container:Object; private static var _connected:Boolean = false; private static var _queue:Array; private static var _swfVersion:String; private static var _preserved:Object; public static var netupAttempted:Boolean = false; private static var _sendChannel:LocalConnection; private static var _nextCallbackID:Number; private static var _clip:MovieClip; private static var _loader:Loader; private static var _id:String; private static var _services:String = "services.swf"; private static var _servURL:String = "http://www.mochiads.com/static/lib/services/"; public static var widget:Boolean = false; private static var _timer:Timer; private static var _sendChannelName:String; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); private static var _callbacks:Object; private static var _connecting:Boolean = false; private static var _mochiLocalConnection:MovieClip; private static var _listenChannelName:String = "__ms_"; public static var onError:Object; public static var netup:Boolean = true; private static var _mochiLC:String = "MochiLC.swf"; public static function isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } public static function get connected():Boolean{ return (_connected); } private static function onReceive(_arg1:Object):void{ var cb:String; var cblst:Object; var method:*; var methodName:String; var obj:Object; var pkg = _arg1; cb = pkg.callbackID; cblst = _callbacks[cb]; if (!cblst){ return; }; method = cblst.callbackMethod; methodName = ""; obj = cblst.callbackObject; if (((obj) && ((typeof(method) == "string")))){ methodName = method; if (obj[method] != null){ method = obj[method]; } else { trace((("Error: Method " + method) + " does not exist.")); }; }; if (method != undefined){ try { method.apply(obj, pkg.args); } catch(error:Error) { trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString())); }; } else { if (obj != null){ try { obj(pkg.args); } catch(error:Error) { trace(("Error invoking method on object: " + error.toString())); }; }; }; delete _callbacks[cb]; } public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{ if (_connected){ _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_nextCallbackID}); } else { if ((((_clip == null)) || (!(_connecting)))){ trace(("Error: MochiServices not connected. Please call MochiServices.connect(). Function: " + _arg1)); handleError(_arg2, _arg3, _arg4); flush(true); return; }; _queue.push({methodName:_arg1, args:_arg2, callbackID:_nextCallbackID}); }; if (_clip != null){ if (_callbacks != null){ _callbacks[_nextCallbackID] = {callbackObject:_arg3, callbackMethod:_arg4}; _nextCallbackID++; }; }; } private static function init(_arg1:String, _arg2:Object):void{ _id = _arg1; if (_arg2 != null){ _container = _arg2; loadCommunicator(_arg1, _container); }; } private static function clickMovie(_arg1:String, _arg2:Function):MovieClip{ var _local3:Array; var _local4:int; var _local5:Array; var _local6:Array; var _local7:MovieClip; var _local8:LocalConnection; var _local9:String; var _local10:ByteArray; var _local11:ByteArray; var _local12:uint; var _local13:uint; var _local14:Loader; _local3 = [150, 21, 0, 7, 1, 0, 0, 0, 0, 98, 116, 110, 0, 7, 2, 0, 0, 0, 0, 116, 104, 105, 115, 0, 28, 150, 22, 0, 0, 99, 114, 101, 97, 116, 101, 69, 109, 112, 116, 121, 77, 111, 118, 105, 101, 67, 108, 105, 112, 0, 82, 135, 1, 0, 0, 23, 150, 13, 0, 4, 0, 0, 111, 110, 82, 101, 108, 101, 97, 115, 101, 0, 142, 8, 0, 0, 0, 0, 2, 42, 0, 114, 0, 150, 17, 0, 0, 32, 0, 7, 1, 0, 0, 0, 8, 0, 0, 115, 112, 108, 105, 116, 0, 82, 135, 1, 0, 1, 23, 150, 7, 0, 4, 1, 7, 0, 0, 0, 0, 78, 150, 8, 0, 0, 95, 98, 108, 97, 110, 107, 0, 154, 1, 0, 0, 150, 7, 0, 0, 99, 108, 105, 99, 107, 0, 150, 7, 0, 4, 1, 7, 1, 0, 0, 0, 78, 150, 27, 0, 7, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 76, 111, 99, 97, 108, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 0, 64, 150, 6, 0, 0, 115, 101, 110, 100, 0, 82, 79, 150, 15, 0, 4, 0, 0, 95, 97, 108, 112, 104, 97, 0, 7, 0, 0, 0, 0, 79, 150, 23, 0, 7, 0xFF, 0, 0xFF, 0, 7, 1, 0, 0, 0, 4, 0, 0, 98, 101, 103, 105, 110, 70, 105, 108, 108, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 109, 111, 118, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 16, 0, 7, 0, 0, 0, 0, 4, 0, 0, 101, 110, 100, 70, 105, 108, 108, 0, 82, 23]; _local5 = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3]; _local6 = [0, 64, 0, 0, 0]; _local7 = new MovieClip(); _local8 = new LocalConnection(); _local9 = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().time)); _local8 = new LocalConnection(); _local7.lc = _local8; _local7.click = _arg2; _local8.client = _local7; _local8.connect(_local9); _local10 = new ByteArray(); _local11 = new ByteArray(); _local11.endian = Endian.LITTLE_ENDIAN; _local11.writeShort(1); _local11.writeUTFBytes(((_arg1 + " ") + _local9)); _local11.writeByte(0); _local12 = ((_local3.length + _local11.length) + 4); _local13 = (_local12 + 35); _local10.endian = Endian.LITTLE_ENDIAN; _local10.writeUTFBytes("FWS"); _local10.writeByte(8); _local10.writeUnsignedInt(_local13); for each (_local4 in _local5) { _local10.writeByte(_local4); }; _local10.writeUnsignedInt(_local12); _local10.writeByte(136); _local10.writeShort(_local11.length); _local10.writeBytes(_local11); for each (_local4 in _local3) { _local10.writeByte(_local4); }; for each (_local4 in _local6) { _local10.writeByte(_local4); }; _local14 = new Loader(); _local14.loadBytes(_local10); _local7.addChild(_local14); return (_local7); } private static function detach(_arg1:Event):void{ var _local2:LoaderInfo; _local2 = LoaderInfo(_arg1.target); _local2.removeEventListener(Event.COMPLETE, detach); _local2.removeEventListener(IOErrorEvent.IO_ERROR, detach); _local2.removeEventListener(Event.COMPLETE, loadLCBridgeComplete); _local2.removeEventListener(IOErrorEvent.IO_ERROR, loadError); } public static function stayOnTop():void{ _container.addEventListener(Event.ENTER_FRAME, MochiServices.bringToTop, false, 0, true); if (_clip != null){ _clip.visible = true; }; } private static function loadLCBridgeComplete(_arg1:Event):void{ var _local2:Loader; _local2 = LoaderInfo(_arg1.target).loader; _mochiLocalConnection = MovieClip(_local2.content); listen(); } public static function disconnect():void{ if (((_connected) || (_connecting))){ if (_clip != null){ if (_clip.parent != null){ if ((_clip.parent is Sprite)){ Sprite(_clip.parent).removeChild(_clip); _clip = null; }; }; }; _connecting = (_connected = false); flush(true); try { _mochiLocalConnection.close(); } catch(error:Error) { }; }; if (_timer != null){ try { _timer.stop(); _timer.removeEventListener(TimerEvent.TIMER, connectWait); _timer = null; } catch(error:Error) { }; }; } public static function allowDomains(_arg1:String):String{ var _local2:String; if (Security.sandboxType != "application"){ Security.allowDomain("*"); Security.allowInsecureDomain("*"); }; if (_arg1.indexOf("http://") != -1){ _local2 = _arg1.split("/")[2].split(":")[0]; if (Security.sandboxType != "application"){ Security.allowDomain(_local2); Security.allowInsecureDomain(_local2); }; }; return (_local2); } public static function getVersion():String{ return ("3.9.4 as3"); } public static function doClose():void{ _container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop); } public static function warnID(_arg1:String, _arg2:Boolean):void{ var _local3:Number; _arg1 = _arg1.toLowerCase(); if (_arg1.length != 16){ trace((("WARNING: " + (_arg2) ? "board" : "game") + " ID is not the appropriate length")); return; } else { if (_arg1 == "1e113c7239048b3f"){ if (_arg2){ trace("WARNING: Using testing board ID"); } else { trace("WARNING: Using testing board ID as game ID"); }; return; } else { if (_arg1 == "84993a1de4031cd8"){ if (_arg2){ trace("WARNING: Using testing game ID as board ID"); } else { trace("WARNING: Using testing game ID"); }; return; }; }; }; _local3 = 0; while (_local3 < _arg1.length) { switch (_arg1.charAt(_local3)){ case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "a": case "b": case "c": case "d": case "e": case "f": break; default: trace(("WARNING: Board ID contains illegal characters: " + _arg1)); return; }; _local3++; }; } private static function flush(_arg1:Boolean):void{ var _local2:Object; var _local3:Object; if (((_clip) && (_queue))){ while (_queue.length > 0) { _local2 = _queue.shift(); _local3 = null; if (_local2 != null){ if (_local2.callbackID != null){ _local3 = _callbacks[_local2.callbackID]; }; delete _callbacks[_local2.callbackID]; if (((_arg1) && (!((_local3 == null))))){ handleError(_local2.args, _local3.callbackObject, _local3.callbackMethod); }; }; }; }; } public static function get id():String{ return (_id); } private static function onEvent(_arg1:Object):void{ var _local2:String; var _local3:String; _local2 = _arg1.target; _local3 = _arg1.event; switch (_local2){ case "services": MochiServices.triggerEvent(_arg1.event, _arg1.args); break; case "events": MochiEvents.triggerEvent(_arg1.event, _arg1.args); break; case "coins": MochiCoins.triggerEvent(_arg1.event, _arg1.args); break; case "social": MochiSocial.triggerEvent(_arg1.event, _arg1.args); break; }; } private static function urlOptions(_arg1:Object):Object{ var _local2:Object; var _local3:String; var _local4:Array; var _local5:Number; var _local6:Array; _local2 = {}; if (_arg1.stage){ _local3 = _arg1.stage.loaderInfo.parameters.mochiad_options; } else { _local3 = _arg1.loaderInfo.parameters.mochiad_options; }; if (_local3){ _local4 = _local3.split("&"); _local5 = 0; while (_local5 < _local4.length) { _local6 = _local4[_local5].split("="); _local2[unescape(_local6[0])] = unescape(_local6[1]); _local5++; }; }; return (_local2); } public static function addLinkEvent(_arg1:String, _arg2:String, _arg3:DisplayObjectContainer, _arg4:Function=null):void{ var vars:Object; var avm1Click:DisplayObject; var s:String; var i:Number; var x:String; var req:URLRequest; var loader:Loader; var setURL:Function; var err:Function; var complete:Function; var url = _arg1; var burl = _arg2; var btn = _arg3; var onClick = _arg4; vars = new Object(); vars["mav"] = getVersion(); vars["swfv"] = "9"; vars["swfurl"] = btn.loaderInfo.loaderURL; vars["fv"] = Capabilities.version; vars["os"] = Capabilities.os; vars["lang"] = Capabilities.language; vars["scres"] = ((Capabilities.screenResolutionX + "x") + Capabilities.screenResolutionY); s = "?"; i = 0; for (x in vars) { if (i != 0){ s = (s + "&"); }; i = (i + 1); s = (((s + x) + "=") + escape(vars[x])); }; req = new URLRequest("http://link.mochiads.com/linkping.swf"); loader = new Loader(); setURL = function (_arg1:String):void{ var _local2:Rectangle; if (avm1Click){ btn.removeChild(avm1Click); }; avm1Click = clickMovie(_arg1, onClick); _local2 = btn.getBounds(btn); btn.addChild(avm1Click); avm1Click.x = _local2.x; avm1Click.y = _local2.y; avm1Click.scaleX = (0.01 * _local2.width); avm1Click.scaleY = (0.01 * _local2.height); }; err = function (_arg1:Object):void{ netup = false; _arg1.target.removeEventListener(_arg1.type, arguments.callee); setURL(burl); }; complete = function (_arg1:Object):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); }; if (netup){ setURL((url + s)); } else { setURL(burl); }; if (!((netupAttempted) || (_connected))){ netupAttempted = true; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, err); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete); loader.load(req); }; } public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{ if (_clip.parent){ _clip.parent.removeChild(_clip); }; if (_arg1 != null){ if ((_arg1 is DisplayObjectContainer)){ _container = _arg1; }; }; if (_arg2){ if ((_container is DisplayObjectContainer)){ DisplayObjectContainer(_container).addChild(_clip); }; }; } private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{ var args = _arg1; var callbackObject = _arg2; var callbackMethod = _arg3; if (args != null){ if (args.onError != null){ args.onError("NotConnected"); }; if (((!((args.options == null))) && (!((args.options.onError == null))))){ args.options.onError("NotConnected"); }; }; if (callbackMethod != null){ args = {}; args.error = true; args.errorCode = "NotConnected"; if (((!((callbackObject == null))) && ((callbackMethod is String)))){ try { var _local5 = callbackObject; _local5[callbackMethod](args); } catch(error:Error) { }; } else { if (callbackMethod != null){ try { callbackMethod.apply(args); } catch(error:Error) { }; }; }; }; } private static function loadError(_arg1:Object):void{ _clip._mochiad_ctr_failed = true; trace("MochiServices could not load."); MochiServices.disconnect(); MochiServices.onError("IOError"); } public static function get childClip():Object{ return (_clip); } private static function initComChannels():void{ if (!_connected){ trace("[SERVICES_API] connected!"); _connecting = false; _connected = true; _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"}); _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"registerGame", preserved:_preserved, id:_id, version:getVersion(), parentURL:_container.loaderInfo.loaderURL}); _clip.onReceive = onReceive; _clip.onEvent = onEvent; _clip.onError = function ():void{ MochiServices.onError("IOError"); }; while (_queue.length > 0) { _mochiLocalConnection.send(_sendChannelName, "onReceive", _queue.shift()); }; }; } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } private static function listen():void{ _mochiLocalConnection.connect(_listenChannelName); _clip.handshake = function (_arg1:Object):void{ MochiServices.comChannelName = _arg1.newChannel; }; trace("Waiting for MochiAds services to connect..."); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } private static function loadLCBridge(_arg1:Object):void{ var _local2:Loader; var _local3:String; var _local4:URLRequest; _local2 = new Loader(); _local3 = (_servURL + _mochiLC); _local4 = new URLRequest(_local3); _local2.contentLoaderInfo.addEventListener(Event.COMPLETE, detach); _local2.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, detach); _local2.contentLoaderInfo.addEventListener(Event.COMPLETE, loadLCBridgeComplete); _local2.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError); _local2.load(_local4); _arg1.addChild(_local2); } public static function set comChannelName(_arg1:String):void{ if (_arg1 != null){ if (_arg1.length > 3){ _sendChannelName = (_arg1 + "_fromgame"); initComChannels(); }; }; } private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{ var _local3:String; var _local4:URLRequest; var _local5:URLVariables; if (_clip != null){ return (_clip); }; if (!MochiServices.isNetworkAvailable()){ MochiServices.onError("NotConnected"); return (null); }; if (urlOptions(_arg2).servURL){ _servURL = urlOptions(_arg2).servURL; }; _local3 = (_servURL + _services); if (urlOptions(_arg2).servicesURL){ _local3 = urlOptions(_arg2).servicesURL; }; _listenChannelName = (_listenChannelName + ((Math.floor(new Date().time) + "_") + Math.floor((Math.random() * 99999)))); MochiServices.allowDomains(_local3); _clip = new MovieClip(); loadLCBridge(_clip); _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, detach); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, detach); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError); _local4 = new URLRequest(_local3); _local5 = new URLVariables(); _local5.listenLC = _listenChannelName; _local5.mochiad_options = _arg2.loaderInfo.parameters.mochiad_options; _local5.api_version = getVersion(); if (widget){ _local5.widget = true; }; _local4.data = _local5; _loader.load(_local4); _clip.addChild(_loader); _sendChannel = new LocalConnection(); _queue = []; _nextCallbackID = 0; _callbacks = {}; _timer = new Timer(10000, 1); _timer.addEventListener(TimerEvent.TIMER, connectWait); _timer.start(); return (_clip); } public static function get clip():Object{ return (_container); } public static function connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{ var id = _arg1; var clip = _arg2; var onError = _arg3; warnID(id, false); if (onError != null){ MochiServices.onError = onError; } else { if (MochiServices.onError == null){ MochiServices.onError = function (_arg1:String):void{ trace(_arg1); }; }; }; if ((clip is DisplayObject)){ if (clip.stage == null){ trace("MochiServices connect requires the containing clip be attached to the stage"); }; if (((!(_connected)) && ((_clip == null)))){ trace("MochiServices Connecting..."); _connecting = true; init(id, clip); }; } else { trace("Error, MochiServices requires a Sprite, Movieclip or instance of the stage."); }; } public static function bringToTop(_arg1:Event=null):void{ var e = _arg1; if (((!((MochiServices.clip == null))) && (!((MochiServices.childClip == null))))){ try { if (MochiServices.clip.numChildren > 1){ MochiServices.clip.setChildIndex(MochiServices.childClip, (MochiServices.clip.numChildren - 1)); }; } catch(errorObject:Error) { trace("Warning: Depth sort error."); _container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop); }; }; } public static function connectWait(_arg1:TimerEvent):void{ if (!_connected){ _clip._mochiad_ctr_failed = true; trace("MochiServices could not load. (timeout)"); MochiServices.disconnect(); MochiServices.onError("IOError"); } else { _timer.stop(); _timer.removeEventListener(TimerEvent.TIMER, connectWait); _timer = null; }; } } }//package mochi.as3
Section 26
//MochiSocial (mochi.as3.MochiSocial) package mochi.as3 { public class MochiSocial { public static const LOGGED_IN:String = "LoggedIn"; public static const ACTION_CANCELED:String = "onCancel"; public static const PROPERTIES_SIZE:String = "PropertiesSize"; public static const IO_ERROR:String = "IOError"; public static const NO_USER:String = "NoUser"; public static const FRIEND_LIST:String = "FriendsList"; public static const PROFILE_DATA:String = "ProfileData"; public static const GAMEPLAY_DATA:String = "GameplayData"; public static const ACTION_COMPLETE:String = "onComplete"; public static const LOGIN_SHOW:String = "LoginShow"; public static const PROFILE_HIDE:String = "ProfileHide"; public static const USER_INFO:String = "UserInfo"; public static const PROPERTIES_SAVED:String = "PropertySaved"; public static const WIDGET_LOADED:String = "WidgetLoaded"; public static const ERROR:String = "Error"; public static const LOGGED_OUT:String = "LoggedOut"; public static const PROFILE_SHOW:String = "ProfileShow"; public static const LOGIN_HIDE:String = "LoginHide"; public static const LOGIN_SHOWN:String = "LoginShown"; public static var _user_info:Object = null; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public static function requestFan(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_requestFan", _arg1); } public static function postToStream(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_postToStream", _arg1); } public static function getFriendsList(_arg1:Object=null):void{ MochiServices.send("social_getFriendsList", _arg1); } public static function requestLogin(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_requestLogin", _arg1); } public static function getVersion():String{ return (MochiServices.getVersion()); } public static function saveUserProperties(_arg1:Object):void{ MochiServices.send("social_saveUserProperties", _arg1); } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function inviteFriends(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_inviteFriends", _arg1); } public static function get loggedIn():Boolean{ return (!((_user_info == null))); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } public static function showLoginWidget(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("social_showLoginWidget", {options:_arg1}); } public static function getAPIURL():String{ if (!_user_info){ return (null); }; return (_user_info.api_url); } public static function showProfile(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.stayOnTop(); MochiServices.send("social_showProfile", _arg1); } public static function hideLoginWidget():void{ MochiServices.send("social_hideLoginWidget"); } public static function getAPIToken():String{ if (!_user_info){ return (null); }; return (_user_info.api_token); } MochiSocial.addEventListener(MochiSocial.LOGGED_IN, function (_arg1:Object):void{ _user_info = _arg1; }); MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, function (_arg1:Object):void{ _user_info = null; }); } }//package mochi.as3
Section 27
//MochiUserData (mochi.as3.MochiUserData) package mochi.as3 { import flash.events.*; import flash.utils.*; import flash.net.*; public class MochiUserData extends EventDispatcher { public var callback:Function;// = null public var error:Event;// = null public var key:String;// = null public var operation:String;// = null public var data;// = null public var _loader:URLLoader; public function MochiUserData(_arg1:String="", _arg2:Function=null){ key = null; data = null; error = null; operation = null; callback = null; super(); this.key = _arg1; this.callback = _arg2; } public function securityErrorHandler(_arg1:SecurityErrorEvent):void{ errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + _arg1.toString()))); } public function putEvent(_arg1):void{ request("put", serialize(_arg1)); } public function request(_arg1:String, _arg2:ByteArray):void{ var api_url:String; var api_token:String; var args:URLVariables; var req:URLRequest; var _operation = _arg1; var _data = _arg2; operation = _operation; api_url = MochiSocial.getAPIURL(); api_token = MochiSocial.getAPIToken(); if ((((api_url == null)) || ((api_token == null)))){ errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, "not logged in")); return; }; _loader = new URLLoader(); args = new URLVariables(); args.op = _operation; args.key = key; req = new URLRequest((((MochiSocial.getAPIURL() + "/") + "MochiUserData?") + args.toString())); req.method = URLRequestMethod.POST; req.contentType = "application/x-mochi-userdata"; req.requestHeaders = [new URLRequestHeader("x-mochi-services-version", MochiServices.getVersion()), new URLRequestHeader("x-mochi-api-token", api_token)]; req.data = _data; _loader.dataFormat = URLLoaderDataFormat.BINARY; _loader.addEventListener(Event.COMPLETE, completeHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); try { _loader.load(req); } catch(e:SecurityError) { errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + e.toString()))); }; } public function completeHandler(_arg1:Event):void{ var event = _arg1; try { if (_loader.data.length){ data = deserialize(_loader.data); } else { data = null; }; } catch(e:Error) { errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("deserialize error: " + e.toString()))); return; }; if (callback != null){ performCallback(); } else { dispatchEvent(event); }; close(); } public function performCallback():void{ try { callback(this); } catch(e:Error) { trace(("[MochiUserData] exception during callback: " + e)); }; } public function serialize(_arg1):ByteArray{ var _local2:ByteArray; _local2 = new ByteArray(); _local2.objectEncoding = ObjectEncoding.AMF3; _local2.writeObject(_arg1); _local2.compress(); return (_local2); } public function errorHandler(_arg1:IOErrorEvent):void{ data = null; error = _arg1; if (callback != null){ performCallback(); } else { dispatchEvent(_arg1); }; close(); } public function getEvent():void{ request("get", serialize(null)); } override public function toString():String{ return ((((((((("[MochiUserData operation=" + operation) + " key=\"") + key) + "\" data=") + data) + " error=\"") + error) + "\"]")); } public function close():void{ if (_loader){ _loader.removeEventListener(Event.COMPLETE, completeHandler); _loader.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler); _loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); _loader.close(); _loader = null; }; error = null; callback = null; } public function deserialize(_arg1:ByteArray){ _arg1.objectEncoding = ObjectEncoding.AMF3; _arg1.uncompress(); return (_arg1.readObject()); } public static function get(_arg1:String, _arg2:Function):void{ var _local3:MochiUserData; _local3 = new MochiUserData(_arg1, _arg2); _local3.getEvent(); } public static function put(_arg1:String, _arg2, _arg3:Function):void{ var _local4:MochiUserData; _local4 = new MochiUserData(_arg1, _arg3); _local4.putEvent(_arg2); } } }//package mochi.as3
Section 28
//AnimData (AnimData) package { public class AnimData { public static var TILES_GROUND_DRIVEWAY:int = 9; public static var SPRITE_MADSCIENTIST_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPC01_WALK_GUN_LEFT:int = 14; public static var SPRITE_NPC04_WALK_LEFT:int = 6; public static var SPRITE_NPC04_IDLE_RIGHT:int = 3; public static var SPRITE_MADSCIENTIST_WALK_GUN_FRONT:int = 12; public static var SPRITE_NPC01_MELEE_RIGHT:int = 19; public static var SPRITE_NPCGOODSCIENTIST_MELEE_BACK:int = 17; public static var SPRITE_NPC04_IDLE_FRONT:int = 0; public static var TILES_GROUND_DIRT01:int = 3; public static var SPRITE_NPC01_MELEE_FRONT:int = 16; public static var SPRITE_NPC06_WALK_GUN_BACK:int = 13; public static var ITEMS_METAL_IDLE:int = 2; public static var SPRITE_NPCSOLDIER_DATA = [36, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 20, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 2, 24, 4, 0, 0, 0, 2, 25, 4, 0, 0, 0, 6, 26, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 28, -14, 0, 0, 0, 2, 29, -14, -12, 0, 0, 6, 30, -14, -22, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 2, 33, -22, -12, 0, 0, 2, 34, -22, -10, 0, 0, 6, 35, -22, 0, 0, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 2, 27, 4, -12, 0, 0, 2, 31, 4, -10, 0, 0, 6, 32, 4, 0, 0, 0, 1, 14, 0, 0, 0, 0]; public static var UI_SHORTCUT_ICONS_BAT:int = 0; public static var SPRITE_NPCGOODSCIENTIST_WALK_LEFT:int = 6; public static var TILES_OBJECTS_CAR07_IDLE:int = 9; public static var TILES_GROUND_DIRT02:int = 4; public static var UI_SHORTCUT_ICONS_STUNGUN_READYFLASH:int = 3; public static var SPRITE_MADSCIENTIST_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPC02_IDLE_BACK:int = 1; public static var SPRITE_NPC05_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPC03_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var ITEMS_WOOD_IDLE:int = 0; public static var SPRITE_MADSCIENTIST_IDLE_GUN_RIGHT:int = 11; public static var SPRITE_MADSCIENTIST_MELEE_BACK:int = 17; public static var SPRITE_MADSCIENTIST_IDLE_GUN_FRONT:int = 8; public static var TILES_OBJECTS_CAR01_IDLE:int = 3; public static var SPRITE_NPCSOLDIER_IDLE_BACK:int = 1; public static var SPRITE_NPC02_MELEE_BACK:int = 17; public static var ITEMS_ISOTOPE_IDLE:int = 1; public static var SPRITE_NPC05_IDLE_BACK:int = 1; public static var SPRITE_NPC01_DEAD_FRONT:int = 20; public static var TILES_OBJECTS_KITCHEN_NORTH_FRIDGE:int = 13; public static var SPRITE_NPC03_WALK_GUN_LEFT:int = 14; public static var TILES_OBJECTS_ROCK_IDLE:int = 1; public static var SPRITE_NPC05_MELEE_BACK:int = 17; public static var TILES_OBJECTS_KITCHEN_DINING:int = 14; public static var SPRITE_NPC01_IDLE_LEFT:int = 2; public static var SPRITE_NPC06_MELEE_RIGHT:int = 19; public static var SPRITE_NPC04_DEAD_FRONT:int = 20; public static var SPRITE_NPC01_WALK_BACK:int = 5; public static var SPRITE_NPC02_IDLE_GUN_LEFT:int = 10; public static var SPRITE_NPC06_MELEE_FRONT:int = 16; public static var SPRITE_NPCSOLDIER_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPCGOODSCIENTIST_IDLE_GUN_LEFT:int = 10; public static var SPRITE_MADSCIENTIST_DATA = [36, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 20, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 1, 1, 15, 3, 0, 0, 1, 0, 0, 1, 1, 15, 9, 0, 0, 1, 0, 0, 1, 1, 15, 23, 0, 0, 1, 0, 0, 1, 1, 15, 17, 0, 0, 1, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0]; public static var ITEMS_CIRCUIT_IDLE:int = 3; public static var SPRITE_NPCGOODSCIENTIST_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPC03_WALK_RIGHT:int = 7; public static var ANIM_SET_8_DATA = [1, 0, 0, 94, 104, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]; public static var SPRITE_NPC04_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var SPRITE_NPCGOODSCIENTIST_WALK_GUN_FRONT:int = 12; public static var UI_SHORTCUTS:int = 17; public static var SPRITE_NPC01_WALK_GUN_BACK:int = 13; public static var UI_SHORTCUTS_DATA = [1, 0, 0, 640, 480, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]; public static var SPRITE_NPC03_WALK_FRONT:int = 4; public static var ITEMS_DATA = [16, 0, 0, 24, 32, 24, 0, 24, 32, 48, 0, 24, 32, 72, 0, 24, 32, 96, 0, 24, 32, 120, 0, 24, 32, 144, 0, 24, 32, 168, 0, 24, 32, 0, 32, 24, 32, 24, 32, 24, 32, 48, 32, 24, 32, 72, 32, 24, 32, 96, 32, 24, 32, 120, 32, 24, 32, 144, 32, 24, 32, 168, 32, 24, 32, 8, 0, 0, 2, 15, 0, 0, 0, 0, 0, 15, 8, 0, 0, 0, 0, 0, 0, 2, 15, 1, 0, 0, 0, 0, 15, 9, 0, 0, 0, 0, 0, 0, 2, 15, 2, 0, 0, 0, 0, 15, 10, 0, 0, 0, 0, 0, 0, 2, 15, 3, 0, 0, 0, 0, 15, 11, 0, 0, 0, 0, 0, 0, 2, 15, 4, 0, 0, 0, 0, 15, 12, 0, 0, 0, 0, 0, 0, 2, 15, 5, 0, 0, 0, 0, 15, 13, 0, 0, 0, 0, 0, 0, 2, 15, 6, 0, 0, 0, 0, 15, 14, 0, 0, 0, 0, 0, 0, 2, 15, 7, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0]; public static var SPRITE_NPC04_IDLE_LEFT:int = 2; public static var SPRITE_NPC03_MELEE_LEFT:int = 18; public static var SPRITE_NPC04_WALK_BACK:int = 5; public static var TILES_OBJECTS_DEN_TABLE:int = 17; public static var SPRITE_NPC06_WALK_RIGHT:int = 7; public static var SPRITE_NPCGOODSCIENTIST_IDLE_RIGHT:int = 3; public static var SPRITE_MADSCIENTIST_WALK_GUN_LEFT:int = 14; public static var SPRITE_MADSCIENTIST:int = 2; public static var SPRITE_NPC06_MELEE_LEFT:int = 18; public static var SPRITE_NPC06_WALK_FRONT:int = 4; public static var SPRITE_NPCGOODSCIENTIST_IDLE_LEFT:int = 2; public static var SPRITE_NPC05_WALK_GUN_LEFT:int = 14; public static var TILES_OBJECTS_DEN_SOUTH_COUCH:int = 16; public static var SPRITE_NPCGOODSCIENTIST_WALK_BACK:int = 5; public static var SPRITE_NPC03_MELEE_RIGHT:int = 19; public static var SPRITE_NPC04_IDLE_GUN_LEFT:int = 10; public static var TILES_GROUND_ROAD:int = 8; public static var SPRITE_NPCGOODSCIENTIST_IDLE_FRONT:int = 0; public static var SPRITE_NPCGOODSCIENTIST_IDLE_GUN_RIGHT:int = 11; public static var UI_DEATHSCREEN_DEATHSCREEN:int = 0; public static var SPRITE_NPC03_MELEE_FRONT:int = 16; public static var SPRITE_MADSCIENTIST_IDLE_RIGHT:int = 3; public static var TILES_OBJECTS_CAR02_IDLE:int = 4; public static var TILES_OBJECTS_BEDROOM_NORTH_DRAWER:int = 20; public static var SPRITE_NPCGOODSCIENTIST_IDLE_GUN_FRONT:int = 8; public static var SPRITE_NPC05_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPCSOLDIER:int = 10; public static var UI_SHORTCUT_ICONS_DATA = [5, 0, 0, 32, 32, 32, 0, 32, 32, 64, 0, 32, 32, 96, 0, 32, 32, 128, 0, 32, 32, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 1, 4, 1, 3, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0]; public static var BUILDING_HOUSES:int = 12; public static var SPRITE_MADSCIENTIST_IDLE_FRONT:int = 0; public static var SPRITE_NPC02_IDLE_RIGHT:int = 3; public static var SPRITE_NPC03_WALK_LEFT:int = 6; public static var SPRITE_NPC05_WALK_GUN_FRONT:int = 12; public static var UI_INVENTORY:int = 16; public static var SPRITE_NPC02_IDLE_FRONT:int = 0; public static var SPRITE_NPC05_IDLE_RIGHT:int = 3; public static var TILES_OBJECTS_BEDROOM_NORTH_DRESSER:int = 19; public static var SPRITE_NPC03_WALK_GUN_BACK:int = 13; public static var BLUE_JELLYFISH:int = 0; public static var SPRITE_NPC05_IDLE_FRONT:int = 0; public static var SPRITE_NPC01_IDLE_BACK:int = 1; public static var SPRITE_NPC03_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPC05_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var SPRITE_NPCSOLDIER_WALK_GUN_LEFT:int = 14; public static var SPRITE_NPC02_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPC05_IDLE_GUN_RIGHT:int = 11; public static var TILES_GROUND_DATA = [12, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 0, 192, 32, 32, 0, 224, 32, 32, 0, 0x0100, 32, 32, 0, 288, 32, 32, 32, 288, 32, 32, 32, 0, 128, 288, 10, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 0, 1, 1, 10, 0, 0, 0, 0, 0, 0, 1, 1, 11, 0, 0, 0, 0]; public static var SPRITE_NPC03_WALK_GUN_FRONT:int = 12; public static var SPRITE_NPCSOLDIER_WALK_RIGHT:int = 7; public static var SPRITE_NPC06_WALK_LEFT:int = 6; public static var SPRITE_NPCGOODSCIENTIST_MELEE_RIGHT:int = 19; public static var SPRITE_NPC05_IDLE_GUN_FRONT:int = 8; public static var SPRITE_NPCGOODSCIENTIST_MELEE_FRONT:int = 16; public static var SPRITE_NPCSOLDIER_MELEE_LEFT:int = 18; public static var SPRITE_NPCSOLDIER_WALK_FRONT:int = 4; public static var SPRITE_NPC06_IDLE_GUN_LEFT:int = 10; public static var TILES_OBJECTS_CAR03_IDLE:int = 5; public static var ITEMS_COIL_IDLE:int = 4; public static var SPRITE_NPCGOODSCIENTIST_IDLE_GUN_BACK:int = 9; public static var UI_SHORTCUTS_SHORTCUTS:int = 0; public static var UI_LIFE_NOLIFE:int = 1; public static var BLUE_JELLYFISH_DATA = [2, 0, 0, 32, 32, 32, 0, 32, 32, 1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0]; public static var SPRITE_NPC01_WALK_GUN_RIGHT:int = 15; public static var SPRITE_MADSCIENTIST_WALK_LEFT:int = 6; public static var SPRITE_NPC04_IDLE_BACK:int = 1; public static var SPRITE_NPC03_MELEE_BACK:int = 17; public static var SPRITE_NPC01_WALK_GUN_FRONT:int = 12; public static var UI_LIFE:int = 18; public static var SPRITE_NPC03_IDLE_GUN_FRONT:int = 8; public static var SPRITE_NPC03_IDLE_GUN_RIGHT:int = 11; public static var UI_INVENTORY_DATA = [1, 0, 0, 640, 480, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]; public static var MESSAGE_WINDOW_SMALL_WINDOW:int = 0; public static var BLUE_JELLYFISH_IDLE:int = 0; public static var SPRITE_NPC02_DEAD_FRONT:int = 20; public static var SPRITE_MADSCIENTIST_WALK_GUN_BACK:int = 13; public static var SPRITE_NPCGOODSCIENTIST_IDLE_BACK:int = 1; public static var SPRITE_NPC05_WALK_GUN_BACK:int = 13; public static var SPRITE_NPC06_MELEE_BACK:int = 17; public static var SPRITE_NPCGOODSCIENTIST:int = 11; public static var SPRITE_NPC04_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPC05_DEAD_FRONT:int = 20; public static var TILES_GROUND_PATH:int = 6; public static var SPRITE_NPC01_IDLE_GUN_RIGHT:int = 11; public static var BUILDING_HOUSES_DATA = [7, 0, 64, 224, 320, 0x0100, 0, 224, 384, 0x0200, 128, 224, 0x0100, 0x0300, 64, 224, 320, 0x0400, 64, 224, 320, 0x0500, 64, 224, 320, 0x0600, 128, 224, 0x0100, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0]; public static var SPRITE_NPC01_IDLE_GUN_FRONT:int = 8; public static var TILES_OBJECTS:int = 14; public static var SPRITE_NPC06_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 0, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 0, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var SPRITE_NPC01_WALK_RIGHT:int = 7; public static var SPRITE_NPC05_MELEE_RIGHT:int = 19; public static var SPRITE_NPC03_IDLE_LEFT:int = 2; public static var SPRITE_NPC01_MELEE_LEFT:int = 18; public static var SPRITE_NPC05_MELEE_FRONT:int = 16; public static var SPRITE_NPC03_WALK_BACK:int = 5; public static var SPRITE_NPC01_WALK_FRONT:int = 4; public static var ANIM_SET_8_ANIM_0:int = 0; public static var SPRITE_NPC04_WALK_RIGHT:int = 7; public static var TILES_OBJECTS_CAR04_IDLE:int = 6; public static var MESSAGE_WINDOW_DATA = [1, 0, 0, 510, 134, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]; public static var SPRITE_NPC02_WALK_GUN_LEFT:int = 14; public static var SPRITE_NPC04_WALK_FRONT:int = 4; public static var TILES_OBJECTS_DEN_NORTH_TV:int = 15; public static var SPRITE_NPC04_MELEE_LEFT:int = 18; public static var SPRITE_NPCSOLDIER_MELEE_RIGHT:int = 19; public static var SPRITE_NPCSOLDIER_WALK_GUN_BACK:int = 13; public static var SPRITE_NPC01_IDLE_GUN_LEFT:int = 10; public static var SPRITE_NPC06_IDLE_LEFT:int = 2; public static var SPRITE_NPCSOLDIER_MELEE_FRONT:int = 16; public static var SPRITE_NPC06_WALK_BACK:int = 5; public static var SPRITE_NPCGOODSCIENTIST_WALK_GUN_LEFT:int = 14; public static var TILES_OBJECTS_BROKEN3X1:int = 26; public static var TILES_GROUND_SIDEWALK:int = 2; public static var SPRITE_NPC06_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPCSOLDIER_MELEE_BACK:int = 17; public static var SPRITE_NPC02_WALK_LEFT:int = 6; public static var SPRITE_NPC01:int = 3; public static var SPRITE_NPC02:int = 4; public static var SPRITE_NPC03:int = 5; public static var SPRITE_NPC04:int = 6; public static var SPRITE_NPC05:int = 7; public static var SPRITE_NPC06:int = 9; public static var UI_DEATHSCREEN:int = 20; public static var TILES_OBJECTS_BROKEN3X3:int = 27; public static var ITEMS_STEAK_IDLE:int = 7; public static var SPRITE_NPC02_MELEE_RIGHT:int = 19; public static var SPRITE_MADSCIENTIST_IDLE_LEFT:int = 2; public static var SPRITE_MADSCIENTIST_WALK_BACK:int = 5; public static var UI_LIFE_LIFE:int = 0; public static var SPRITE_NPC03_IDLE_RIGHT:int = 3; public static var SPRITE_NPCSOLDIER_WALK_GUN_RIGHT:int = 15; public static var TILES_OBJECTS_DATA = [33, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 32, 96, 32, 32, 64, 96, 32, 32, 96, 96, 32, 64, 32, 0, 96, 96, 0, 128, 96, 32, 128, 96, 64, 64, 192, 128, 32, 32, 192, 96, 96, 32, 288, 96, 32, 64, 320, 96, 64, 64, 384, 96, 64, 32, 448, 96, 32, 32, 480, 96, 32, 32, 0x0200, 96, 32, 32, 544, 96, 32, 32, 448, 128, 32, 32, 128, 0, 64, 96, 192, 0, 64, 96, 0x0100, 0, 64, 96, 320, 0, 64, 96, 384, 0, 64, 96, 448, 0, 64, 96, 0x0200, 0, 64, 96, 480, 128, 32, 32, 384, 128, 64, 32, 0, 160, 96, 96, 96, 160, 32, 64, 128, 160, 64, 64, 96, 224, 96, 32, 192, 160, 64, 96, 29, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 19, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 21, 0, 0, 0, 0, 0, 0, 1, 1, 22, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 24, 0, 0, 0, 0, 0, 0, 1, 1, 25, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 0, 1, 1, 10, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 11, 0, 0, 0, 0, 0, 0, 1, 1, 12, 0, 0, 0, 0, 0, 0, 1, 1, 13, 0, 0, 0, 0, 0, 1, 5, 1, 14, 0, 0, 0, 0, 1, 15, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 1, 17, 0, 0, 0, 0, 1, 26, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 0, 0, 0, 0, 0, 1, 1, 27, 0, 0, 0, 0, 0, 0, 1, 1, 29, 0, 0, 0, 0, 0, 0, 1, 1, 30, 0, 0, 0, 0, 0, 0, 1, 1, 31, 0, 0, 0, 0, 0, 0, 1, 1, 28, 0, 0, 0, 0, 0, 0, 1, 1, 32, 0, 0, 0, 0]; public static var TILES_OBJECTS_KITCHEN_NORTH_COUNTER:int = 12; public static var TILES_OBJECTS_BROKEN2X2:int = 25; public static var SPRITE_NPC03_IDLE_FRONT:int = 0; public static var SPRITE_NPCSOLDIER_WALK_LEFT:int = 6; public static var TILES_GROUND_FLOWERS:int = 7; public static var SPRITE_NPCSOLDIER_WALK_GUN_FRONT:int = 12; public static var SPRITE_NPC02_MELEE_FRONT:int = 16; public static var TILES_OBJECTS_BROKEN2X3:int = 28; public static var SPRITE_NPC06_IDLE_RIGHT:int = 3; public static var SPRITE_NPC04_WALK_GUN_LEFT:int = 14; public static var TILES_OBJECTS_BROKEN2X1:int = 23; public static var SPRITE_NPC05_WALK_LEFT:int = 6; public static var UI_SHORTCUT_ICONS:int = 19; public static var SPRITE_NPC06_IDLE_FRONT:int = 0; public static var SPRITE_NPC03_IDLE_GUN_LEFT:int = 10; public static var TILES_OBJECTS_CAR05_IDLE:int = 7; public static var BUILDING_HOUSES_HOUSE01:int = 0; public static var SPRITE_NPC01_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 1, 33, -22, -12, 0, 0, 1, 34, -22, -10, 0, 0, 4, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 1, 27, 4, -12, 0, 0, 1, 31, 4, -10, 0, 0, 4, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var BUILDING_HOUSES_HOUSE03:int = 2; public static var SPRITE_NPCSOLDIER_IDLE_GUN_FRONT:int = 8; public static var SPRITE_NPC03_IDLE_BACK:int = 1; public static var SPRITE_NPCSOLDIER_IDLE_GUN_RIGHT:int = 11; public static var BUILDING_HOUSES_HOUSE07:int = 6; public static var BUILDING_HOUSES_HOUSE02:int = 1; public static var SPRITE_NPC01_MELEE_BACK:int = 17; public static var BUILDING_HOUSES_HOUSE05:int = 4; public static var TILES_GROUND_TALL_GRASS:int = 1; public static var TILES_OBJECTS_BROKEN1X2:int = 24; public static var UI_DEATHSCREEN_DATA = [1, 0, 0, 640, 480, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]; public static var SPRITE_NPCGOODSCIENTIST_DATA = [36, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 20, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 2, 24, 4, 0, 0, 0, 2, 25, 4, 0, 0, 0, 6, 26, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 28, -14, 0, 0, 0, 2, 29, -14, -12, 0, 0, 6, 30, -14, -22, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 2, 33, -22, -12, 0, 0, 2, 34, -22, -10, 0, 0, 6, 35, -22, 0, 0, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 2, 27, 4, -12, 0, 0, 2, 31, 4, -10, 0, 0, 6, 32, 4, 0, 0, 0, 1, 14, 0, 0, 0, 0]; public static var SPRITE_NPC06_WALK_GUN_RIGHT:int = 15; public static var BUILDING_HOUSES_HOUSE06:int = 5; public static var TILES_OBJECTS_BREAKING:int = 21; public static var UI_LIFE_DATA = [2, 0, 0, 32, 32, 32, 0, 32, 32, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0]; public static var BUILDING_HOUSES_HOUSE04:int = 3; public static var SPRITE_NPC02_WALK_GUN_BACK:int = 13; public static var TILES_OBJECTS_BROKEN1X1:int = 22; public static var SPRITE_NPC04_MELEE_BACK:int = 17; public static var TILES_GROUND_PATCH_GRASS:int = 5; public static var SPRITE_NPCGOODSCIENTIST_WALK_RIGHT:int = 7; public static var SPRITE_NPC06_WALK_GUN_FRONT:int = 12; public static var SPRITE_NPC01_IDLE_GUN_BACK:int = 9; public static var SPRITE_NPCGOODSCIENTIST_MELEE_LEFT:int = 18; public static var SPRITE_NPC03_DEAD_FRONT:int = 20; public static var MESSAGE_WINDOW:int = 1; public static var SPRITE_NPCGOODSCIENTIST_WALK_FRONT:int = 4; public static var SPRITE_NPC06_IDLE_BACK:int = 1; public static var SPRITE_NPC06_WALK_GUN_LEFT:int = 14; public static var SPRITE_MADSCIENTIST_IDLE_GUN_LEFT:int = 10; public static var SPRITE_NPCSOLDIER_IDLE_RIGHT:int = 3; public static var SPRITE_NPCGOODSCIENTIST_WALK_GUN_BACK:int = 13; public static var SPRITE_NPC04_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPC02_IDLE_LEFT:int = 2; public static var SPRITE_NPC05_IDLE_GUN_LEFT:int = 10; public static var SPRITE_NPC06_DEAD_FRONT:int = 20; public static var SPRITE_NPCSOLDIER_IDLE_FRONT:int = 0; public static var SPRITE_MADSCIENTIST_WALK_RIGHT:int = 7; public static var SPRITE_NPC06_IDLE_GUN_RIGHT:int = 11; public static var UI_SHORTCUT_ICONS_STUNGUN_COOLING:int = 2; public static var SPRITE_NPC02_WALK_BACK:int = 5; public static var SPRITE_NPC04_WALK_GUN_FRONT:int = 12; public static var SPRITE_MADSCIENTIST_MELEE_LEFT:int = 18; public static var SPRITE_NPC06_IDLE_GUN_FRONT:int = 8; public static var SPRITE_MADSCIENTIST_IDLE_BACK:int = 1; public static var SPRITE_MADSCIENTIST_WALK_FRONT:int = 4; public static var TILES_OBJECTS_CAR06_IDLE:int = 8; public static var TILES_GROUND_GRASS:int = 0; public static var SPRITE_NPC02_WALK_RIGHT:int = 7; public static var SPRITE_NPC02_MELEE_LEFT:int = 18; public static var SPRITE_NPC02_WALK_FRONT:int = 4; public static var TILES_OBJECTS_KITCHEN_NORTH_STOVE:int = 10; public static var TILES_OBJECTS_KITCHEN_NORTH_SINK:int = 11; public static var SPRITE_NPCSOLDIER_IDLE_LEFT:int = 2; public static var SPRITE_MADSCIENTIST_MELEE_RIGHT:int = 19; public static var SPRITE_NPC05_WALK_RIGHT:int = 7; public static var SPRITE_NPC02_WALK_GUN_RIGHT:int = 15; public static var SPRITE_NPC05_IDLE_LEFT:int = 2; public static var ITEMS:int = 15; public static var TILES_GROUND:int = 13; public static var SPRITE_NPC04_MELEE_RIGHT:int = 19; public static var SPRITE_NPC05_MELEE_LEFT:int = 18; public static var SPRITE_NPC02_DATA = [37, 0, 0, 32, 32, 0, 32, 32, 32, 0, 64, 32, 32, 0, 96, 32, 32, 0, 128, 32, 32, 0, 160, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 96, 32, 32, 32, 128, 32, 32, 32, 160, 32, 32, 64, 0, 32, 32, 64, 32, 32, 32, 64, 64, 32, 32, 64, 96, 32, 32, 64, 128, 32, 32, 64, 160, 32, 32, 96, 0, 32, 32, 96, 32, 32, 32, 96, 64, 32, 32, 96, 96, 32, 32, 96, 128, 32, 32, 96, 160, 32, 32, 164, 32, 40, 32, 164, 96, 40, 48, 164, 160, 40, 54, 228, 20, 50, 44, 146, 0x0100, 42, 32, 146, 308, 42, 44, 146, 362, 42, 54, 228, 86, 50, 42, 228, 160, 50, 32, 202, 244, 50, 44, 202, 310, 50, 42, 202, 384, 50, 32, 0, 192, 32, 32, 21, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 1, 1, 20, 0, 0, 0, 0, 0, 0, 1, 1, 14, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 4, 6, 20, 0, 0, 0, 0, 6, 18, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 6, 19, 0, 0, 0, 0, 0, 0, 4, 6, 14, 0, 0, 0, 0, 6, 12, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 1, 1, 23, 0, 0, 0, 0, 0, 0, 1, 1, 17, 0, 0, 0, 0, 0, 0, 4, 6, 3, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, 0, 4, 6, 9, 0, 0, 0, 0, 6, 10, 0, 0, 0, 0, 6, 9, 0, 0, 0, 0, 6, 11, 0, 0, 0, 0, 0, 0, 4, 6, 23, 0, 0, 0, 0, 6, 21, 0, 0, 0, 0, 6, 23, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, 0, 4, 6, 17, 0, 0, 0, 0, 6, 15, 0, 0, 0, 0, 6, 17, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 1, 4, 1, 24, 4, 0, 0, 0, 1, 25, 4, 0, 0, 0, 4, 26, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 28, -14, 0, 0, 0, 1, 29, -14, -12, 0, 0, 4, 30, -14, -22, 1, 0, 1, 6, 0, 0, 0, 0, 0, 1, 4, 2, 33, -22, -12, 0, 0, 2, 34, -22, -10, 0, 0, 6, 35, -22, 0, 1, 0, 1, 20, 0, 0, 0, 0, 0, 1, 4, 2, 27, 4, -12, 0, 0, 2, 31, 4, -10, 0, 0, 6, 32, 4, 0, 1, 0, 1, 14, 0, 0, 0, 0, 0, 0, 1, 1, 36, 0, 0, 0, 0]; public static var SPRITE_MADSCIENTIST_MELEE_FRONT:int = 16; public static var SPRITE_NPC02_WALK_GUN_FRONT:int = 12; public static var SPRITE_NPC04_IDLE_GUN_RIGHT:int = 11; public static var SPRITE_NPC04_MELEE_FRONT:int = 16; public static var SPRITE_NPC04_IDLE_GUN_FRONT:int = 8; public static var SPRITE_NPC05_WALK_FRONT:int = 4; public static var SPRITE_NPC04_WALK_GUN_BACK:int = 13; public static var ITEMS_APPLE_IDLE:int = 6; public static var SPRITE_NPC05_WALK_BACK:int = 5; public static var UI_SHORTCUT_ICONS_STUNGUN:int = 1; public static var SPRITE_NPC03_IDLE_GUN_BACK:int = 9; public static var TILES_OBJECTS_BEDROOM_BED:int = 18; public static var SPRITE_NPC01_WALK_LEFT:int = 6; public static var ANIM_SET_8:int = 8; public static var SPRITE_NPCSOLDIER_IDLE_GUN_LEFT:int = 10; public static var UI_INVENTORY_INVENTORY:int = 0; public static var SPRITE_NPCSOLDIER_WALK_BACK:int = 5; public static var TILES_OBJECTS_BUSH_IDLE:int = 0; public static var SPRITE_NPC01_IDLE_RIGHT:int = 3; public static var TILES_OBJECTS_TREE_IDLE:int = 2; public static var SPRITE_NPC01_IDLE_FRONT:int = 0; public static var SPRITE_NPC02_IDLE_GUN_RIGHT:int = 11; public static var SPRITE_NPC02_IDLE_GUN_FRONT:int = 8; public static var ITEMS_DUCTTAPE_IDLE:int = 5; } }//package
Section 29
//BinaryHeap (BinaryHeap) package { public class BinaryHeap { private var heapSize:int; private var nodes:Array; public function BinaryHeap(_arg1:int){ nodes = new Array(_arg1); heapSize = 0; } public function add(_arg1:Node){ var _local2:int; var _local3:Node; var _local4:Node; var _local5:int; var _local6:int; var _local7:Node; nodes[heapSize] = _arg1; _local5 = heapSize; _local4 = nodes[_local5]; if ((_local5 > 0)){ _local6 = ((_local5 - 1) / 2); _local3 = nodes[_local6]; while (_local4.value < _local3.value) { _local7 = new Node(0); _local7.copy(_local3); nodes[_local6].copy(_local4); nodes[_local5].copy(_local7); _local5 = _local6; _local4 = nodes[_local5]; _local6 = ((_local5 - 1) / 2); if (_local6 < 0){ break; }; _local3 = nodes[_local6]; }; }; heapSize++; } public function getTopNode():Node{ var _local1:int; var _local2:Node; var _local3:Node; var _local4:int; var _local5:Node; var _local6:Node; var _local7:Node; _local1 = 0; _local2 = nodes[_local1]; nodes[_local1] = nodes[(heapSize - 1)]; heapSize--; if (heapSize > 1){ while (true) { _local4 = -1; _local3 = nodes[_local1]; if (((_local1 << 1) + 1) < heapSize){ _local5 = nodes[((_local1 << 1) + 1)]; if (_local5.value < _local3.value){ _local4 = ((_local1 << 1) + 1); }; if (((_local1 << 1) + 2) < heapSize){ _local6 = nodes[((_local1 << 1) + 2)]; if ((((_local6.value < _local3.value)) && ((_local6.value < _local5.value)))){ _local4 = ((_local1 << 1) + 2); }; }; }; if (_local4 >= 0){ _local7 = new Node(0); _local7.copy(nodes[_local4]); nodes[_local4].copy(_local3); nodes[_local1].copy(_local7); _local1 = _local4; } else { break; }; }; }; return (_local2); } public function replaceNode(_arg1:Node){ var _local2:Node; var _local3:Node; var _local4:int; var _local5:int; var _local6:int; var _local7:Node; var _local8:int; var _local9:Node; _local4 = 0; _local5 = 0; _local6 = 0; while (_local6 < heapSize) { _local7 = nodes[_local6]; if (_local7.id == _arg1.id){ _local5 = _local6; break; }; _local6++; }; nodes[_local5].copy(_arg1); _local2 = nodes[_local5]; _local4 = _local5; if ((_local4 > 0)){ _local8 = ((_local4 - 1) / 2); _local3 = nodes[_local8]; while (_local2.value < _local3.value) { _local9 = new Node(0); _local9.copy(_local3); nodes[_local8].copy(_local2); nodes[_local4].copy(_local9); _local4 = _local8; _local2 = nodes[_local4]; _local8 = ((_local4 - 1) / 2); if (_local8 < 0){ break; }; _local3 = nodes[_local8]; }; }; } public function getSize():int{ return (heapSize); } public function getNode(_arg1:int):Node{ var _local2:int; _local2 = 0; while (_local2 < heapSize) { if (nodes[_local2].id == _arg1){ return (nodes[_local2]); }; _local2++; }; return (null); } public function printHeap(){ var _local1:int; var _local2:String; var _local3:int; var _local4:int; _local2 = "heap: "; _local3 = 0; _local4 = 0; _local1 = 0; while (_local1 < heapSize) { _local2 = (_local2 + (nodes[_local1].value + " ")); if ((((_local1 == 0)) || (((_local1 % _local4) == 0)))){ _local2 = (_local2 + "\t"); _local4 = (_local4 + (2 << _local3)); _local3++; }; _local1++; }; trace(_local2); } } }//package
Section 30
//BlueJellyfish (BlueJellyfish) package { import flash.display.*; public dynamic class BlueJellyfish extends BitmapData { public function BlueJellyfish(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 31
//CityTiles (CityTiles) package { import flash.display.*; public dynamic class CityTiles extends BitmapData { public function CityTiles(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 32
//Door (Door) package { import flash.geom.*; public class Door { public var houseIndex:int; public var bounds:Rectangle; public function Door(_arg1:int, _arg2:int, _arg3:int){ bounds = new Rectangle(_arg1, (_arg2 + 16), 32, 16); houseIndex = _arg3; } } }//package
Section 33
//Floor (Floor) package { import greenpixel.game.tilemap.*; public class Floor { public var doors:Array; public var map:TileMap; public static var MIN_FLOOR_WIDTH = 15; public static var MAX_WALL_OFFSET_Y = 4; public static var MIN_ROOMS = 2; public static var MAX_WALL_OFFSET_X = 4; public static var MAX_FLOOR_HEIGHT = 15; public static var MAX_FLOOR_WIDTH = 15; public static var MAX_ROOMS = 4; public static var MIN_FLOOR_HEIGHT = 15; public function Floor(_arg1:TileMap){ map = _arg1; doors = new Array(); } public function setDoor(_arg1:Door):void{ doors.push(_arg1); } public function initMap(_arg1:int, _arg2:int){ map = new TileMap(_arg1, _arg2); } } }//package
Section 34
//Game (Game) package { import greenpixel.gut.anim.*; import flash.events.*; import flash.geom.*; import greenpixel.game.world.objects.*; import greenpixel.game.tilemap.*; import greenpixel.math.*; import flash.text.*; import greenpixel.game.*; import greenpixel.game.sprite.*; import greenpixel.sound.*; import greenpixel.io.*; import greenpixel.game.ui.*; public class Game extends GameLayer { private var theGame:Main; private var HOUSE_TILES_HEIGHT;// = 15 private var MAX_METAL:int;// = 30 private var housesWidth:int; private var NUM_HOUSES;// = 8 private var townHeight:int; private var townWidth:int; private var townItems:Array; private var metalField:TextSprite; private var housesHeight:int; private var stunBullet:StunBullet; private var playerDrawPos:Point; private var woodField:TextSprite; private var worldMap:Array; private var gunImg:Sprite2D; private var NUM_HOUSES_PER_HEIGHT;// = 2 private var COIL_FIELD_X:int;// = 363 private var COIL_FIELD_Y:int;// = 310 private var currentDoors:Array; private var BAT_Y:int;// = 414 private var BAT_X:int;// = 532 private var WOOD_FIELD_X:int;// = 269 private var WOOD_INDEX:int;// = 0 private var WOOD_FIELD_Y:int;// = 275 private var MAX_COIL:int;// = 20 private var PROPERTY_SLICE_HEIGHT;// = 800 private var CIRCUIT_INDEX:int;// = 1 private var MAX_RESOURCES:int;// = 4 private var currentNPCs:Array; private var worldSpecial:Array; private var MAX_WOOD:int;// = 60 private var inventoryImg:Sprite2D; private var METAL_FIELD_Y:int;// = 310 private var player:Player; private var circuitField:TextSprite; private var METAL_FIELD_X:int;// = 269 private var lastTownPosY:int; private var font32:GameFont; private var lastTownPosX:int; private var GUN_X:int;// = 578 private var GUN_Y:int;// = 414 private var COIL_INDEX:int;// = 3 private var housesMap:Array; private var TILE_SIZE;// = 32 private var PROPERTY_SLICE_TILES_WIDTH;// = 19 private var NUM_HOUSE_TYPES;// = 7 private var townDoors:Array; private var currentMap:TileMap; private var lifeImg:Sprite2D; private var PROPERTY_SLICE_WIDTH;// = 608 private var currentSpawns:Array; private var PROPERTIES_PER_HEIGHT;// = 3 private var soundButton:SoundButton; private var houseArray:Array; private var METAL_INDEX:int;// = 2 private var inventory:Array; private var townNPCs:Array; private var townMap:TileMap; private var batImg:Sprite2D; private var NUM_PROPERTY_TYPES;// = 8 private var NUM_PROPERTY_PER_WIDTH;// = 4 private var propertyArray:Array; private var townSpawns:Array; private var PROPERTY_SLICE_TILES_HEIGHT;// = 25 private var shortcutImg:Sprite2D; private var HOUSE_TILES_WIDTH;// = 20 private var NUM_HOUSES_PER_WIDTH;// = 4 private var NUM_PROPERTIES;// = 12 private var LIFE_SPACING_X:int;// = 40 private var coilField:TextSprite; private var CIRCUIT_FIELD_X:int;// = 363 private var CIRCUIT_FIELD_Y:int;// = 275 private var MAX_CIRCUIT:int;// = 20 private var LIFE_X:int;// = 16 private var LIFE_Y:int;// = 16 private var housesSpecial:Array; private var PROPERTIES_PER_WIDTH;// = 5 private var currentItems:Array; private var gameOverImg:Sprite2D; private static var STATE_PLAY = 0; private static var STATE_GAME_OVER = 3; private static var STATE_FADE_IN = 2; private static var STATE_INVENTORY = 1; public function Game(_arg1:Main){ var _local2:int; var _local3:TextFormat; WOOD_INDEX = 0; CIRCUIT_INDEX = 1; METAL_INDEX = 2; COIL_INDEX = 3; MAX_WOOD = 60; MAX_METAL = 30; MAX_CIRCUIT = 20; MAX_COIL = 20; MAX_RESOURCES = 4; WOOD_FIELD_X = 269; WOOD_FIELD_Y = 275; METAL_FIELD_X = 269; METAL_FIELD_Y = 310; CIRCUIT_FIELD_X = 363; CIRCUIT_FIELD_Y = 275; COIL_FIELD_X = 363; COIL_FIELD_Y = 310; LIFE_X = 16; LIFE_Y = 16; LIFE_SPACING_X = 40; BAT_X = 532; BAT_Y = 414; GUN_X = 578; GUN_Y = 414; TILE_SIZE = 32; PROPERTIES_PER_WIDTH = 5; PROPERTIES_PER_HEIGHT = 3; PROPERTY_SLICE_TILES_WIDTH = 19; PROPERTY_SLICE_TILES_HEIGHT = 25; PROPERTY_SLICE_WIDTH = 608; PROPERTY_SLICE_HEIGHT = 800; NUM_PROPERTIES = 12; NUM_HOUSE_TYPES = 7; NUM_PROPERTY_TYPES = 8; NUM_PROPERTY_PER_WIDTH = 4; HOUSE_TILES_WIDTH = 20; HOUSE_TILES_HEIGHT = 15; NUM_HOUSES = 8; NUM_HOUSES_PER_WIDTH = 4; NUM_HOUSES_PER_HEIGHT = 2; super(_arg1); theGame = _arg1; housesWidth = (NUM_HOUSES_PER_WIDTH * HOUSE_TILES_WIDTH); housesHeight = (NUM_HOUSES_PER_HEIGHT * HOUSE_TILES_HEIGHT); housesMap = new Array(housesHeight); housesSpecial = new Array(housesWidth); _local2 = 0; while (_local2 < housesMap.length) { housesMap[_local2] = new Array(housesWidth); housesSpecial[_local2] = new Array(housesWidth); _local2++; }; soundButton = new SoundButton(); soundButton.buttonMode = true; soundButton.gotoAndStop(0); soundButton.addEventListener(MouseEvent.CLICK, toggleSound); soundButton.x = 588; soundButton.y = 20; TileMap.translateByteMapTo2D(Maps.HOUSES_MAP, housesMap, housesSpecial); townWidth = (PROPERTIES_PER_WIDTH * PROPERTY_SLICE_TILES_WIDTH); townHeight = (PROPERTIES_PER_HEIGHT * PROPERTY_SLICE_TILES_HEIGHT); worldMap = new Array(townHeight); worldSpecial = new Array(townHeight); _local2 = 0; while (_local2 < worldMap.length) { worldMap[_local2] = new Array(townWidth); worldSpecial[_local2] = new Array(townWidth); _local2++; }; TileMap.translateByteMapTo2D(Maps.WORLD_MAP, worldMap, worldSpecial); inventory = new Array(MAX_RESOURCES); inventoryImg = new Sprite2D(); inventoryImg.setAnim(AnimData.UI_INVENTORY, AnimData.UI_INVENTORY_INVENTORY); gameOverImg = new Sprite2D(); gameOverImg.setAnim(AnimData.UI_DEATHSCREEN, AnimData.UI_DEATHSCREEN_DEATHSCREEN); batImg = new Sprite2D(); batImg.setPos(BAT_X, BAT_Y); batImg.setAnim(AnimData.UI_SHORTCUT_ICONS, AnimData.UI_SHORTCUT_ICONS_BAT); gunImg = new Sprite2D(); gunImg.setPos(GUN_X, GUN_Y); gunImg.setAnim(AnimData.UI_SHORTCUT_ICONS, AnimData.UI_SHORTCUT_ICONS_STUNGUN); font32 = new GameFont(); _local3 = new TextFormat(); _local3.font = font32.fontName; _local3.size = 16; woodField = new TextSprite(new Rectangle(WOOD_FIELD_X, WOOD_FIELD_Y, 32, 32), TextArea.STATIC, 0xFF00, false); woodField.setFormat(_local3); metalField = new TextSprite(new Rectangle(METAL_FIELD_X, METAL_FIELD_Y, 32, 32), TextArea.STATIC, 0xFF00, false); metalField.setFormat(_local3); circuitField = new TextSprite(new Rectangle(CIRCUIT_FIELD_X, CIRCUIT_FIELD_Y, 32, 32), TextArea.STATIC, 0xFF00, false); circuitField.setFormat(_local3); coilField = new TextSprite(new Rectangle(COIL_FIELD_X, COIL_FIELD_Y, 32, 32), TextArea.STATIC, 0xFF00, false); coilField.setFormat(_local3); lifeImg = new Sprite2D(); lifeImg.setAnim(AnimData.UI_LIFE, AnimData.UI_LIFE_LIFE); shortcutImg = new Sprite2D(); shortcutImg.setAnim(AnimData.UI_SHORTCUTS, AnimData.UI_SHORTCUTS_SHORTCUTS); initPopup(new Rectangle(10, 10, 300, 100), TextArea.ANIMATED, 0, true); setPopupAnim(AnimData.MESSAGE_WINDOW, AnimData.MESSAGE_WINDOW_SMALL_WINDOW); pushState(STATE_PLAY); addChild(soundButton); } public function hitObjects():void{ var _local1:int; var _local2:int; var _local3:int; var _local4:Rectangle; var _local5:Rectangle; var _local6:NPC; var _local7:NPC; var _local8:Vector2D; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:Array; var _local14:Item; var _local15:Spawn; var _local16:int; var _local17:int; var _local18:int; _local4 = new Rectangle(0, 0, 0, 0); _local5 = new Rectangle(0, 0, 0, 0); switch (player.direction){ case Entity.DIR_UP: _local4 = new Rectangle(player.x, (player.y - Player.ATTACK_HEIGHT), Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_RIGHT: _local4 = new Rectangle(((player.x + player.hitBox.x) + player.hitBox.width), player.y, Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_DOWN: _local4 = new Rectangle(player.x, ((player.y + player.hitBox.y) + player.hitBox.height), Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_LEFT: _local4 = new Rectangle((player.x - Player.ATTACK_WIDTH), player.y, Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; }; _local1 = 0; while (_local1 < currentNPCs.length) { _local6 = currentNPCs[_local1]; if (!_local6.isAlive){ } else { _local5 = new Rectangle(_local6.x, _local6.y, _local6.hitBox.width, _local6.hitBox.height); if (Utils.rectInRect(_local4, _local5)){ SoundManager.instance.playEffect(Main.HIT_EFFECT); _local6.health = (_local6.health - player.attackPower); _local2 = 0; while (_local2 < currentNPCs.length) { _local7 = currentNPCs[_local2]; if ((((((((_local2 == _local1)) || (!(_local7.isAlive)))) || ((_local7.state == NPC.STATE_SEARCH)))) || ((_local7.state == NPC.STATE_ATTACK)))){ } else { _local8 = new Vector2D((_local7.x - player.x), (_local7.y - player.y)); if (_local8.length() <= NPC.HEARING_RADIUS){ _local9 = (_local7.x / TILE_SIZE); _local10 = (_local7.y / TILE_SIZE); _local11 = (player.x / TILE_SIZE); _local12 = (player.y / TILE_SIZE); _local13 = PathFinder.getPathAStar(currentMap.getMap(), _local9, _local10, _local11, _local12); _local7.setPath(_local13); _local7.setState(NPC.STATE_SEARCH); }; }; _local2++; }; if (_local6.health <= 0){ _local6.kill(); } else { _local6.hit(); }; switch (player.direction){ case Entity.DIR_UP: currentMap.moveSpriteUp(_local6, (TILE_SIZE - 2)); break; case Entity.DIR_RIGHT: currentMap.moveSpriteRight(_local6, (TILE_SIZE - 2)); break; case Entity.DIR_DOWN: currentMap.moveSpriteDown(_local6, (TILE_SIZE - 2)); break; case Entity.DIR_LEFT: currentMap.moveSpriteLeft(_local6, (TILE_SIZE - 2)); break; }; }; }; _local1++; }; _local1 = 0; while (_local1 < currentItems.length) { _local14 = currentItems[_local1]; if (((_local14.isPickedUp) || ((_local14.state == Item.STATE_BROKEN)))){ } else { _local5 = new Rectangle(_local14.x, _local14.y, _local14.hitBox.width, _local14.hitBox.height); if (Utils.rectInRect(_local4, _local5)){ SoundManager.instance.playEffect(Main.HIT_EFFECT); _local14.hit(); _local14.health = (_local14.health - player.attackPower); _local2 = 0; while (_local2 < currentNPCs.length) { _local6 = currentNPCs[_local2]; if (((((!(_local6.isAlive)) || ((_local6.state == NPC.STATE_SEARCH)))) || ((_local6.state == NPC.STATE_ATTACK)))){ } else { _local8 = new Vector2D((_local6.x - player.x), (_local6.y - player.y)); if (_local8.length() <= NPC.HEARING_RADIUS){ _local9 = (_local6.x / TILE_SIZE); _local10 = (_local6.y / TILE_SIZE); _local11 = (player.x / TILE_SIZE); _local12 = (player.y / TILE_SIZE); _local13 = PathFinder.getPathAStar(currentMap.getMap(), _local9, _local10, _local11, _local12); _local6.setPath(_local13); _local6.setState(NPC.STATE_SEARCH); }; }; _local2++; }; if (_local14.health <= 0){ _local14.breakYoself(); _local2 = 0; while (_local2 < (_local14.hitBox.height / TILE_SIZE)) { _local3 = 0; while (_local3 < (_local14.hitBox.width / TILE_SIZE)) { _local15 = getAvailableSpawn(); _local16 = _local14.spawnType1; if (Math.random() < 0.25){ _local16 = _local14.spawnType2; }; _local15.init((_local14.x + (_local3 * TILE_SIZE)), (_local14.y + (_local2 * TILE_SIZE)), _local16); _local17 = (_local14.x / TILE_SIZE); _local18 = (_local14.y / TILE_SIZE); currentMap.removeWall((_local17 + _local3), (_local18 + _local2)); _local3++; }; _local2++; }; }; }; }; _local1++; }; } public function toggleSound(_arg1:MouseEvent):void{ SoundManager.instance.toggleMute(); } private function generateFloorMap(_arg1:House, _arg2:TileMap):Door{ var _local3:Array; var _local4:Array; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:Door; var _local10:int; var _local11:int; var _local12:int; var _local13:Item; var _local14:NPC; _local3 = new Array(HOUSE_TILES_HEIGHT); _local4 = new Array(HOUSE_TILES_HEIGHT); _local9 = new Door(0, 0, -1); _local5 = 0; while (_local5 < _local3.length) { _local3[_local5] = new Array(HOUSE_TILES_WIDTH); _local4[_local5] = new Array(HOUSE_TILES_WIDTH); _local5++; }; _local10 = 0; _local11 = 0; _local12 = int((Math.random() * NUM_HOUSES)); _local10 = (int((_local12 % NUM_HOUSES_PER_WIDTH)) * HOUSE_TILES_WIDTH); _local11 = (int((_local12 / NUM_HOUSES_PER_WIDTH)) * HOUSE_TILES_HEIGHT); _local5 = 0; while (_local5 < HOUSE_TILES_HEIGHT) { _local6 = 0; while (_local6 < HOUSE_TILES_WIDTH) { _local3[_local5][_local6] = housesMap[(_local5 + _local11)][(_local6 + _local10)]; _local6++; }; _local5++; }; _local5 = 0; while (_local5 < HOUSE_TILES_HEIGHT) { _local6 = 0; while (_local6 < HOUSE_TILES_WIDTH) { _local13 = null; switch (Tile.getType(housesSpecial[(_local5 + _local11)][(_local6 + _local10)])){ case Tile.SPECIAL_SPAWN_DOOR: _local9 = new Door((_local6 * TILE_SIZE), (_local5 * TILE_SIZE), -1); break; case Tile.SPECIAL_SPAWN_NPC: _local14 = new NPC(); _local14.setPos((_local6 * TILE_SIZE), (_local5 * TILE_SIZE)); _arg1.addNPC(_local14); break; case Tile.SPECIAL_SPAWN_BUSH: case Tile.SPECIAL_SPAWN_ROCK: case Tile.SPECIAL_SPAWN_STOVE: case Tile.SPECIAL_SPAWN_SINK: case Tile.SPECIAL_SPAWN_COUNTER: case Tile.SPECIAL_SPAWN_FRIDGE: case Tile.SPECIAL_SPAWN_TABLE_AND_CHAIRS: case Tile.SPECIAL_SPAWN_TV: case Tile.SPECIAL_SPAWN_COUCH: case Tile.SPECIAL_SPAWN_TABLE: case Tile.SPECIAL_SPAWN_BED: case Tile.SPECIAL_SPAWN_DRESSER: case Tile.SPECIAL_SPAWN_DESK: case Tile.SPECIAL_SPAWN_CAR: case Tile.SPECIAL_SPAWN_TREE: _local13 = _arg1.addItem(Tile.getType(housesSpecial[(_local5 + _local11)][(_local6 + _local10)]), (_local6 * TILE_SIZE), (_local5 * TILE_SIZE)); break; }; if (_local13 != null){ _local7 = 0; while (_local7 < (_local13.hitBox.height / TILE_SIZE)) { _local8 = 0; while (_local8 < (_local13.hitBox.width / TILE_SIZE)) { _local3[(_local5 + _local7)][(_local6 + _local8)] = (_local3[(_local5 + _local7)][(_local6 + _local8)] | Tile.WALL); _local8++; }; _local7++; }; }; _local6++; }; _local5++; }; _arg2.loadMap2D(_local3, _local4, new HouseTiles(0, 0), 32); return (_local9); } private function updateGame():void{ var _local1:int; var _local2:int; var _local3:int; var _local4:Door; var _local5:int; var _local6:Rectangle; var _local7:int; var _local8:int; var _local9:NPC; var _local10:Rectangle; var _local11:int; var _local12:Boolean; var _local13:Rectangle; var _local14:int; var _local15:int; var _local16:int; var _local17:int; var _local18:Number; var _local19:int; var _local20:int; var _local21:int; var _local22:int; var _local23:Array; var _local24:Rectangle; _local1 = Player.ANIM_IDLE; _local2 = 0; if (isKeyPressed(KeyCodes.KEY_SPACE)){ pushState(STATE_INVENTORY); return; }; SoundManager.instance.clearEffectsInUse(); if (player.stunCooldown > 0){ gunImg.setAnim(AnimData.UI_SHORTCUT_ICONS, AnimData.UI_SHORTCUT_ICONS_STUNGUN_COOLING); player.stunCooldown--; if (player.stunCooldown == 0){ gunImg.setAnim(AnimData.UI_SHORTCUT_ICONS, AnimData.UI_SHORTCUT_ICONS_STUNGUN_READYFLASH); }; }; if (player.state == Player.STATE_IDLE){ if (isKeyDown(KeyCodes.KEY_LEFT)){ player.direction = Entity.DIR_LEFT; if (!objectCollision(-(player.speed), 0)){ currentMap.moveSpriteLeft(player, player.speed); }; _local1 = Player.ANIM_WALK; } else { if (isKeyDown(KeyCodes.KEY_RIGHT)){ player.direction = Entity.DIR_RIGHT; if (!objectCollision(player.speed, 0)){ currentMap.moveSpriteRight(player, player.speed); }; _local1 = Player.ANIM_WALK; }; }; if (isKeyDown(KeyCodes.KEY_DOWN)){ player.direction = Entity.DIR_DOWN; if (!objectCollision(0, player.speed)){ currentMap.moveSpriteDown(player, player.speed); }; _local1 = Player.ANIM_WALK; } else { if (isKeyDown(KeyCodes.KEY_UP)){ player.direction = Entity.DIR_UP; if (!objectCollision(0, -(player.speed))){ currentMap.moveSpriteUp(player, player.speed); }; _local1 = Player.ANIM_WALK; }; }; if (isKeyDown(KeyCodes.KEY_X)){ _local1 = Player.ANIM_MELEE; player.state = Player.STATE_ATTACK; } else { if (((isKeyDown(KeyCodes.KEY_C)) && ((player.stunCooldown == 0)))){ _local1 = Player.ANIM_SHOOT; player.state = Player.STATE_SHOOT; }; }; }; if ((((_local1 == Player.ANIM_MELEE)) || ((player.state == Player.STATE_ATTACK)))){ switch (player.direction){ case Entity.DIR_UP: _local2 = AnimData.SPRITE_MADSCIENTIST_MELEE_BACK; break; case Entity.DIR_RIGHT: _local2 = AnimData.SPRITE_MADSCIENTIST_MELEE_RIGHT; break; case Entity.DIR_DOWN: _local2 = AnimData.SPRITE_MADSCIENTIST_MELEE_FRONT; break; case Entity.DIR_LEFT: _local2 = AnimData.SPRITE_MADSCIENTIST_MELEE_LEFT; break; }; if (((player.isAnimFinished) && (isKeyDown(KeyCodes.KEY_X)))){ player.resetAnim(_local2); }; } else { if ((((_local1 == Player.ANIM_SHOOT)) || ((player.state == Player.STATE_SHOOT)))){ switch (player.direction){ case Entity.DIR_UP: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_GUN_BACK; break; case Entity.DIR_RIGHT: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_GUN_RIGHT; break; case Entity.DIR_DOWN: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_GUN_FRONT; break; case Entity.DIR_LEFT: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_GUN_LEFT; break; }; } else { switch (_local1){ case Player.ANIM_WALK: switch (player.direction){ case Entity.DIR_UP: _local2 = AnimData.SPRITE_MADSCIENTIST_WALK_BACK; break; case Entity.DIR_RIGHT: _local2 = AnimData.SPRITE_MADSCIENTIST_WALK_RIGHT; break; case Entity.DIR_DOWN: _local2 = AnimData.SPRITE_MADSCIENTIST_WALK_FRONT; break; case Entity.DIR_LEFT: _local2 = AnimData.SPRITE_MADSCIENTIST_WALK_LEFT; break; }; break; case Player.ANIM_IDLE: switch (player.direction){ case Entity.DIR_UP: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_BACK; break; case Entity.DIR_RIGHT: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_RIGHT; break; case Entity.DIR_DOWN: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_FRONT; break; case Entity.DIR_LEFT: _local2 = AnimData.SPRITE_MADSCIENTIST_IDLE_LEFT; break; }; break; }; }; }; player.setAnim(AnimData.SPRITE_MADSCIENTIST, _local2); if (player.state == Player.STATE_ATTACK){ switch (player.checkFrameOps()){ case FrameData.OP_ATTACK: SoundManager.instance.playEffect(Main.SWING_EFFECT); hitObjects(); break; }; if (player.isAnimFinished){ player.state = Player.STATE_IDLE; }; } else { if (player.state == Player.STATE_SHOOT){ switch (player.checkFrameOps()){ case FrameData.OP_ATTACK: SoundManager.instance.playEffect(Main.LASER_EFFECT); player.shoot(); switch (player.direction){ case Entity.DIR_UP: stunBullet.init((player.x + (player.hitBox.width / 2)), (player.y + (player.hitBox.height / 2)), 0, -1); break; case Entity.DIR_RIGHT: stunBullet.init((player.x + (player.hitBox.width / 2)), (player.y + (player.hitBox.height / 2)), 1, 0); break; case Entity.DIR_DOWN: stunBullet.init((player.x + (player.hitBox.width / 2)), (player.y + (player.hitBox.height / 2)), 0, 1); break; case Entity.DIR_LEFT: stunBullet.init((player.x + (player.hitBox.width / 2)), (player.y + (player.hitBox.height / 2)), -1, 0); break; }; break; }; if (player.isAnimFinished){ player.state = Player.STATE_IDLE; }; }; }; if (player.attackCooldown > 0){ player.attackCooldown--; }; playerDrawPos = currentMap.centerMap(player.x, player.y); _local3 = 0; while (_local3 < currentDoors.length) { _local4 = currentDoors[_local3]; if (Utils.boxInRect((player.x + player.hitBox.x), player.hitBox.width, (player.y + player.hitBox.y), player.hitBox.height, _local4.bounds)){ _local5 = _local4.houseIndex; if (_local5 > -1){ currentMap = houseArray[_local5].getCurrentFloor().map; currentDoors = houseArray[_local5].getCurrentFloor().doors; currentNPCs = houseArray[_local5].npcArray; currentItems = houseArray[_local5].itemArray; currentSpawns = houseArray[_local5].spawnArray; lastTownPosX = _local4.bounds.x; lastTownPosY = _local4.bounds.y; player.setPos(currentDoors[0].bounds.x, (currentDoors[0].bounds.y - TILE_SIZE)); playerDrawPos = currentMap.centerMap(player.x, player.y); fadeOut(); pushState(STATE_FADE_IN); } else { currentMap = townMap; currentDoors = townDoors; currentItems = townItems; currentNPCs = townNPCs; currentSpawns = townSpawns; player.setPos(lastTownPosX, (lastTownPosY + 16)); playerDrawPos = currentMap.centerMap(player.x, player.y); fadeOut(); pushState(STATE_FADE_IN); }; break; }; _local3++; }; if (stunBullet.isAlive){ _local6 = new Rectangle(stunBullet.x, stunBullet.y, stunBullet.hitBox.width, stunBullet.hitBox.height); _local3 = 0; while (_local3 < currentNPCs.length) { _local9 = currentNPCs[_local3]; if (!_local9.isAlive){ } else { _local10 = new Rectangle(_local9.x, _local9.y, _local9.hitBox.width, _local9.hitBox.height); if (Utils.rectInRect(_local6, _local10)){ _local9.stun(); stunBullet.isAlive = false; break; }; }; _local3++; }; stunBullet.x = (stunBullet.x + (stunBullet.heading.x * stunBullet.speed)); stunBullet.y = (stunBullet.y + (stunBullet.heading.y * stunBullet.speed)); _local7 = (stunBullet.x / TILE_SIZE); _local8 = (stunBullet.y / TILE_SIZE); if ((((((((((_local7 < 0)) || ((_local8 < 0)))) || ((_local7 >= currentMap.mapWidth)))) || ((_local8 >= currentMap.mapHeight)))) || (currentMap.hasWall(_local7, _local8)))){ stunBullet.isAlive = false; }; }; _local3 = 0; while (_local3 < currentNPCs.length) { _local9 = currentNPCs[_local3]; _local12 = true; _local13 = new Rectangle((player.x + player.hitBox.x), (player.y + player.hitBox.y), player.hitBox.width, player.hitBox.height); _local10 = new Rectangle((_local9.x + (_local9.heading.x * _local9.speed)), (_local9.y + (_local9.heading.y * _local9.speed)), _local9.hitBox.width, _local9.hitBox.height); if (((!(_local9.isAlive)) || ((_local9.hitCooldown > 0)))){ } else { switch (_local9.state){ case NPC.STATE_IDLE: getNewNPCDest(_local9); break; case NPC.STATE_WALK: if ((((Math.abs((_local9.y - _local9.dest.y)) <= _local9.speed)) && ((Math.abs((_local9.x - _local9.dest.x)) <= _local9.speed)))){ _local9.x = _local9.dest.x; _local9.y = _local9.dest.y; getNewNPCDest(_local9); } else { if (Utils.rectInRect(_local13, _local10)){ _local12 = false; }; if (_local12){ switch (_local9.direction){ case Entity.DIR_UP: _local12 = currentMap.moveSpriteUp(_local9, _local9.speed); break; case Entity.DIR_RIGHT: _local12 = currentMap.moveSpriteRight(_local9, _local9.speed); break; case Entity.DIR_DOWN: _local12 = currentMap.moveSpriteDown(_local9, _local9.speed); break; case Entity.DIR_LEFT: _local12 = currentMap.moveSpriteLeft(_local9, _local9.speed); break; }; }; if (!_local12){ getNewNPCDest(_local9); }; }; break; case NPC.STATE_SEARCH: _local14 = ((_local9.x + (_local9.hitBox.width / 2)) / TILE_SIZE); _local15 = ((_local9.y + (_local9.hitBox.height / 2)) / TILE_SIZE); _local16 = ((player.x + (player.hitBox.width / 2)) / TILE_SIZE); _local17 = ((player.y + (player.hitBox.height / 2)) / TILE_SIZE); if (lineOfSightBresenham(_local14, _local15, _local16, _local17)){ _local9.setState(NPC.STATE_ATTACK); } else { if ((((Math.abs((_local9.y - _local9.dest.y)) <= _local9.speed)) && ((Math.abs((_local9.x - _local9.dest.x)) <= _local9.speed)))){ _local9.setPos(_local9.dest.x, _local9.dest.y); if (_local9.hasNextDest()){ _local9.nextDest(); } else { _local9.setState(NPC.STATE_WALK); }; } else { _local9.x = (_local9.x + (_local9.heading.x * _local9.speed)); _local9.y = (_local9.y + (_local9.heading.y * _local9.speed)); }; }; break; case NPC.STATE_ATTACK: if (Utils.rectInRect(_local13, _local10)){ _local18 = Math.atan2(((_local9.y + (_local9.hitBox.height / 2)) - (player.y + (player.hitBox.height / 2))), ((_local9.x + (_local9.hitBox.width / 2)) - (player.x + (player.hitBox.width / 2)))); if ((((_local18 < (-(Math.PI) / 4))) && ((_local18 > (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_DOWN; } else { if ((((_local18 > (Math.PI / 4))) && ((_local18 < (Math.PI - (Math.PI / 4)))))){ _local9.direction = Entity.DIR_UP; } else { if ((((_local18 > (Math.PI - (Math.PI / 4)))) || ((_local18 < (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_RIGHT; } else { _local9.direction = Entity.DIR_LEFT; }; }; }; _local9.attack(); _local9.setState(NPC.STATE_SWING_BAT); } else { _local19 = (_local9.x / TILE_SIZE); _local20 = (_local9.y / TILE_SIZE); _local21 = (player.x / TILE_SIZE); _local22 = (player.y / TILE_SIZE); _local23 = PathFinder.getPathAStar(currentMap.getMap(), _local19, _local20, _local21, _local22); _local9.setPath(_local23); if ((((Math.abs((_local9.y - _local9.dest.y)) <= _local9.speed)) && ((Math.abs((_local9.x - _local9.dest.x)) <= _local9.speed)))){ _local9.setPos(_local9.dest.x, _local9.dest.y); if (_local9.hasNextDest()){ _local9.nextDest(); }; } else { _local9.x = (_local9.x + (_local9.heading.x * _local9.speed)); _local9.y = (_local9.y + (_local9.heading.y * _local9.speed)); }; }; break; case NPC.STATE_SWING_BAT: _local18 = Math.atan2(((_local9.y + (_local9.hitBox.height / 2)) - (player.y + (player.hitBox.height / 2))), ((_local9.x + (_local9.hitBox.width / 2)) - (player.x + (player.hitBox.width / 2)))); if ((((_local18 < (-(Math.PI) / 4))) && ((_local18 > (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_DOWN; } else { if ((((_local18 > (Math.PI / 4))) && ((_local18 < (Math.PI - (Math.PI / 4)))))){ _local9.direction = Entity.DIR_UP; } else { if ((((_local18 > (Math.PI - (Math.PI / 4)))) || ((_local18 < (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_RIGHT; } else { _local9.direction = Entity.DIR_LEFT; }; }; }; if (_local9.isAnimFinished){ _local10 = new Rectangle((_local9.x + (_local9.heading.x * _local9.speed)), (_local9.y + (_local9.heading.y * _local9.speed)), _local9.hitBox.width, _local9.hitBox.height); if (!Utils.rectInRect(_local13, _local10)){ _local9.setState(NPC.STATE_ATTACK); } else { _local9.attack(); }; }; break; }; if (_local9.state == NPC.STATE_SWING_BAT){ switch (_local9.checkFrameOps()){ case FrameData.OP_ATTACK: _local24 = new Rectangle(0, 0, 0, 0); switch (_local9.direction){ case Entity.DIR_UP: _local24 = new Rectangle(_local9.x, (_local9.y - Player.ATTACK_HEIGHT), Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_RIGHT: _local24 = new Rectangle(((_local9.x + _local9.hitBox.x) + _local9.hitBox.width), _local9.y, Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_DOWN: _local24 = new Rectangle(_local9.x, (_local9.y + _local9.hitBox.height), Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; case Entity.DIR_LEFT: _local24 = new Rectangle((_local9.x - Player.ATTACK_WIDTH), _local9.y, Player.ATTACK_WIDTH, Player.ATTACK_HEIGHT); break; }; if (((Utils.rectInRect(_local24, _local13)) && ((player.damageCooldown == 0)))){ SoundManager.instance.playEffect(Main.HIT_EFFECT); player.hit(_local9.attackPower); if (player.health <= 0){ drawGame(); pushState(STATE_GAME_OVER); return; }; }; break; }; } else { if (_local9.state == NPC.STATE_ATTACK){ _local18 = Math.atan2(((_local9.y + (_local9.hitBox.height / 2)) - (player.y + (player.hitBox.height / 2))), ((_local9.x + (_local9.hitBox.width / 2)) - (player.x + (player.hitBox.width / 2)))); if ((((_local18 < (-(Math.PI) / 4))) && ((_local18 > (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_DOWN; _local11 = AnimData.SPRITE_NPC01_WALK_FRONT; } else { if ((((_local18 > (Math.PI / 4))) && ((_local18 < (Math.PI - (Math.PI / 4)))))){ _local9.direction = Entity.DIR_UP; _local11 = AnimData.SPRITE_NPC01_WALK_BACK; } else { if ((((_local18 > (Math.PI - (Math.PI / 4)))) || ((_local18 < (-(Math.PI) + (Math.PI / 4)))))){ _local9.direction = Entity.DIR_RIGHT; _local11 = AnimData.SPRITE_NPC01_WALK_RIGHT; } else { _local9.direction = Entity.DIR_LEFT; _local11 = AnimData.SPRITE_NPC01_WALK_LEFT; }; }; }; _local9.setAnim((_local9.npcType + AnimData.SPRITE_NPC01), _local11); } else { switch (_local9.direction){ case Entity.DIR_UP: _local11 = AnimData.SPRITE_NPC01_WALK_BACK; break; case Entity.DIR_RIGHT: _local11 = AnimData.SPRITE_NPC01_WALK_RIGHT; break; case Entity.DIR_DOWN: _local11 = AnimData.SPRITE_NPC01_WALK_FRONT; break; case Entity.DIR_LEFT: _local11 = AnimData.SPRITE_NPC01_WALK_LEFT; break; }; _local9.setAnim((_local9.npcType + AnimData.SPRITE_NPC01), _local11); }; }; }; _local3++; }; } private function drawInventory():void{ drawSprite(inventoryImg); woodField.setText(("" + (((MAX_WOOD - inventory[WOOD_INDEX]) > 0)) ? (MAX_WOOD - inventory[WOOD_INDEX]) : 0), 0); metalField.setText(("" + (((MAX_METAL - inventory[METAL_INDEX]) > 0)) ? (MAX_METAL - inventory[METAL_INDEX]) : 0), 0); circuitField.setText(("" + (((MAX_CIRCUIT - inventory[CIRCUIT_INDEX]) > 0)) ? (MAX_CIRCUIT - inventory[CIRCUIT_INDEX]) : 0), 0); coilField.setText(("" + (((MAX_COIL - inventory[COIL_INDEX]) > 0)) ? (MAX_COIL - inventory[COIL_INDEX]) : 0), 0); drawSprite(woodField); drawSprite(metalField); drawSprite(circuitField); drawSprite(coilField); } private function generateProperty(_arg1:Array, _arg2:Array, _arg3, _arg4):void{ } private function updateInventory():void{ if (isKeyPressed(KeyCodes.KEY_SPACE)){ popState(); }; } override public function update():void{ soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); switch (getState()){ case STATE_FADE_IN: popState(); fadeIn(); break; case STATE_PLAY: updateGame(); break; case STATE_INVENTORY: updateInventory(); break; case STATE_GAME_OVER: updateGameOver(); break; }; } private function generateHouse():void{ var _local1:House; var _local2:TileMap; var _local3:Door; var _local4:Floor; _local1 = new House(); _local2 = new TileMap(screenWidth, screenHeight); _local3 = generateFloorMap(_local1, _local2); _local4 = new Floor(_local2); _local4.setDoor(_local3); _local1.addFloor(_local4); houseArray.push(_local1); } private function objectCollision(_arg1:int, _arg2:int):Boolean{ var _local3:int; var _local4:Rectangle; var _local5:NPC; var _local6:*; var _local7:Spawn; var _local8:*; var _local9:int; var _local10:Boolean; _local4 = new Rectangle(((player.x + player.hitBox.x) + _arg1), ((player.y + player.hitBox.y) + _arg2), player.hitBox.width, player.hitBox.height); _local3 = 0; while (_local3 < currentNPCs.length) { _local5 = currentNPCs[_local3]; if (!_local5.isAlive){ } else { _local6 = new Rectangle(_local5.x, _local5.y, _local5.hitBox.width, _local5.hitBox.height); if (Utils.rectInRect(_local4, _local6)){ return (true); }; }; _local3++; }; _local3 = 0; while (_local3 < currentSpawns.length) { _local7 = currentSpawns[_local3]; if (!_local7.isAlive){ } else { _local8 = new Rectangle(_local7.x, _local7.y, _local7.hitBox.width, _local7.hitBox.height); if (Utils.rectInRect(_local4, _local8)){ SoundManager.instance.playEffect(Main.LOOT_EFFECT); _local7.isAlive = false; _local9 = WOOD_INDEX; switch (_local7.spawnType){ case Spawn.SPAWN_TYPE_WOOD: _local9 = WOOD_INDEX; break; case Spawn.SPAWN_TYPE_METAL: _local9 = METAL_INDEX; break; case Spawn.SPAWN_TYPE_CIRCUIT: _local9 = CIRCUIT_INDEX; break; case Spawn.SPAWN_TYPE_COIL: _local9 = COIL_INDEX; break; case Spawn.SPAWN_TYPE_APPLE: player.health = ((player.health)<Player.MAX_HEALTH) ? (player.health + 1) : Player.MAX_HEALTH; break; case Spawn.SPAWN_TYPE_STEAK: player.health = Player.MAX_HEALTH; break; }; var _local11 = inventory; var _local12 = _local9; var _local13 = (_local11[_local12] + 1); _local11[_local12] = _local13; _local10 = (((((((inventory[WOOD_INDEX] >= MAX_WOOD)) && ((inventory[METAL_INDEX] >= MAX_METAL)))) && ((inventory[CIRCUIT_INDEX] >= MAX_CIRCUIT)))) && ((inventory[COIL_INDEX] >= MAX_COIL))); if (_local10){ theGame.switchLayerOutro(); }; }; }; _local3++; }; return (false); } override public function init():void{ SoundManager.instance.playMusic(Main.WORLD_THEME, true); reset(); fadeIn(); } override public function draw():void{ switch (getState()){ case STATE_PLAY: drawGame(); break; case STATE_INVENTORY: drawInventory(); break; case STATE_GAME_OVER: drawGameOver(); break; }; } private function getAvailableSpawn():Spawn{ var _local1:int; var _local2:Spawn; var _local3:Spawn; _local1 = 0; while (_local1 < currentSpawns.length) { _local3 = currentSpawns[_local1]; if (!_local3.isAlive){ return (_local3); }; _local1++; }; _local2 = new Spawn(); currentSpawns.push(_local2); return (currentSpawns[(currentSpawns.length - 1)]); } private function drawGame():void{ var _local1:int; var _local2:Point; var _local3:Item; var _local4:NPC; var _local5:Spawn; clearBackBuffer(); drawTileMap(currentMap); _local2 = currentMap.getCurrentOffset(); _local1 = 0; while (_local1 < currentItems.length) { _local3 = currentItems[_local1]; if (_local3.isPickedUp){ } else { if (_local3.hitCooldown > 0){ _local3.hitCooldown--; } else { drawSpriteAt(_local3, (_local3.x - _local2.x), (_local3.y - _local2.y)); }; }; _local1++; }; _local1 = 0; while (_local1 < currentNPCs.length) { _local4 = currentNPCs[_local1]; if (_local4.hitCooldown > 0){ _local4.hitCooldown--; //unresolved if } else { drawSpriteAt(_local4, (_local4.x - _local2.x), (_local4.y - _local2.y)); }; _local1++; }; _local1 = 0; while (_local1 < currentSpawns.length) { _local5 = currentSpawns[_local1]; if (!_local5.isAlive){ } else { drawSpriteAt(_local5, (_local5.x - _local2.x), (_local5.y - _local2.y)); }; _local1++; }; if (player.damageCooldown > 0){ if ((player.damageCooldown % 2) == 0){ drawSpriteAt(player, playerDrawPos.x, playerDrawPos.y); }; player.damageCooldown--; } else { drawSpriteAt(player, playerDrawPos.x, playerDrawPos.y); }; if (stunBullet.isAlive){ drawSpriteAt(stunBullet, (stunBullet.x - _local2.x), (stunBullet.y - _local2.y)); }; lifeImg.setAnim(AnimData.UI_LIFE, AnimData.UI_LIFE_LIFE); _local1 = 0; while (_local1 < Player.MAX_HEALTH) { if (player.health <= _local1){ lifeImg.setAnim(AnimData.UI_LIFE, AnimData.UI_LIFE_NOLIFE); }; drawSpriteAt(lifeImg, (LIFE_X + (_local1 * LIFE_SPACING_X)), LIFE_Y); _local1++; }; drawSprite(shortcutImg); drawSprite(batImg); drawSprite(gunImg); } private function reset():void{ var _local1:int; lastTownPosX = 0; lastTownPosY = 0; generateTown(); player = new Player(); player.setAnim(AnimData.SPRITE_MADSCIENTIST, AnimData.SPRITE_MADSCIENTIST_IDLE_FRONT); player.setPos((((townWidth * TILE_SIZE) / 2) - 64), ((townHeight * TILE_SIZE) - 64)); stunBullet = new StunBullet(); stunBullet.setAnim(AnimData.BLUE_JELLYFISH, AnimData.BLUE_JELLYFISH_IDLE); _local1 = 0; while (_local1 < inventory.length) { inventory[_local1] = 0; _local1++; }; playerDrawPos = currentMap.centerMap(player.x, player.y); gunImg.setAnim(AnimData.UI_SHORTCUT_ICONS, AnimData.UI_SHORTCUT_ICONS_STUNGUN); } private function drawGameOver():void{ drawSprite(gameOverImg); } private function getNewNPCDest(_arg1:NPC):void{ var _local2:int; _local2 = _arg1.direction; if (Math.random() <= 0.25){ _local2 = int((4 * Math.random())); if (_local2 == 4){ _local2--; }; }; _arg1.heading.x = 0; _arg1.heading.y = 0; switch (_local2){ case Entity.DIR_UP: _arg1.setDest(_arg1.x, (_arg1.y - TILE_SIZE)); break; case Entity.DIR_DOWN: _arg1.setDest(_arg1.x, (_arg1.y + TILE_SIZE)); break; case Entity.DIR_RIGHT: _arg1.setDest((_arg1.x + TILE_SIZE), _arg1.y); break; case Entity.DIR_LEFT: _arg1.setDest((_arg1.x - TILE_SIZE), _arg1.y); break; }; _arg1.setState(NPC.STATE_WALK); } private function generateTown():void{ var _local1:Array; var _local2:Array; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; var _local14:int; var _local15:Item; var _local16:NPC; var _local17:int; var _local18:int; _local1 = new Array(townHeight); _local2 = new Array(townHeight); _local3 = 0; while (_local3 < townHeight) { _local1[_local3] = new Array(townWidth); _local2[_local3] = new Array(townWidth); _local3++; }; _local7 = 0; _local8 = 0; propertyArray = new Array(PROPERTIES_PER_HEIGHT); townDoors = new Array(); townNPCs = new Array(); townItems = new Array(); townSpawns = new Array(); houseArray = new Array(); _local3 = 0; while (_local3 < PROPERTIES_PER_HEIGHT) { propertyArray[_local3] = new Array(PROPERTIES_PER_WIDTH); _local3++; }; _local9 = 0; while (_local9 < NUM_PROPERTIES) { _local10 = (Math.random() * PROPERTIES_PER_WIDTH); _local11 = (Math.random() * PROPERTIES_PER_HEIGHT); if (!propertyArray[_local11][_local10]){ propertyArray[_local11][_local10] = true; _local9++; }; }; _local3 = 0; while (_local3 < PROPERTIES_PER_HEIGHT) { _local4 = 0; while (_local4 < PROPERTIES_PER_WIDTH) { _local12 = 0; _local13 = 0; _local14 = (NUM_PROPERTY_TYPES - 1); if (propertyArray[_local3][_local4]){ _local14 = int((Math.random() * NUM_HOUSE_TYPES)); generateHouse(); }; _local12 = (int((_local14 % NUM_PROPERTY_PER_WIDTH)) * PROPERTY_SLICE_TILES_WIDTH); _local13 = (int((_local14 / NUM_PROPERTY_PER_WIDTH)) * PROPERTY_SLICE_TILES_HEIGHT); _local5 = 0; while (_local5 < PROPERTY_SLICE_TILES_HEIGHT) { _local6 = 0; while (_local6 < PROPERTY_SLICE_TILES_WIDTH) { _local1[(_local5 + (_local3 * PROPERTY_SLICE_TILES_HEIGHT))][(_local6 + (_local4 * PROPERTY_SLICE_TILES_WIDTH))] = worldMap[(_local5 + _local13)][(_local6 + _local12)]; _local6++; }; _local5++; }; _local5 = 0; while (_local5 < PROPERTY_SLICE_TILES_HEIGHT) { _local6 = 0; while (_local6 < PROPERTY_SLICE_TILES_WIDTH) { _local15 = null; switch (Tile.getType(worldSpecial[(_local5 + _local13)][(_local6 + _local12)])){ case Tile.SPECIAL_SPAWN_DOOR: townDoors.push(new Door(((_local6 + (_local4 * PROPERTY_SLICE_TILES_WIDTH)) * TILE_SIZE), ((_local5 + (_local3 * PROPERTY_SLICE_TILES_HEIGHT)) * TILE_SIZE), townDoors.length)); break; case Tile.SPECIAL_SPAWN_NPC: _local16 = new NPC(); _local16.setPos(((_local6 + (_local4 * PROPERTY_SLICE_TILES_WIDTH)) * TILE_SIZE), ((_local5 + (_local3 * PROPERTY_SLICE_TILES_HEIGHT)) * TILE_SIZE)); townNPCs.push(_local16); break; case Tile.SPECIAL_SPAWN_BUSH: case Tile.SPECIAL_SPAWN_ROCK: case Tile.SPECIAL_SPAWN_STOVE: case Tile.SPECIAL_SPAWN_SINK: case Tile.SPECIAL_SPAWN_COUNTER: case Tile.SPECIAL_SPAWN_FRIDGE: case Tile.SPECIAL_SPAWN_TABLE_AND_CHAIRS: case Tile.SPECIAL_SPAWN_TV: case Tile.SPECIAL_SPAWN_COUCH: case Tile.SPECIAL_SPAWN_TABLE: case Tile.SPECIAL_SPAWN_BED: case Tile.SPECIAL_SPAWN_DRESSER: case Tile.SPECIAL_SPAWN_DESK: case Tile.SPECIAL_SPAWN_CAR: case Tile.SPECIAL_SPAWN_TREE: _local15 = new Item(Tile.getType(worldSpecial[(_local5 + _local13)][(_local6 + _local12)])); _local15.setPos(((_local6 + (_local4 * PROPERTY_SLICE_TILES_WIDTH)) * TILE_SIZE), ((_local5 + (_local3 * PROPERTY_SLICE_TILES_HEIGHT)) * TILE_SIZE)); townItems.push(_local15); break; }; if (_local15 != null){ _local17 = 0; while (_local17 < (_local15.hitBox.height / TILE_SIZE)) { _local18 = 0; while (_local18 < (_local15.hitBox.width / TILE_SIZE)) { _local1[((_local17 + _local5) + (_local3 * PROPERTY_SLICE_TILES_HEIGHT))][((_local18 + _local6) + (_local4 * PROPERTY_SLICE_TILES_WIDTH))] = (_local1[((_local17 + _local5) + (_local3 * PROPERTY_SLICE_TILES_HEIGHT))][((_local18 + _local6) + (_local4 * PROPERTY_SLICE_TILES_WIDTH))] | Tile.WALL); _local18++; }; _local17++; }; }; _local6++; }; _local5++; }; _local4++; }; _local3++; }; townMap = new TileMap(screenWidth, screenHeight); townMap.loadMap2D(_local1, _local2, new TownTiles(0, 0), 32); currentMap = townMap; currentDoors = townDoors; currentNPCs = townNPCs; currentItems = townItems; currentSpawns = townSpawns; } private function lineOfSightBresenham(_arg1:int, _arg2:int, _arg3:int, _arg4:int):Boolean{ var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; _local5 = _arg1; _local6 = _arg3; _local7 = _arg2; _local8 = _arg4; _local9 = (_arg3 - _arg1); _local10 = (_arg4 - _arg2); _local11 = 0; _local12 = 0; _local13 = 0; if (_local10 == 0){ if (_local9 == 0){ return (true); }; if (_local9 < 0){ _local12 = -1; } else { _local12 = 1; }; while (_local5 != _local6) { _local5 = (_local5 + _local12); if (currentMap.hasWall(_local5, _local7)){ return (false); }; }; return (true); }; if (_local9 == 0){ if (_local10 < 0){ _local11 = -1; } else { _local11 = 1; }; while (_local7 != _local8) { _local7 = (_local7 + _local11); if (currentMap.hasWall(_local5, _local7)){ return (false); }; }; return (true); }; if (_local10 < 0){ _local10 = -(_local10); _local11 = -1; } else { _local11 = 1; }; if (_local9 < 0){ _local9 = -(_local9); _local12 = -1; } else { _local12 = 1; }; _local9 = (_local9 * 2); _local10 = (_local10 * 2); if (_local9 > _local10){ _local13 = ((2 * _local10) - _local9); while (_local5 != _local6) { if (_local13 >= 0){ _local7 = (_local7 + _local11); _local13 = (_local13 - _local9); }; _local5 = (_local5 + _local12); _local13 = (_local13 + _local10); if (currentMap.hasWall(_local5, _local7)){ return (false); }; }; } else { _local13 = ((2 * _local9) - _local10); while (_local7 != _local8) { if (_local13 >= 0){ _local5 = (_local5 + _local12); _local13 = (_local13 - _local10); }; _local7 = (_local7 + _local11); _local13 = (_local13 + _local9); if (currentMap.hasWall(_local5, _local7)){ return (false); }; }; }; return (true); } private function updateGameOver():void{ if (isKeyPressed(KeyCodes.KEY_SPACE)){ reset(); popState(); }; } } }//package
Section 35
//GameFont (GameFont) package { import flash.text.*; public dynamic class GameFont extends Font { } }//package
Section 36
//GameOverImage (GameOverImage) package { import flash.display.*; public dynamic class GameOverImage extends BitmapData { public function GameOverImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 37
//HitSound (HitSound) package { import flash.media.*; public dynamic class HitSound extends Sound { } }//package
Section 38
//House (House) package { public class House { public var itemArray:Array; private var floors:Array; private var currentFloor:int; public var npcArray:Array; public var spawnArray:Array; public function House(){ floors = new Array(); npcArray = new Array(); itemArray = new Array(); spawnArray = new Array(); currentFloor = 0; } public function addNPC(_arg1:NPC):void{ npcArray.push(_arg1); } public function getCurrentFloor():Floor{ return (floors[currentFloor]); } public function addFloor(_arg1:Floor):void{ floors.push(_arg1); } public function addItem(_arg1:int, _arg2:int, _arg3:int):Item{ var _local4:Item; _local4 = new Item(_arg1); _local4.setPos(_arg2, _arg3); itemArray.push(_local4); return (_local4); } } }//package
Section 39
//HouseTiles (HouseTiles) package { import flash.display.*; public dynamic class HouseTiles extends BitmapData { public function HouseTiles(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 40
//IntroClip (IntroClip) package { import flash.display.*; public dynamic class IntroClip extends MovieClip { public var soundButton:SoundButton; public var btn_skip:SimpleButton; public function IntroClip(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8, 8, frame9, 9, frame10, 10, frame11, 11, frame12, 12, frame13, 13, frame14, 14, frame15, 15, frame16, 16, frame17, 17, frame18, 18, frame19, 19, frame20, 20, frame21, 21, frame22, 22, frame23, 23, frame24, 24, frame25, 25, frame26, 26, frame27, 27, frame28, 28, frame29, 29, frame30, 30, frame31, 31, frame32, 32, frame33, 33, frame34, 34, frame35, 35, frame36, 36, frame37, 37, frame38, 38, frame39, 39, frame40, 40, frame41, 41, frame42, 42, frame43, 43, frame44, 87, frame88); } function frame88(){ stop(); } function frame10(){ stop(); } function frame14(){ stop(); } function frame18(){ stop(); } function frame12(){ stop(); } function frame3(){ stop(); } function frame6(){ stop(); } function frame7(){ stop(); } function frame1(){ stop(); } function frame19(){ stop(); } function frame25(){ stop(); } function frame13(){ stop(); } function frame17(){ stop(); } function frame4(){ stop(); } function frame5(){ stop(); } function frame22(){ stop(); } function frame16(){ stop(); } function frame8(){ stop(); } function frame9(){ stop(); } function frame2(){ stop(); } function frame15(){ stop(); } function frame23(){ stop(); } function frame28(){ stop(); } function frame36(){ stop(); } function frame20(){ stop(); } function frame21(){ stop(); } function frame31(){ stop(); } function frame34(){ stop(); } function frame27(){ stop(); } function frame11(){ stop(); } function frame35(){ stop(); } function frame24(){ stop(); } function frame37(){ stop(); } function frame30(){ stop(); } function frame29(){ stop(); } function frame33(){ stop(); } function frame40(){ stop(); } function frame41(){ stop(); } function frame43(){ stop(); } function frame39(){ stop(); } function frame26(){ stop(); } function frame32(){ stop(); } function frame42(){ stop(); } function frame44(){ stop(); } function frame38(){ stop(); } } }//package
Section 41
//IntroCutscene (IntroCutscene) package { import flash.events.*; import greenpixel.game.*; import greenpixel.sound.*; public class IntroCutscene extends GameLayer { private var theGame:Main; private var cutscene:IntroClip; public function IntroCutscene(_arg1:Main){ super(_arg1); theGame = _arg1; cutscene = new IntroClip(); cutscene.btn_skip.addEventListener(MouseEvent.CLICK, loadGame); cutscene.soundButton.gotoAndStop(0); cutscene.soundButton.buttonMode = true; cutscene.soundButton.addEventListener(MouseEvent.CLICK, toggleSound); addChild(cutscene); cutscene.stop(); } override public function init():void{ stage.focus = stage; SoundManager.instance.playMusic(Main.LAIR_THEME, true); cutscene.gotoAndStop(0); cutscene.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); fadeIn(); } override public function draw():void{ } public function toggleSound(_arg1:MouseEvent):void{ SoundManager.instance.toggleMute(); } override public function update():void{ if (cutscene.currentFrame == cutscene.totalFrames){ cutscene.stop(); stage.focus = stage; theGame.switchLayerGame(); }; if (isAnyKeyPressed()){ cutscene.play(); }; cutscene.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); } private function loadGame(_arg1:MouseEvent):void{ stage.focus = stage; theGame.switchLayerGame(); } } }//package
Section 42
//InventoryImage (InventoryImage) package { import flash.display.*; public dynamic class InventoryImage extends BitmapData { public function InventoryImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 43
//Item (Item) package { import flash.geom.*; import greenpixel.game.world.objects.*; import greenpixel.game.tilemap.*; public class Item extends Character { private var breakAnimIndex:int; public var hitCooldown:int; public var spawnType1:int; public var spawnType2:int; public var isPickedUp:Boolean; private var HIT_COOLDOWN_MAX:int;// = 4 public static var STATE_FIXED:int = 0; public static var CAR_HEALTH = 200; public static var SINK_HEALTH:int = 50; public static var TABLE_HEALTH:int = 25; public static var TYPE_WOOD:int = 1; public static var BUSH_HEALTH:int = 25; public static var FRIDGE_HEALTH:int = 100; public static var TREE_HEALTH = 100; public static var COUNTER_HEALTH:int = 50; public static var STATE_BROKEN:int = 1; public static var STOVE_HEALTH:int = 75; public static var TYPE_ENGINE:int = 0; public static var DRAWER_HEALTH = 50; public static var COUCH_HEALTH:int = 75; public static var TABLE_AND_CHAIR_HEALTH:int = 100; public static var NUM_CAR_TYPES = 7; public static var ROCK_HEALTH:int = 50; public static var DRESSER_HEALTH = 125; public static var TV_HEALTH:int = 150; public static var BED_HEALTH:int = 75; public function Item(_arg1:int){ var _local2:int; HIT_COOLDOWN_MAX = 4; super(); breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN1X1; type = _arg1; isAlive = true; isPickedUp = false; switch (_arg1){ case Tile.SPECIAL_SPAWN_BUSH: _local2 = AnimData.TILES_OBJECTS_BUSH_IDLE; hitBox = new Rectangle(0, 0, 32, 32); health = BUSH_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_WOOD; break; case Tile.SPECIAL_SPAWN_ROCK: _local2 = AnimData.TILES_OBJECTS_ROCK_IDLE; hitBox = new Rectangle(0, 0, 32, 32); health = ROCK_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_WOOD; break; case Tile.SPECIAL_SPAWN_STOVE: _local2 = AnimData.TILES_OBJECTS_KITCHEN_NORTH_STOVE; hitBox = new Rectangle(0, 0, 32, 32); health = STOVE_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_METAL; spawnType2 = Spawn.SPAWN_TYPE_METAL; break; case Tile.SPECIAL_SPAWN_SINK: _local2 = AnimData.TILES_OBJECTS_KITCHEN_NORTH_SINK; hitBox = new Rectangle(0, 0, 32, 32); health = SINK_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_METAL; spawnType2 = Spawn.SPAWN_TYPE_METAL; break; case Tile.SPECIAL_SPAWN_COUNTER: _local2 = AnimData.TILES_OBJECTS_KITCHEN_NORTH_COUNTER; hitBox = new Rectangle(0, 0, 32, 32); health = COUNTER_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_METAL; spawnType2 = Spawn.SPAWN_TYPE_METAL; break; case Tile.SPECIAL_SPAWN_FRIDGE: _local2 = AnimData.TILES_OBJECTS_KITCHEN_NORTH_FRIDGE; hitBox = new Rectangle(0, 0, 32, 64); health = FRIDGE_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_COIL; spawnType2 = Spawn.SPAWN_TYPE_STEAK; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN1X2; break; case Tile.SPECIAL_SPAWN_TABLE_AND_CHAIRS: _local2 = AnimData.TILES_OBJECTS_KITCHEN_DINING; hitBox = new Rectangle(0, 0, 96, 32); health = TABLE_AND_CHAIR_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_METAL; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN3X1; break; case Tile.SPECIAL_SPAWN_TV: _local2 = AnimData.TILES_OBJECTS_DEN_NORTH_TV; hitBox = new Rectangle(0, 0, 64, 64); health = TV_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_CIRCUIT; spawnType2 = Spawn.SPAWN_TYPE_METAL; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN2X2; break; case Tile.SPECIAL_SPAWN_COUCH: _local2 = AnimData.TILES_OBJECTS_DEN_SOUTH_COUCH; hitBox = new Rectangle(0, 0, 96, 32); health = COUCH_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_COIL; spawnType2 = Spawn.SPAWN_TYPE_WOOD; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN3X1; break; case Tile.SPECIAL_SPAWN_TABLE: _local2 = AnimData.TILES_OBJECTS_DEN_TABLE; hitBox = new Rectangle(0, 0, 32, 32); health = TABLE_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_WOOD; break; case Tile.SPECIAL_SPAWN_BED: _local2 = AnimData.TILES_OBJECTS_BEDROOM_BED; hitBox = new Rectangle(0, 0, 32, 64); health = BED_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_COIL; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN1X2; break; case Tile.SPECIAL_SPAWN_DRESSER: _local2 = AnimData.TILES_OBJECTS_BEDROOM_NORTH_DRESSER; hitBox = new Rectangle(0, 0, 64, 64); health = DRESSER_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_WOOD; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN2X2; break; case Tile.SPECIAL_SPAWN_DESK: _local2 = AnimData.TILES_OBJECTS_BEDROOM_NORTH_DRAWER; hitBox = new Rectangle(0, 0, 64, 32); health = DRAWER_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_WOOD; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN2X1; break; case Tile.SPECIAL_SPAWN_CAR: _local2 = (AnimData.TILES_OBJECTS_CAR01_IDLE + int((Math.random() * NUM_CAR_TYPES))); hitBox = new Rectangle(0, 0, 64, 96); health = CAR_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_METAL; spawnType2 = Spawn.SPAWN_TYPE_CIRCUIT; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN2X3; break; case Tile.SPECIAL_SPAWN_TREE: _local2 = AnimData.TILES_OBJECTS_TREE_IDLE; hitBox = new Rectangle(0, 0, 96, 96); health = TREE_HEALTH; spawnType1 = Spawn.SPAWN_TYPE_WOOD; spawnType2 = Spawn.SPAWN_TYPE_APPLE; breakAnimIndex = AnimData.TILES_OBJECTS_BROKEN3X3; break; }; state = STATE_FIXED; setAnim(AnimData.TILES_OBJECTS, _local2); } public function breakYoself():void{ health = 0; isAlive = false; setAnim(AnimData.TILES_OBJECTS, breakAnimIndex); state = Item.STATE_BROKEN; } public function hit():void{ hitCooldown = HIT_COOLDOWN_MAX; } } }//package
Section 44
//ItemImages (ItemImages) package { import flash.display.*; public dynamic class ItemImages extends BitmapData { public function ItemImages(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 45
//LairTheme (LairTheme) package { import flash.media.*; public dynamic class LairTheme extends Sound { } }//package
Section 46
//LaserSound (LaserSound) package { import flash.media.*; public dynamic class LaserSound extends Sound { } }//package
Section 47
//LifeImage (LifeImage) package { import flash.display.*; public dynamic class LifeImage extends BitmapData { public function LifeImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 48
//LootSound (LootSound) package { import flash.media.*; public dynamic class LootSound extends Sound { } }//package
Section 49
//Main (Main) package { import flash.display.*; import mochi.as3.*; import greenpixel.game.*; public class Main extends BasicGame { public var outro:OutroCutscene; public var SCREEN_WIDTH:int;// = 640 private var adClip:MovieClip; private var adIsFinished:Boolean;// = true var _mochiads_game_id:String;// = "6ccc17658bbc0d83" public var menu:Menu; public var splash:Splash; public var SCREEN_HEIGHT:int;// = 480 public var intro:IntroCutscene; public var game:Game; public static var LASER_EFFECT = 3; public static var LOOT_EFFECT = 2; public static var MENU_THEME = 0; public static var LAIR_THEME = 1; public static var SWING_EFFECT = 1; public static var WORLD_THEME = 2; public static var HIT_EFFECT = 0; public function Main(){ SCREEN_WIDTH = 640; SCREEN_HEIGHT = 480; _mochiads_game_id = "6ccc17658bbc0d83"; adIsFinished = true; super(SCREEN_WIDTH, SCREEN_HEIGHT); addAnimBundle(AnimData.BLUE_JELLYFISH_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.MESSAGE_WINDOW_DATA, new MessageBoxes(0, 0)); addAnimBundle(AnimData.SPRITE_MADSCIENTIST_DATA, new PlayerImage(0, 0)); addAnimBundle(AnimData.SPRITE_NPC01_DATA, new NPCImage0(0, 0)); addAnimBundle(AnimData.SPRITE_NPC02_DATA, new NPCImage1(0, 0)); addAnimBundle(AnimData.SPRITE_NPC03_DATA, new NPCImage2(0, 0)); addAnimBundle(AnimData.SPRITE_NPC04_DATA, new NPCImage3(0, 0)); addAnimBundle(AnimData.SPRITE_NPC05_DATA, new NPCImage4(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.ANIM_SET_8_DATA, new BlueJellyfish(0, 0)); addAnimBundle(AnimData.TILES_OBJECTS_DATA, new ObjectImages(0, 0)); addAnimBundle(AnimData.ITEMS_DATA, new ItemImages(0, 0)); addAnimBundle(AnimData.UI_INVENTORY_DATA, new InventoryImage(0, 0)); addAnimBundle(AnimData.UI_SHORTCUTS_DATA, new ShortcutImage(0, 0)); addAnimBundle(AnimData.UI_LIFE_DATA, new LifeImage(0, 0)); addAnimBundle(AnimData.UI_SHORTCUT_ICONS_DATA, new ShortcutIconsImage(0, 0)); addAnimBundle(AnimData.UI_DEATHSCREEN_DATA, new GameOverImage(0, 0)); addMusic(new MenuTheme()); addMusic(new LairTheme()); addMusic(new WorldTheme()); addEffect(new HitSound()); addEffect(new SwingSound()); addEffect(new LootSound()); addEffect(new LaserSound()); splash = new Splash(this); menu = new Menu(this); game = new Game(this); intro = new IntroCutscene(this); outro = new OutroCutscene(this); adClip = new MovieClip(); adClip.graphics.beginFill(0); adClip.graphics.drawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); adClip.graphics.endFill(); addChild(adClip); MochiAd.showPreGameAd({id:"6ccc17658bbc0d83", res:"640x480", clip:adClip, no_progress_bar:true, no_bg:true, ad_started:adStart, ad_finished:adFinished}); } private function adLoaded(_arg1:Number, _arg2:Number):void{ adIsFinished = false; } public function switchLayerGame():void{ fadeAndPushLayer(game); } public function switchLayerSplash():void{ fadeAndPushLayer(splash); } public function switchLayerOutro():void{ fadeAndPushLayer(outro); } public function switchLayerMenu():void{ fadeAndPushLayer(menu); } private function adFinished():void{ removeChild(adClip); switchLayerMenu(); } public function switchLayerIntro():void{ fadeAndPushLayer(intro); } private function adStart():void{ adIsFinished = false; } } }//package
Section 50
//MainMenuClip (MainMenuClip) package { import flash.display.*; public dynamic class MainMenuClip extends MovieClip { public var soundButton:SoundButton; public var greenpixelButton:SimpleButton; public var twitterButton:SimpleButton; public var btn_start:SimpleButton; } }//package
Section 51
//Maps (Maps) package { public class Maps { public static var HOUSES_MAP:Array = [0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 30, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 0, 0, 0, 0, 0, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 13, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 18, 0, 0, 0, 0, 0, 11, 0, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 18, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 19, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 17, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 18, 0, 0, 0, 0, 0, 11, 0, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 0, 0, 0, 0, 0, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 13, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 18, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 19, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 13, 0, 0, 0, 0, 0, 15, 0, 12, 0, 0, 0, 0, 0, 15, 0, 11, 0, 0, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 14, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 15, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 16, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 14, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 15, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 20, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 0, 15, 0, 11, 0, 0, 0, 0, 0, 15, 0, 13, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 15, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 17, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 16, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 16, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 4, 4, 6, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 2, 6, 4, 0, 0, 0, 0, 0, 2, 7, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 8, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 2, 9, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 12, 4, 6, 0, 0, 0, 0, 2, 13, 0, 0, 0, 0, 0, 0, 2, 14, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 15, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 4, 4, 6, 0, 0, 0, 0, 2, 16, 0, 0, 0, 0, 0, 0, 2, 6, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 7, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 8, 4, 0, 0, 0, 0, 0, 2, 9, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 17, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 12, 4, 6, 0, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 2, 14, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 17, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 15, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 5, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 20, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 19, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 20, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 18, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 0, 0, 0, 0, 0, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 13, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 18, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 13, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 13, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 15, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 0, 15, 0, 11, 0, 0, 0, 0, 0, 15, 0, 12, 0, 0, 0, 0, 0, 15, 0, 13, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 11, 0, 13, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 16, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 15, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 16, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 18, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 15, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 2, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 4, 3, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 4, 5, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 9, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 4, 10, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 15, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 0, 15, 0, 11, 0, 0, 0, 0, 0, 15, 0, 13, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 15, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 20, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 19, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 16, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 16, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 17, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 18, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 16, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 18, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 18, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 7, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 16, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 4, 11, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 13, 4, 0, 0, 0, 0, 0, 4, 14, 4, 6, 0, 0, 0, 0, 4, 15, 0, 0, 0, 0, 0, 0, 4, 16, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 13, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 18, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 4, 19, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 5, 1, 4, 6, 0, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 5, 3, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 4, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 4, 11, 4, 0, 0, 0, 0, 0, 4, 14, 4, 6, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 4, 16, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 13, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 4, 18, 4, 0, 0, 0, 0, 0, 4, 19, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 6, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 1, 4, 6, 0, 0, 0, 0, 5, 7, 0, 0, 0, 0, 0, 0, 5, 3, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 4, 4, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0]; public static var WORLD_MAP:Array = [0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 50, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 17, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 17, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 14, 4, 0, 0, 0, 0, 0, 1, 15, 4, 0, 0, 0, 0, 0, 1, 16, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 1, 18, 4, 0, 0, 0, 0, 0, 1, 19, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 22, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 14, 4, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 1, 16, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 4, 4, 0, 0, 0, 0, 0, 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 2, 6, 4, 0, 0, 0, 0, 0, 2, 7, 4, 0, 0, 0, 0, 0, 2, 8, 4, 0, 0, 0, 0, 0, 2, 9, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 12, 4, 0, 0, 0, 0, 0, 2, 13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 4, 4, 0, 0, 0, 0, 0, 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 4, 4, 0, 0, 0, 0, 0, 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 2, 14, 4, 0, 0, 0, 0, 0, 2, 15, 4, 0, 0, 0, 0, 0, 2, 16, 4, 0, 0, 0, 0, 0, 2, 17, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 2, 18, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 2, 6, 4, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 0, 0, 0, 2, 8, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 5, 4, 0, 0, 0, 0, 0, 3, 5, 4, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 18, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 2, 18, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 2, 14, 4, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 3, 8, 4, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 2, 16, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 4, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 0, 0, 0, 3, 15, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 4, 0, 0, 0, 0, 0, 3, 7, 4, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 3, 9, 4, 0, 0, 0, 0, 0, 3, 18, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 3, 2, 4, 0, 0, 0, 0, 0, 4, 3, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 4, 5, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 0, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 0, 4, 9, 4, 0, 0, 0, 0, 0, 4, 10, 4, 0, 0, 0, 0, 0, 4, 11, 4, 0, 0, 0, 0, 0, 4, 8, 4, 0, 0, 0, 0, 0, 4, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 17, 4, 0, 0, 0, 0, 0, 4, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 13, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, 0, 4, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 4, 5, 4, 0, 0, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 4, 19, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 1, 4, 0, 0, 0, 0, 0, 5, 2, 4, 0, 0, 0, 0, 0, 5, 3, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 4, 0, 0, 0, 0, 0, 5, 8, 4, 0, 0, 0, 0, 0, 5, 9, 4, 6, 0, 0, 0, 0, 5, 10, 0, 0, 0, 0, 0, 0, 5, 11, 4, 0, 0, 0, 0, 0, 5, 8, 4, 0, 0, 0, 0, 0, 5, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 4, 0, 0, 0, 0, 0, 5, 17, 4, 0, 0, 0, 0, 0, 5, 18, 4, 0, 0, 0, 0, 0, 5, 19, 4, 0, 0, 0, 0, 0, 6, 0, 4, 0, 0, 0, 0, 0, 5, 17, 4, 0, 0, 0, 0, 0, 6, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 4, 19, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 1, 4, 0, 0, 0, 0, 0, 5, 2, 4, 0, 0, 0, 0, 0, 5, 3, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 6, 3, 4, 0, 0, 0, 0, 0, 5, 2, 4, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 0, 0, 0, 6, 5, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 4, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 6, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 10, 4, 0, 0, 0, 0, 0, 6, 11, 4, 0, 0, 0, 0, 0, 6, 12, 4, 6, 0, 0, 0, 0, 6, 13, 0, 0, 0, 0, 0, 0, 6, 14, 4, 0, 0, 0, 0, 0, 6, 11, 4, 0, 0, 0, 0, 0, 6, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 6, 3, 4, 0, 0, 0, 0, 0, 5, 2, 4, 0, 0, 0, 0, 0, 6, 16, 4, 0, 0, 0, 0, 0, 6, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 6, 17, 4, 0, 0, 0, 0, 0, 6, 18, 4, 0, 0, 0, 0, 0, 6, 19, 4, 0, 0, 0, 0, 0, 7, 0, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 4, 0, 0, 0, 0, 0, 7, 2, 4, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 7, 5, 0, 0, 0, 0, 0, 0, 7, 6, 4, 0, 0, 0, 0, 0, 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 7, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 7, 11, 4, 0, 0, 0, 0, 0, 7, 12, 4, 0, 0, 0, 0, 0, 7, 13, 4, 0, 0, 0, 0, 0, 7, 14, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 6, 17, 4, 0, 0, 0, 0, 0, 7, 15, 4, 0, 0, 0, 0, 0, 7, 16, 4, 0, 0, 0, 0, 0, 7, 17, 4, 0, 0, 0, 0, 0, 6, 19, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 19, 4, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 8, 3, 0, 0, 0, 0, 0, 0, 8, 4, 4, 0, 0, 0, 0, 0, 8, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 8, 6, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 7, 11, 4, 0, 0, 0, 0, 0, 8, 7, 4, 0, 0, 0, 0, 0, 8, 8, 4, 0, 0, 0, 0, 0, 8, 9, 4, 0, 0, 0, 0, 0, 7, 13, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 4, 0, 0, 0, 0, 0, 8, 11, 4, 0, 0, 0, 0, 0, 8, 12, 4, 0, 0, 0, 0, 0, 7, 16, 4, 0, 0, 0, 0, 0, 8, 12, 4, 0, 0, 0, 0, 0, 8, 13, 4, 0, 0, 0, 0, 0, 8, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 8, 15, 4, 0, 0, 0, 0, 0, 8, 16, 4, 0, 0, 0, 0, 0, 8, 17, 0, 0, 0, 0, 0, 0, 8, 8, 4, 0, 0, 0, 0, 0, 8, 17, 4, 0, 0, 0, 0, 0, 8, 18, 4, 0, 0, 0, 0, 0, 8, 19, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 0, 0, 0, 0, 0, 9, 1, 4, 0, 0, 0, 0, 0, 9, 2, 4, 0, 0, 0, 0, 0, 9, 3, 4, 0, 0, 0, 0, 0, 9, 4, 4, 0, 0, 0, 0, 0, 9, 1, 4, 0, 0, 0, 0, 0, 9, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 7, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 9, 6, 4, 0, 0, 0, 0, 0, 9, 7, 4, 0, 0, 0, 0, 0, 9, 8, 4, 0, 0, 0, 0, 0, 9, 9, 4, 0, 0, 0, 0, 0, 9, 10, 4, 0, 0, 0, 0, 0, 9, 7, 4, 0, 0, 0, 0, 0, 9, 11, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 12, 4, 0, 0, 0, 0, 0, 9, 13, 4, 0, 0, 0, 0, 0, 9, 14, 4, 6, 0, 0, 0, 0, 9, 15, 0, 0, 0, 0, 0, 0, 9, 16, 4, 0, 0, 0, 0, 0, 9, 13, 4, 0, 0, 0, 0, 0, 9, 17, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 9, 18, 4, 0, 0, 0, 0, 0, 9, 19, 4, 0, 0, 0, 0, 0, 10, 0, 4, 6, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0, 10, 2, 4, 0, 0, 0, 0, 0, 9, 19, 4, 0, 0, 0, 0, 0, 10, 3, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 7, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 7, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 22, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 10, 8, 4, 0, 0, 0, 0, 0, 10, 9, 4, 0, 0, 0, 0, 0, 10, 10, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 10, 11, 4, 0, 0, 0, 0, 0, 10, 12, 4, 0, 0, 0, 0, 0, 10, 13, 4, 0, 0, 0, 0, 0, 10, 14, 4, 0, 0, 0, 0, 0, 10, 15, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 17, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 1, 18, 4, 0, 0, 0, 0, 0, 1, 19, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 10, 16, 4, 0, 0, 0, 0, 0, 4, 5, 4, 0, 0, 0, 0, 0, 10, 17, 4, 0, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 18, 4, 0, 0, 0, 0, 0, 10, 12, 4, 0, 0, 0, 0, 0, 10, 19, 4, 0, 0, 0, 0, 0, 10, 13, 4, 0, 0, 0, 0, 0, 11, 0, 4, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 0, 0, 0, 11, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 4, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 1, 14, 4, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 1, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 10, 4, 0, 0, 0, 0, 0, 2, 11, 4, 0, 0, 0, 0, 0, 2, 12, 4, 0, 0, 0, 0, 0, 2, 13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 13, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 11, 2, 4, 0, 0, 0, 0, 0, 11, 3, 4, 0, 0, 0, 0, 0, 5, 1, 4, 0, 0, 0, 0, 0, 11, 4, 4, 0, 0, 0, 0, 0, 11, 5, 4, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 6, 4, 0, 0, 0, 0, 0, 11, 7, 4, 0, 0, 0, 0, 0, 11, 8, 4, 0, 0, 0, 0, 0, 11, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 4, 0, 0, 0, 0, 0, 10, 19, 4, 0, 0, 0, 0, 0, 11, 11, 4, 0, 0, 0, 0, 0, 11, 12, 4, 0, 0, 0, 0, 0, 11, 13, 4, 0, 0, 0, 0, 0, 11, 14, 4, 0, 0, 0, 0, 0, 11, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 1, 13, 4, 0, 0, 0, 0, 0, 11, 16, 4, 0, 0, 0, 0, 0, 11, 17, 4, 0, 0, 0, 0, 0, 11, 18, 4, 0, 0, 0, 0, 0, 11, 19, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 4, 0, 0, 0, 0, 0, 3, 5, 4, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 9, 4, 0, 0, 0, 0, 0, 1, 10, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 0, 0, 0, 0, 0, 11, 3, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 5, 1, 4, 0, 0, 0, 0, 0, 5, 2, 4, 0, 0, 0, 0, 0, 12, 1, 4, 0, 0, 0, 0, 0, 12, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 11, 10, 4, 0, 0, 0, 0, 0, 12, 3, 4, 0, 0, 0, 0, 0, 12, 4, 4, 0, 0, 0, 0, 0, 11, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 4, 0, 0, 0, 0, 0, 11, 11, 4, 0, 0, 0, 0, 0, 12, 5, 4, 0, 0, 0, 0, 0, 12, 6, 4, 0, 0, 0, 0, 0, 12, 7, 4, 0, 0, 0, 0, 0, 11, 13, 4, 0, 0, 0, 0, 0, 11, 15, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 17, 4, 0, 0, 0, 0, 0, 11, 16, 4, 0, 0, 0, 0, 0, 12, 8, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 12, 10, 4, 0, 0, 0, 0, 0, 11, 18, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 0, 0, 0, 2, 4, 4, 0, 0, 0, 0, 0, 2, 5, 4, 8, 0, 0, 0, 0, 0, 11, 0, 8, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 12, 11, 4, 0, 0, 0, 0, 0, 12, 12, 4, 0, 0, 0, 0, 0, 12, 13, 4, 0, 0, 0, 0, 0, 12, 14, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 15, 4, 0, 0, 0, 0, 0, 12, 16, 4, 0, 0, 0, 0, 0, 12, 17, 4, 0, 0, 0, 0, 0, 12, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 19, 4, 0, 0, 0, 0, 0, 12, 5, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 12, 6, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 12, 7, 4, 0, 0, 0, 0, 0, 13, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 13, 1, 4, 0, 0, 0, 0, 0, 12, 8, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 3, 14, 4, 0, 0, 0, 0, 0, 12, 10, 4, 0, 0, 0, 0, 0, 13, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 2, 19, 4, 0, 0, 0, 0, 0, 3, 0, 4, 8, 0, 0, 0, 0, 0, 11, 0, 8, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 12, 11, 4, 0, 0, 0, 0, 0, 13, 3, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 13, 5, 4, 0, 0, 0, 0, 0, 12, 13, 4, 0, 0, 0, 0, 0, 1, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 4, 0, 0, 0, 0, 0, 13, 7, 4, 0, 0, 0, 0, 0, 13, 7, 4, 0, 0, 0, 0, 0, 13, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 9, 4, 0, 0, 0, 0, 0, 13, 10, 4, 0, 0, 0, 0, 0, 13, 11, 4, 0, 0, 0, 0, 0, 13, 12, 4, 0, 0, 0, 0, 0, 13, 13, 4, 0, 0, 0, 0, 0, 13, 10, 4, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 13, 15, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 12, 9, 4, 0, 0, 0, 0, 0, 13, 16, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 0, 0, 0, 0, 0, 13, 3, 4, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 3, 17, 4, 0, 0, 0, 0, 0, 13, 5, 4, 0, 0, 0, 0, 0, 13, 18, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 11, 4, 0, 0, 0, 0, 0, 3, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 13, 19, 4, 0, 0, 0, 0, 0, 14, 0, 4, 0, 0, 0, 0, 0, 14, 1, 4, 6, 0, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 14, 3, 4, 0, 0, 0, 0, 0, 14, 0, 4, 0, 0, 0, 0, 0, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 5, 4, 0, 0, 0, 0, 0, 14, 6, 4, 0, 0, 0, 0, 0, 14, 6, 4, 0, 0, 0, 0, 0, 14, 6, 4, 0, 0, 0, 0, 0, 14, 6, 4, 0, 0, 0, 0, 0, 14, 6, 4, 0, 0, 0, 0, 0, 14, 7, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 8, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 13, 4, 4, 0, 0, 0, 0, 0, 14, 9, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 19, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 6, 6, 4, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 6, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 10, 4, 0, 0, 0, 0, 0, 14, 11, 4, 0, 0, 0, 0, 0, 14, 12, 4, 0, 0, 0, 0, 0, 14, 13, 4, 0, 0, 0, 0, 0, 14, 14, 4, 0, 0, 0, 0, 0, 14, 11, 4, 0, 0, 0, 0, 0, 14, 15, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 16, 4, 0, 0, 0, 0, 0, 14, 17, 4, 0, 0, 0, 0, 0, 14, 17, 4, 0, 0, 0, 0, 0, 14, 17, 4, 0, 0, 0, 0, 0, 14, 17, 4, 0, 0, 0, 0, 0, 14, 17, 4, 0, 0, 0, 0, 0, 14, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 1, 4, 0, 0, 0, 0, 0, 7, 2, 4, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 0, 0, 7, 4, 0, 0, 0, 0, 0, 0, 7, 5, 0, 0, 0, 0, 0, 0, 7, 6, 4, 0, 0, 0, 0, 0, 7, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 19, 4, 0, 0, 0, 0, 0, 15, 0, 4, 0, 0, 0, 0, 0, 15, 1, 4, 6, 0, 0, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 15, 3, 4, 0, 0, 0, 0, 0, 15, 0, 4, 0, 0, 0, 0, 0, 15, 4, 4, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 5, 4, 0, 0, 0, 0, 0, 15, 6, 4, 0, 0, 0, 0, 0, 15, 7, 4, 0, 0, 0, 0, 0, 15, 8, 4, 0, 0, 0, 0, 0, 15, 9, 4, 0, 0, 0, 0, 0, 15, 6, 4, 0, 0, 0, 0, 0, 15, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 11, 4, 0, 0, 0, 0, 0, 15, 12, 4, 0, 0, 0, 0, 0, 15, 13, 4, 6, 0, 0, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 15, 14, 4, 0, 0, 0, 0, 0, 15, 12, 4, 0, 0, 0, 0, 0, 15, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 21, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 7, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 13, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 7, 18, 0, 7, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0]; } }//package
Section 52
//Menu (Menu) package { import flash.events.*; import greenpixel.game.*; import greenpixel.sound.*; import flash.net.*; public class Menu extends GameLayer { private var theGame:Main; private var menuClip:MainMenuClip; public function Menu(_arg1:Main){ super(_arg1); theGame = _arg1; menuClip = new MainMenuClip(); menuClip.btn_start.addEventListener(MouseEvent.CLICK, startGame); menuClip.twitterButton.addEventListener(MouseEvent.CLICK, gotoTwitter); menuClip.greenpixelButton.addEventListener(MouseEvent.CLICK, gotoGreenPixel); menuClip.soundButton.gotoAndStop(0); menuClip.soundButton.buttonMode = true; menuClip.soundButton.addEventListener(MouseEvent.CLICK, toggleSound); addChild(menuClip); menuClip.stop(); } public function gotoGreenPixel(_arg1:Event){ var _local2:URLRequest; _local2 = new URLRequest("http://www.greenpixel.ca/"); navigateToURL(_local2, "_blank"); } override public function init():void{ SoundManager.instance.playMusic(Main.MENU_THEME, false); menuClip.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); fadeIn(); } public function toggleSound(_arg1:MouseEvent):void{ SoundManager.instance.toggleMute(); } override public function draw():void{ } private function startGame(_arg1:MouseEvent):void{ theGame.switchLayerIntro(); } public function gotoTwitter(_arg1:Event){ var _local2:URLRequest; _local2 = new URLRequest("https://twitter.com/#!/greenpixeldev"); navigateToURL(_local2, "_blank"); } override public function update():void{ menuClip.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); } } }//package
Section 53
//MenuTheme (MenuTheme) package { import flash.media.*; public dynamic class MenuTheme extends Sound { } }//package
Section 54
//MessageBoxes (MessageBoxes) package { import flash.display.*; public dynamic class MessageBoxes extends BitmapData { public function MessageBoxes(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 55
//Node (Node) package { public class Node { public var parent:int; public var value:int; public var gCost:int; public var hCost:int; public var id:int; public function Node(_arg1){ this.id = _arg1; parent = -1; gCost = 0; hCost = 0; } public function copy(_arg1:Node){ id = _arg1.id; parent = _arg1.parent; gCost = _arg1.gCost; hCost = _arg1.hCost; value = _arg1.value; } public function setValue(_arg1:int, _arg2:int){ gCost = _arg1; hCost = _arg2; value = (gCost + hCost); } } }//package
Section 56
//NPC (NPC) package { import flash.geom.*; import greenpixel.game.world.objects.*; import greenpixel.math.*; public class NPC extends Character { public var hitCooldown:int; private var path:Array; public var WALK_SPEED:int;// = 1 public var STUN_COOLDOWN:int;// = 30 public var RUN_SPEED:Number;// = 4.5 public var cooldown:int; public var IDLE_COOLDOWN:int;// = 0 public var attackPower:int; private var pathIndex:int; public var HIT_COOLDOWN:int;// = 8 public var npcType:int; public var SEARCH_SPEED:int;// = 3 private var HEALTH_MAX:int;// = 75 public static var STATE_SWING_BAT:int = 5; public static var STATE_IDLE:int = 3; public static var STATE_DEAD:int = 4; public static var HEARING_RADIUS:int = 250; public static var STATE_ATTACK:int = 2; public static var STATE_WALK:int = 0; public static var NPC_TYPES:int = 5; public static var STATE_SEARCH:int = 1; public function NPC(){ WALK_SPEED = 1; SEARCH_SPEED = 3; RUN_SPEED = 4.5; HIT_COOLDOWN = 8; STUN_COOLDOWN = 30; IDLE_COOLDOWN = 0; HEALTH_MAX = 75; super(); npcType = int((Math.random() * NPC_TYPES)); health = HEALTH_MAX; hitBox = new Rectangle(0, 0, 32, 32); isAlive = true; setAnim((npcType + AnimData.SPRITE_NPC01), AnimData.SPRITE_NPC01_WALK_FRONT); setPos(64, 64); speed = WALK_SPEED; state = STATE_IDLE; heading = new Vector2D(0, 0); dest = new Vector2D(0, 0); cooldown = IDLE_COOLDOWN; attackPower = 1; } public function setDest(_arg1:int, _arg2:int):void{ if (_arg1 < x){ direction = Entity.DIR_LEFT; } else { if (_arg1 > x){ direction = Entity.DIR_RIGHT; }; }; if (_arg2 < y){ direction = Entity.DIR_UP; } else { if (_arg2 > y){ direction = Entity.DIR_DOWN; }; }; dest.x = _arg1; dest.y = _arg2; heading = new Vector2D((dest.x - x), (dest.y - y)); heading.normalize(); } public function nextDest():void{ setDest(path[pathIndex].x, path[pathIndex].y); pathIndex++; } public function attack():void{ switch (direction){ case Entity.DIR_UP: resetAnim(AnimData.SPRITE_NPC01_MELEE_BACK); break; case Entity.DIR_RIGHT: resetAnim(AnimData.SPRITE_NPC01_MELEE_RIGHT); break; case Entity.DIR_DOWN: resetAnim(AnimData.SPRITE_NPC01_MELEE_FRONT); break; case Entity.DIR_LEFT: resetAnim(AnimData.SPRITE_NPC01_MELEE_LEFT); break; }; } public function setState(_arg1:int){ state = _arg1; switch (state){ case STATE_WALK: speed = WALK_SPEED; break; case STATE_SEARCH: speed = SEARCH_SPEED; break; case STATE_ATTACK: speed = RUN_SPEED; break; case STATE_IDLE: speed = 0; cooldown = IDLE_COOLDOWN; break; case STATE_DEAD: speed = 0; break; case STATE_SWING_BAT: speed = 0; break; }; } public function kill():void{ health = 0; isAlive = false; setAnim((npcType + AnimData.SPRITE_NPC01), AnimData.SPRITE_NPC01_DEAD_FRONT); } public function hit():void{ hitCooldown = HIT_COOLDOWN; if (state == STATE_WALK){ setState(NPC.STATE_SEARCH); }; } public function stun():void{ hitCooldown = STUN_COOLDOWN; if (state == STATE_WALK){ setState(NPC.STATE_SEARCH); }; } public function setPath(_arg1:Array){ path = _arg1; pathIndex = 0; if (hasNextDest()){ nextDest(); }; } public function hasNextDest():Boolean{ return (((!((path == null))) && ((pathIndex <= (path.length - 1))))); } } }//package
Section 57
//NPCImage0 (NPCImage0) package { import flash.display.*; public dynamic class NPCImage0 extends BitmapData { public function NPCImage0(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 58
//NPCImage1 (NPCImage1) package { import flash.display.*; public dynamic class NPCImage1 extends BitmapData { public function NPCImage1(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 59
//NPCImage2 (NPCImage2) package { import flash.display.*; public dynamic class NPCImage2 extends BitmapData { public function NPCImage2(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 60
//NPCImage3 (NPCImage3) package { import flash.display.*; public dynamic class NPCImage3 extends BitmapData { public function NPCImage3(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 61
//NPCImage4 (NPCImage4) package { import flash.display.*; public dynamic class NPCImage4 extends BitmapData { public function NPCImage4(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 62
//NPCImage5 (NPCImage5) package { import flash.display.*; public dynamic class NPCImage5 extends BitmapData { public function NPCImage5(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 63
//ObjectImages (ObjectImages) package { import flash.display.*; public dynamic class ObjectImages extends BitmapData { public function ObjectImages(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 64
//OutroClip (OutroClip) package { import flash.display.*; public dynamic class OutroClip extends MovieClip { public var soundButton:SoundButton; public function OutroClip(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8, 8, frame9, 9, frame10, 10, frame11, 374, frame375, 375, frame376, 376, frame377, 377, frame378, 378, frame379, 379, frame380, 380, frame381, 381, frame382, 382, frame383, 383, frame384, 384, frame385, 385, frame386, 386, frame387, 387, frame388, 388, frame389, 389, frame390, 390, frame391, 391, frame392, 392, frame393, 449, frame450, 450, frame451, 451, frame452, 452, frame453, 453, frame454, 454, frame455, 455, frame456, 456, frame457, 457, frame458, 582, frame583, 583, frame584, 584, frame585, 585, frame586, 586, frame587); } function frame393(){ stop(); } function frame385(){ stop(); } function frame386(){ stop(); } function frame391(){ stop(); } function frame451(){ stop(); } function frame452(){ stop(); } function frame453(){ stop(); } function frame456(){ stop(); } function frame10(){ stop(); } function frame457(){ stop(); } function frame455(){ stop(); } function frame583(){ stop(); } function frame3(){ stop(); } function frame6(){ stop(); } function frame7(){ stop(); } function frame1(){ stop(); } function frame586(){ stop(); } function frame4(){ stop(); } function frame5(){ stop(); } function frame584(){ stop(); } function frame454(){ stop(); } function frame8(){ stop(); } function frame9(){ stop(); } function frame2(){ stop(); } function frame458(){ stop(); } function frame11(){ stop(); } function frame587(){ stop(); } function frame450(){ stop(); } function frame585(){ stop(); } function frame376(){ stop(); } function frame377(){ stop(); } function frame378(){ stop(); } function frame379(){ stop(); } function frame375(){ stop(); } function frame380(){ stop(); } function frame382(){ stop(); } function frame383(){ stop(); } function frame387(){ stop(); } function frame381(){ stop(); } function frame384(){ stop(); } function frame388(){ stop(); } function frame389(){ stop(); } function frame390(){ stop(); } function frame392(){ stop(); } } }//package
Section 65
//OutroCutscene (OutroCutscene) package { import flash.events.*; import greenpixel.game.*; import greenpixel.sound.*; public class OutroCutscene extends GameLayer { private var theGame:Main; private var cutscene:OutroClip; public function OutroCutscene(_arg1:Main){ super(_arg1); theGame = _arg1; cutscene = new OutroClip(); cutscene.soundButton.gotoAndStop(0); cutscene.soundButton.buttonMode = true; cutscene.soundButton.addEventListener(MouseEvent.CLICK, toggleSound); addChild(cutscene); cutscene.stop(); } override public function init():void{ stage.focus = stage; SoundManager.instance.playMusic(Main.LAIR_THEME, true); cutscene.gotoAndStop(0); cutscene.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); fadeIn(); } override public function draw():void{ } public function toggleSound(_arg1:MouseEvent):void{ SoundManager.instance.toggleMute(); } override public function update():void{ if (cutscene.currentFrame == cutscene.totalFrames){ stage.focus = stage; theGame.switchLayerMenu(); }; if (isAnyKeyPressed()){ cutscene.play(); }; cutscene.soundButton.gotoAndStop((SoundManager.instance.isMute) ? 2 : 1); } } }//package
Section 66
//PathFinder (PathFinder) package { import flash.geom.*; import greenpixel.game.tilemap.*; public class PathFinder { public static function getPathAStar(_arg1:Array, _arg2:int, _arg3:int, _arg4:int, _arg5:int):Array{ var _local6:int; var _local7:int; var _local8:int; var _local9:BinaryHeap; var _local10:Array; var _local11:Node; var _local12:Node; var _local13:Array; var _local14:Array; var _local15:Node; var _local16:int; var _local17:int; var _local18:Node; var _local19:Node; var _local20:int; _local6 = 0; _local7 = 0; _local8 = 0; _local9 = new BinaryHeap((_arg1[0].length * _arg1.length)); _local10 = new Array(); _local11 = new Node(((_arg2 << 16) | _arg3)); _local11.setValue(0, (((10 + Math.abs((_arg2 - _arg4))) + 10) + Math.abs((_arg3 - _arg5)))); _local9.add(_local11); while (_local9.getSize() > 0) { _local15 = _local9.getTopNode(); _local16 = (_local15.id >> 16); _local17 = (_local15.id & 0xFFFF); _local10.push(_local15); if (((((_local15.id >> 16) == _arg4)) && (((_local15.id & 0xFFFF) == _arg5)))){ break; }; _local6 = -1; while (_local6 <= 1) { _local7 = -1; while (_local7 <= 1) { if ((((((((((((((_local6 == 0)) && ((_local7 == 0)))) || (((!((_local6 == 0))) && (!((_local7 == 0))))))) || (((_local16 + _local7) < 0)))) || (((_local17 + _local6) < 0)))) || (((_local16 + _local7) >= _arg1[0].length)))) || (((_local17 + _local6) >= _arg1.length)))){ } else { if (Tile.hasFlag(_arg1[(_local17 + _local6)][(_local16 + _local7)], Tile.WALL)){ } else { _local18 = new Node((((_local16 + _local7) << 16) | (_local17 + _local6))); if (hasValue(_local10, _local18)){ } else { _local19 = _local9.getNode(_local18.id); _local20 = (10 + _local15.gCost); if (_local19 != null){ if (_local20 < _local19.gCost){ _local19.setValue(_local20, (((10 + Math.abs(((_local16 + _local7) - _arg4))) + 10) + Math.abs(((_local17 + _local6) - _arg5)))); _local19.parent = ((_local16 << 16) | _local17); _local9.replaceNode(_local19); }; } else { _local18.setValue(_local20, (((10 + Math.abs(((_local16 + _local7) - _arg4))) + 10) + Math.abs(((_local17 + _local6) - _arg5)))); _local18.parent = ((_local16 << 16) | _local17); _local9.add(_local18); }; }; }; }; _local7++; }; _local6++; }; }; _local12 = _local10.pop(); _local13 = new Array(); while (((!(((_local12.id >> 16) == _arg2))) || (!(((_local12.id & 0xFFFF) == _arg3))))) { _local13.push(_local12.id); _local6 = 0; while (_local6 < _local10.length) { if (_local10[_local6].id == _local12.parent){ _local12 = _local10[_local6]; break; }; _local6++; }; }; _local13.reverse(); _local14 = new Array(); _local6 = 0; while (_local6 < _local13.length) { _local14.push(new Point((32 * (_local13[_local6] >> 16)), (32 * (_local13[_local6] & 0xFFFF)))); _local6++; }; return (_local14); } private static function hasValue(_arg1:Array, _arg2:Node):Boolean{ var _local3:int; var _local4:Node; _local3 = 0; while (_local3 < _arg1.length) { _local4 = _arg1[_local3]; if (_local4.id == _arg2.id){ return (true); }; _local3++; }; return (false); } } }//package
Section 67
//Player (Player) package { import flash.geom.*; import greenpixel.game.world.objects.*; public class Player extends Character { public var stunCooldown:int; public var attackPower:int; public var attackCooldown:int; public var damageCooldown:int; public static var ATTACK_POWER_INIT:int = 25; public static var ANIM_IDLE:int = 0; public static var MAX_HEALTH:int = 3; public static var STUN_COOLDOWN:int = 120; public static var ANIM_SHOOT:int = 3; public static var STATE_ATTACK:int = 1; public static var COOLDOWN_INIT:int = 0; public static var ANIM_MELEE:int = 2; public static var SPEED:Number = 5.5; public static var ATTACK_WIDTH:int = 32; public static var STATE_IDLE:int = 0; public static var ANIM_WALK:int = 1; public static var STATE_SHOOT:int = 2; public static var DAMAGE_COOLDOWN:int = 30; public static var ATTACK_HEIGHT:int = 32; public function Player(){ attackCooldown = 0; attackPower = ATTACK_POWER_INIT; hitBox = new Rectangle(0, 0, 32, 32); speed = SPEED; health = MAX_HEALTH; damageCooldown = 0; stunCooldown = 0; } public function shoot():void{ stunCooldown = STUN_COOLDOWN; } public function hit(_arg1:int):void{ damageCooldown = DAMAGE_COOLDOWN; health = (health - _arg1); } public function resetCooldown():void{ attackCooldown = COOLDOWN_INIT; } } }//package
Section 68
//PlayerImage (PlayerImage) package { import flash.display.*; public dynamic class PlayerImage extends BitmapData { public function PlayerImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 69
//ShortcutIconsImage (ShortcutIconsImage) package { import flash.display.*; public dynamic class ShortcutIconsImage extends BitmapData { public function ShortcutIconsImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 70
//ShortcutImage (ShortcutImage) package { import flash.display.*; public dynamic class ShortcutImage extends BitmapData { public function ShortcutImage(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 71
//SoundButton (SoundButton) package { import flash.display.*; public dynamic class SoundButton extends MovieClip { } }//package
Section 72
//Spawn (Spawn) package { import flash.geom.*; import greenpixel.game.world.objects.*; public class Spawn extends Character { public var spawnType:int; public static var SPAWN_TYPE_DUCTTAPE:int = 5; public static var SPAWN_TYPE_METAL:int = 2; public static var SPAWN_TYPE_STEAK:int = 7; public static var SPAWN_TYPE_WOOD:int = 0; public static var SPAWN_TYPE_CIRCUIT:int = 3; public static var SPAWN_TYPE_ISOTOPE:int = 1; public static var SPAWN_TYPE_COIL:int = 4; public static var SPAWN_TYPE_APPLE:int = 6; public function Spawn(){ isAlive = false; hitBox = new Rectangle(0, 0, 32, 32); } public function init(_arg1:int, _arg2:int, _arg3:int):void{ x = _arg1; y = _arg2; spawnType = _arg3; isAlive = true; switch (_arg3){ case SPAWN_TYPE_WOOD: setAnim(AnimData.ITEMS, AnimData.ITEMS_WOOD_IDLE); break; case SPAWN_TYPE_ISOTOPE: setAnim(AnimData.ITEMS, AnimData.ITEMS_ISOTOPE_IDLE); break; case SPAWN_TYPE_METAL: setAnim(AnimData.ITEMS, AnimData.ITEMS_METAL_IDLE); break; case SPAWN_TYPE_CIRCUIT: setAnim(AnimData.ITEMS, AnimData.ITEMS_CIRCUIT_IDLE); break; case SPAWN_TYPE_COIL: setAnim(AnimData.ITEMS, AnimData.ITEMS_COIL_IDLE); break; case SPAWN_TYPE_DUCTTAPE: setAnim(AnimData.ITEMS, AnimData.ITEMS_DUCTTAPE_IDLE); break; case SPAWN_TYPE_APPLE: setAnim(AnimData.ITEMS, AnimData.ITEMS_APPLE_IDLE); break; case SPAWN_TYPE_STEAK: setAnim(AnimData.ITEMS, AnimData.ITEMS_STEAK_IDLE); break; }; } } }//package
Section 73
//Splash (Splash) package { import greenpixel.game.*; public class Splash extends GameLayer { public function Splash(_arg1:Main){ super(_arg1); } override public function init():void{ fadeIn(); } override public function draw():void{ } override public function update():void{ } } }//package
Section 74
//StunBullet (StunBullet) package { import flash.geom.*; import greenpixel.game.world.objects.*; import greenpixel.math.*; public class StunBullet extends Character { private var SPEED:int;// = 10 public function StunBullet(){ SPEED = 10; super(); hitBox = new Rectangle(0, 0, 32, 32); speed = SPEED; isAlive = false; heading = new Vector2D(0, 0); } public function init(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{ isAlive = true; x = _arg1; y = _arg2; heading.x = _arg3; heading.y = _arg4; } } }//package
Section 75
//SwingSound (SwingSound) package { import flash.media.*; public dynamic class SwingSound extends Sound { } }//package
Section 76
//TownTiles (TownTiles) package { import flash.display.*; public dynamic class TownTiles extends BitmapData { public function TownTiles(_arg1:Number, _arg2:Number){ super(_arg1, _arg2); } } }//package
Section 77
//WorldTheme (WorldTheme) package { import flash.media.*; public dynamic class WorldTheme extends Sound { } }//package

Library Items

Symbol 1 Font {GameFont}
Symbol 2 Sound {WorldTheme}
Symbol 3 Sound {MenuTheme}
Symbol 4 Sound {SwingSound}
Symbol 5 Sound {LaserSound}
Symbol 6 Sound {HitSound}
Symbol 7 Sound {LootSound}
Symbol 8 Sound {LairTheme}
Symbol 9 Bitmap {ShortcutImage}
Symbol 10 Bitmap {ShortcutIconsImage}
Symbol 11 Bitmap {MessageBoxes}
Symbol 12 Bitmap {LifeImage}
Symbol 13 Bitmap {InventoryImage}
Symbol 14 Bitmap {GameOverImage}
Symbol 15 Bitmap {TownTiles}
Symbol 16 Bitmap {ObjectImages}
Symbol 17 Bitmap {NPCImage5}
Symbol 18 Bitmap {NPCImage4}
Symbol 19 Bitmap {NPCImage3}
Symbol 20 Bitmap {NPCImage2}
Symbol 21 Bitmap {NPCImage1}
Symbol 22 Bitmap {NPCImage0}
Symbol 23 Bitmap {PlayerImage}
Symbol 24 Bitmap {ItemImages}
Symbol 25 Bitmap {HouseTiles}
Symbol 26 Bitmap {BlueJellyfish}
Symbol 27 Bitmap {CityTiles}
Symbol 28 BitmapUsed by:29
Symbol 29 GraphicUses:28Used by:51
Symbol 30 BitmapUsed by:31
Symbol 31 GraphicUses:30Used by:34
Symbol 32 BitmapUsed by:33
Symbol 33 GraphicUses:32Used by:34
Symbol 34 ButtonUses:31 33Used by:51
Symbol 35 BitmapUsed by:36
Symbol 36 GraphicUses:35Used by:39
Symbol 37 BitmapUsed by:38
Symbol 38 GraphicUses:37Used by:39
Symbol 39 ButtonUses:36 38Used by:51
Symbol 40 BitmapUsed by:41
Symbol 41 GraphicUses:40Used by:44
Symbol 42 BitmapUsed by:43
Symbol 43 GraphicUses:42Used by:44
Symbol 44 ButtonUses:41 43Used by:51
Symbol 45 BitmapUsed by:46
Symbol 46 GraphicUses:45Used by:50
Symbol 47 BitmapUsed by:48
Symbol 48 GraphicUses:47Used by:49
Symbol 49 MovieClipUses:48Used by:50
Symbol 50 MovieClip {SoundButton}Uses:46 49Used by:51 127 213
Symbol 51 MovieClip {MainMenuClip}Uses:29 34 39 44 50
Symbol 52 BitmapUsed by:53
Symbol 53 GraphicUses:52Used by:127 213
Symbol 54 BitmapUsed by:55
Symbol 55 GraphicUses:54Used by:127 213
Symbol 56 BitmapUsed by:57
Symbol 57 GraphicUses:56Used by:127 213
Symbol 58 FontUsed by:59 69 70 71 72 73 74 75 76 77 78 79 80 81 84 85 86 87 90 91 92 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 119 124 132 133 134 135 136 137 138 139 140 141 142 171 172 173 174 175 176 177 178 179 180 182 183 186 187 190 191 192 193 200 201 202 203 204 205 206 207 208 209 210 211 212
Symbol 59 TextUses:58Used by:127
Symbol 60 BitmapUsed by:61
Symbol 61 GraphicUses:60Used by:127
Symbol 62 BitmapUsed by:63
Symbol 63 GraphicUses:62Used by:66
Symbol 64 BitmapUsed by:65
Symbol 65 GraphicUses:64Used by:66
Symbol 66 ButtonUses:63 65Used by:127
Symbol 67 BitmapUsed by:68
Symbol 68 GraphicUses:67Used by:127 213
Symbol 69 TextUses:58Used by:127
Symbol 70 TextUses:58Used by:127
Symbol 71 TextUses:58Used by:127
Symbol 72 TextUses:58Used by:127
Symbol 73 TextUses:58Used by:127
Symbol 74 TextUses:58Used by:127
Symbol 75 TextUses:58Used by:127
Symbol 76 TextUses:58Used by:127
Symbol 77 TextUses:58Used by:127
Symbol 78 TextUses:58Used by:127
Symbol 79 TextUses:58Used by:127
Symbol 80 TextUses:58Used by:127
Symbol 81 TextUses:58Used by:127
Symbol 82 BitmapUsed by:83
Symbol 83 GraphicUses:82Used by:127 213
Symbol 84 TextUses:58Used by:127
Symbol 85 TextUses:58Used by:127
Symbol 86 TextUses:58Used by:127
Symbol 87 TextUses:58Used by:127
Symbol 88 BitmapUsed by:89
Symbol 89 GraphicUses:88Used by:127
Symbol 90 TextUses:58Used by:127
Symbol 91 TextUses:58Used by:127
Symbol 92 TextUses:58Used by:127
Symbol 93 BitmapUsed by:94
Symbol 94 GraphicUses:93Used by:127 213
Symbol 95 TextUses:58Used by:127
Symbol 96 TextUses:58Used by:127
Symbol 97 TextUses:58Used by:127
Symbol 98 TextUses:58Used by:127
Symbol 99 TextUses:58Used by:127
Symbol 100 TextUses:58Used by:127
Symbol 101 TextUses:58Used by:127
Symbol 102 TextUses:58Used by:127
Symbol 103 TextUses:58Used by:127
Symbol 104 TextUses:58Used by:127
Symbol 105 TextUses:58Used by:127
Symbol 106 TextUses:58Used by:127
Symbol 107 TextUses:58Used by:127
Symbol 108 TextUses:58Used by:127
Symbol 109 TextUses:58Used by:127
Symbol 110 TextUses:58Used by:127
Symbol 111 TextUses:58Used by:127
Symbol 112 TextUses:58Used by:127
Symbol 113 TextUses:58Used by:127
Symbol 114 TextUses:58Used by:127
Symbol 115 TextUses:58Used by:127
Symbol 116 TextUses:58Used by:127
Symbol 117 BitmapUsed by:118
Symbol 118 GraphicUses:117Used by:127
Symbol 119 TextUses:58Used by:127
Symbol 120 BitmapUsed by:121
Symbol 121 GraphicUses:120Used by:127
Symbol 122 BitmapUsed by:123
Symbol 123 GraphicUses:122Used by:127
Symbol 124 TextUses:58Used by:127
Symbol 125 GraphicUsed by:126
Symbol 126 MovieClipUses:125Used by:127 213
Symbol 127 MovieClip {IntroClip}Uses:53 55 57 59 61 66 50 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 89 90 91 92 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 119 121 123 124 126
Symbol 128 BitmapUsed by:129
Symbol 129 GraphicUses:128Used by:213
Symbol 130 BitmapUsed by:131
Symbol 131 GraphicUses:130Used by:213
Symbol 132 TextUses:58Used by:213
Symbol 133 TextUses:58Used by:213
Symbol 134 TextUses:58Used by:213
Symbol 135 TextUses:58Used by:213
Symbol 136 TextUses:58Used by:213
Symbol 137 TextUses:58Used by:213
Symbol 138 TextUses:58Used by:213
Symbol 139 TextUses:58Used by:213
Symbol 140 TextUses:58Used by:213
Symbol 141 TextUses:58Used by:213
Symbol 142 TextUses:58Used by:213
Symbol 143 BitmapUsed by:144
Symbol 144 GraphicUses:143Used by:213
Symbol 145 SoundUsed by:213
Symbol 146 BitmapUsed by:147
Symbol 147 GraphicUses:146Used by:213
Symbol 148 BitmapUsed by:149
Symbol 149 GraphicUses:148Used by:213
Symbol 150 BitmapUsed by:151
Symbol 151 GraphicUses:150Used by:213
Symbol 152 BitmapUsed by:153 160
Symbol 153 GraphicUses:152Used by:213
Symbol 154 SoundUsed by:213
Symbol 155 SoundUsed by:213
Symbol 156 BitmapUsed by:157 161
Symbol 157 GraphicUses:156Used by:213
Symbol 158 BitmapUsed by:159 162
Symbol 159 GraphicUses:158Used by:213
Symbol 160 GraphicUses:152Used by:213
Symbol 161 GraphicUses:156Used by:213
Symbol 162 GraphicUses:158Used by:213
Symbol 163 BitmapUsed by:164
Symbol 164 GraphicUses:163Used by:213
Symbol 165 SoundUsed by:213
Symbol 166 SoundUsed by:213
Symbol 167 BitmapUsed by:168
Symbol 168 GraphicUses:167Used by:213
Symbol 169 GraphicUsed by:170
Symbol 170 MovieClipUses:169Used by:213
Symbol 171 TextUses:58Used by:213
Symbol 172 TextUses:58Used by:213
Symbol 173 TextUses:58Used by:213
Symbol 174 TextUses:58Used by:213
Symbol 175 TextUses:58Used by:213
Symbol 176 TextUses:58Used by:213
Symbol 177 TextUses:58Used by:213
Symbol 178 TextUses:58Used by:213
Symbol 179 TextUses:58Used by:213
Symbol 180 TextUses:58Used by:213
Symbol 181 SoundUsed by:213
Symbol 182 TextUses:58Used by:213
Symbol 183 TextUses:58Used by:213
Symbol 184 BitmapUsed by:185
Symbol 185 GraphicUses:184Used by:213
Symbol 186 TextUses:58Used by:213
Symbol 187 TextUses:58Used by:213
Symbol 188 BitmapUsed by:189
Symbol 189 GraphicUses:188Used by:213
Symbol 190 TextUses:58Used by:213
Symbol 191 TextUses:58Used by:213
Symbol 192 TextUses:58Used by:213
Symbol 193 TextUses:58Used by:213
Symbol 194 BitmapUsed by:195
Symbol 195 GraphicUses:194Used by:213
Symbol 196 BitmapUsed by:197
Symbol 197 GraphicUses:196Used by:213
Symbol 198 FontUsed by:199
Symbol 199 TextUses:198Used by:213
Symbol 200 TextUses:58Used by:213
Symbol 201 TextUses:58Used by:213
Symbol 202 TextUses:58Used by:213
Symbol 203 TextUses:58Used by:213
Symbol 204 TextUses:58Used by:213
Symbol 205 TextUses:58Used by:213
Symbol 206 TextUses:58Used by:213
Symbol 207 TextUses:58Used by:213
Symbol 208 TextUses:58Used by:213
Symbol 209 TextUses:58Used by:213
Symbol 210 TextUses:58Used by:213
Symbol 211 TextUses:58Used by:213
Symbol 212 TextUses:58Used by:213
Symbol 213 MovieClip {OutroClip}Uses:129 131 132 50 133 134 135 136 137 138 139 140 141 142 144 145 147 149 151 153 154 155 157 159 160 161 162 164 165 166 168 170 53 55 57 171 68 172 173 174 175 176 177 178 179 94 180 181 182 183 185 186 187 189 190 191 192 193 195 197 199 200 201 202 83 203 204 205 206 207 126 208 209 210 211 212

Instance Names

"btn_start"Symbol 51 MovieClip {MainMenuClip} Frame 1Symbol 34 Button
"greenpixelButton"Symbol 51 MovieClip {MainMenuClip} Frame 1Symbol 39 Button
"twitterButton"Symbol 51 MovieClip {MainMenuClip} Frame 1Symbol 44 Button
"soundButton"Symbol 51 MovieClip {MainMenuClip} Frame 1Symbol 50 MovieClip {SoundButton}
"btn_skip"Symbol 127 MovieClip {IntroClip} Frame 1Symbol 66 Button
"soundButton"Symbol 127 MovieClip {IntroClip} Frame 1Symbol 50 MovieClip {SoundButton}
"soundButton"Symbol 213 MovieClip {OutroClip} Frame 1Symbol 50 MovieClip {SoundButton}

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.




http://swfchan.com/27/131768/info.shtml
Created: 21/2 -2019 01:03:51 Last modified: 21/2 -2019 01:03:51 Server time: 14/05 -2024 00:36:06