'**********************************************************************************************
' FzxNGN written by justsomeguy
' Physics code ported from RandyGaul's Impulse Engine
' https://github.com/RandyGaul/ImpulseEngine
' http://RandyGaul.net
'**********************************************************************************************
'/*
' Copyright (c) 2013 Randy Gaul http://RandyGaul.net
' This software is provided 'as-is', without any express or implied
' warranty. In no event will the authors be held liable for any damages
' arising from the use of this software.
' Permission is granted to anyone to use this software for any purpose,
' including commercial applications, and to alter it and redistribute it
' freely, subject to the following restrictions:
' 1. The origin of this software must not be misrepresented; you must not
' claim that you wrote the original software. If you use this software
' in a product, an acknowledgment in the product documentation would be
' appreciated but is not required.
' 2. Altered source versions must be plainly marked as such, and must not be
' misrepresented as being the original software.
' 3. This notice may not be removed or altered from any source distribution.
'
' Port to QB64 by justsomeguy
'*/
'
'**********************************************************************************************
' Setup Types and Variables
'**********************************************************************************************
TYPE tTRIANGLE
' Not used
ty
AS INTEGER ' cSHAPE_CIRCLE = 1, cSHAPE_POLYGON = 2 radius
AS _FLOAT ' Only necessary for circle shapes u
AS tMATRIX2d
' Only neceassary for polygons flipTexture
AS INTEGER 'flag for flipping texture depending on direction
TYPE tPOLY
'list of vertices for all objects in simulation
TYPE tPOLYATTRIB
'keep track of polys in monlithic list of vertices start
AS INTEGER ' starting vertex of the polygon count
AS INTEGER ' number of vertices in polygon
localAnchor1
AS tVECTOR2d
localAnchor2
AS tVECTOR2d
terrainPosition
AS tVECTOR2d
wheelOneOffset
AS tVECTOR2d
wheelTwoOffset
AS tVECTOR2d
auxOneOffset
AS tVECTOR2d
CONST cMAXNUMOFTRIANGLES
= 100 CONST cMAXNUMBEROFOBJECTS
= 1000 ' Max number of objects at one time CONST cMAXNUMBEROFPOLYGONS
= 10000 ' Max number of total vertices included in all objects CONST cMAXNUMBEROFJOINTS
= 100 CONST cMAXNUMBEROFHITS
= 1000 CONST cEPSILON_SQ
= cEPSILON
* cEPSILON
CONST cBIAS_RELATIVE
= 0.95 CONST cBIAS_ABSOLUTE
= 0.01 CONST cPENETRATION_ALLOWANCE
= 0.05 CONST cPENETRATION_CORRECTION
= 0.4 ' misspelled in original code CONST cPARAMETER_POSITION
= 1 CONST cPARAMETER_VELOCITY
= 2 CONST cPARAMETER_FORCE
= 3 CONST cPARAMETER_ANGULARVELOCITY
= 4 CONST cPARAMETER_TORQUE
= 5 CONST cPARAMETER_ORIENT
= 6 CONST cPARAMETER_STATICFRICTION
= 7 CONST cPARAMETER_DYNAMICFRICTION
= 8 CONST cPARAMETER_COLOR
= 9 CONST cPARAMETER_VISIBLE
= 10 CONST cPARAMETER_STATIC
= 11 CONST cPARAMETER_TEXTURE
= 12 CONST cPARAMETER_FLIPTEXTURE
= 13 CONST cRENDER_COLLISIONS
= 0 CONST cPLAYER_FORCE
= 2000000
DIM SHARED sNUMBEROFJOINTS
AS INTEGER: sNUMBEROFJOINTS
= 3 ' if zero then no joints at all
DIM poly
(cMAXNUMBEROFPOLYGONS
) AS tPOLY
DIM body
(cMAXNUMBEROFOBJECTS
) AS tBODY
DIM joints
(cMAXNUMBEROFJOINTS
) AS tJOINT
DIM hits
(cMAXNUMBEROFHITS
) AS tHIT
DIM veh
(sNUMBEROFVEHICLES
) AS tVEHICLE
CONST cSCENE_RAMP_10
= 13 CONST cSCENE_LOOPRAMP_1
= 14 CONST cSCENE_LOOPRAMP_2
= 15 CONST cSCENE_LOOPSEGMENTS
= 16 CONST cSCENE_NUMBEROFLOOPSEGMENTS
= 20 CONST cSCENE_TERRAIN
= cSCENE_LOOPSEGMENTS
+ cSCENE_NUMBEROFLOOPSEGMENTS
CONST cLOOP_CENTER_X
= 53500 CONST cLOOP_CENTER_Y
= 225 CONST cLOOP_RAMPHEIGHT
= 400 CONST cLOOP_RAMPWIDTH
= 500 CONST cLOOP_RAMPTHICKNESS
= 200
'**********************************************************************************************
_TITLE "FzxNGN" ' vowels are obsolete
camera.zoom = .5
'RANDOMIZE TIMER
CALL buildSimpleScene
(poly
(), body
(), joints
(), veh
()) '**********************************************************************************************
LOCATE 1, 45:
PRINT "FPS:";
(fpsLast
);
" x:";
INT(body
(cSCENE_USER
).position.x
);
" y:";
INT(body
(cSCENE_USER
).position.y
);
" vel:";
INT(ABS(body
(cSCENE_USER
).velocity.x
))
CALL animateScene
(poly
(), body
(), hits
(), camera
, veh
()) CALL impulseStep
(poly
(), body
(), joints
(), cDT
, cITERATIONS
, hits
()) CALL renderBodies
(poly
(), body
(), joints
(), hits
(), camera
)
'**********************************************************************************************
' End of Main loop
'**********************************************************************************************
'**********************************************************************************************
' Scene Creation and Handling Ahead
'**********************************************************************************************
SUB animateScene
(p
() AS tPOLY
, body
() AS tBODY
, hits
() AS tHIT
, camera
AS tCAMERA
, veh
() AS tVEHICLE
) ' Keep the player's head upright
CALL setBody
(body
(), cPARAMETER_ORIENT
, cSCENE_HEAD
, body
(cSCENE_USER
).orient
, 0)
'Comment/Uncomment the next line to keep the vehicle upright (It has weird side effects)
'CALL setBody(body(), cPARAMETER_ORIENT, cSCENE_USER, 0, 0)
'camera follows the player
CALL vectorSet
(camera.position
, body
(cSCENE_USER
).position.x
- ((_WIDTH / 2) * (1 / camera.zoom
)), body
(cSCENE_USER
).position.y
- ((_HEIGHT / 2) * (1 / camera.zoom
)))
IF isBodyTouching
(hits
(), cSCENE_WHEEL_1
) OR isBodyTouching
(hits
(), cSCENE_WHEEL_2
) THEN ' makes sure your touching something when you jump CALL vectorSet
(body
(cSCENE_USER
).force
, 0, -cPLAYER_FORCE
)
body(cSCENE_WHEEL_1).torque = -8000000
body(cSCENE_WHEEL_2).torque = -8000000
body(cSCENE_WHEEL_1).torque = 8000000
body(cSCENE_WHEEL_2).torque = 8000000
body(cSCENE_WHEEL_1).angularVelocity = impulseClamp(-50, 50, body(cSCENE_WHEEL_1).angularVelocity)
body(cSCENE_WHEEL_2).angularVelocity = impulseClamp(-50, 50, body(cSCENE_WHEEL_2).angularVelocity)
IF body
(cSCENE_USER
).position.x
> world.plusLimit.x
OR body
(cSCENE_USER
).position.x
< world.minusLimit.x
THEN CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_USER
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_USER
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_USER
, world.spawn.x
, world.spawn.y
) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_1
, body
(cSCENE_USER
).position.x
+ 55, body
(cSCENE_USER
).position.y
+ 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_WHEEL_1
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_WHEEL_1
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_2
, body
(cSCENE_USER
).position.x
- 55, body
(cSCENE_USER
).position.y
+ 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_WHEEL_2
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_WHEEL_2
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_HEAD
, body
(cSCENE_USER
).position.x
- 15, body
(cSCENE_USER
).position.y
- 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_HEAD
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_HEAD
, 0, 0)
IF body
(cSCENE_USER
).position.y
> world.plusLimit.y
THEN CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_USER
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_USER
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_USER
, world.spawn.x
, world.spawn.y
) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_1
, body
(cSCENE_USER
).position.x
+ 55, body
(cSCENE_USER
).position.y
+ 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_WHEEL_1
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_WHEEL_1
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_2
, body
(cSCENE_USER
).position.x
- 55, body
(cSCENE_USER
).position.y
+ 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_WHEEL_2
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_WHEEL_2
, 0, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_HEAD
, body
(cSCENE_USER
).position.x
- 15, body
(cSCENE_USER
).position.y
- 65) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_HEAD
, 0, 0) CALL setBody
(body
(), cPARAMETER_ANGULARVELOCITY
, cSCENE_HEAD
, 0, 0)
'Disable collisions on second ramp so you can get out
IF body
(cSCENE_USER
).position.x
> cLOOP_CENTER_X
+ cLOOP_RAMPWIDTH
+ 100 THEN IF body
(cSCENE_USER
).position.y
< cLOOP_CENTER_Y
- 1000 THEN CALL disableCollisions
(p
(), body
(), cSCENE_LOOPRAMP_2
)
'Renable for the next pass through
IF body
(cSCENE_USER
).position.x
> cLOOP_CENTER_X
+ cLOOP_RAMPWIDTH
+ 1000 THEN CALL EnableCollisions
(p
(), body
(), cSCENE_LOOPRAMP_2
) CALL vectorSet
(p
(body
(cSCENE_LOOPRAMP_2
).pa.start
+ 0).norm
, 0, 0)
SUB buildSimpleScene
(p
() AS tPOLY
, body
() AS tBODY
, j
() AS tJOINT
, v
() AS tVEHICLE
) CALL generateBitmap
(bm
()) ' auto generated bitmaps can be substituted for whatever images you have
'********************************************************
' Setup World
'********************************************************
CALL vectorSet
(world.minusLimit
, -6500, -2000) CALL vectorSet
(world.plusLimit
, 60000, 10000) CALL vectorSet
(world.spawn
, -5000, -800) CALL vectorSet
(world.gravity
, 0.0, 100.0) CALL vectorSet
(world.terrainPosition
, -7000.0, 1000.0) DIM o
AS tVECTOR2d:
CALL vectorMultiplyScalarND
(o
, world.gravity
, cDT
): sRESTING
= vectorLengthSq
(o
) + cEPSILON
'********************************************************
' Build Vehicle
'********************************************************
' Build Body
CALL createBoxBodies
(p
(), body
(), cSCENE_USER
, 80, 30) CALL polygonComputeMass
(body
(), p
(), cSCENE_USER
, .1) 'lower the mass of the body by 90% CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_USER
, world.spawn.x
, world.spawn.y
) CALL setBody
(body
(), cPARAMETER_VELOCITY
, cSCENE_USER
, 0, 0) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_USER
, bm
(0), 0) body(cSCENE_USER).shape.scaleTextureX = 1.5
body(cSCENE_USER).shape.scaleTextureY = 2
body(cSCENE_USER).shape.offsetTextureY = 10
'Build Wheel 1
CALL createCircleBody
(body
(), cSCENE_WHEEL_1
, 35) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_WHEEL_1
, bm
(1), 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_1
, body
(cSCENE_USER
).position.x
+ 75, body
(cSCENE_USER
).position.y
+ 65) body(cSCENE_WHEEL_1).staticFriction = 0.9
body(cSCENE_WHEEL_1).dynamicFriction = 0.6
'Build Wheel 2
CALL createCircleBody
(body
(), cSCENE_WHEEL_2
, 35) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_WHEEL_2
, bm
(1), 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_WHEEL_2
, body
(cSCENE_USER
).position.x
- 75, body
(cSCENE_USER
).position.y
+ 65) body(cSCENE_WHEEL_2).staticFriction = 0.9
body(cSCENE_WHEEL_2).dynamicFriction = 0.6
'Attach Wheel1 to Body
CALL jointSet
(j
(1), body
(), cSCENE_USER
, cSCENE_WHEEL_1
, body
(cSCENE_WHEEL_1
).position.x
, body
(cSCENE_WHEEL_1
).position.y
) j(1).softness = 0.001
j(1).biasFactor = 500
'Attach Wheel2 to Body
CALL jointSet
(j
(2), body
(), cSCENE_USER
, cSCENE_WHEEL_2
, body
(cSCENE_WHEEL_2
).position.x
, body
(cSCENE_WHEEL_2
).position.y
) j(2).softness = 0.001
j(2).biasFactor = 500
'Build and attach Drivers Head
CALL createCircleBody
(body
(), cSCENE_HEAD
, 25) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_HEAD
, bm
(2), 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_HEAD
, body
(cSCENE_USER
).position.x
- 15, body
(cSCENE_USER
).position.y
- 65) CALL jointSet
(j
(3), body
(), cSCENE_USER
, cSCENE_HEAD
, body
(cSCENE_HEAD
).position.x
, body
(cSCENE_HEAD
).position.y
) j(3).softness = 0.01
j(3).biasFactor = 300
'********************************************************
' Build Level
'********************************************************
' Put Out Ramps for some sweet Jumps
'********************************************************
CALL createTrapBody
(p
(), body
(), cSCENE_RAMP_1
+ i
, 1000, 200, 350, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ i
, i
* 5000, 500) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_RAMP_1
+ i
, bm
(4), 0) CALL bodySetStatic
(body
(cSCENE_RAMP_1
+ i
))
CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 0, 0 * 5000, 550) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 1, 1 * 5000, 400) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 2, 2 * 5000, 400) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 3, 3 * 5000, 350) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 4, 4 * 5000, 350) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 5, 5 * 5000, 350) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 6, 6 * 5000, 450) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 7, 7 * 5000, 450) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 8, 8 * 5000, 450) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_RAMP_1
+ 9, 9 * 5000, 450)
'********************************************************
' Build loop
'********************************************************
'Ramp 1
CALL createTrapBody
(p
(), body
(), cSCENE_LOOPRAMP_1
, cLOOP_RAMPWIDTH
, cLOOP_RAMPTHICKNESS
, 0, cLOOP_RAMPHEIGHT
) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_LOOPRAMP_1
, cLOOP_CENTER_X
, cLOOP_CENTER_Y
) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_LOOPRAMP_1
, bm
(4), 0) CALL bodySetStatic
(body
(cSCENE_LOOPRAMP_1
)) 'kill collision on the side
CALL vectorSet
(p
(body
(cSCENE_LOOPRAMP_1
).pa.start
+ 2).norm
, 0, 0)
'Ramp 2
CALL createTrapBody
(p
(), body
(), cSCENE_LOOPRAMP_2
, cLOOP_RAMPWIDTH
, cLOOP_RAMPTHICKNESS
, cLOOP_RAMPHEIGHT
, 0) CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_LOOPRAMP_2
, cLOOP_CENTER_X
+ cLOOP_RAMPWIDTH
, cLOOP_CENTER_Y
) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_LOOPRAMP_2
, bm
(4), 0) CALL bodySetStatic
(body
(cSCENE_LOOPRAMP_2
)) 'kill collision on the side
CALL vectorSet
(p
(body
(cSCENE_LOOPRAMP_2
).pa.start
+ 0).norm
, 0, 0)
'cSCENE_LOOPSEGMENTS + cSCENE_NUMBEROFLOOPSEGMENTS
FOR i
= 0 TO cSCENE_NUMBEROFLOOPSEGMENTS
- 1 CALL createBoxBodies
(p
(), body
(), cSCENE_LOOPSEGMENTS
+ i
, 25, 110) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_LOOPSEGMENTS
+ i
, bm
(4), 0) rotOff = 10.5
theta = (cPI / (cSCENE_NUMBEROFLOOPSEGMENTS / 2) * .75)
FOR i
= 0 TO cSCENE_NUMBEROFLOOPSEGMENTS
- 1 xp
= cLOOP_CENTER_X
- cLOOP_RADIUS
* COS((i
+ rotOff
) * theta
) + 250 yp
= cLOOP_CENTER_Y
+ cLOOP_RADIUS
* SIN((i
+ rotOff
) * theta
) - 1075 CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_LOOPSEGMENTS
+ i
, xp
, yp
) CALL setBody
(body
(), cPARAMETER_ORIENT
, cSCENE_LOOPSEGMENTS
+ i
, -(i
+ rotOff
) * theta
, 0) CALL bodySetStatic
(body
(cSCENE_LOOPSEGMENTS
+ i
)) '********************************************************
' Build Ground
'********************************************************
DIM numberOfTerrainSegments
AS INTEGER: numberOfTerrainSegments
= sNUMBEROFBODIES
- cSCENE_TERRAIN
terrainSliceWidth = 1500
terrainNominalHeight = 500
CALL createTerrianBody
(p
(), body
(), cSCENE_TERRAIN
, numberOfTerrainSegments
, terrainSliceWidth
, terrainNominalHeight
)
FOR i
= 0 TO numberOfTerrainSegments
- 1 p1 = (terrainSliceWidth / 2) - p(body(cSCENE_TERRAIN + i).pa.start).vert.x
p2 = terrainNominalHeight - p(body(cSCENE_TERRAIN + i).pa.start + 1).vert.y
CALL setBody
(body
(), cPARAMETER_POSITION
, cSCENE_TERRAIN
+ i
, world.terrainPosition.x
+ p1
+ (terrainSliceWidth
* i
), world.terrainPosition.y
+ p2
) CALL setBody
(body
(), cPARAMETER_TEXTURE
, cSCENE_TERRAIN
+ i
, bm
(3), 0)
'**********************************************************************************************
' Collision Helper Tools
'**********************************************************************************************
FOR i
= 0 TO body
(index
).pa.count
CALL vectorSet
(p
(body
(index
).pa.start
+ i
).norm
, 0, 0)
FOR i
= 0 TO body
(index
).pa.count
CALL vectorSubVectorND
(face
, p
(body
(index
).pa.start
+ arrayNextIndex
(i
, body
(index
).pa.count
)).vert
, p
(body
(index
).pa.start
+ i
).vert
) CALL vectorSet
(p
(body
(index
).pa.start
+ i
).norm
, face.y
, -face.x
) CALL vectorNormalize
(p
(body
(index
).pa.start
+ i
).norm
)
isBodyTouchingBody = 0
DO WHILE hits
(hitcount
).A
<> hits
(hitcount
).B
IF hits
(hitcount
).A
= A
AND hits
(hitcount
).B
= B
THEN isBodyTouchingBody = hitcount
isBodyTouchingStatic = 0
DO WHILE hits
(hitcount
).A
<> hits
(hitcount
).B
IF body
(hits
(hitcount
).B
).mass
= 0 THEN isBodyTouchingStatic = hitcount
IF body
(hits
(hitcount
).A
).mass
= 0 THEN isBodyTouchingStatic = hitcount
isBodyTouching = 0
DO WHILE hits
(hitcount
).A
<> hits
(hitcount
).B
IF hits
(hitcount
).A
= A
OR hits
(hitcount
).B
= A
THEN isBodyTouching = hitcount
highestCollisionVelocity = 0
DO WHILE hits
(hitcount
).A
<> hits
(hitcount
).B
IF hits
(hitcount
).A
= A
AND ABS(hits
(hitcount
).cv
) > hiCv
AND hits
(hitcount
).cv
< 0 THEN hiCv
= ABS(hits
(hitcount
).cv
) highestCollisionVelocity = hiCv
'**********************************************************************************************
' Physics and Collision Stuff Ahead
'**********************************************************************************************
dts = dt * .5
CALL vectorAddVectorScalar
(b.velocity
, b.force
, b.invMass
* dts
) CALL vectorAddVectorScalar
(b.velocity
, world.gravity
, dts
) b.angularVelocity = b.angularVelocity + (b.torque * b.invInertia * dts)
CALL vectorAddVectorScalar
(body.position
, body.velocity
, dt
) body.orient = body.orient + (body.angularVelocity * dt)
CALL matrixSetRadians
(body.shape.u
, body.orient
) CALL impulseIntegrateForces
(body
, dt
)
DIM c
(cMAXNUMBEROFOBJECTS
) AS tVECTOR2d
DIM manifolds
(sNUMBEROFBODIES
* sNUMBEROFBODIES
) AS tMANIFOLD
DIM collisions
(sNUMBEROFBODIES
* sNUMBEROFBODIES
, cMAXNUMBEROFOBJECTS
) AS tVECTOR2d
' // Generate new collision info
' // erase hitlist
hits(hitCount) = dHit
hitCount = hitCount + 1
LOOP UNTIL hits
(hitCount
).A
= hits
(hitCount
).B
hitCount = 0
' TODO: Implement hidden object logic
FOR i
= 0 TO sNUMBEROFBODIES
' number of bodies A = body(i)
FOR j
= i
+ 1 TO sNUMBEROFBODIES
B = body(j)
'Mainfold solve - handle collisions
IF A.shape.ty
= cSHAPE_CIRCLE
AND B.shape.ty
= cSHAPE_CIRCLE
THEN CALL collisionCCHandle
(m
, c
(), A
, B
) IF A.shape.ty
= cSHAPE_POLYGON
AND B.shape.ty
= cSHAPE_POLYGON
THEN CALL collisionPPHandle
(p
(), body
(), m
, c
(), i
, j
) IF A.shape.ty
= cSHAPE_CIRCLE
AND B.shape.ty
= cSHAPE_POLYGON
THEN CALL collisionCPHandle
(p
(), body
(), m
, c
(), i
, j
) IF B.shape.ty
= cSHAPE_CIRCLE
AND A.shape.ty
= cSHAPE_POLYGON
THEN CALL collisionPCHandle
(p
(), body
(), m
, c
(), i
, j
) m.A = i 'identify the index of objects
m.B = j
manifolds(manifoldCount) = m
FOR k
= 0 TO m.contactCount
hits(hitCount).A = i
hits(hitCount).B = j
hits(hitCount).position = c(k)
collisions(manifoldCount, k) = c(k)
hitCount = hitCount + 1
manifoldCount = manifoldCount + 1
' // Integrate forces
FOR i
= 0 TO sNUMBEROFBODIES
CALL impulseIntegrateForces
(body
(i
), dt
) ' // Initialize collision
FOR i
= 0 TO manifoldCount
- 1 ' this is the stupidest thing ever since QB will not let you split arrays
FOR k
= 0 TO manifolds
(i
).contactCount
- 1 c(k) = collisions(i, k)
CALL manifoldInit
(manifolds
(i
), body
(), c
()) ' joint pre Steps
FOR i
= 1 TO sNUMBEROFJOINTS
CALL jointPrestep
(j
(i
), body
(), dt
)
'// Solve collisions
FOR j
= 0 TO iterations
- 1 FOR i
= 0 TO manifoldCount
- 1 FOR k
= 0 TO manifolds
(i
).contactCount
- 1 c(k) = collisions(i, k)
CALL manifoldApplyImpulse
(manifolds
(i
), body
(), c
()) 'store the hit speed for later
FOR k
= 0 TO hitCount
- 1 IF manifolds
(i
).A
= hits
(k
).A
AND manifolds
(i
).B
= hits
(k
).B
THEN hits(k).cv = manifolds(i).cv
FOR i
= 1 TO sNUMBEROFJOINTS
CALL jointApplyImpulse
(j
(i
), body
())
'// Integrate velocities
FOR i
= 0 TO sNUMBEROFBODIES
CALL impulseIntegrateVelocity
(body
(i
), dt
) '// Correct positions
FOR i
= 0 TO manifoldCount
- 1 CALL manifoldPositionalCorrection
(manifolds
(i
), body
()) '// Clear all forces
FOR i
= 0 TO sNUMBEROFBODIES
CALL vectorSet
(body
(i
).force
, 0, 0) body(i).torque = 0
SUB bodyApplyImpulse
(body
AS tBODY
, impulse
AS tVECTOR2d
, contactVector
AS tVECTOR2d
) CALL vectorAddVectorScalar
(body.velocity
, impulse
, body.invMass
) body.angularVelocity = body.angularVelocity + body.invInertia * vectorCross(contactVector, impulse)
SUB bodySetStatic
(body
AS tBODY
) body.inertia = 0.0
body.invInertia = 0.0
body.mass = 0.0
body.invMass = 0.0
SUB manifoldInit
(m
AS tMANIFOLD
, body
() AS tBODY
, contacts
() AS tVECTOR2d
) m.e = scalarMin(body(m.A).restitution, body(m.B).restitution)
m.sf
= SQR(body
(m.A
).staticFriction
* body
(m.A
).staticFriction
) m.df
= SQR(body
(m.A
).dynamicFriction
* body
(m.A
).dynamicFriction
) FOR i
= 0 TO m.contactCount
- 1 CALL vectorSubVectorND
(contacts
(i
), body
(m.A
).position
, ra
) CALL vectorSubVectorND
(contacts
(i
), body
(m.B
).position
, rb
)
CALL vectorCrossScalar
(tv1
, rb
, body
(m.B
).angularVelocity
) CALL vectorCrossScalar
(tv2
, ra
, body
(m.A
).angularVelocity
) CALL vectorAddVector
(tv1
, body
(m.B
).velocity
) CALL vectorSubVectorND
(tv2
, body
(m.A
).velocity
, tv2
) CALL vectorSubVectorND
(rv
, tv1
, tv2
)
IF vectorLengthSq
(rv
) < sRESTING
THEN m.e = 0.0
SUB manifoldApplyImpulse
(m
AS tMANIFOLD
, body
() AS tBODY
, contacts
() AS tVECTOR2d
)
DIM tangentImpulse
AS tVECTOR2d
IF impulseEqual
(body
(m.A
).invMass
+ body
(m.B
).invMass
, 0.0) THEN CALL manifoldInfiniteMassCorrection
(body
(m.A
), body
(m.B
))
FOR i
= 0 TO m.contactCount
- 1 '// Calculate radii from COM to contact
'// Vec2 ra = contacts[i] - A->position;
'// Vec2 rb = contacts[i] - B->position;
CALL vectorSubVectorND
(ra
, contacts
(i
), body
(m.A
).position
) CALL vectorSubVectorND
(rb
, contacts
(i
), body
(m.B
).position
)
'// Relative velocity
'// Vec2 rv = B->velocity + Cross( B->angularVelocity, rb ) - A->velocity - Cross( A->angularVelocity, ra );
CALL vectorCrossScalar
(tv1
, rb
, body
(m.B
).angularVelocity
) CALL vectorCrossScalar
(tv2
, ra
, body
(m.A
).angularVelocity
) CALL vectorAddVectorND
(rv
, tv1
, body
(m.B
).velocity
) CALL vectorSubVector
(rv
, body
(m.A
).velocity
) CALL vectorSubVector
(rv
, tv2
)
'// Relative velocity along the normal
'// real contactVel = Dot( rv, normal );
contactVel = vectorDot(rv, m.normal)
'// Do not resolve if velocities are separating
m.cv = contactVel
'// real raCrossN = Cross( ra, normal );
'// real rbCrossN = Cross( rb, normal );
'// real invMassSum = A->im + B->im + Sqr( raCrossN ) * A->iI + Sqr( rbCrossN ) * B->iI;
raCrossN = vectorCross(ra, m.normal)
rbCrossN = vectorCross(rb, m.normal)
invMassSum = body(m.A).invMass + body(m.B).invMass + (raCrossN * raCrossN) * body(m.A).invInertia + (rbCrossN * rbCrossN) * body(m.B).invInertia
'// Calculate impulse scalar
j = -(1.0 + m.e) * contactVel
j = j / invMassSum
j = j / m.contactCount
'// Apply impulse
CALL vectorMultiplyScalarND
(impulse
, m.normal
, j
)
CALL vectorNegND
(tv1
, impulse
) CALL bodyApplyImpulse
(body
(m.A
), tv1
, ra
) CALL bodyApplyImpulse
(body
(m.B
), impulse
, rb
)
'// Friction impulse
'// rv = B->velocity + Cross( B->angularVelocity, rb ) - A->velocity - Cross( A->angularVelocity, ra );
CALL vectorCrossScalar
(tv1
, rb
, body
(m.B
).angularVelocity
) CALL vectorCrossScalar
(tv2
, ra
, body
(m.A
).angularVelocity
) CALL vectorAddVectorND
(rv
, tv1
, body
(m.B
).velocity
) CALL vectorSubVector
(rv
, body
(m.A
).velocity
) CALL vectorSubVector
(rv
, tv2
)
'// Vec2 t = rv - (normal * Dot( rv, normal ));
'// t.Normalize( );
CALL vectorMultiplyScalarND
(t
, m.normal
, vectorDot
(rv
, m.normal
)) CALL vectorSubVectorND
(t
, rv
, t
)
'// j tangent magnitude
jt = -vectorDot(rv, t)
jt = jt / invMassSum
jt = jt / m.contactCount
'// Don't apply tiny friction impulses
'// Coulumb's law
CALL vectorMultiplyScalarND
(tangentImpulse
, t
, jt
) CALL vectorMultiplyScalarND
(tangentImpulse
, t
, -j
* m.df
)
'// Apply friction impulse
'// A->ApplyImpulse( -tangentImpulse, ra );
'// B->ApplyImpulse( tangentImpulse, rb );
CALL vectorNegND
(tv1
, tangentImpulse
) CALL bodyApplyImpulse
(body
(m.A
), tv1
, ra
) CALL bodyApplyImpulse
(body
(m.B
), tangentImpulse
, rb
)
SUB manifoldPositionalCorrection
(m
AS tMANIFOLD
, body
() AS tBODY
) correction = scalarMax(m.penetration - cPENETRATION_ALLOWANCE, 0.0) / (body(m.A).invMass + body(m.B).invMass) * cPENETRATION_CORRECTION
CALL vectorAddVectorScalar
(body
(m.A
).position
, m.normal
, -body
(m.A
).invMass
* correction
) CALL vectorAddVectorScalar
(body
(m.B
).position
, m.normal
, body
(m.B
).invMass
* correction
)
SUB manifoldInfiniteMassCorrection
(A
AS tBODY
, B
AS tBODY
) CALL vectorSet
(A.velocity
, 0, 0) CALL vectorSet
(B.velocity
, 0, 0)
'**********************************************************************************************
' Collision Stuff Ahead
'**********************************************************************************************
SUB collisionCCHandle
(m
AS tMANIFOLD
, contacts
() AS tVECTOR2d
, A
AS tBODY
, B
AS tBODY
)
CALL vectorSubVectorND
(normal
, B.position
, A.position
) ' Subtract two vectors position A and position B dist_sqr = vectorLengthSq(normal) ' Calculate the distance between the balls or circles
radius = A.shape.radius + B.shape.radius ' Add both circle A and circle B radius
IF (dist_sqr
>= radius
* radius
) THEN m.contactCount = 0
m.contactCount = 1
m.penetration = A.shape.radius
CALL vectorSet
(m.normal
, 1.0, 0.0) CALL vectorSetVector
(contacts
(0), A.position
) m.penetration = radius - distance
CALL vectorDivideScalarND
(m.normal
, normal
, distance
)
CALL vectorMultiplyScalarND
(contacts
(0), m.normal
, A.shape.radius
) CALL vectorAddVector
(contacts
(0), A.position
)
CALL collisionCPHandle
(p
(), body
(), m
, contacts
(), B
, A
)
'A is the Circle
'B is the POLY
m.contactCount = 0
CALL vectorSubVectorND
(center
, body
(A
).position
, body
(B
).position
) CALL matrixTranspose
(body
(B
).shape.u
, tm
) CALL matrixMultiplyVector
(tm
, center
, center
)
FOR i
= 0 TO body
(B
).pa.count
CALL vectorSubVectorND
(tv
, center
, p
(body
(B
).pa.start
+ i
).vert
) s = vectorDot(p(body(B).pa.start + i).norm, tv)
separation = s
faceNormal = i
v1 = p(body(B).pa.start + faceNormal).vert
i2 = body(B).pa.start + arrayNextIndex(faceNormal, body(B).pa.count)
v2 = p(i2).vert
m.contactCount = 1
CALL matrixMultiplyVector
(body
(B
).shape.u
, p
(body
(B
).pa.start
+ faceNormal
).norm
, m.normal
) CALL vectorMultiplyScalarND
(contacts
(0), m.normal
, ARadius
) CALL vectorAddVector
(contacts
(0), body
(A
).position
) m.penetration = ARadius
CALL vectorSubVectorND
(tv1
, center
, v1
) CALL vectorSubVectorND
(tv2
, v2
, v1
) dot1 = vectorDot(tv1, tv2)
CALL vectorSubVectorND
(tv1
, center
, v2
) CALL vectorSubVectorND
(tv2
, v1
, v2
) dot2 = vectorDot(tv1, tv2)
m.penetration = ARadius - separation
m.contactCount = 1
CALL vectorSubVectorND
(n
, v1
, center
) CALL matrixMultiplyVector
(body
(B
).shape.u
, n
, n
) m.normal = n
CALL matrixMultiplyVector
(body
(B
).shape.u
, v1
, v1
) CALL vectorAddVectorND
(v1
, v1
, body
(B
).position
) contacts(0) = v1
m.contactCount = 1
CALL vectorSubVectorND
(n
, v2
, center
) CALL matrixMultiplyVector
(body
(B
).shape.u
, v2
, v2
) CALL vectorAddVectorND
(v2
, v2
, body
(B
).position
) contacts(0) = v2
CALL matrixMultiplyVector
(body
(B
).shape.u
, n
, n
) m.normal = n
n = p(body(B).pa.start + faceNormal).norm
CALL vectorSubVectorND
(tv1
, center
, v1
) m.contactCount = 1
CALL matrixMultiplyVector
(body
(B
).shape.u
, n
, n
) m.normal = n
CALL vectorMultiplyScalarND
(contacts
(0), m.normal
, ARadius
) CALL vectorAddVector
(contacts
(0), body
(A
).position
)
DIM o
(cMAXNUMBEROFPOLYGONS
) AS tVECTOR2d
o(0) = face(0)
o(1) = face(1)
o(sp) = face(0)
sp = sp + 1
o(sp) = face(1)
sp = sp + 1
'out[sp] = face[0] + alpha * (face[1] - face[0]);
CALL vectorSubVectorND
(tempv
, face
(1), face
(0)) CALL vectorMultiplyScalar
(tempv
, alpha
) CALL vectorAddVectorND
(o
(sp
), tempv
, face
(0)) sp = sp + 1
face(0) = o(0)
face(1) = o(1)
collisionPPClip = sp
DIM referenceNormal
AS tVECTOR2d
DIM uRef
AS tMATRIX2d: uRef
= b
(RefPoly
).shape.u
DIM uInc
AS tMATRIX2d: uInc
= b
(IncPoly
).shape.u
referenceNormal = p(b(RefPoly).pa.start + referenceIndex).norm
' // Calculate normal in incident's frame of reference
' // referenceNormal = RefPoly->u * referenceNormal; // To world space
CALL matrixMultiplyVector
(uRef
, referenceNormal
, referenceNormal
) ' // referenceNormal = IncPoly->u.Transpose( ) * referenceNormal; // To incident's model space
CALL matrixTranspose
(uInc
, uTemp
) CALL matrixMultiplyVector
(uTemp
, referenceNormal
, referenceNormal
)
FOR i
= 0 TO b
(IncPoly
).pa.count
dot = vectorDot(referenceNormal, p(b(IncPoly).pa.start + i).norm)
minDot = dot
incidentFace = i
'// Assign face vertices for incidentFace
'// v[0] = IncPoly->u * IncPoly->m_vertices[incidentFace] + IncPoly->body->position;
CALL matrixMultiplyVector
(uInc
, p
(b
(IncPoly
).pa.start
+ incidentFace
).vert
, v
(0)) CALL vectorAddVector
(v
(0), b
(IncPoly
).position
)
'// incidentFace = incidentFace + 1 >= (int32)IncPoly->m_vertexCount ? 0 : incidentFace + 1;
incidentFace = arrayNextIndex(incidentFace, b(IncPoly).pa.count)
'// v[1] = IncPoly->u * IncPoly->m_vertices[incidentFace] + IncPoly->body->position;
CALL matrixMultiplyVector
(uInc
, p
(b
(IncPoly
).pa.start
+ incidentFace
).vert
, v
(1)) CALL vectorAddVector
(v
(1), b
(IncPoly
).position
)
m.contactCount = 0
penetrationA = collisionPPFindAxisLeastPenetration(p(), body(), faceA(), A, B)
penetrationB = collisionPPFindAxisLeastPenetration(p(), body(), faceB(), B, A)
IF impulseGT
(penetrationA
, penetrationB
) THEN RefPoly = A
IncPoly = B
referenceIndex = faceA(0)
flip = 0
RefPoly = B
IncPoly = A
referenceIndex = faceB(0)
flip = 1
DIM incidentFace
(2) AS tVECTOR2d
CALL collisionPPFindIncidentFace
(p
(), body
(), incidentFace
(), RefPoly
, IncPoly
, referenceIndex
)
v1 = p(body(RefPoly).pa.start + referenceIndex).vert
referenceIndex = arrayNextIndex(referenceIndex, body(RefPoly).pa.count)
v2 = p(body(RefPoly).pa.start + referenceIndex).vert
'// Transform vertices to world space
'// v1 = RefPoly->u * v1 + RefPoly->body->position;
'// v2 = RefPoly->u * v2 + RefPoly->body->position;
CALL matrixMultiplyVector
(body
(RefPoly
).shape.u
, v1
, v1t
) CALL vectorAddVectorND
(v1
, v1t
, body
(RefPoly
).position
) CALL matrixMultiplyVector
(body
(RefPoly
).shape.u
, v2
, v2t
) CALL vectorAddVectorND
(v2
, v2t
, body
(RefPoly
).position
)
'// Calculate reference face side normal in world space
'// Vec2 sidePlaneNormal = (v2 - v1);
'// sidePlaneNormal.Normalize( );
DIM sidePlaneNormal
AS tVECTOR2d
CALL vectorSubVectorND
(sidePlaneNormal
, v2
, v1
) CALL vectorNormalize
(sidePlaneNormal
)
'// Orthogonalize
'// Vec2 refFaceNormal( sidePlaneNormal.y, -sidePlaneNormal.x );
DIM refFaceNormal
AS tVECTOR2d
CALL vectorSet
(refFaceNormal
, sidePlaneNormal.y
, -sidePlaneNormal.x
)
'// ax + by = c
'// c is distance from origin
'// real refC = Dot( refFaceNormal, v1 );
'// real negSide = -Dot( sidePlaneNormal, v1 );
'// real posSide = Dot( sidePlaneNormal, v2 );
DIM refC
AS _FLOAT: refC
= vectorDot
(refFaceNormal
, v1
) DIM negSide
AS _FLOAT: negSide
= -vectorDot
(sidePlaneNormal
, v1
) DIM posSide
AS _FLOAT: posSide
= vectorDot
(sidePlaneNormal
, v2
)
'// Clip incident face to reference face side planes
'// if(Clip( -sidePlaneNormal, negSide, incidentFace ) < 2)
DIM negSidePlaneNormal
AS tVECTOR2d
CALL vectorNegND
(negSidePlaneNormal
, sidePlaneNormal
)
IF collisionPPClip
(negSidePlaneNormal
, negSide
, incidentFace
()) < 2 THEN EXIT SUB IF collisionPPClip
(sidePlaneNormal
, posSide
, incidentFace
()) < 2 THEN EXIT SUB
CALL vectorSet
(m.normal
, refFaceNormal.x
, refFaceNormal.y
)
'// Keep points behind reference face
DIM cp
AS INTEGER: cp
= 0 '// clipped points behind reference face separation = vectorDot(refFaceNormal, incidentFace(0)) - refC
contacts(cp) = incidentFace(0)
m.penetration = -separation
cp = cp + 1
m.penetration = 0
separation = vectorDot(refFaceNormal, incidentFace(1)) - refC
contacts(cp) = incidentFace(1)
m.penetration = m.penetration + -separation
cp = cp + 1
m.penetration = m.penetration / cp
m.contactCount = cp
FOR i
= 0 TO body
(A
).pa.count
k = body(A).pa.start + i
'// Retrieve a face normal from A
'// Vec2 n = A->m_normals[i];
'// Vec2 nw = A->u * n;
n = p(k).norm
CALL matrixMultiplyVector
(body
(A
).shape.u
, n
, nw
)
'// Transform face normal into B's model space
'// Mat2 buT = B->u.Transpose( );
'// n = buT * nw;
CALL matrixTranspose
(body
(B
).shape.u
, buT
) CALL matrixMultiplyVector
(buT
, nw
, n
)
'// Retrieve support point from B along -n
'// Vec2 s = B->GetSupport( -n );
CALL vectorGetSupport
(p
(), body
(), B
, nn
, s
)
'// Retrieve vertex on face from A, transform into
'// B's model space
'// Vec2 v = A->m_vertices[i];
'// v = A->u * v + A->body->position;
'// v -= B->body->position;
'// v = buT * v;
v = p(k).vert
CALL matrixMultiplyVector
(body
(A
).shape.u
, v
, tv
) CALL vectorAddVectorND
(v
, tv
, body
(A
).position
)
CALL vectorSubVector
(v
, body
(B
).position
) CALL matrixMultiplyVector
(buT
, v
, tv
)
CALL vectorSubVector
(s
, tv
) d = vectorDot(n, s)
bestDistance = d
bestIndex = i
faceIndex(0) = bestIndex
collisionPPFindAxisLeastPenetration = bestDistance
'**********************************************************************************************
' Shape Creation Ahead
'**********************************************************************************************
CALL matrixSetScalar
(u
, 1, 0, 0, 1) sh.ty = ty
sh.radius = radius
sh.u = u
sh.scaleTextureX = 1.0
sh.scaleTextureY = 1.0
'**********************************************************************************************
' Scene Creation Tools ahead
'**********************************************************************************************
CASE cPARAMETER_POSITION:
CALL vectorSet
(body
(Index
).position
, arg1
, arg2
) CASE cPARAMETER_VELOCITY:
CALL vectorSet
(body
(Index
).velocity
, arg1
, arg2
) CALL vectorSet
(body
(Index
).force
, arg1
, arg2
) CASE cPARAMETER_ANGULARVELOCITY:
body(Index).angularVelocity = arg1
body(Index).torque = arg1
body(Index).orient = arg1
CALL matrixSetRadians
(body
(Index
).shape.u
, body
(Index
).orient
) CASE cPARAMETER_STATICFRICTION:
body(Index).staticFriction = arg1
CASE cPARAMETER_DYNAMICFRICTION:
body(Index).dynamicFriction = arg1
body(Index).c = arg1
body(Index).visible = arg1
CALL bodySetStatic
(body
(Index
)) body(Index).shape.texture = arg1
CASE cPARAMETER_FLIPTEXTURE:
'does the texture flip directions when moving left or right body(Index).shape.flipTexture = arg1
CALL shapeCreate
(shape
, cSHAPE_CIRCLE
, radius
) CALL bodyCreate
(body
(), index
, shape
) 'no vertices have to created for circles
CALL circleInitialize
(body
(), index
) ' Even though circles do not have vertices, they still must be included in the vertices list
body(index).pa.start = 0
body(index).pa.start = body(index - 1).pa.start + body(index - 1).pa.count + 1
body(index).pa.count = 1
body
(index
).c
= _RGB32(255, 255, 255)
CALL shapeCreate
(shape
, cSHAPE_POLYGON
, 0) CALL bodyCreate
(body
(), index
, shape
) CALL boxCreate
(p
(), body
(), index
, xs
, ys
) CALL polygonInitialize
(body
(), p
(), index
) body
(index
).c
= _RGB32(255, 255, 255)
CALL shapeCreate
(shape
, cSHAPE_POLYGON
, 0) CALL bodyCreate
(body
(), index
, shape
) CALL trapCreate
(p
(), body
(), index
, xs
, ys
, yoff1
, yoff2
) CALL polygonInitialize
(body
(), p
(), index
) body
(index
).c
= _RGB32(255, 255, 255)
CALL createCircleBody
(body
(), index
, 10 + RND * 20) CALL createBoxBodies
(p
(), body
(), index
, 10 + RND * 10, 10 + RND * 10)
CALL vectorSet
(body
(index
).position
, 0, 0) CALL vectorSet
(body
(index
).velocity
, 0, 0) body(index).angularVelocity = 0.0
body(index).torque = 0.0
body(index).orient = 0.0 ' impulseRandom_float(-cPI, cPI)
CALL vectorSet
(body
(index
).force
, 0, 0) body(index).staticFriction = 0.5
body(index).dynamicFriction = 0.3
body(index).restitution = 0.2
body(index).shape = shape
DIM verts
(vertlength
) AS tVECTOR2d
CALL vectorSet
(verts
(0), -sizex
, -sizey
) CALL vectorSet
(verts
(1), sizex
, -sizey
) CALL vectorSet
(verts
(2), sizex
, sizey
) CALL vectorSet
(verts
(3), -sizex
, sizey
)
CALL vertexSet
(p
(), body
(), index
, verts
(), vertlength
)
DIM verts
(vertlength
) AS tVECTOR2d
CALL vectorSet
(verts
(0), -sizex
, -sizey
- yOff2
) CALL vectorSet
(verts
(1), sizex
, -sizey
- yOff1
) CALL vectorSet
(verts
(2), sizex
, sizey
) CALL vectorSet
(verts
(3), -sizex
, sizey
)
CALL vertexSet
(p
(), body
(), index
, verts
(), vertlength
)
CALL shapeCreate
(shape
, cSHAPE_POLYGON
, 0)
CALL bodyCreate
(body
(), index
+ i
, shape
) CALL terrainCreate
(p
(), body
(), index
+ i
, elevation
(i
), elevation
(i
+ 1), sliceWidth
, nominalHeight
) CALL polygonInitialize
(body
(), p
(), index
+ i
) body
(index
+ i
).c
= _RGB32(255, 255, 255) CALL bodySetStatic
(body
(index
+ i
))
vertLength = 3 ' numOfslices + 1
DIM verts
(vertLength
) AS tVECTOR2d
CALL vectorSet
(verts
(0), 0, nominalHeight
) CALL vectorSet
(verts
(1), (0) * sliceWidth
, -nominalHeight
- ele1
) CALL vectorSet
(verts
(2), (1) * sliceWidth
, -nominalHeight
- ele2
) CALL vectorSet
(verts
(3), (1) * sliceWidth
, nominalHeight
) CALL vertexSet
(p
(), body
(), index
, verts
(), vertLength
)
DIM verts
(vertlength
) AS tVECTOR2d
CALL vectorSet
(verts
(0), -sizex
, -sizey
) CALL vectorSet
(verts
(1), sizex
, -sizey
) CALL vectorSet
(verts
(2), sizex
, sizey
) CALL vectorSet
(verts
(3), -sizex
, sizey
) CALL vectorSet
(verts
(4), -sizex
, sizey
/ 2) CALL vectorSet
(verts
(5), sizex
/ 2, sizey
/ 2) CALL vectorSet
(verts
(6), sizex
/ 2, -sizey
/ 2) CALL vectorSet
(verts
(7), -sizex
, sizey
/ 2)
CALL vertexSet
(p
(), body
(), index
, verts
(), vertlength
)
DIM highestXCoord
AS _FLOAT: highestXCoord
= verts
(0).x
x = verts(i).x
highestXCoord = x
rightMost = i
IF verts
(i
).y
< verts
(rightMost
).y
THEN rightMost = i
hull(outCount) = indexHull
nextHullIndex = 0
IF nextHullIndex
= indexHull
THEN nextHullIndex = i
CALL vectorSubVectorND
(e1
, verts
(nextHullIndex
), verts
(hull
(outCount
))) CALL vectorSubVectorND
(e2
, verts
(i
), verts
(hull
(outCount
))) c = vectorCross(e1, e2)
IF c
< 0.0 THEN nextHullIndex
= i
IF c
= 0.0 AND (vectorLengthSq
(e2
) > vectorLengthSq
(e1
)) THEN nextHullIndex = i
outCount = outCount + 1
indexHull = nextHullIndex
IF nextHullIndex
= rightMost
THEN body(index).pa.count = outCount - 1
body(index).pa.start = 0
body(index).pa.start = body(index - 1).pa.start + body(index - 1).pa.count + 1
p(body(index).pa.start + i).vert = verts(hull(i))
CALL vectorSubVectorND
(face
, p
(body
(index
).pa.start
+ arrayNextIndex
(i
, body
(index
).pa.count
)).vert
, p
(body
(index
).pa.start
+ i
).vert
) CALL vectorSet
(p
(body
(index
).pa.start
+ i
).norm
, face.y
, -face.x
) CALL vectorNormalize
(p
(body
(index
).pa.start
+ i
).norm
)
arrayNextIndex
= ((i
+ 1) MOD (count
+ 1))
'**********************************************************************************************
' Rendering Stuff Ahead
'**********************************************************************************************
fpsLast = fps
fps = 0
SUB renderBodies
(p
() AS tPOLY
, body
() AS tBODY
, j
() AS tJOINT
, hits
() AS tHIT
, camera
AS tCAMERA
) DIM camoffset
AS tVECTOR2d
FOR i
= 0 TO sNUMBEROFBODIES
'TODO: Put hidden object logic
'AABB to cut down on rendering objects out of camera view
cx = camera.position.x
cy = camera.position.y
cwx
= _WIDTH * (1 / camera.zoom
) ox = body(i).position.x - 5000
oy = body(i).position.y - 5000
owx = 10000
owy = 10000
IF cx
< ox
+ owx
AND cx
+ cwx
> ox
AND cy
< oy
+ owy
AND cy
+ cwy
> oy
THEN
IF body
(i
).shape.ty
= cSHAPE_CIRCLE
THEN IF body
(i
).shape.texture
= 0 THEN CALL renderWireframeCircle
(body
(), i
, camera
) CALL renderTexturedCircle
(body
(), i
, camera
) IF body
(i
).shape.texture
= 0 THEN CALL renderWireframePoly
(p
(), body
(), i
, camera
) CALL renderTexturedBox
(p
(), body
(), i
, camera
) FOR i
= 1 TO sNUMBEROFJOINTS
CALL renderJoints
(j
(i
), body
(), camera
) hitcount = 0
DO WHILE hits
(hitcount
).A
<> hits
(hitcount
).B
CALL vectorSubVectorND
(camoffset
, hits
(hitcount
).position
, camera.position
) CIRCLE (camoffset.x
, camoffset.y
), 5, _RGB(255, 6, 11) hitcount = hitcount + 1
SUB renderJoints
(j
AS tJOINT
, b
() AS tBODY
, camera
AS tCAMERA
) DIM b1
AS tBODY: b1
= b
(j.body1
) DIM b2
AS tBODY: b2
= b
(j.body2
) DIM R1
AS tMATRIX2d: R1
= b1.shape.u
'Call matrixSetRadians(R1, b1.orient) DIM R2
AS tMATRIX2d: R2
= b2.shape.u
' Call matrixSetRadians(R2, b2.orient)
DIM x1
AS tVECTOR2d: x1
= b1.position
DIM p1
AS tVECTOR2d:
CALL matrixMultiplyVector
(R1
, j.localAnchor1
, p1
)
CALL vectorAddVectorND
(p1
, p1
, x1
)
DIM x2
AS tVECTOR2d: x2
= b2.position
DIM p2
AS tVECTOR2d:
CALL matrixMultiplyVector
(R2
, j.localAnchor2
, p2
)
CALL vectorAddVectorND
(p2
, p2
, x2
)
CALL vectorSubVector
(p1
, camera.position
) CALL vectorSubVector
(x2
, camera.position
)
'Line (x1.x, x1.y)-(p1.x, p1.y), _RGB(127, 127, 244) 'blue
LINE (p1.x
, p1.y
)-(x2.x
, x2.y
), _RGB(255, 255, 127) 'yellow ' Line (x2.x, x2.y)-(p2.x, p2.y), _RGB32(127, 255, 127) 'green
' Line (p2.x, p2.y)-(x1.x, x1.y), _RGB(127, 6, 127) 'purple
DIM a
AS tVECTOR2d
' dummy vertices
FOR i
= 0 TO b
(index
).pa.count
element = b(index).pa.start + i
element_next = b(index).pa.start + arrayNextIndex(i, b(index).pa.count) ' wrap around back to first element
a = p(element).vert
b = p(element_next).vert
CALL matrixMultiplyVector
(b
(index
).shape.u
, a
, a
) CALL matrixMultiplyVector
(b
(index
).shape.u
, b
, b
) CALL vectorAddVector
(a
, b
(index
).position
) CALL vectorAddVector
(b
, b
(index
).position
) CALL vectorSubVector
(a
, camera.position
) CALL vectorSubVector
(b
, camera.position
) CALL vectorMultiplyScalar
(a
, camera.zoom
) CALL vectorMultiplyScalar
(b
, camera.zoom
) LINE (a.x
, a.y
)-(b.x
, b.y
), b
(index
).c
bm = b(index).shape.texture
vert(i) = p(b(index).pa.start + i).vert
vert(i).x = vert(i).x + b(index).shape.offsetTextureX
vert(i).y = vert(i).y + b(index).shape.offsetTextureY
vert(i).x = vert(i).x * b(index).shape.scaleTextureX
vert(i).y = vert(i).y * b(index).shape.scaleTextureY
CALL matrixMultiplyVector
(b
(index
).shape.u
, vert
(i
), vert
(i
)) CALL vectorAddVector
(vert
(i
), b
(index
).position
) CALL vectorSubVector
(vert
(i
), camera.position
) CALL vectorMultiplyScalar
(vert
(i
), camera.zoom
) IF b
(index
).velocity.x
> 1 OR b
(index
).shape.flipTexture
= 0 THEN _MAPTRIANGLE (0, 0)-(W
- 1, 0)-(W
- 1, H
- 1), bm
TO(vert
(3).x
, vert
(3).y
)-(vert
(0).x
, vert
(0).y
)-(vert
(1).x
, vert
(1).y
) _MAPTRIANGLE (0, 0)-(0, H
- 1)-(W
- 1, H
- 1), bm
TO(vert
(3).x
, vert
(3).y
)-(vert
(2).x
, vert
(2).y
)-(vert
(1).x
, vert
(1).y
) _MAPTRIANGLE (0, 0)-(W
- 1, 0)-(W
- 1, H
- 1), bm
TO(vert
(0).x
, vert
(0).y
)-(vert
(3).x
, vert
(3).y
)-(vert
(2).x
, vert
(2).y
) _MAPTRIANGLE (0, 0)-(0, H
- 1)-(W
- 1, H
- 1), bm
TO(vert
(0).x
, vert
(0).y
)-(vert
(1).x
, vert
(1).y
)-(vert
(2).x
, vert
(2).y
)
DIM tv
AS tVECTOR2d: tv
= b
(index
).position
CALL vectorSubVector
(tv
, camera.position
) CALL vectorMultiplyScalar
(tv
, camera.zoom
) CIRCLE (tv.x
, tv.y
), b
(index
).shape.radius
, b
(index
).c
LINE (tv.x
, tv.y
)-(tv.x
+ COS(b
(index
).orient
) * b
(index
).shape.radius
, tv.y
+ SIN(b
(index
).orient
) * b
(index
).shape.radius
), b
(index
).c
bm = b(index).shape.texture
CALL vectorSet
(vert
(0), -b
(index
).shape.radius
, -b
(index
).shape.radius
) CALL vectorSet
(vert
(1), -b
(index
).shape.radius
, b
(index
).shape.radius
) CALL vectorSet
(vert
(2), b
(index
).shape.radius
, b
(index
).shape.radius
) CALL vectorSet
(vert
(3), b
(index
).shape.radius
, -b
(index
).shape.radius
) CALL matrixMultiplyVector
(b
(index
).shape.u
, vert
(i
), vert
(i
)) CALL vectorAddVector
(vert
(i
), b
(index
).position
) CALL vectorSubVector
(vert
(i
), camera.position
) CALL vectorMultiplyScalar
(vert
(i
), camera.zoom
) _MAPTRIANGLE (0, 0)-(0, H
- 1)-(W
- 1, H
- 1), bm
TO(vert
(0).x
, vert
(0).y
)-(vert
(1).x
, vert
(1).y
)-(vert
(2).x
, vert
(2).y
) _MAPTRIANGLE (0, 0)-(W
- 1, 0)-(W
- 1, H
- 1), bm
TO(vert
(0).x
, vert
(0).y
)-(vert
(3).x
, vert
(3).y
)-(vert
(2).x
, vert
(2).y
)
CALL matrixSetRadians
(b.shape.u
, radians
)
'**********************************************************************************************
' Object initialization Ahead
'**********************************************************************************************
CALL circleComputeMass
(b
(), index
, 1.0)
b(index).mass = cPI * b(index).shape.radius * b(index).shape.radius * density
b(index).invMass = 1.0 / b(index).mass
b(index).invMass = 0.0
b(index).inertia = b(index).mass * b(index).shape.radius * b(index).shape.radius
b(index).invInertia = 1.0 / b(index).inertia
b(index).invInertia = 0.0
CALL polygonComputeMass
(body
(), p
(), index
, 1.0)
DIM c
AS tVECTOR2d
' centroid
k_inv3 = 1.0 / 3.0
FOR ii
= 0 TO b
(index
).pa.count
p1 = p(b(index).pa.start + ii).vert
p2 = p(b(index).pa.start + arrayNextIndex(ii, b(index).pa.count)).vert
D = vectorCross(p1, p2)
triangleArea = .5 * D
area = area + triangleArea
weight = triangleArea * k_inv3
CALL vectorAddVectorScalar
(c
, p1
, weight
) CALL vectorAddVectorScalar
(c
, p2
, weight
) intx2 = p1.x * p1.x + p2.x * p1.x + p2.x * p2.x
inty2 = p1.y * p1.y + p2.y * p1.y + p2.y * p2.y
I = I + (0.25 * k_inv3 * D) * (intx2 + inty2)
CALL vectorMultiplyScalar
(c
, 1.0 / area
)
FOR ii
= 0 TO b
(index
).pa.count
CALL vectorSubVector
(p
(b
(index
).pa.start
+ ii
).vert
, c
)
b(index).mass = density * area
b(index).invMass = 1.0 / b(index).mass
b(index).invMass = 0.0
b(index).inertia = I * density
b(index).invInertia = 1.0 / b(index).inertia
b(index).invInertia = 0.0
'**********************************************************************************************
' Joint Stuff Ahead
'**********************************************************************************************
CALL vectorSet
(anchor
, x
, y
) DIM Rot1
AS tMATRIX2d: Rot1
= body
(b1
).shape.u
'Call matrixSetRadians(Rot1, body(b1).orient) DIM Rot2
AS tMATRIX2d: Rot2
= body
(b2
).shape.u
'Call matrixSetRadians(Rot2, body(b2).orient) DIM Rot1T
AS tMATRIX2d:
CALL matrixTranspose
(Rot1
, Rot1T
) DIM Rot2T
AS tMATRIX2d:
CALL matrixTranspose
(Rot2
, Rot2T
)
j.body1 = b1
j.body2 = b2
CALL vectorSubVectorND
(tv
, anchor
, body
(b1
).position
) CALL matrixMultiplyVector
(Rot1T
, tv
, j.localAnchor1
)
CALL vectorSubVectorND
(tv
, anchor
, body
(b2
).position
) CALL matrixMultiplyVector
(Rot2T
, tv
, j.localAnchor2
)
CALL vectorSet
(j.P
, 0, 0)
j.softness = 0.001
j.biasFactor = 100
DIM Rot1
AS tMATRIX2d: Rot1
= body
(j.body1
).shape.u
'Call matrixSetRadians(Rot1, body(j.body1).orient) DIM Rot2
AS tMATRIX2d: Rot2
= body
(j.body2
).shape.u
'Call matrixSetRadians(Rot2, body(j.body2).orient)
CALL matrixMultiplyVector
(Rot1
, j.localAnchor1
, j.r1
) CALL matrixMultiplyVector
(Rot2
, j.localAnchor2
, j.r2
)
b1invMass = body(j.body1).invMass
b2invMass = body(j.body2).invMass
b1invInertia = body(j.body1).invInertia
b2invInertia = body(j.body2).invInertia
Call matrixSetScalar
(K1
, b1invMass
+ b2invMass
, 0,_
0, b1invMass + b2invMass)
Call matrixSetScalar
(K2
, b1invInertia
* j.r1.y
* j.r1.y
, -b1invInertia
* j.r1.x
* j.r1.y
,_
-b1invInertia * j.r1.x * j.r1.y, b1invInertia * j.r1.x * j.r1.x)
Call matrixSetScalar
(K3
, b2invInertia
* j.r2.y
* j.r2.y
, - b2invInertia
* j.r2.x
* j.r2.y
,_
-b2invInertia * j.r2.x * j.r2.y, b2invInertia * j.r2.x * j.r2.x)
CALL matrixAddMatrix
(K1
, K2
, K
) CALL matrixAddMatrix
(K3
, K
, K
) K.m00 = K.m00 + j.softness
K.m11 = K.m11 + j.softness
CALL matrixInvert
(K
, j.M
)
DIM p1
AS tVECTOR2d:
CALL vectorAddVectorND
(p1
, body
(j.body1
).position
, j.r1
) DIM p2
AS tVECTOR2d:
CALL vectorAddVectorND
(p2
, body
(j.body2
).position
, j.r2
) DIM dp
AS tVECTOR2d:
CALL vectorSubVectorND
(dp
, p2
, p1
)
CALL vectorMultiplyScalarND
(j.bias
, dp
, -j.biasFactor
* inv_dt
) 'Call vectorSet(j.bias, 0, 0)
CALL vectorSet
(j.P
, 0, 0)
SUB jointApplyImpulse
(j
AS tJOINT
, body
() AS tBODY
)
'Vec2 dv = body2->velocity + Cross(body2->angularVelocity, r2) - body1->velocity - Cross(body1->angularVelocity, r1);
CALL vectorCrossScalar
(cross2
, j.r2
, body
(j.body2
).angularVelocity
) CALL vectorCrossScalar
(cross1
, j.r1
, body
(j.body1
).angularVelocity
) CALL vectorAddVectorND
(dv
, body
(j.body2
).velocity
, cross2
) CALL vectorSubVectorND
(dv
, dv
, body
(j.body1
).velocity
) CALL vectorSubVectorND
(dv
, dv
, cross1
)
' impulse = M * (bias - dv - softness * P);
CALL vectorMultiplyScalarND
(tv
, j.P
, j.softness
) CALL vectorSubVectorND
(impulse
, j.bias
, dv
) CALL vectorSubVectorND
(impulse
, impulse
, tv
) CALL matrixMultiplyVector
(j.M
, impulse
, impulse
)
' body1->velocity -= body1->invMass * impulse;
CALL vectorMultiplyScalarND
(tv
, impulse
, body
(j.body1
).invMass
) CALL vectorSubVectorND
(body
(j.body1
).velocity
, body
(j.body1
).velocity
, tv
)
' body1->angularVelocity -= body1->invI * Cross(r1, impulse);
crossScalar = vectorCross(j.r1, impulse)
body(j.body1).angularVelocity = body(j.body1).angularVelocity - body(j.body1).invInertia * crossScalar
CALL vectorMultiplyScalarND
(tv
, impulse
, body
(j.body2
).invMass
) CALL vectorAddVectorND
(body
(j.body2
).velocity
, body
(j.body2
).velocity
, tv
)
crossScalar = vectorCross(j.r2, impulse)
body(j.body2).angularVelocity = body(j.body2).angularVelocity + body(j.body2).invInertia * crossScalar
CALL vectorAddVectorND
(j.P
, j.P
, impulse
)
'**********************************************************************************************
' Vector Math Ahead
'**********************************************************************************************
v.x = x
v.y = y
SUB vectorSetVector
(o
AS tVECTOR2d
, v
AS tVECTOR2d
) o.x = v.x
o.y = v.y
SUB vectorNeg
(v
AS tVECTOR2d
) v.x = -v.x
v.y = -v.y
SUB vectorNegND
(o
AS tVECTOR2d
, v
AS tVECTOR2d
) o.x = -v.x
o.y = -v.y
v.x = v.x * s
v.y = v.y * s
o.x = v.x * s
o.y = v.y * s
v.x = v.x / s
v.y = v.y / s
o.x = v.x / s
o.y = v.y / s
v.x = v.x + s
v.y = v.y + s
o.x = v.x + s
o.y = v.y + s
SUB vectorMultiplyVector
(v
AS tVECTOR2d
, m
AS tVECTOR2d
) v.x = v.x * m.x
v.y = v.y * m.y
SUB vectorMultiplyVectorND
(o
AS tVECTOR2d
, v
AS tVECTOR2d
, m
AS tVECTOR2d
) o.x = v.x * m.x
o.y = v.y * m.y
SUB vectorDivideVector
(v
AS tVECTOR2d
, m
AS tVECTOR2d
) v.x = v.x / m.x
v.y = v.y / m.y
SUB vectorAddVector
(v
AS tVECTOR2d
, m
AS tVECTOR2d
) v.x = v.x + m.x
v.y = v.y + m.y
SUB vectorAddVectorND
(o
AS tVECTOR2d
, v
AS tVECTOR2d
, m
AS tVECTOR2d
) o.x = v.x + m.x
o.y = v.y + m.y
v.x = v.x + m.x * s
v.y = v.y + m.y * s
SUB vectorAddVectorScalarND
(o
AS tVECTOR2d
, v
AS tVECTOR2d
, m
AS tVECTOR2d
, s
AS _FLOAT) o.x = v.x + m.x * s
o.y = v.y + m.y * s
SUB vectorSubVector
(v
AS tVECTOR2d
, m
AS tVECTOR2d
) v.x = v.x - m.x
v.y = v.y - m.y
SUB vectorSubVectorND
(o
AS tVECTOR2d
, v
AS tVECTOR2d
, m
AS tVECTOR2d
) o.x = v.x - m.x
o.y = v.y - m.y
vectorLengthSq = v.x * v.x + v.y * v.y
vectorLength
= SQR(vectorLengthSq
(v
))
xp = v.x * c - v.y * s
yp = v.x * s + v.y * c
v.x = xp
v.y = yp
SUB vectorNormalize
(v
AS tVECTOR2d
) lenSQ = vectorLengthSq(v)
invLen
= 1.0 / SQR(lenSQ
) v.x = v.x * invLen
v.y = v.y * invLen
SUB vectorMin
(a
AS tVECTOR2d
, b
AS tVECTOR2d
, o
AS tVECTOR2d
) o.x = scalarMin(a.x, b.x)
o.y = scalarMin(a.y, b.y)
SUB vectorMax
(a
AS tVECTOR2d
, b
AS tVECTOR2d
, o
AS tVECTOR2d
) o.x = scalarMax(a.x, b.x)
o.y = scalarMax(a.y, b.y)
vectorDot = a.x * b.x + a.y * b.y
dx = b.x - a.x
dy = b.y - a.y
vectorSqDist = dx * dx + dy * dy
vectorDistance
= SQR(vectorSqDist
(a
, b
))
vectorCross = a.x * b.y - a.y * b.x
o.x = v.y * -a
o.y = v.x * a
vectorArea = (((b.x - a.x) * (c.y - a.y)) - ((c.x - a.x) * (b.y - a.y)))
vectorLeft = vectorArea(a, b, c) > 0
FUNCTION vectorLeftOn
(a
AS tVECTOR2d
, b
AS tVECTOR2d
, c
AS tVECTOR2d
) vectorLeftOn = vectorArea(a, b, c) >= 0
vectorRight = vectorArea(a, b, c) < 0
FUNCTION vectorRightOn
(a
AS tVECTOR2d
, b
AS tVECTOR2d
, c
AS tVECTOR2d
) vectorRightOn = vectorArea(a, b, c) <= 0
vectorCollinear = (vectorArea(a, b, c) = 0)
ab.x = b.x - a.x
ab.y = b.y - a.y
bc.x = c.x - b.x
bc.y = c.y - b.y
dot = ab.x * bc.x + ab.y * bc.y
magA
= SQR(ab.x
* ab.x
+ ab.y
* ab.y
) magB
= SQR(bc.x
* bc.x
+ bc.y
* bc.y
) angle
= _ACOS(dot
/ (magA
* magB
)) vectorCollinear = angle < thresholdAngle
SUB vectorGetSupport
(p
() AS tPOLY
, body
() AS tBODY
, index
AS INTEGER, dir
AS tVECTOR2d
, bestVertex
AS tVECTOR2d
) bestVertex.x = -9999999
bestVertex.y = -9999999
bestProjection = -9999999
FOR i
= 0 TO body
(index
).pa.count
v = p(i + body(index).pa.start).vert
projection = vectorDot(v, dir)
IF projection
> bestProjection
THEN bestVertex = v
bestProjection = projection
'**********************************************************************************************
' Matrix Stuff Ahead
'**********************************************************************************************
m.m00 = c
m.m01 = -s
m.m10 = s
m.m11 = c
m.m00 = a
m.m01 = b
m.m10 = c
m.m11 = d
SUB matrixAbs
(m
AS tMATRIX2d
, o
AS tMATRIX2d
)
SUB matrixGetAxisX
(m
AS tMATRIX2d
, o
AS tVECTOR2d
) o.x = m.m00
o.y = m.m10
SUB matrixGetAxisY
(m
AS tMATRIX2d
, o
AS tVECTOR2d
) o.x = m.m01
o.y = m.m11
SUB matrixTransposeI
(m
AS tMATRIX2d
)
SUB matrixTranspose
(m
AS tMATRIX2d
, o
AS tMATRIX2d
) tm.m00 = m.m00
tm.m01 = m.m10
tm.m10 = m.m01
tm.m11 = m.m11
o = tm
SUB matrixInvert
(m
AS tMATRIX2d
, o
AS tMATRIX2d
)
a = m.m00: b = m.m01: c = m.m10: d = m.m11
det = a * d - b * c
det = 1 / det
tm.m00 = det * d: tm.m01 = -det * b
tm.m10 = -det * c: tm.m11 = det * a
o = tm
SUB matrixMultiplyVector
(m
AS tMATRIX2d
, v
AS tVECTOR2d
, o
AS tVECTOR2d
) t.x = m.m00 * v.x + m.m01 * v.y
t.y = m.m10 * v.x + m.m11 * v.y
o = t
SUB matrixAddMatrix
(m
AS tMATRIX2d
, x
AS tMATRIX2d
, o
AS tMATRIX2d
) o.m00 = m.m00 + x.m00
o.m01 = m.m01 + x.m01
o.m10 = m.m10 + x.m10
o.m11 = m.m11 + x.m11
SUB matrixMultiplyMatrix
(m
AS tMATRIX2d
, x
AS tMATRIX2d
, o
AS tMATRIX2d
) o.m00 = m.m00 * x.m00 + m.m01 * x.m10
o.m01 = m.m00 * x.m01 + m.m01 * x.m11
o.m10 = m.m10 * x.m00 + m.m11 * x.m10
o.m11 = m.m10 * x.m01 + m.m11 * x.m11
'**********************************************************************************************
' Mostly Unused Stuff Ahead
'**********************************************************************************************
SUB polygonMakeCCW
(obj
AS tTRIANGLE
) IF vectorLeft
(obj.a
, obj.b
, obj.c
) = 0 THEN
polygonIsReflex = vectorRight(t.a, t.b, t.c)
scalarMin = a
scalarMin = b
scalarMax = a
scalarMax = b
SUB lineIntersection
(l1
AS tLINE2d
, l2
AS tLINE2d
, o
AS tVECTOR2d
) o.x = 0
o.y = 0
a1 = l1.b.y - l1.a.y
b1 = l1.a.x - l1.b.x
c1 = a1 * l1.a.x + b1 * l1.a.y
a2 = l2.b.y - l2.a.y
b2 = l2.a.x - l2.b.x
c2 = a2 * l2.a.x + b2 * l2.a.y
det = a1 * b2 - a2 * b1
o.x = (b2 * c1 - b1 * c2) / det
o.y = (a1 * c2 - a2 * c1) / det
FUNCTION lineSegmentsIntersect
(l1
AS tLINE2d
, l2
AS tLINE2d
) dx = l1.b.x - l1.a.x
dy = l1.b.y - l1.a.y
da = l2.b.x - l2.a.x
db = l2.b.y - l2.a.y
lineSegmentsIntersect = 0
s = (dx * (l2.a.y - l1.a.y) + dy * (l1.a.x - l2.a.x)) / (da * dy - db * dx)
t = (da * (l1.a.y - l2.a.y) + db * (l2.a.x - l1.a.x)) / (db * dx - da * dy)
lineSegmentsIntersect
= (s
>= 0 AND s
<= 1 AND t
>= 0 AND t
<= 1)
'**********************************************************************************************
' Impulse Specific Math Ahead
'**********************************************************************************************
impulseEqual
= ABS(a
- b
) <= cEPSILON
impulseClamp = min
impulseClamp = max
impulseClamp = a
impulseRound
= INT(a
+ 0.5)
impulseRandom_float
= ((max
- min
) * RND + min
)
impulseRandomInteger
= INT((max
- min
) * RND + min
)
impulseGT = (a >= b * cBIAS_RELATIVE + a * cBIAS_ABSOLUTE)
'**********************************************************************************************
' Troubleshooting Tools
'**********************************************************************************************
PRINT "---------------------------" PRINT n;
" u:"; u.m00;
"|"; u.m10
PRINT " "; u.m10;
"|"; u.m11
'**********************************************************************************************
' Generate Bitmap
'**********************************************************************************************
'TODO: Do a pallete pass and color pixels based on pallete
'CarBody - License CC0 - GameArt2D.com
DATA 1147,0,4278190083,4278261626,4278193217 DATA 4278190081,4278190088,4278190084,4278190082 DATA 4278190087,4278394763,4278788960,4278255873 DATA 4278913804,4279308561,4279111182,4279505940 DATA 4279374359,4278255875,4278460556,4279847562 DATA 4278718994,4278584851,4278979598,4279045399 DATA 4279374355,4281282351,4281019179,4280887593 DATA 4279703323,4278387467,4278255879,4279637535 DATA 4278519049,4280840112,4279248424,4279242773 DATA 4279834913,4280492843,4279176979,4279703320 DATA 4280427044,4280953386,4281019183,4280756009 DATA 4281413948,4281611327,4278394506,4281832407 DATA 4279843904,4279111198,4278979597,4280229663 DATA 4280098077,4281677109,4281545523,4281611316 DATA 4281216558,4280756007,4281479730,4282071867 DATA 4283256142,4280953389,4278394505,4282031069 DATA 4281035381,4278190337,4278255880,4280821804 DATA 4289177511,4286677377,4281084972,4280295456 DATA 4282927176,4283848281,4280887600,4278263177 DATA 4281636569,4282623666,4278256387,4281282357 DATA 4289835441,4291743438,4291940817,4285690482 DATA 4281150765,4280558628,4281413937,4282400832 DATA 4284572001,4289769650,4279176977,4278197641 DATA 4280585429,4284014834,4278322438,4283453530 DATA 4291546059,4284045657,4281742902,4280821800 DATA 4281874488,4282532418,4283256141,4287466893 DATA 4289835448,4279600595,4284350207,4279182124 DATA 4278913810,4281151030,4280953651,4281150774 DATA 4278848014,4284440418,4291480266,4292269782 DATA 4293388263,4293585642,4290295992,4283387727 DATA 4282137660,4283321934,4283914071,4293914607 DATA 4284703592,4278616275,4283627263,4281035640 DATA 4281545531,4292927970,4293125348,4293914864 DATA 4282071870,4284506210,4291282887,4293059298 DATA 4293322470,4293388521,4290953923,4283519313 DATA 4280361249,4288980132,4293191142,4290625218 DATA 4278222035,4282707199,4283020486,4289046185 DATA 4291283144,4290690750,4291348937,4281282356 DATA 4278255877,4281479734,4291019458,4292796383 DATA 4293519071,4294567868,4289241230,4281940281 DATA 4284177244,4292596671,4294963139,4283781713 DATA 4278222291,4281065727,4284608508,4278190085 DATA 4288848804,4289901234,4290559164,4280953391 DATA 4280032293,4288059029,4292203991,4294764211 DATA 4294961325,4293908901,4285557857,4283124555 DATA 4283190348,4284308312,4292856989,4294961069 DATA 4292856987,4278387463,4279425023,4284543487 DATA 4279580737,4279241999,4288124824,4289967027 DATA 4290624957,4278190340,4278718003,4278717745 DATA 4278652208,4280034126,4284245130,4290360507 DATA 4291805619,4291871931,4292135101,4285427590 DATA 4281810530,4280757842,4281086807,4280823636 DATA 4282600048,4282600052,4286216071,4291805625 DATA 4291609023,4290622387,4281217360,4278454826 DATA 4278519325,4278395024,4278222546,4278245375 DATA 4284413951,4281631370,4286545792,4279641736 DATA 4281422079,4281356287,4281290495,4281224702 DATA 4281027325,4280961789,4280961788,4281158910 DATA 4281224703,4281027324,4281356030,4281420796 DATA 4281157367,4281425144,4281360610,4279180406 DATA 4280889705,4289112500,4289572532,4289769907 DATA 4289769649,4290361785,4280887599,4278394785 DATA 4278397137,4278397135,4278396879,4278396880 DATA 4278528724,4278397397,4278331344,4279514827 DATA 4280632006,4282274741,4285100955,4287597957 DATA 4287400838,4287137928,4287203721,4283914074 DATA 4278584840,4278328991,4278331342,4278265551 DATA 4278199249,4278594250,4282800035,4285691528 DATA 4286742912,4282861384,4278328992,4278331599 DATA 4278331598,4278331340,4278331339,4278331338 DATA 4278331341,4278331600,4278331601,4278331345 DATA 4278331343,4278200015,4278660043,4280828342 DATA 4282401355,4278262149,4278263446,4278263445 DATA 4278263706,4278263967,4278329508,4278329770 DATA 4278330289,4278330554,4278330817,4278331077 DATA 4278198981,4278193483,4278261618,4278263705 DATA 4278263708,4278263970,4278330549,4278397394 DATA 4278790076,4278526120,4278191946,4278198428 DATA 4280294018,4279770248,4278198430,4278263703 DATA 4278329763,4278330294,4278331081,4278726368 DATA 4279318781,4278661111,4285892299,4291613155 DATA 4279638579,4278198171,4286843961,4291690496 DATA 4291428611,4284354901,4278198170,4278329497 DATA 4278329498,4278263447,4278528195,4279384575 DATA 4279252991,4279186131,4294835967,4294309625 DATA 4285295994,4278263704,4278264490,4278264758 DATA 4278265020,4278265023,4278265022,4278265015 DATA 4278329761,4285206603,4281800561,4279508107 DATA 4286712890,4291756032,4291887104,4286581819 DATA 4279382196,4280961230,4283986144,4291811320 DATA 4291679736,4283131624,4278331346,4279252724 DATA 4279252986,4278200026,4283393738,4293980401 DATA 4293585641,4287796382,4278387720,4278197913 DATA 4279250862,4279449040,4278660313,4278923753 DATA 4279121139,4279121395,4278924011,4278660316 DATA 4278397136,4278330288,4284027480,4292214784 DATA 4291821568,4289856533,4290118674,4292083712 DATA 4288022827,4278200017,4293191931,4289444345 DATA 4291942651,4294967295,4287537661,4278990077 DATA 4278528985,4278197963,4286287062,4294704124 DATA 4289243568,4279243028,4278196378,4284380115 DATA 4294309886,4292600319,4281357055,4279187193 DATA 4278857957,4278594779,4278594522,4278594781 DATA 4278660574,4278396084,4283503453,4286712633 DATA 4282979428,4278525846,4279049873,4292149248 DATA 4287957291,4278330552,4278397140,4281553368 DATA 4279317713,4280829909,4287274217,4285498595 DATA 4279317972,4278857961,4278923755,4278265548 DATA 4278197705,4287799518,4293519848,4290034132 DATA 4279572257,4278197916,4279185605,4294375422 DATA 4289707260,4279120866,4278397138,4278264231 DATA 4278787731,4288415782,4292018176,4290053140 DATA 4282783079,4280490623,4278330553,4278198989 DATA 4278199501,4278197447,4288588513,4293651433 DATA 4290100967,4279640406,4278263707,4278198964 DATA 4279647210,4292731903,4289181179,4279120596 DATA 4278199757,4278263709,4278263964,4278198431 DATA 4288088621,4291494149,4290839309,4286123587 DATA 4288743462,4292345856,4291952640,4292870144 DATA 4283832441,4278200530,4278197704,4287865309 DATA 4293651176,4289969379,4279643540,4278594780 DATA 4279252987,4278398203,4278198741,4278330029 DATA 4278330028,4278330293,4278264235,4278195300 DATA 4278195561,4278195820,4279112542,4280815435 DATA 4281077576,4278392166,4278457446,4285007388 DATA 4287496192,4287692800,4284941852,4281535812 DATA 4287103235,4287365120,4284484929,4278200271 DATA 4278330550,4278331080,4278197964,4286352850 DATA 4293454054,4289180125,4279317192,4278261361 DATA 4278396349,4279055603,4278594778,4278196610 DATA 4278391654,4284352035,4287430656,4285924114 DATA 4278195309,4278784866,4285793043,4287561728 DATA 4287168515,4281142856,4278195569,4283566124 DATA 4287823872,4286906894,4280098983,4278198991 DATA 4283327426,4294440951,4294769657,4287667666 DATA 4278660566,4278191126,4278261362,4278594523 DATA 4278989549,4278329240,4278591105,4278656638 DATA 4278460560,4278197917,4278264488,4278265807 DATA 4281739161,4290256932,4290977052,4290780702 DATA 4290911516,4288226363,4280235670,4280890511 DATA 4284689251,4283510641,4279973786,4279842714 DATA 4282986359,4291370263,4285932130,4278396877 DATA 4278264492,4278263702,4278525844,4278787708 DATA 4278722175,4278329239,4278198172,4278330547 DATA 4278199759,4279448250,4293256677,4294309364 DATA 4286221793,4278199503,4278192955,4278262146 DATA 4278990065,4278330814,4278787702,4279900702 DATA 4279900696,4279834904,4280496228,4278460824 DATA 4278198957,4280557998,4289922331,4291493890 DATA 4284354899,4278198429,4279639178,4290380559 DATA 4291035659,4282195091,4278200532,4280561513 DATA 4281611315,4279900697,4279966233,4278918763 DATA 4278330816,4278197442,4288259022,4292073188 DATA 4281422050,4278331604,4278259542,4278195856 DATA 4279055871,4278792434,4278199499,4278264227 DATA 4278198174,4279245905,4279966229,4279900698 DATA 4282992708,4282665318,4278526617,4278199746 DATA 4286909504,4289790472,4290772992,4290576384 DATA 4290510848,4289135376,4281276010,4278197390 DATA 4279572862,4284419653,4289921287,4288939548 DATA 4278462415,4278265539,4278592409,4282139754 DATA 4283124296,4280492835,4279834905,4279376968 DATA 4278199221,4280566472,4278792700,4278200283 DATA 4278193764,4278716426,4282663492,4285036746 DATA 4284907774,4285170163,4285432802,4285498852 DATA 4282013127,4278197144,4278984034,4279900699 DATA 4284440154,4280560725,4278198439,4278195825 DATA 4278784867,4285989906,4287627264,4287889408 DATA 4288217088,4288086016,4283830356,4278200794 DATA 4280101477,4284242772,4279115099,4278197400 DATA 4281289407,4285630437,4285367267,4285301488 DATA 4284907775,4285170416,4284903852,4284440168 DATA 4282532426,4278782218,4278650631,4290559169 DATA 4294901502,4294572532,4294572534,4294966773 DATA 4280828586,4280559931,4280953385,4280163870 DATA 4283585106,4280098073,4278787698,4278198434 DATA 4278330551,4278194794,4278194535,4280748871 DATA 4286906369,4287299584,4286447622,4281469503 DATA 4281862203,4286185482,4281145999,4278200265 DATA 4278263968,4278656644,4280294939,4283387726 DATA 4282664004,4280032284,4279769112,4279834648 DATA 4279638308,4278328454,4279513505,4294967286 DATA 4294309361,4294309105,4294901241,4294572535 DATA 4291348684,4284308835,4293783021,4294111986 DATA 4291349725,4278195605,4279642224,4281676849 DATA 4280624421,4283058762,4279966491,4279638832 DATA 4278199230,4280960174,4280960427,4283776908 DATA 4291374389,4292225835,4292291370,4289671496 DATA 4281811874,4280894892,4281484454,4289737031 DATA 4292553511,4279446214,4278199483,4278198176 DATA 4279573567,4279966489,4282335039,4283716692 DATA 4281611053,4279773290,4278197656,4290165975 DATA 4293585639,4293651435,4293980400,4294177779 DATA 4285624694,4290690752,4294638330,4293848553 DATA 4286680774,4278197139,4280692306,4281676850 DATA 4282006074,4279835170,4278722172,4278264754 DATA 4279442571,4288612131,4291100934,4282586472 DATA 4278198691,4285206345,4291297542,4278200792 DATA 4278264752,4278525837,4279900701,4283979864 DATA 4281611057,4281086020,4278197912,4286220483 DATA 4293914345,4293717228,4292598749,4293125093 DATA 4294111722,4283327156,4278197134,4279177247 DATA 4279308311,4279242776,4279374361,4280690220 DATA 4282598211,4283650899,4280427042,4279049569 DATA 4278199215,4284028269,4291166208,4290117632 DATA 4289986560,4288087062,4278262662,4278393733 DATA 4283502667,4286580775,4285467444,4288611088 DATA 4288153122,4278200789,4278264491,4278918508 DATA 4279900700,4283782485,4282729797,4281413938 DATA 4281150770,4281019186,4281216043,4278394770 DATA 4283064243,4294177258,4292006611,4293454056 DATA 4294308843,4281222826,4278196869,4279111184 DATA 4281413939,4282861383,4279245903,4278198695 DATA 4280884628,4288151552,4287758336,4287954944 DATA 4285858837,4278916196,4278195824,4284221223 DATA 4285270581,4278200531,4278198696,4279245910 DATA 4279703319,4283848278,4281874489,4278255874 DATA 4278255616,4278261358,4281025706,4292335575 DATA 4288980136,4292861919,4294440428,4279907748 DATA 4278195827,4279769116,4282203453,4284177243 DATA 4279311430,4278528192,4281544301,4281609583 DATA 4280561787,4279644548,4279972225,4282592100 DATA 4286652981,4283967572,4285211974,4288879900 DATA 4289076505,4285669459,4278200272,4278198694 DATA 4279442504,4284440415,4282992969,4282269246 DATA 4279900704,4278260059,4280631209,4293322471 DATA 4293454055,4292796126,4290493373,4283848285 DATA 4292138196,4293124568,4279841954,4278195308 DATA 4278387460,4280756011,4284308829,4279376965 DATA 4278331076,4278197655,4278721939,4282062446 DATA 4278918289,4278394262,4285795395,4292411392 DATA 4287695677,4279508037,4284111450,4283453520 DATA 4281150768,4278259796,4280368294,4292006612 DATA 4292203988,4292006610,4284900973,4288585380 DATA 4291809231,4292664018,4280894124,4278196089 DATA 4278650634,4282795590,4282795594,4279311433 DATA 4278265287,4278329237,4278329496,4278394775 DATA 4278656916,4278263960,4278198426,4283176034 DATA 4291690498,4288219704,4278200018,4278460847 DATA 4279442507,4281677116,4284243036,4278848016 DATA 4278260575,4280499886,4292203729,4291875023 DATA 4292203989,4288980138,4278519046,4278782220 DATA 4286743170,4287203722,4280887075,4279769118 DATA 4279966499,4278782223,4281282354,4279900438 DATA 4279965969,4281676586,4281742382,4281611052 DATA 4281676845,4281676589,4281480496,4281022005 DATA 4281152819,4281150241,4279900176,4279900439 DATA 4280821805,4278453253,4279308569,4280295461 DATA 4280097560,4287269515,4286808963,4284637799 DATA 4278584841,4281216562,4284177245,4279111189 DATA 4282466625,4278979596,4281348145,4279111188 DATA 4283387732,4278782224,4281808695,4281808702 DATA 4281479731,4278584838,4281150773,4279242772 DATA 4280163874,4284374622,4279571740,4281874497 DATA 4282729805,4284243037,4280492840,4278584844 DATA 4283453524,4278387462,4282006081,4281874490 DATA 4280887595,4281940283,4282006079,4278387461 DATA 4278650632,4282992974,4278782222,4278848012 DATA 4282664008,4280558633,4280427043,4280492837 DATA 4282335044,4281611319,4278321671,4278716428 DATA 4278716427,4280624423,4282729801,4278584842 DATA 4278519051,4281216561,4279308562,4280361252 DATA 4283782490,4278716424,4279571733,4280953388 DATA 4281479732,4283848282,4278782221,4280098084 DATA 4281282352,4279966496,4283387729,4282466626 DATA 4280427047,4281348146,4280558634,4283256144 DATA 4279834909,4278584843,4278321668,4279242769 DATA 4280229672,4280624425,4279374357,4281348144 DATA 4279440151,4280821802,4283519315,4279703328 DATA 4278453256,4282203456,4283453522,4282006080 DATA 4278848013,4281216560,4278979600,4280492841 DATA 4281874491,4278716433,4278782226,4279505946 DATA 4281808698,4280427046,4279111186,4281216559 DATA 4278913807,4279308565,4278519047,4278650639 DATA 4281150767,4279045394,4281150766,4281677112 DATA 4279308566,4281084975,4279637526,4278519054 DATA 4281413940,4278255876,4280361260,4280295464 DATA 4278321666,4280229665,4280887598,4280032288 DATA 4278979602,4278979601,4281348149,4282006075 DATA 4282861386,4280098083,4280163878,4282532420 DATA 4278716425,4279045389,4280887597,4282729798 DATA 4278782217,4279703326,4281808696,4279176975 DATA 4279176980,4280558635,4278453255,4282729799 DATA 4279045391,4282203457,4280163877,4278321667 DATA 4281413943,4281808699,4278650633,4280229668 DATA 4282795591,4280163875,4279637532,4280229670 DATA 4279900706,4281282360,4280163879,0,22,1,1,0,11,2,0,3,0 DATA 0,45,4,0,5,0,6,0,7,0,8,0,6,0,0,9 DATA 9,0,10,0,7,0,0,41,7,0,4,0,0,0,11,0 DATA 12,0,13,0,14,0,15,0,16,0,0,0,7,0,17,0 DATA 0,6,18,0,19,0,20,0,0,40,21,0,22,0,23,0 DATA 4,0,11,0,24,0,25,0,26,0,27,0,28,0,29,0 DATA 30,0,31,0,32,0,0,5,9,0,33,0,34,0,0,40 DATA 35,0,36,0,37,0,38,0,39,0,40,0,25,0,26,0 DATA 41,0,42,0,43,0,44,0,45,0,31,0,0,5,46,0 DATA 47,0,48,0,0,40,49,0,50,0,51,0,52,0,53,0 DATA 54,0,55,0,56,0,57,0,55,0,58,0,59,0,60,0 DATA 61,0,0,5,62,0,63,0,64,0,65,0,0,38,66,0 DATA 67,0,59,0,68,0,69,0,70,0,54,1,55,0,71,0 DATA 53,0,54,0,58,0,72,0,73,0,74,0,0,4,75,0 DATA 76,0,77,0,78,0,0,39,79,0,80,0,81,0,82,0 DATA 83,0,84,0,54,1,85,0,86,0,54,1,87,0,88,0 DATA 89,0,90,0,0,3,91,0,92,0,93,0,94,0,0,39 DATA 95,0,81,0,96,0,82,0,96,0,97,0,98,0,54,0 DATA 99,0,84,0,54,0,100,0,101,0,102,0,103,0,104,0 DATA 7,0,0,2,91,0,105,0,106,0,107,0,0,2,108,0 DATA 109,0,110,7,111,0,112,0,0,24,113,0,114,0,115,0 DATA 116,0,117,0,118,0,119,0,120,0,99,0,56,0,27,0 DATA 102,0,121,0,122,0,96,0,123,0,124,0,0,2,75,0 DATA 125,0,126,0,127,0,0,1,128,0,129,0,130,8,131,0 DATA 132,0,0,23,5,0,133,0,134,0,135,0,136,0,137,0 DATA 138,0,139,0,120,0,99,0,56,0,41,0,102,0,140,0 DATA 121,0,141,0,142,0,143,0,4,0,0,1,75,0,144,0 DATA 145,0,146,0,0,0,1,0,147,0,148,0,149,8,150,0 DATA 151,0,0,23,152,0,153,0,154,0,155,0,156,0,157,0 DATA 158,0,159,0,98,0,99,0,56,0,27,0,120,0,84,0 DATA 160,0,161,0,162,0,163,0,0,2,75,0,164,0,165,0 DATA 166,0,167,0,39,0,168,0,169,9,170,0,171,0,0,24 DATA 172,0,173,0,174,0,175,0,176,0,177,0,178,0,120,0 DATA 99,0,56,0,41,0,179,0,180,0,181,0,182,0,183,0 DATA 184,0,185,0,0,1,75,0,164,0,186,0,187,0,188,0 DATA 189,0,190,0,191,9,192,0,171,0,0,11,193,0,194,0 DATA 195,9,196,0,197,0,198,0,199,0,200,0,201,0,202,0 DATA 203,0,204,0,205,0,206,0,207,0,208,0,209,0,210,0 DATA 211,0,212,0,213,0,214,0,215,0,216,0,217,0,218,0 DATA 219,0,220,0,221,0,4,0,222,0,191,9,192,0,171,0 DATA 0,11,223,0,224,0,225,10,226,0,227,0,228,0,229,1 DATA 230,0,231,0,226,3,232,0,227,0,231,0,228,0,233,0 DATA 228,0,226,0,225,1,234,0,235,0,236,0,237,0,238,0 DATA 239,0,240,0,241,0,242,0,243,0,169,5,244,0,245,0 DATA 246,0,0,11,247,0,248,0,249,33,250,0,251,0,252,0 DATA 253,0,254,0,255,0,256,0,257,0,258,0,259,0,260,0 DATA 261,0,262,0,263,0,28,0,264,0,0,11,265,0,254,0 DATA 266,40,267,0,268,0,269,0,270,0,271,0,272,0,273,0 DATA 0,13,274,0,275,0,276,22,277,0,278,0,279,1,277,0 DATA 280,0,281,0,282,0,283,1,254,1,284,0,266,7,285,0 DATA 286,0,287,0,288,0,0,13,289,0,290,0,291,22,290,4 DATA 291,1,290,0,292,0,293,0,294,0,295,0,296,0,297,0 DATA 298,0,299,0,278,0,284,1,266,3,267,0,300,0,301,0 DATA 0,12,302,0,292,0,303,37,292,0,304,0,305,0,306,0 DATA 278,0,254,0,266,3,307,0,308,0,309,0,310,0,4,0 DATA 0,8,302,0,292,0,303,24,311,0,312,0,313,0,314,0 DATA 303,11,315,0,290,0,316,0,317,0,318,0,266,0,319,0 DATA 320,0,321,0,322,0,323,0,324,0,0,8,302,0,292,0 DATA 303,23,325,0,326,0,327,0,328,0,329,0,330,0,303,11 DATA 331,0,332,0,303,0,333,0,334,0,335,0,336,0,337,0 DATA 338,0,339,0,340,0,4,0,0,7,302,0,292,0,303,2 DATA 341,0,292,0,342,0,343,0,344,0,345,0,346,0,347,0 DATA 348,0,315,0,303,6,330,0,349,0,350,0,351,0,352,0 DATA 353,1,327,0,354,0,355,0,325,0,303,5,341,0,292,0 DATA 356,0,357,0,358,0,359,0,360,0,361,0,362,0,363,0 DATA 364,0,365,0,366,0,367,0,368,0,369,0,370,0,0,7 DATA 302,0,292,0,303,1,371,0,372,0,373,0,374,0,375,0 DATA 376,0,377,0,378,0,379,0,380,0,381,0,303,6,314,0 DATA 382,0,354,0,383,0,384,0,385,0,386,0,353,0,327,0 DATA 387,0,388,0,311,0,330,0,303,3,295,0,389,0,390,0 DATA 391,0,392,0,393,1,394,0,395,0,320,0,396,0,397,0 DATA 398,0,399,0,116,0,400,0,401,0,0,7,302,0,292,0 DATA 341,0,402,0,403,0,404,0,405,0,406,0,407,0,408,0 DATA 409,0,396,0,410,0,411,0,412,0,413,0,303,7,414,0 DATA 415,0,416,0,417,0,418,0,419,0,327,1,354,0,420,0 DATA 417,0,311,0,303,0,292,0,421,0,248,0,422,0,423,0 DATA 424,0,425,0,426,0,427,0,428,0,429,0,430,0,431,0 DATA 432,0,433,0,393,0,434,0,435,0,436,0,0,7,302,0 DATA 292,0,437,0,438,0,439,0,393,0,440,0,441,0,431,0 DATA 280,0,266,3,280,0,442,0,443,0,341,0,303,5,325,0 DATA 311,0,351,0,444,0,314,0,445,0,446,0,327,1,354,0 DATA 447,0,448,0,449,0,450,0,283,0,266,4,451,0,452,0 DATA 266,1,442,0,266,0,453,0,454,0,393,0,455,0,456,0 DATA 457,0,0,7,302,0,458,0,459,0,460,0,461,0,462,0 DATA 463,0,464,0,266,2,284,2,266,1,280,0,465,0,466,5 DATA 467,0,468,0,469,0,470,0,471,0,472,0,473,0,419,0 DATA 474,2,475,0,476,0,477,0,266,1,284,2,266,6,478,0 DATA 479,0,393,0,480,0,481,0,482,0,4,0,0,6,302,0 DATA 305,0,483,0,484,0,485,0,486,0,280,0,266,0,284,0 DATA 318,0,297,0,487,0,488,0,489,0,299,0,266,0,284,0 DATA 490,0,491,0,492,0,493,0,494,0,495,0,496,0,497,0 DATA 498,0,499,0,500,0,501,1,502,0,503,0,504,0,505,0 DATA 501,0,506,0,507,0,266,0,284,0,299,0,508,0,488,0 DATA 487,0,450,0,509,0,254,0,266,3,510,0,511,0,393,0 DATA 512,0,513,0,514,0,4,0,0,6,515,0,516,0,517,0 DATA 335,0,518,0,266,1,254,0,297,0,303,5,381,0,266,0 DATA 509,0,519,0,520,0,521,0,522,0,500,0,501,0,523,0 DATA 524,0,525,0,526,0,527,0,528,0,529,0,530,0,531,0 DATA 532,0,533,0,534,0,266,0,280,0,296,0,292,0,303,3 DATA 292,0,489,0,254,0,266,2,535,0,536,0,537,0,538,0 DATA 539,0,540,0,541,0,0,6,542,0,543,0,335,0,544,0 DATA 284,0,266,0,284,0,489,0,341,0,458,0,545,0,546,0 DATA 547,0,548,0,549,0,290,0,550,0,551,0,552,0,553,0 DATA 554,0,555,2,556,0,557,0,558,0,559,0,560,0,561,0 DATA 562,0,563,0,564,0,565,0,566,0,567,0,284,0,568,0 DATA 569,0,549,0,570,0,571,0,572,0,573,0,574,0,303,0 DATA 575,0,280,0,266,1,576,0,577,0,578,0,579,0,580,0 DATA 581,0,582,0,0,6,583,0,584,0,320,0,543,0,266,1 DATA 585,0,458,0,292,0,586,0,587,0,588,0,589,0,86,0 DATA 590,0,591,0,303,0,592,0,593,0,594,0,327,4,595,0 DATA 596,0,597,0,303,1,330,0,598,0,599,0,600,0,601,0 DATA 602,0,296,0,315,0,332,0,603,0,604,0,605,0,588,0 DATA 606,0,607,0,458,0,341,0,608,0,266,1,284,0,609,0 DATA 610,0,611,0,612,0,613,0,614,0,0,6,615,0,616,0 DATA 617,0,268,0,451,0,618,0,619,0,620,0,621,0,622,0 DATA 605,0,623,0,51,0,98,0,624,0,625,0,626,0,458,0 DATA 627,0,628,0,629,0,630,0,631,0,632,1,631,0,633,0 DATA 634,0,635,0,636,0,637,0,638,0,631,0,639,0,640,0 DATA 641,0,292,0,642,0,643,0,644,0,55,0,645,0,646,0 DATA 623,0,622,0,647,0,341,0,293,0,464,0,451,1,535,0 DATA 648,0,649,0,650,0,651,0,652,0,0,4,653,0,654,0 DATA 655,0,656,0,657,0,658,0,659,0,660,0,661,0,662,0 DATA 663,0,623,1,646,0,41,0,100,0,102,0,664,0,665,0 DATA 437,0,487,0,666,0,667,0,668,0,669,0,670,0,500,2 DATA 671,0,672,0,673,0,501,0,500,0,527,0,674,0,675,0 DATA 550,0,292,0,676,0,677,0,121,0,159,0,70,0,646,0 DATA 623,1,663,0,678,0,679,0,680,0,681,0,682,2,683,0 DATA 684,0,685,0,686,0,687,0,688,0,689,0,0,0,690,0 DATA 691,0,692,0,393,0,693,0,393,0,694,0,695,0,696,0 DATA 62,0,697,0,698,0,27,0,699,0,623,0,86,0,87,0 DATA 700,1,701,0,702,0,703,0,704,0,705,0,706,0,707,0 DATA 708,0,709,1,527,0,710,0,711,0,712,0,713,0,527,0 DATA 522,0,714,0,715,0,716,0,717,0,718,0,719,0,139,0 DATA 720,0,25,0,721,0,722,1,723,0,724,0,725,0,726,0 DATA 727,0,728,0,729,2,730,0,393,0,731,0,393,1,732,0 DATA 7,0,733,0,393,2,734,0,735,0,455,0,736,0,737,0 DATA 738,0,739,0,54,0,55,0,56,0,740,0,58,0,741,0 DATA 122,0,87,0,742,0,743,0,574,0,744,0,745,0,746,0 DATA 747,0,748,0,749,0,750,0,751,0,752,0,746,0,753,0 DATA 754,0,755,0,756,0,757,0,758,0,759,0,760,0,761,0 DATA 762,0,763,0,180,0,55,0,54,0,58,2,764,0,765,0 DATA 766,0,767,0,768,0,136,1,578,0,769,0,770,0,771,0 DATA 393,2,772,0,773,0,771,0,774,0,123,0,136,1,775,0 DATA 776,0,777,0,778,0,779,0,55,1,54,1,780,0,102,0 DATA 97,0,56,0,623,0,781,0,782,0,783,0,592,0,784,0 DATA 785,0,354,0,327,0,786,0,787,0,574,0,325,0,620,0 DATA 788,0,789,0,790,0,791,0,792,0,793,0,794,0,646,0 DATA 84,0,795,0,180,0,120,0,54,3,796,0,797,0,798,0 DATA 799,0,800,0,136,4,116,0,771,0,774,0,801,0,802,0 DATA 803,0,578,1,136,2,804,0,805,0,806,0,807,0,808,0 DATA 809,0,810,0,811,0,54,0,812,0,121,0,813,0,814,0 DATA 623,0,794,0,815,0,816,0,817,0,818,0,819,0,820,0 DATA 819,0,821,0,822,0,823,0,824,0,825,0,826,0,827,0 DATA 828,0,829,0,830,0,831,0,832,0,623,0,51,0,833,0 DATA 102,0,834,0,835,0,836,0,837,2,838,0,839,0,840,0 DATA 841,0,136,5,578,1,136,0,116,0,842,0,843,0,136,3 DATA 844,0,845,0,846,0,0,3,847,0,848,0,741,0,813,0 DATA 849,0,623,1,605,0,850,0,851,0,852,0,853,0,854,0 DATA 855,0,856,0,857,0,858,0,859,0,670,2,532,0,860,0 DATA 861,0,862,0,863,0,663,0,623,0,864,0,834,0,865,0 DATA 72,0,866,0,22,0,867,2,868,0,869,0,870,0,841,0 DATA 136,7,116,0,871,0,872,0,873,0,116,3,874,0,875,0 DATA 876,0,0,2,4,0,877,0,878,0,741,0,879,0,159,0 DATA 623,1,605,0,880,0,304,0,881,0,882,0,883,0,884,0 DATA 885,0,886,0,887,0,888,0,889,0,890,0,891,0,892,0 DATA 893,0,894,0,895,0,896,0,623,1,721,0,100,0,897,0 DATA 898,0,899,0,900,0,0,3,901,0,902,0,903,0,904,0 DATA 116,5,843,0,905,0,906,0,907,0,908,0,82,0,908,2 DATA 909,0,910,0,911,0,0,2,912,0,913,0,720,0,179,0 DATA 914,0,98,0,57,0,623,0,605,0,915,0,458,0,916,0 DATA 917,0,371,2,918,0,919,0,920,0,371,0,921,0,922,0 DATA 923,0,924,0,477,0,895,0,925,0,623,0,742,0,27,0 DATA 54,0,926,0,927,0,101,0,928,0,11,0,0,2,929,0 DATA 930,0,931,0,932,0,908,5,82,0,933,0,934,0,689,0 DATA 935,0,908,0,936,2,937,0,938,0,939,0,0,2,940,0 DATA 100,0,941,0,122,0,942,0,246,0,55,0,99,0,589,0 DATA 943,0,666,0,944,0,945,0,946,2,947,0,948,0,949,0 DATA 946,0,950,0,951,0,952,0,953,0,954,0,955,0,956,0 DATA 623,0,85,0,98,0,36,0,957,0,958,0,941,0,159,0 DATA 959,0,0,2,960,0,961,0,962,0,963,0,936,5,964,0 DATA 965,0,966,0,0,0,967,0,124,0,968,2,969,0,970,0 DATA 0,0,4,0,0,1,971,0,120,0,898,0,88,0,972,0 DATA 973,0,974,0,55,0,57,0,975,0,976,0,977,0,978,2 DATA 979,0,980,0,981,3,982,0,983,0,984,0,985,0,986,0 DATA 987,0,52,0,53,0,988,0,989,0,990,0,88,0,180,0 DATA 59,0,991,0,0,3,992,0,993,0,968,5,994,0,995,0 DATA 996,0,0,11,7,0,997,0,87,0,927,0,998,0,6,0 DATA 0,0,999,0,54,1,84,0,1000,0,55,0,54,1,98,0 DATA 1001,0,70,0,52,0,722,0,740,0,52,0,53,0,54,1 DATA 899,0,1000,0,70,0,86,0,1002,0,1003,0,0,0,4,0 DATA 1004,0,763,0,1000,0,54,0,167,0,0,25,1005,0,1006,0 DATA 941,0,879,0,1007,0,0,2,990,0,1008,0,849,0,139,0 DATA 55,0,54,1,98,0,1009,0,26,0,646,0,15,0,814,0 DATA 646,0,53,0,54,1,120,0,763,0,834,0,54,0,972,0 DATA 4,0,0,1,1010,0,879,0,741,0,55,0,1011,0,0,25 DATA 1012,0,159,0,102,0,1013,0,1014,0,0,3,1015,0,700,0 DATA 179,0,55,0,54,1,98,0,1009,0,26,0,646,0,15,0 DATA 814,0,646,0,53,0,54,1,780,0,180,0,139,0,1016,0 DATA 7,0,0,2,1011,0,1017,0,121,0,780,0,1018,0,0,25 DATA 1019,0,55,0,813,0,1020,0,912,0,0,1,1021,0,1022,0 DATA 813,0,898,0,1023,0,54,2,98,0,1009,0,26,0,646,0 DATA 15,0,814,0,646,0,53,0,54,1,1024,0,1025,0,741,0 DATA 927,0,1026,0,1027,0,0,1,1028,0,1029,0,813,0,159,0 DATA 1030,0,0,24,4,0,1031,0,51,0,941,0,957,0,867,0 DATA 0,0,996,0,1032,0,180,0,741,0,159,0,1033,0,58,0 DATA 54,1,98,0,1009,0,26,0,646,0,15,0,814,0,646,0 DATA 53,0,54,1,1034,0,1035,0,159,0,179,0,121,0,1036,0 DATA 996,0,0,0,867,0,1037,0,849,0,645,0,689,0,6,0 DATA 0,23,1038,0,14,0,57,0,61,0,1039,0,0,0,1040,0 DATA 942,0,119,0,849,0,98,0,54,0,811,0,58,0,54,1 DATA 98,0,1009,0,26,0,646,0,15,0,814,0,646,0,53,0 DATA 54,1,1034,0,1041,0,54,0,98,0,941,0,927,0,1042,0 DATA 1043,0,0,0,1044,0,1045,0,740,0,1046,0,1021,0,0,23 DATA 996,0,722,0,99,0,1047,0,7,0,1040,0,1048,0,179,0 DATA 720,0,54,6,98,0,1049,0,26,0,742,0,1050,0,645,0 DATA 742,0,53,0,54,1,1051,0,1052,0,54,1,55,0,720,0 DATA 179,0,1053,0,1054,0,0,0,1055,0,26,0,623,0,996,0 DATA 4,0,0,21,17,0,653,0,140,0,1056,0,959,0,1057,0 DATA 1058,0,179,0,1059,0,1060,0,848,0,54,19,1061,0,1062,0 DATA 1059,0,180,0,1063,0,1064,0,1065,0,55,0,71,0,1031,0 DATA 867,0,0,21,1066,0,1067,0,645,0,848,0,1068,0,1058,0 DATA 179,0,87,0,1069,0,17,0,1070,0,53,0,54,0,98,0 DATA 86,0,25,0,1071,9,25,0,53,1,54,1,1072,0,4,0 DATA 1073,0,87,0,180,0,1074,0,1075,0,974,0,85,0,1070,0 DATA 1066,0,0,20,4,0,1076,0,646,0,41,0,1077,0,1078,0 DATA 179,0,159,0,54,0,1035,0,7,0,22,0,55,0,780,0 DATA 121,0,100,0,722,0,742,9,623,0,898,0,102,0,100,0 DATA 54,0,90,0,4,0,99,0,54,0,780,0,741,0,139,0 DATA 1079,0,25,0,646,0,32,0,0,21,1080,0,52,0,54,0 DATA 1000,0,898,0,100,0,54,1,1081,0,1082,0,1083,0,101,0 DATA 927,0,898,0,1084,0,35,0,1085,0,1086,7,1085,0,1087,0 DATA 1088,0,898,0,139,0,87,0,1089,0,1090,0,1091,0,54,1 DATA 159,0,898,0,72,0,86,0,52,0,1092,0,0,20,17,0 DATA 1093,0,645,0,54,0,898,0,98,0,54,3,53,0,119,0 DATA 179,0,101,0,37,0,912,0,0,11,1094,0,37,0,812,0 DATA 180,0,121,0,98,0,54,3,98,0,898,0,53,0,99,0 DATA 13,0,30,0,0,18,6,0,1095,0,1050,0,56,0,55,0 DATA 1096,0,1097,0,1098,0,54,0,58,0,762,0,927,0,849,0 DATA 1099,0,35,0,4,0,0,13,7,0,1100,0,1037,0,72,0 DATA 119,0,762,0,58,0,54,0,1096,0,112,0,1101,0,1006,0 DATA 56,0,1102,0,973,0,1,0,0,16,1103,0,1104,0,1000,0 DATA 41,0,1071,0,54,0,1034,0,1105,0,1073,0,58,0,741,0 DATA 119,0,899,0,1106,0,7,0,0,17,4,0,1107,0,87,0 DATA 121,0,179,0,54,0,57,0,1108,0,1109,0,55,0,56,0 DATA 25,0,1000,0,1110,0,185,0,0,14,17,0,1037,0,865,0 DATA 763,0,119,0,55,0,54,0,1061,0,1111,0,59,0,119,0 DATA 849,0,974,0,1112,0,0,21,1113,0,1114,0,941,0,119,0 DATA 1115,0,794,0,1061,0,58,0,100,0,813,0,865,0,833,0 DATA 988,0,7,0,0,13,847,0,1116,0,70,0,722,0,720,0 DATA 120,0,54,0,55,0,720,0,121,0,59,0,1117,0,1,0 DATA 0,23,1,0,1118,0,120,0,119,0,812,0,55,0,58,0 DATA 812,0,87,0,1102,0,159,0,1119,0,1120,0,0,12,4,0 DATA 28,0,720,0,1121,0,1108,0,27,0,87,0,100,0,121,0 DATA 849,0,246,0,967,0,4,0,0,26,1030,0,1122,0,849,0 DATA 102,0,59,0,720,0,699,0,1108,0,864,0,1123,0,1097,0 DATA 0,12,4,0,877,0,120,0,1124,0,0,0,814,0,101,0 DATA 121,0,1023,0,1125,0,7,0,0,29,7,0,971,0,1126,0 DATA 180,0,762,0,1102,0,0,0,1127,0,101,0,1128,0,0,13 DATA 1070,0,1123,0,15,0,1009,0,86,0,87,0,1129,0,185,0 DATA 0,33,1130,0,37,0,720,0,71,0,0,0,646,0,1131,0 DATA 1132,0,0,13,967,0,1133,0,878,0,84,0,720,0,1134,0 DATA 0,36,1135,0,1136,0,87,0,740,0,159,0,1137,0,1138,0 DATA 0,13,7,0,1139,0,72,0,179,0,1137,0,1054,0,0,36 DATA 4,0,28,0,1140,0,179,0,898,0,1141,0,7,0,0,14 DATA 1105,0,1142,0,1143,0,108,0,4,0,0,37,1105,0,1144,0 DATA 1145,0,1146,0,185,0,0,9
'Wheel - License CC0 - GameArt2D.com
DATA 429,0,4278453261,4279045404,4279900712 DATA 4280624431,4281282361,4281348158,4279834919 DATA 4279966518,4281282366,4281150776,4280427054 DATA 4279900708,4279045400,4278321677,4278190084 DATA 4278782227,4280098089,4281348156,4282795593 DATA 4283190348,4283256141,4280427050,4280756026 DATA 4282598215,4278387466,4279440166,4283058763 DATA 4283124555,4282861383,4282532418,4282335039 DATA 4282137660,4281150770,4280427049,4281413942 DATA 4282203453,4282598211,4282532423,4278453263 DATA 4278255877,4278255882,4278321672,4279703334 DATA 4278387468,4278453260,4282598214,4281874488 DATA 4281611316,4281545523,4281940281,4282400832 DATA 4280624437,4278190083,4279571750,4281874497 DATA 4278190088,4279440163,4282071875,4279637541 DATA 4278387470,4279505948,4281282354,4280624427 DATA 4279308574,4281479740,4281940287,4279176991 DATA 4278190081,4278650641,4283058762,4281611320 DATA 4281150768,4281677109,4282466625,4280690226 DATA 4279308580,4282400838,4281742902,4282664004 DATA 4282071873,4278979611,4278190082,4278190086 DATA 4282992969,4282071867,4282861385,4279505961 DATA 4279308589,4281479730,4282795590,4279045405 DATA 4278255883,4280427062,4281216558,4280887593 DATA 4280558628,4280361249,4280229663,4280163870 DATA 4280295456,4280427042,4280624421,4280953386 DATA 4281282351,4280098093,4279045410,4278255874 DATA 4279966501,4281150765,4280098077,4279900698 DATA 4279505956,4279111196,4279703339,4279966499 DATA 4281019179,4279571749,4280361261,4279374372 DATA 4281348144,4278650646,4280756007,4279966491 DATA 4284111450,4285098345,4285624689,4285558896 DATA 4285032552,4283914071,4282269246,4282006081 DATA 4278190085,4281150778,4282927176,4281413937 DATA 4284243036,4287598479,4289440683,4289967027 DATA 4289901234,4289506476,4288651167,4288716960 DATA 4289638062,4289309097,4287203721,4283782485 DATA 4280492835,4280690214,4285493103,4289374890 DATA 4285361517,4279637526,4286282619,4289703855 DATA 4289111718,4284769380,4279111198,4278387467 DATA 4282335045,4289177511,4288782753,4279703319 DATA 4281874495,4280032301,4286348412,4290164406 DATA 4290624957,4291085508,4289572269,4290032820 DATA 4291019715,4290559164,4290098613,4289769648 DATA 4285427310,4287532686,4290230199,4291546059 DATA 4291611852,4286743170,4291282887,4291480266 DATA 4290953922,4286611584,4281742907,4280163882 DATA 4278453264,4278321669,4281545531,4290756543 DATA 4291217094,4291348680,4286545791,4281019183 DATA 4278321670,4279769121,4291151301,4279242782 DATA 4278321674,4279111199,4278519052,4278387471 DATA 4278190087,4281019184,4284045657,4292072403 DATA 4292532954,4292861919,4292993505,4292796126 DATA 4292467161,4292006610,4281084979,4282137667 DATA 4278584852,4280295472,4280756019,4292203989 DATA 4293125091,4293980400,4294375158,4294440951 DATA 4294046193,4293388263,4293322470,4293256677 DATA 4292927712,4292138196,4281874496,4281084972 DATA 4285953654,4290822336,4291677645,4294572537 DATA 4294967295,4294769916,4293585642,4292664540 DATA 4284703587,4281084984,4278650640,4282927178 DATA 4290295992,4291743438,4294901502,4294835709 DATA 4293783021,4293059298,4289045925,4282598216 DATA 4278321678,4279440159,4280032284,4284900966 DATA 4293454056,4294704123,4291940817,4288322202 DATA 4288256409,4293190884,4292598747,4290888129 DATA 4283585106,4278979608,4280163885,4288190616 DATA 4292269782,4294309365,4288387995,4288980132 DATA 4289243304,4288914339,4289835441,4287006342 DATA 4279769124,4281150774,4288848546,4280295470 DATA 4283387727,4291414473,4281150773,4282203459 DATA 4282006074,4294111986,4293848814,4288519581 DATA 4283716692,4281150782,4280427065,4280690235 DATA 4281479733,4286085240,4288059030,4287269514 DATA 4280361263,4286677377,4279045389,4292335575 DATA 4280229672,4278848010,4290493371,4279834905 DATA 4281413938,4286151033,4285690482,4284835173 DATA 4281216563,4279966504,4282269252,4292730333 DATA 4288585374,4283848278,4281413951,4283519313 DATA 4281282357,4281019193,4292401368,4288453788 DATA 4294177779,4279834916,4279571744,4285229931 DATA 4291809231,4293914607,4278716437,4290361785 DATA 4282006082,4286414205,4290690750,4280492848 DATA 4282729797,4281084986,4279176986,4284637794 DATA 4280756013,4278255878,4279769123,4287137928 DATA 4286019447,4279374365,4278519054,4281348146 DATA 4280953398,4278519051,4279900713,4281808698 DATA 4287335307,4280821800,4281940290,4280163884 DATA 4287072135,4281808695,4286216826,4279769126 DATA 4278387472,4284572001,4279571733,4281874498 DATA 4278255880,4279769130,4278979596,4279242768 DATA 4285756275,4279374366,4281545533,4287993237 DATA 4280887606,4278848022,4282729800,4283321934 DATA 4284966759,4286479998,4285822068,4278519057 DATA 4279571752,4279176992,4280361265,4280098094 DATA 4280098091,4279769125,4279834922,4279374374 DATA 4278321675,4279177004,4279637547,4279505958 DATA 4278979618,4279966506,4279505960,4282664007 DATA 4279242784,4278782229,4281282353,4281874491 DATA 4278650642,4279834918,4281216566,4279769120 DATA 4281084977,4279703325,4280229681,4282203460 DATA 4279505954,4280229678,4282466630,4279242783 DATA 4278255881,4281348152,4281808704,4278650639 DATA 4278255876,4278716436,4281413939,4280953388 DATA 4280427056,4281940289,4281677118,4280163887 DATA 4278913819,4279440160,4281084981,4280163881 DATA 4280361271,4281216574,4280953396,4280098092 DATA 4278519056,0,24,1,0,2,0 DATA 3,0,4,0,5,0,6,0,7,0,0,1,8,0,9,0 DATA 10,0,11,0,12,0,13,0,14,0,0,43,15,0,16,0 DATA 17,0,18,0,19,0,20,0,21,3,22,0,0,1,23,0 DATA 21,3,20,0,24,0,5,0,7,0,25,0,0,40,26,0 DATA 27,0,21,1,20,0,28,0,29,0,30,0,31,0,32,0 DATA 33,0,34,1,35,0,36,0,31,0,37,0,29,0,28,0 DATA 20,0,21,0,38,0,39,0,0,0,40,0,41,0,0,33 DATA 42,0,43,0,44,0,0,0,45,0,46,0,29,0,31,0 DATA 47,0,48,0,49,11,48,0,50,0,51,0,52,0,53,0 DATA 0,0,54,0,55,0,54,0,56,0,0,29,15,0,57,0 DATA 58,0,21,0,59,0,60,0,61,0,62,0,49,19,63,0 DATA 64,0,65,0,21,1,66,0,67,0,68,0,0,26,69,0 DATA 10,0,27,0,20,0,70,0,71,0,72,0,49,23,73,0 DATA 74,0,28,0,21,0,27,0,75,0,45,0,0,23,68,0 DATA 76,0,77,0,21,0,20,0,30,0,73,0,49,27,78,0 DATA 79,0,20,0,21,0,80,0,81,0,82,0,0,20,83,0 DATA 17,0,27,0,20,0,84,0,50,0,49,31,85,0,70,0 DATA 21,0,86,0,87,0,68,0,0,19,88,0,21,0,20,0 DATA 79,0,48,0,49,13,89,4,49,14,73,0,90,0,21,0 DATA 27,0,91,0,0,19,92,0,93,0,31,0,49,11,89,0 DATA 94,0,95,0,96,0,97,0,98,0,99,1,100,0,101,0 DATA 102,0,103,0,104,0,89,0,49,11,30,0,105,0,53,0 DATA 0,16,56,0,106,0,53,0,107,0,108,0,49,9,89,0 DATA 109,0,96,0,110,0,111,11,99,0,102,0,94,0,89,0 DATA 49,9,112,0,53,0,82,0,113,0,68,0,0,12,68,0 DATA 105,0,27,0,114,0,115,0,49,8,89,0,116,0,98,0 DATA 111,17,97,0,109,0,49,9,117,0,118,0,20,0,87,0 DATA 82,0,0,11,119,0,27,0,20,0,31,0,49,7,89,0 DATA 94,0,100,0,111,21,97,0,120,0,49,8,30,0,21,0 DATA 86,0,81,0,0,10,121,0,38,0,20,0,37,0,49,7 DATA 89,0,122,0,123,0,111,6,122,0,74,0,124,0,125,0 DATA 126,0,127,0,128,0,129,0,130,0,102,0,111,6,123,0 DATA 95,0,89,0,49,7,90,0,21,0,131,0,45,0,0,8 DATA 132,0,133,0,21,0,134,0,48,0,49,6,135,0,101,0 DATA 111,5,122,0,136,0,137,0,138,0,139,0,140,0,141,0 DATA 142,0,143,0,144,0,139,1,145,0,146,0,147,0,148,0 DATA 111,5,96,0,89,0,49,6,73,0,70,0,21,0,75,0 DATA 68,0,0,7,54,0,20,1,47,0,49,6,135,0,98,0 DATA 111,4,149,0,150,0,151,0,139,3,141,0,152,0,153,0 DATA 123,0,154,0,155,0,139,3,156,0,157,0,97,0,111,4 DATA 101,0,89,0,49,6,85,0,20,0,27,0,158,0,0,6 DATA 159,0,160,0,20,0,74,0,49,6,135,0,98,0,111,3 DATA 123,0,147,0,161,0,139,5,162,0,163,0,0,1,95,0 DATA 156,0,139,5,162,0,84,0,111,4,101,0,89,0,49,6 DATA 79,0,21,0,164,0,56,0,0,4,68,0,165,0,21,0 DATA 70,0,48,0,49,5,89,0,101,0,111,3,97,0,166,0 DATA 140,0,139,3,167,0,168,0,169,0,170,0,100,0,0,1 DATA 89,0,171,0,172,0,173,0,174,0,139,3,175,0,176,0 DATA 110,0,111,3,96,0,89,0,49,5,78,0,28,0,21,0 DATA 26,0,0,4,60,0,77,0,20,0,130,0,49,5,89,0 DATA 122,0,111,3,102,0,177,0,139,3,178,0,172,0,179,0 DATA 180,1,169,0,181,0,104,0,73,0,177,0,182,0,180,1 DATA 183,0,184,0,167,0,139,3,185,0,98,0,111,3,103,0 DATA 49,6,186,0,187,0,188,0,0,4,189,0,59,0,190,0 DATA 48,0,49,5,109,0,111,3,97,0,177,0,139,3,191,0 DATA 179,0,180,4,192,0,174,0,178,0,193,0,180,4,183,0 DATA 168,0,139,3,194,0,110,0,111,2,123,0,120,0,49,5 DATA 195,0,196,0,0,7,197,0,49,5,89,0,98,0,111,2 DATA 123,0,194,0,139,2,174,0,198,0,180,17,172,0,171,0 DATA 139,2,152,0,111,3,101,0,49,6,199,0,200,0,201,0 DATA 82,0,0,1,202,0,203,0,204,0,205,0,49,5,103,0 DATA 111,3,206,0,140,0,139,1,174,0,182,0,180,5,207,0 DATA 208,0,209,0,210,1,211,0,212,0,213,0,180,5,198,0 DATA 171,0,139,1,175,0,29,0,111,3,109,0,49,5,214,0 DATA 215,0,86,0,216,0,0,1,217,0,38,0,218,0,49,5 DATA 89,0,99,0,111,2,103,0,151,0,139,2,192,0,180,4 DATA 219,0,220,0,221,0,222,0,223,0,224,0,225,0,226,1 DATA 227,0,228,0,229,0,180,4,172,0,139,2,143,0,100,0 DATA 111,2,97,0,89,0,49,5,84,0,21,0,12,0,0,0 DATA 15,0,230,0,21,0,36,0,49,5,231,0,111,3,232,0 DATA 139,2,233,0,180,3,234,0,211,0,225,0,235,0,236,3 DATA 237,0,238,0,226,2,227,0,239,0,180,4,168,0,139,2 DATA 240,0,111,3,104,0,49,5,74,0,21,0,241,0,0,0 DATA 242,0,243,0,20,0,78,0,49,4,89,0,101,0,111,2 DATA 109,0,170,0,139,1,244,0,179,0,180,2,245,0,210,0 DATA 226,0,222,0,236,0,246,0,247,0,248,0,249,1,238,0 DATA 227,0,226,3,209,0,180,3,183,0,174,0,139,1,250,0 DATA 101,0,111,2,149,0,49,5,50,0,20,0,251,0,252,0 DATA 253,0,21,0,70,0,49,5,135,0,254,0,111,2,255,0 DATA 139,2,169,0,180,3,211,0,226,0,256,0,247,0,257,0 DATA 258,0,156,0,259,0,260,1,259,0,156,0,193,0,261,0 DATA 226,2,262,0,180,3,263,0,139,2,264,0,111,2,99,0 DATA 89,0,49,4,48,0,28,0,27,0,265,0,266,0,21,0 DATA 79,0,49,5,231,0,111,2,254,0,267,0,139,1,178,0 DATA 179,0,180,2,268,0,226,1,238,0,269,0,175,0,260,0 DATA 270,0,271,0,272,1,273,0,270,0,260,0,274,0,210,0 DATA 226,1,227,0,207,0,180,2,183,0,174,0,139,1,275,0 DATA 111,3,104,0,49,5,134,0,21,0,276,0,277,0,21,0 DATA 51,0,49,5,122,0,111,2,104,0,175,0,139,1,191,0 DATA 180,2,234,0,220,0,226,1,261,0,155,0,260,0,271,0 DATA 274,0,139,3,175,0,278,0,260,0,274,0,261,0,226,1 DATA 228,0,180,3,173,0,139,1,272,0,148,0,111,2,103,0 DATA 49,5,37,0,21,0,279,0,6,0,21,0,32,0,49,4 DATA 89,0,101,0,111,2,280,0,139,2,192,0,180,2,219,0 DATA 226,1,227,0,191,0,260,0,250,0,139,6,140,0,278,0 DATA 260,0,281,0,226,1,227,0,258,0,180,2,172,0,139,1 DATA 140,0,85,0,111,2,149,0,49,5,51,0,21,0,282,0 DATA 283,0,21,0,284,0,49,4,89,0,98,0,111,2,128,0 DATA 140,0,170,0,156,0,174,0,193,0,180,1,239,0,256,0 DATA 285,0,286,0,143,0,287,0,140,0,139,7,175,0,259,0 DATA 161,0,227,0,226,1,212,0,180,1,192,0,140,0,156,0 DATA 155,0,139,0,288,0,111,2,101,0,49,5,36,0,21,0 DATA 289,0,290,0,291,0,292,0,49,4,89,0,110,0,111,2 DATA 293,0,138,0,176,0,101,0,73,0,294,0,281,0,180,0 DATA 249,0,235,0,236,0,226,0,260,0,156,0,139,9,278,0 DATA 259,0,262,0,226,1,211,0,180,0,182,0,295,0,94,0 DATA 149,0,154,0,144,0,157,0,111,2,100,0,49,5,292,0 DATA 49,0,296,0,0,1,231,0,49,4,89,0,254,0,111,2 DATA 297,0,259,0,298,0,0,1,79,0,173,0,180,0,256,0 DATA 246,0,236,0,299,0,260,0,138,0,139,9,161,0,260,0 DATA 213,0,226,1,228,0,180,0,174,0,120,0,0,1,110,0 DATA 162,0,152,0,111,2,98,0,49,5,300,0,0,3,231,0 DATA 49,4,89,0,254,0,111,2,297,0,260,0,301,0,0,1 DATA 51,0,302,0,180,0,226,0,247,0,236,0,299,0,260,0 DATA 138,0,139,9,161,0,260,0,258,0,226,1,228,0,180,0 DATA 171,0,231,0,0,1,303,0,143,0,152,0,111,2,98,0 DATA 49,5,300,0,0,1,22,0,63,0,304,0,49,4,89,0 DATA 110,0,111,2,305,0,151,0,157,0,163,0,95,0,137,0 DATA 281,0,180,0,210,0,286,0,257,0,249,0,260,0,156,0 DATA 139,8,140,0,273,0,259,0,208,0,226,1,211,0,180,0 DATA 198,0,181,0,97,0,111,0,306,0,170,0,307,0,111,2 DATA 100,0,49,5,308,0,63,0,309,0,310,0,21,0,284,0 DATA 49,4,89,0,98,0,111,2,125,0,140,0,141,0,278,0 DATA 274,0,192,0,180,1,311,0,226,1,249,0,312,0,287,0 DATA 140,0,139,7,274,0,270,0,250,0,227,0,226,1,212,0 DATA 180,1,169,0,170,0,273,0,170,0,140,0,313,0,111,2 DATA 101,0,49,5,36,0,21,0,289,0,314,0,21,0,32,0 DATA 49,5,101,0,111,2,315,0,139,2,182,0,180,2,219,0 DATA 226,2,173,0,260,0,161,0,139,6,140,0,273,0,260,0 DATA 192,0,226,1,227,0,213,0,180,2,172,0,139,1,140,0 DATA 36,0,111,2,102,0,49,5,51,0,21,0,316,0,317,0 DATA 21,0,51,0,49,5,149,0,111,2,135,0,274,0,139,1 DATA 233,0,180,2,234,0,220,0,226,1,210,0,156,0,260,0 DATA 161,0,140,0,139,2,140,0,274,0,271,0,260,0,170,0 DATA 261,0,226,1,210,0,180,3,173,0,139,1,145,0,102,0 DATA 111,2,103,0,49,5,37,0,21,0,11,0,279,0,21,0 DATA 79,0,49,5,231,0,111,2,110,0,270,0,139,1,178,0 DATA 179,0,180,2,318,0,226,2,262,0,156,0,260,0,287,0 DATA 156,0,151,1,250,0,319,0,260,0,140,0,320,0,256,0 DATA 226,0,227,0,219,0,180,2,183,0,174,0,139,1,295,0 DATA 111,3,104,0,49,5,29,0,21,0,321,0,322,0,21,0 DATA 84,0,49,5,135,0,123,0,111,2,323,0,139,2,198,0 DATA 180,3,228,0,226,2,210,0,168,0,142,0,260,3,271,0 DATA 324,0,257,0,236,0,325,0,227,0,311,0,180,2,179,0 DATA 184,0,139,1,140,0,129,0,111,2,110,0,89,0,49,4 DATA 48,0,28,0,20,0,13,0,326,0,27,0,20,0,78,0 DATA 49,5,101,0,111,2,135,0,155,0,139,1,327,0,179,0 DATA 180,2,245,0,249,0,226,3,249,0,207,0,281,0,183,0 DATA 268,0,235,0,236,1,246,0,286,0,228,0,234,0,180,2 DATA 179,0,167,0,139,1,272,0,102,0,111,2,102,0,49,5 DATA 50,0,20,0,24,0,14,0,56,0,328,0,21,0,36,0 DATA 49,5,116,0,111,3,329,0,139,2,184,0,180,3,245,0 DATA 228,0,226,7,325,0,247,0,246,0,269,0,211,0,234,0 DATA 180,2,179,0,330,0,139,1,140,0,125,0,111,3,94,0 DATA 49,5,51,0,21,0,5,0,0,1,331,0,21,0,332,0 DATA 49,5,89,0,110,0,111,2,104,0,170,0,139,1,171,0 DATA 182,0,180,4,318,0,220,0,226,6,225,0,261,0,268,0 DATA 180,4,198,0,139,2,271,0,148,0,111,2,100,0,89,0 DATA 49,4,89,0,333,0,243,0,309,0,0,1,334,0,20,0 DATA 310,0,62,0,49,5,95,0,111,3,335,0,140,0,139,1 DATA 167,0,193,0,180,4,234,0,219,0,239,0,210,0,220,1 DATA 210,0,262,0,229,0,234,0,180,4,192,0,171,0,139,1 DATA 274,0,280,0,111,3,231,0,49,5,336,0,204,0,16,0 DATA 60,0,0,1,337,0,119,0,60,0,338,0,49,5,89,0 DATA 99,0,111,2,110,0,339,0,139,2,167,0,182,0,180,16 DATA 179,0,198,0,174,0,139,1,140,0,340,0,111,3,97,0 DATA 89,0,49,5,341,0,0,7,342,0,343,0,49,5,231,0 DATA 111,3,102,0,294,0,139,2,171,0,184,0,179,0,180,4 DATA 193,0,327,0,302,0,281,0,180,4,179,0,191,0,139,2 DATA 140,0,146,0,98,0,111,2,123,0,104,0,49,5,73,0 DATA 344,0,158,0,15,0,0,4,345,0,346,0,347,0,49,5 DATA 89,0,102,0,111,3,103,0,294,0,139,3,244,0,198,0 DATA 179,0,180,1,198,0,348,0,32,0,30,0,294,0,193,0 DATA 180,1,179,0,172,0,178,0,139,2,140,0,295,0,148,0 DATA 111,3,349,0,49,6,51,0,21,0,350,0,41,0,0,4 DATA 351,0,21,0,84,0,48,0,49,5,89,0,100,0,111,3 DATA 102,0,352,0,140,0,139,3,178,0,191,0,192,0,155,0 DATA 96,0,0,1,353,0,167,0,198,0,330,0,167,0,139,3 DATA 274,0,354,0,100,0,111,3,148,0,89,0,49,5,73,0 DATA 28,0,20,0,355,0,0,5,356,0,24,0,21,0,31,0 DATA 49,6,120,0,99,0,111,3,110,0,357,0,141,0,139,5 DATA 143,0,358,0,0,1,149,0,156,0,139,4,140,0,272,0 DATA 288,0,123,0,111,3,100,0,135,0,49,6,37,0,21,0 DATA 359,0,360,0,0,6,361,0,20,0,28,0,353,0,49,6 DATA 120,0,99,0,111,4,94,0,154,0,155,0,139,3,138,0 DATA 240,0,362,0,363,0,364,0,144,0,139,2,140,0,141,0 DATA 126,0,122,0,111,4,100,0,135,0,49,6,284,0,20,0 DATA 27,0,365,0,0,7,40,0,366,0,21,0,29,0,49,7 DATA 120,0,100,0,111,5,104,0,125,0,259,0,175,0,139,0 DATA 140,0,151,0,259,0,319,0,141,0,140,0,139,0,144,0 DATA 367,0,335,0,103,0,111,5,101,0,135,0,49,6,73,0 DATA 84,0,21,0,368,0,132,0,0,8,369,0,370,0,21,0 DATA 30,0,49,7,89,0,102,0,111,6,254,0,120,0,371,0 DATA 372,0,232,0,373,0,329,0,374,0,157,0,28,0,231,0 DATA 123,0,111,5,123,0,122,0,89,0,49,7,332,0,21,0 DATA 215,0,375,0,0,10,376,0,20,1,36,0,49,7,89,0 DATA 109,0,99,0,111,21,98,0,94,0,49,8,51,0,21,0 DATA 27,0,377,0,0,11,68,0,378,0,20,0,379,0,380,0 DATA 49,8,89,0,95,0,99,0,111,17,98,0,116,0,89,0 DATA 49,8,381,0,93,0,20,0,382,0,82,0,0,12,360,0 DATA 383,0,53,0,384,0,380,0,49,9,89,0,116,0,101,0 DATA 123,0,111,11,254,0,148,0,109,0,89,0,49,9,338,0 DATA 82,0,92,0,385,0,68,0,0,16,82,0,296,0,36,0 DATA 49,11,135,0,231,0,122,0,101,0,98,0,110,0,254,1 DATA 110,0,100,0,148,0,122,0,109,0,135,0,49,11,51,0 DATA 386,0,53,0,0,19,387,0,20,1,30,0,49,34,48,0 DATA 79,0,21,0,27,0,388,0,0,19,360,0,217,0,20,0 DATA 21,0,29,0,353,0,49,31,50,0,84,0,21,0,27,0 DATA 389,0,68,0,0,20,68,0,390,0,391,0,21,0,20,0 DATA 51,0,48,0,49,27,73,0,30,0,20,0,21,0,160,0 DATA 392,0,82,0,0,23,393,0,65,0,20,0,21,0,84,0 DATA 36,0,49,24,394,0,395,0,70,0,21,0,27,0,10,0 DATA 396,0,0,26,337,0,397,0,38,0,21,1,398,0,399,0 DATA 205,0,49,19,400,0,401,0,60,0,402,0,20,0,403,0 DATA 404,0,15,0,0,29,356,0,405,0,406,0,407,0,0,0 DATA 408,0,409,0,36,0,78,0,49,13,353,0,130,0,90,0 DATA 410,0,83,0,0,0,411,0,382,0,42,0,0,32,68,0 DATA 60,0,412,0,0,0,413,0,86,0,21,0,20,0,84,0 DATA 79,0,51,0,36,0,284,0,414,0,415,1,292,0,284,0 DATA 36,0,74,0,332,0,70,0,20,0,21,1,27,0,81,0 DATA 0,40,69,0,416,0,417,0,27,0,21,4,22,0,0,1 DATA 23,0,21,3,20,0,243,0,418,0,419,0,420,0,53,0 DATA 0,42,15,0,242,0,421,0,405,0,422,0,9,0,328,0 DATA 423,0,0,1,424,0,350,0,425,0,426,0,427,0,341,0
'head - License CC0 - GameArt2D.com
DATA 846,0,4278255689,4279631924,4282253346 DATA 4285464596,4288806919,4291166209,4291493888 DATA 4291428352,4289855492,4286578703,4283760667 DATA 4280746027,4278779966,4278190158,4278321223 DATA 4280614957,4285792274,4291231745,4291690496 DATA 4291624960,4289789956,4284088345,4279959601 DATA 4278190156,4279370035,4284612631,4290904066 DATA 4291559424,4290904064,4290117632,4289462272 DATA 4289003520,4288741376,4288610304,4288675840 DATA 4288937984,4289331200,4289921024,4290641920 DATA 4291362816,4285005846,4280156208,4278255688 DATA 4278190159,4278321471,4279174950,4284942350 DATA 4291231744,4290576384,4289396736,4288479232 DATA 4288217088,4288872448,4289855488,4290707458 DATA 4284743703,4280025137,4278452291,4281139241 DATA 4283041557,4280620823,4287891207,4290838528 DATA 4289527808,4289593344,4290772992,4285333524 DATA 4280680492,4278190157,4279828530,4285792275 DATA 4287956743,4280555287,4288677125,4290052096 DATA 4288806912,4289658880,4291297281,4286709775 DATA 4280483885,4278255691,4279304247,4287561740 DATA 4290118146,4281144597,4286318600,4289200128 DATA 4288282624,4288741384,4279894066,4281532454 DATA 4286120450,4285792513,4288151552,4288413696 DATA 4290707456,4282318882,4287561728,4285005824 DATA 4287889408,4289396742,4286185472,4286251008 DATA 4288548109,4288878873,4287954951,4278845500 DATA 4290379776,4285136896,4287496192,4290533207 DATA 4291128942,4288086016,4278517824,4279500853 DATA 4288544768,4287692800,4292783533,4293312961 DATA 4278779962,4287102976,4285661184,4288614673 DATA 4294636788,4294768888,4288945437,4290445312 DATA 4286644224,4286119936,4290665821,4294967295 DATA 4290996842,4286447616,4286382080,4288349702 DATA 4291724934,4292121748,4292452769,4294040796 DATA 4294239717,4292849840,4292386719,4291989134 DATA 4291393656,4288482059,4286513152,4284484363 DATA 4282716433,4286383365,4290004036,4294570224 DATA 4290401107,4287300098,4287627521,4284615949 DATA 4282137660,4282598211,4280884766,4287234562 DATA 4289673272,4294372074,4294967038,4294438124 DATA 4289937729,4287171082,4281478702,4281147424 DATA 4286645252,4281868834,4278979596,4281348144 DATA 4281479730,4284222476,4289474351,4294305510 DATA 4289540915,4279435317,4282000677,4280624421 DATA 4282532418,4282454803,4286906368,4285988864 DATA 4287431170,4280228635,4278190080,4279440147 DATA 4281611316,4288020480,4287954944,4293114554 DATA 4294173153,4288217345,4278911286,4279703062 DATA 4281413937,4281015838,4286971904,4280360478 DATA 4281216558,4282585361,4287168512,4285726720 DATA 4285267968,4284940288,4285269767,4294373359 DATA 4294901502,4288683550,4278845750,4279703319 DATA 4280953386,4280818973,4287299584,4285333504 DATA 4281277725,4280163870,4281084972,4284025868 DATA 4287758336,4285530112,4285399040,4286840832 DATA 4287365120,4289345335,4294835195,4291923855 DATA 4290801262,4288436312,4285071360,4279304245 DATA 4280950816,4280492835,4281282351,4281668628 DATA 4284091404,4280293657,4287038211,4287823872 DATA 4291261299,4294371817,4290335057,4289673015 DATA 4293975003,4291924626,4286775296,4285923328 DATA 4285202432,4285792256,4285074958,4280361249 DATA 4280097820,4285401096,4283633166,4281864979 DATA 4285728519,4286316544,4286709760,4291195506 DATA 4289011744,4288680723,4291460220,4287627264 DATA 4278845497,4290314240,4285335560,4285990406 DATA 4287234048,4287037440,4278845496,4286578688 DATA 4284874752,4284809216,4279304241,4286054400 DATA 4288348160,4289069056,4289134592,4279107639 DATA 4281991200,4289265664,4291100672,4290969600 DATA 4281270306,4286840846,4289724416,4285267979 DATA 4278255690,4287889409,4278386755,4279173176 DATA 4289789952,4279959597,4280614951,4283105302 DATA 4280418339,4287496194,4278648893,4278648889 DATA 4284743680,4290183168,4286251015,4278321222 DATA 4283957253,4290510848,4283564052,4281073690 DATA 4285533184,4286653696,4287443456,4288365568 DATA 4289420288,4289284609,4279631920,4278583354 DATA 4287120390,4290671360,4292186624,4293240320 DATA 4294492928,4294756096,4294888192,4294953984 DATA 4291528448,4291166208,4289986560,4278190155 DATA 4288182801,4293241866,4286121478,4280680486 DATA 4287919634,4294757404,4286783255,4285204745 DATA 4282192402,4284746250,4284680714,4287169283 DATA 4283109135,4283371022,4285859591,4287365634 DATA 4285794055,4286971908,4287525140,4294886912 DATA 4294884352,4294884865,4294887684,4294955038 DATA 4289687636,4287693057,4284288012,4281537556 DATA 4281406741,4282650897,4284418827,4283698702 DATA 4284877322,4286187014,4281472277,4283043599 DATA 4285662983,4282257938,4280746022,4287192597 DATA 4294877440,4294877184,4294877955,4294884360 DATA 4294953728,4293906331,4285663495,4282912784 DATA 4281996051,4287824129,4280817174,4287758593 DATA 4287496449,4284549899,4285597447,4286382087 DATA 4287322133,4294877703,4294878220,4294877444 DATA 4294884359,4294955037,4294895276,4289753428 DATA 4286448901,4284942858,4281079318,4285466632 DATA 4280686359,4279238708,4286928150,4294883651 DATA 4294893219,4294897358,4294963670,4294896065 DATA 4294890626,4294953994,4294961069,4294499749 DATA 4286655264,4285532168,4280751895,4286317829 DATA 4284287755,4282384411,4278255692,4289502346 DATA 4294964444,4294962369,4294961329,4294961071 DATA 4294960804,4294954512,4294958125,4293378962 DATA 4285666319,4284156940,4285007365,4286589471 DATA 4288762643,4290408704,4291594496,4292318976 DATA 4292515584,4292378112,4292179200,4291784448 DATA 4291066672,4281538351,4280025123,4281270296 DATA 4282974218,4284416001,4285923336,4286478727 DATA 4294963664,4294960812,4294960019,4294953988 DATA 4294954756,4294963541,4292720007,4285534733 DATA 4286252293,4280490008,4280489751,4285007107 DATA 4287380524,4290940009,4293774489,4294895020 DATA 4294956872,4294885120,4294878208,4294877700 DATA 4294886998,4294960809,4289765252,4278321219 DATA 4279566377,4283105289,4285464576,4286709763 DATA 4280952916,4294963924,4294959775,4294957700 DATA 4294956924,4294957442,4294957683,4294954247 DATA 4294955271,4294963295,4293115278,4286259994 DATA 4286907139,4287496706,4285337098,4289094474 DATA 4293247376,4294957660,4294887936,4294882304 DATA 4294881577,4294896324,4294958480,4294960552 DATA 4281741646,4280877083,4282253328,4291149494 DATA 4294959515,4294955629,4294955627,4294955082 DATA 4294954245,4294955530,4294963048,4294235031 DATA 4288697394,4284875523,4285468426,4289621587 DATA 4293972380,4294891631,4294879488,4294877441 DATA 4294887269,4294769134,4288868038,4294832853 DATA 4294958479,4290423177,4279828518,4278321218 DATA 4279177033,4294766026,4294956406,4294954818 DATA 4294956044,4294963061,4294957441,4294897094 DATA 4292724679,4287646025,4284809730,4285467392 DATA 4289744640,4294096983,4294890877,4294878731 DATA 4294894252,4281063294,4289785803,4294957702 DATA 4294763691,4278584646,4282071389,4294961848 DATA 4294960291,4294954553,4294953986,4294962550 DATA 4294956145,4294966258,4294901245,4293186515 DATA 4289492855,4284750100,4284678144,4284678657 DATA 4286787884,4290478173,4294229342,4294879766 DATA 4294890362,4294893205,4294882606,4294893203 DATA 4294835966,4280523612,4284080282,4294958738 DATA 4294960810,4279768647,4282795107,4294959516 DATA 4294954033,4294956664,4294967036,4292142556 DATA 4279003959,4278676787,4278633310,4294441196 DATA 4294959774,4294960553,4294960811,4294901758 DATA 4278282288,4281980292,4294959517,4294960292 DATA 4280163143,4280292658,4292457071,4294953512 DATA 4294955013,4294962292,4294959256,4294966778 DATA 4286572465,4283424147,4279074369,4278216239 DATA 4278224446,4278899306,4294769133,4294959257 DATA 4294962628,4294965224,4294963406,4294960294 DATA 4286310062,4279933527,4278218290,4282636683 DATA 4279505478,4282991191,4294960293,4294952995 DATA 4294954246,4294961766,4294955628,4294965221 DATA 4290048465,4278308965,4278240093,4278494801 DATA 4285848998,4286375855,4294963665,4294961072 DATA 4294964964,4294965222,4294962110,4294959514 DATA 4294967035,4287425209,4278241119,4282106492 DATA 4288736709,4294960551,4294106278,4278387528 DATA 4278848072,4294764208,4294956407,4294952227 DATA 4294959427,4294955887,4294960296,4287162806 DATA 4279161452,4280538745,4294704893,4294958999 DATA 4294962108,4294962888,4294961588,4294961589 DATA 4294960032,4294964185,4293786612,4281129087 DATA 4287228343,4294900462,4294956404,4288121207 DATA 4278453062,4293184650,4294958995,4294885929 DATA 4294953989,4294887680,4294889745,4294957960 DATA 4294114551,4293458929,4294962368,4294508027 DATA 4294442490,4294961074,4279834438,4279702326 DATA 4290943753,4294955563,4294956925,4294885429 DATA 4294884864,4294887770,4294956405,4294965482 DATA 4294966518,4294958219,4294961333,4294966257 DATA 4294962887,4294762394,4285687654,4278978621 DATA 4282854948,4288769807,4294752768,4294883584 DATA 4294881792,4294886484,4294957183,4294886475 DATA 4294886152,4294881280,4294887515,4294956923 DATA 4294955888,4294956922,4293645727,4294106020 DATA 4289370752,4278255947,4282789156,4293234691 DATA 4294885196,4294894500,4294882062,4294882331 DATA 4294878472,4294885962,4294958477,4290686337 DATA 4283056946,4280426263,4280623641,4292527764 DATA 4294959255,4294763690,4280689481,4278387270 DATA 4282723109,4289818380,4293300483,4293169667 DATA 4288701968,4282725425,4294957398,4294958973 DATA 4294959494,4294959248,4294957440,4294885185 DATA 4294885443,4294954851,4294888023,4294956665 DATA 4294958220,4294958739,4294171813,4288647276 DATA 4288515947,4292856471,4294369191,4293119642 DATA 4290686081,4289699459,4278255945,4278255946 DATA 4281082669,4294954521,4294955621,4294955370 DATA 4294888798,4294958997,4294960035,4293908898 DATA 4294829483,4293711004,4278913605,4290746634 DATA 4294885888,4294882560,4294880529,4294886221 DATA 4294956146,4294960034,4293379192,4279702337 DATA 4281212460,4291528712,4294881024,4294879744 DATA 4294877952,4294878993,4294881831,4294752054 DATA 4294752572,4291796803,4287592014,4288446803 DATA 4290682202,4293837927,4294758251,4294957443 DATA 4294958737,4294759286,4289104469,4278782020 DATA 4278584386,4282329127,4286599446,4289358861 DATA 4292183813,4293498114,4293694978,4293038083 DATA 4291198471,4288832783,4286731285,4283314467 DATA 4280686639,4278715712,4278321736,4279044930 DATA 4279899456,4281674817,4283318340,4286145868 DATA 4288578131,4291997024,4294561130,4294758250 DATA 4294957182,4294957962,4294758509,4290024793 DATA 4280754496,4278518853,4279307842,4280293951 DATA 4282003522,4283121219,4285291081,4287263312 DATA 4287986513,4288841299,4289301076,4288315218 DATA 4282069314,4278913347,0,24,1,0 DATA 2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0 DATA 10,0,11,0,12,0,13,0,14,0,0,46,15,0,16,0 DATA 17,0,18,0,19,1,20,7,19,1,21,0,22,0,23,0 DATA 1,0,0,40,24,0,25,0,26,0,27,0,19,1,20,0 DATA 28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0 DATA 36,0,37,0,38,0,39,0,40,0,20,0,19,0,27,0 DATA 41,0,42,0,43,0,0,34,44,0,45,0,46,0,47,0 DATA 48,0,19,0,20,0,7,0,49,0,50,0,51,0,52,11 DATA 53,0,54,0,29,0,28,0,19,0,55,0,56,0,57,0 DATA 1,0,0,29,58,0,59,0,60,0,61,0,62,0,20,0 DATA 28,0,63,0,64,0,51,0,52,17,34,0,65,0,66,0 DATA 28,0,19,0,55,0,67,0,68,0,58,0,44,0,0,22 DATA 69,0,70,0,71,0,18,0,72,0,73,0,74,0,48,0 DATA 75,0,76,0,52,23,34,0,77,0,63,0,28,0,19,0 DATA 78,0,79,0,80,0,81,0,0,19,82,0,83,0,7,0 DATA 19,0,84,0,85,0,86,0,87,0,88,0,52,28,34,0 DATA 65,0,39,0,8,0,19,0,89,0,90,0,0,16,44,0 DATA 91,0,78,0,19,0,20,0,66,0,92,0,93,0,94,0 DATA 52,33,95,0,50,0,96,0,8,0,97,0,44,0,0,14 DATA 80,0,7,0,19,0,63,0,32,0,98,0,99,0,100,0 DATA 52,37,36,0,96,0,68,0,0,13,24,0,101,0,20,0 DATA 30,0,88,0,52,0,102,0,103,0,52,26,104,0,105,0 DATA 52,10,88,0,106,0,24,0,0,12,107,0,7,0,108,0 DATA 52,1,94,0,109,0,110,0,52,26,111,0,112,0,52,11 DATA 113,0,114,0,0,12,115,0,7,0,116,0,52,1,117,0 DATA 99,0,94,0,52,26,118,0,119,0,52,12,120,0,0,12 DATA 115,0,66,0,52,2,121,0,122,0,94,0,52,25,123,0 DATA 124,0,125,0,126,0,52,11,120,0,0,12,115,0,127,0 DATA 52,2,128,0,129,0,52,26,130,0,131,1,132,0,52,11 DATA 120,0,0,12,115,0,127,0,52,2,133,0,134,0,52,1 DATA 94,0,52,18,135,0,112,0,136,0,137,0,138,0,139,0 DATA 131,1,140,0,141,0,142,0,143,0,144,0,145,0,52,6 DATA 120,0,0,12,115,0,127,0,52,2,134,0,146,0,52,0 DATA 113,0,147,0,148,0,149,0,52,17,150,0,151,0,131,7 DATA 124,0,152,0,52,7,120,0,0,12,115,0,127,0,153,0 DATA 154,0,52,0,133,1,52,0,155,0,156,0,157,0,158,0 DATA 159,0,52,17,160,0,161,0,131,4,162,0,163,0,164,0 DATA 52,8,120,0,0,12,115,0,165,0,166,0,167,0,168,0 DATA 128,0,103,0,113,0,169,0,170,0,171,0,172,0,173,0 DATA 52,18,174,0,175,0,131,3,163,0,176,0,52,9,120,0 DATA 0,12,177,0,178,0,179,0,180,0,181,0,182,0,183,0 DATA 184,0,185,0,186,0,187,0,188,0,148,0,52,12,94,2 DATA 189,0,190,2,191,0,131,3,192,0,193,0,52,9,120,0 DATA 0,12,194,0,195,0,186,0,196,0,197,0,198,0,122,0 DATA 184,0,199,0,186,0,187,0,200,0,201,0,52,8,94,1 DATA 100,0,202,0,134,0,203,0,204,0,99,0,205,1,206,0 DATA 207,0,131,0,208,0,131,1,208,0,209,0,113,0,52,8 DATA 120,0,0,12,210,0,211,0,186,0,212,0,213,0,214,0 DATA 215,0,189,0,216,0,217,0,218,0,179,0,219,0,52,6 DATA 94,0,220,0,128,0,221,0,205,0,222,0,102,0,223,0 DATA 224,0,117,0,100,1,225,0,208,0,226,0,227,0,228,0 DATA 124,0,131,0,229,0,230,0,203,0,146,0,224,0,189,0 DATA 52,4,120,0,0,12,231,0,232,0,233,0,234,0,235,0 DATA 190,0,205,0,94,0,236,0,233,0,179,0,237,0,238,0 DATA 52,4,189,0,198,0,122,0,205,0,203,0,182,0,239,0 DATA 94,0,52,5,240,0,241,0,242,0,52,1,243,0,244,0 DATA 245,0,98,0,246,0,247,0,248,0,99,0,249,0,246,0 DATA 117,0,94,0,52,0,120,0,0,12,115,0,250,0,251,0 DATA 252,0,253,0,113,0,230,0,190,1,254,0,255,0,256,0 DATA 52,2,94,0,117,0,257,0,230,0,222,0,258,0,239,0 DATA 94,0,52,8,259,0,260,0,52,3,261,0,262,0,52,2 DATA 113,0,263,0,128,0,122,0,205,0,222,0,133,0,264,0 DATA 0,12,115,0,265,0,266,0,267,0,94,1,215,0,98,0 DATA 52,3,94,1,268,0,249,0,205,0,183,0,224,0,94,0 DATA 52,11,193,0,52,5,193,0,52,5,94,0,190,0,269,0 DATA 183,0,270,0,0,12,115,0,127,0,52,3,203,0,202,0 DATA 52,2,239,0,146,0,248,1,271,0,100,0,94,0,52,30 DATA 94,0,120,0,0,12,115,0,127,0,52,3,183,0,182,0 DATA 190,0,182,0,122,0,272,0,249,0,202,0,94,0,52,34 DATA 120,0,0,12,115,0,127,0,94,1,239,0,202,0,221,0 DATA 230,0,273,0,221,0,258,0,100,0,52,37,120,0,0,12 DATA 274,0,203,0,248,0,205,0,273,0,215,0,275,0,182,0 DATA 239,0,52,20,88,1,276,0,116,0,33,0,36,0,277,0 DATA 278,1,32,0,35,0,88,0,52,7,279,0,0,12,280,0 DATA 281,0,190,0,117,0,113,0,52,18,88,0,53,0,77,0 DATA 265,0,66,0,282,0,40,0,20,0,19,8,28,0,283,0 DATA 75,0,36,0,52,4,284,0,0,12,285,0,19,0,7,0 DATA 286,0,88,0,52,14,94,1,53,0,75,0,48,0,19,18 DATA 20,0,29,0,37,0,52,2,287,0,0,11,288,0,18,0 DATA 19,2,63,0,76,0,52,11,94,0,113,0,189,0,94,0 DATA 276,0,95,0,36,0,29,0,19,19,20,0,54,0,189,0 DATA 94,0,289,0,290,0,0,10,291,0,48,0,40,0,8,0 DATA 28,0,20,0,7,0,292,0,88,0,52,7,94,0,113,1 DATA 94,0,52,4,88,0,30,0,20,0,19,18,20,0,32,0 DATA 189,0,113,0,293,0,0,10,294,0,52,0,88,0,276,0 DATA 51,0,34,0,76,0,32,0,116,0,52,5,94,0,113,0 DATA 189,0,94,0,52,8,37,0,8,0,19,18,283,0,52,0 DATA 113,0,295,0,0,10,296,0,122,0,275,0,133,0,182,0 DATA 214,0,117,0,190,0,94,1,52,3,94,0,189,0,94,0 DATA 52,11,76,0,282,0,19,17,20,0,278,0,52,0,297,0 DATA 298,0,0,9,299,0,300,5,272,0,109,0,221,0,247,0 DATA 224,0,52,0,94,0,189,0,94,0,52,13,51,0,39,0 DATA 19,17,301,0,52,1,302,0,303,0,0,8,69,0,304,0 DATA 300,8,99,0,117,0,189,0,52,16,88,0,38,0,28,0 DATA 19,15,305,0,52,2,306,0,44,0,0,8,307,0,300,3 DATA 273,0,308,0,309,0,310,0,311,0,312,0,313,0,94,0 DATA 52,18,53,0,96,0,20,0,19,12,20,0,65,0,52,2 DATA 189,0,314,0,0,8,315,0,316,0,317,0,318,0,319,0 DATA 320,0,321,0,322,0,323,2,324,0,220,0,189,0,94,0 DATA 52,18,33,0,292,0,39,0,325,0,20,0,19,7,7,0 DATA 326,0,52,4,302,0,327,0,0,8,328,0,323,8,329,0 DATA 258,0,255,0,330,0,52,22,88,0,34,0,36,0,87,0 DATA 31,0,77,0,286,0,64,0,277,0,276,0,52,6,331,0 DATA 0,8,332,0,323,8,333,0,334,0,335,0,336,0,94,0 DATA 52,19,94,1,100,0,154,0,337,0,338,0,339,0,340,0 DATA 173,0,190,0,341,0,342,0,343,0,344,0,339,0,94,1 DATA 52,1,345,0,43,0,0,7,346,0,347,0,348,0,349,0 DATA 350,0,323,4,351,0,352,0,121,0,353,0,354,0,154,0 DATA 52,15,94,0,113,0,339,0,343,0,355,0,356,0,159,0 DATA 357,0,358,0,343,0,173,0,335,0,159,0,359,0,360,0 DATA 361,0,362,0,363,0,364,0,365,0,256,0,94,0,52,0 DATA 366,0,0,7,367,0,368,0,369,1,370,0,371,0,372,0 DATA 323,2,351,0,373,0,374,0,100,0,375,0,376,0,94,0 DATA 52,12,94,0,190,0,377,0,376,0,378,0,379,0,256,0 DATA 380,0,94,0,52,9,94,0,153,0,381,0,382,0,381,0 DATA 342,0,383,0,24,0,0,6,384,0,369,1,385,0,386,0 DATA 387,0,388,0,323,2,389,0,390,0,391,0,129,0,189,0 DATA 392,0,335,0,364,0,94,0,52,8,94,1,393,0,394,0 DATA 238,0,256,0,379,0,52,1,94,1,113,0,190,0,239,0 DATA 220,1,239,0,100,0,190,0,113,0,94,1,52,2,395,0 DATA 396,0,159,0,397,0,0,6,398,0,399,0,400,0,401,0 DATA 402,0,403,0,404,0,405,0,323,1,389,0,406,0,407,0 DATA 408,0,128,0,94,0,409,0,410,0,392,0,153,0,94,0 DATA 52,5,377,0,338,0,411,0,412,0,342,0,113,0,52,0 DATA 94,0,113,0,224,0,133,0,122,0,109,0,272,0,300,4 DATA 272,0,230,0,215,0,249,0,133,0,214,0,189,0,52,0 DATA 343,0,94,0,413,0,0,5,414,0,415,0,416,0,417,0 DATA 418,0,406,0,419,0,420,0,421,0,323,1,422,0,406,1 DATA 423,0,424,0,128,0,94,0,154,1,410,0,201,0,190,0 DATA 154,0,94,1,339,0,168,0,425,0,376,0,168,0,52,1 DATA 94,0,98,0,103,0,230,0,426,0,427,0,428,0,429,0 DATA 430,0,431,0,432,0,433,0,434,0,435,0,436,0,437,0 DATA 438,0,439,0,440,0,441,0,99,0,134,0,189,0,52,0 DATA 442,0,0,4,44,0,443,0,444,0,419,0,406,0,445,1 DATA 406,0,446,0,447,1,448,0,449,0,406,2,450,0,451,0 DATA 129,0,189,0,52,0,153,0,409,0,452,0,453,0,254,0 DATA 364,0,454,0,236,0,100,0,94,0,52,0,94,0,268,0 DATA 122,0,455,0,456,0,457,0,458,0,459,0,460,0,323,0 DATA 322,0,461,0,462,0,369,0,463,0,464,0,465,0,466,0 DATA 24,0,0,0,14,0,467,0,468,0,469,0,470,0,190,0 DATA 471,0,0,4,472,0,473,0,406,0,445,0,474,0,475,0 DATA 476,0,477,0,478,0,323,0,479,0,480,0,481,0,406,3 DATA 482,0,483,0,215,0,268,0,94,0,52,0,113,0,484,0 DATA 392,0,353,0,485,0,94,0,52,0,94,0,268,0,221,0 DATA 486,0,487,0,488,0,390,0,406,2,489,0,490,0,491,0 DATA 369,1,492,0,493,0,494,0,495,0,406,0,496,0,0,3 DATA 327,0,497,0,248,0,498,0,0,3,14,0,499,0,418,0 DATA 406,0,500,0,501,0,502,2,503,0,323,0,504,0,505,0 DATA 506,0,406,4,507,0,508,0,509,0,122,0,268,0,113,0 DATA 52,3,94,0,202,0,221,0,510,0,511,0,512,0,390,0 DATA 406,4,513,0,514,0,369,0,515,0,516,0,517,0,518,0 DATA 519,0,520,0,406,0,521,0,14,0,0,3,14,0,522,0 DATA 523,0,0,3,524,0,525,0,406,0,445,0,526,0,502,3 DATA 527,0,323,0,479,0,528,0,529,0,406,3,445,0,530,0 DATA 531,0,532,0,533,0,534,0,109,0,102,0,269,0,121,0 DATA 134,0,248,0,535,0,536,0,537,0,406,7,538,0,369,0 DATA 539,0,540,0,162,0,208,0,541,0,542,0,543,0,406,0 DATA 544,0,545,0,0,10,546,0,547,0,406,0,548,0,502,4 DATA 549,0,323,0,550,0,528,0,551,0,406,3,495,0,552,0 DATA 553,0,131,0,554,0,555,0,556,0,557,0,558,0,559,0 DATA 560,0,561,0,562,0,563,0,564,0,406,7,565,0,566,0 DATA 567,0,162,0,131,0,568,0,569,0,570,0,571,0,572,0 DATA 406,0,573,0,0,10,574,0,419,0,406,0,575,0,502,4 DATA 576,0,323,1,505,0,551,0,406,3,575,0,577,0,578,0 DATA 131,2,579,0,580,0,581,0,582,0,583,0,584,0,406,0 DATA 585,1,406,4,418,0,406,1,586,2,131,0,587,0,579,0 DATA 588,0,589,0,590,0,591,0,406,0,592,0,0,9,593,0 DATA 594,0,406,1,575,0,502,4,595,0,323,0,447,0,596,0 DATA 597,0,406,3,598,0,526,0,599,0,131,0,600,0,601,0 DATA 602,0,603,0,604,0,605,0,606,0,607,0,406,6,608,0 DATA 609,0,610,0,406,2,611,0,131,0,612,0,613,0,614,0 DATA 615,0,607,0,548,0,406,0,616,0,0,9,14,0,617,0 DATA 406,1,618,0,502,4,619,0,323,0,620,0,323,0,621,0 DATA 406,3,584,0,622,0,623,0,131,0,624,0,625,0,626,0 DATA 627,0,628,0,629,0,630,0,575,0,406,5,631,0,632,0 DATA 609,0,633,0,634,0,406,1,635,0,636,0,637,0,638,0 DATA 639,0,640,0,543,0,641,0,642,0,643,0,0,10,644,0 DATA 645,0,406,0,445,0,646,0,502,3,647,0,323,0,620,0 DATA 323,0,648,0,406,3,572,0,649,0,650,0,162,0,208,0 DATA 651,0,652,0,653,0,654,0,208,0,655,0,585,0,406,5 DATA 656,0,657,0,658,0,406,0,659,0,406,1,660,0,661,0 DATA 662,0,663,0,664,0,665,0,666,0,445,0,667,0,0,11 DATA 668,0,669,0,406,1,670,0,502,3,671,0,323,0,672,0 DATA 673,0,674,0,420,0,406,3,675,0,501,0,630,0,162,0 DATA 131,0,676,0,677,0,208,0,678,0,543,0,406,13,445,0 DATA 474,0,162,0,679,0,680,0,681,0,530,0,544,0,682,0 DATA 0,9,44,0,683,0,684,0,685,0,572,0,406,0,586,0 DATA 686,0,502,2,687,0,672,0,550,0,688,0,462,0,689,0 DATA 406,3,495,0,690,0,649,0,681,0,691,0,692,0,623,0 DATA 611,0,690,0,641,0,406,14,693,0,694,0,695,0,696,0 DATA 649,0,697,0,698,0,44,0,0,7,699,0,700,0,701,0 DATA 702,0,703,0,704,0,705,0,445,0,406,0,585,0,706,0 DATA 502,1,707,0,708,0,709,0,348,0,710,1,598,0,406,3 DATA 618,0,711,0,502,1,712,0,502,0,713,0,591,0,406,8 DATA 390,0,714,0,715,0,406,3,585,0,577,0,622,0,502,0 DATA 543,0,716,0,24,0,0,8,717,0,718,0,719,0,369,1 DATA 368,0,515,0,720,0,721,0,406,0,445,0,607,0,477,0 DATA 666,0,722,0,723,0,724,0,725,0,474,0,445,0,406,4 DATA 445,0,575,0,726,1,575,0,586,0,406,7,390,0,727,0 DATA 728,0,729,0,730,0,731,0,406,3,495,0,571,0,732,0 DATA 733,0,734,0,0,11,735,0,736,0,737,0,738,0,739,0 DATA 740,0,741,0,742,0,743,0,744,0,745,0,746,0,747,0 DATA 748,0,749,0,750,0,622,0,751,0,543,0,752,0,753,0 DATA 500,0,548,0,572,0,445,0,406,10,754,0,755,0,756,0 DATA 757,0,758,0,759,0,760,0,406,6,761,0,69,0,0,13 DATA 44,0,762,0,763,0,0,0,764,0,323,2,765,0,766,0 DATA 767,0,768,0,502,8,712,0,751,0,543,0,769,0,770,0 DATA 586,0,406,6,771,0,544,0,406,3,772,0,406,4,445,0 DATA 773,0,774,0,0,17,735,0,775,0,372,0,490,0,776,0 DATA 777,0,778,0,779,0,767,0,502,13,780,0,530,0,571,0 DATA 781,0,445,0,406,12,445,0,500,0,782,0,783,0,0,16 DATA 762,0,784,0,785,0,786,0,787,0,788,0,369,3,789,0 DATA 790,0,791,0,792,0,793,0,794,0,795,0,796,0,797,0 DATA 798,1,502,7,780,0,799,0,670,0,781,0,445,0,406,5 DATA 445,0,641,0,800,0,801,0,802,0,803,0,0,17,804,0 DATA 805,0,806,0,807,0,808,0,809,0,810,0,811,0,812,0 DATA 813,0,814,0,815,0,816,0,817,0,14,0,0,1,14,0 DATA 69,0,818,0,819,0,820,0,821,0,822,0,823,0,824,0 DATA 825,0,826,0,827,0,502,3,552,0,828,0,829,0,753,0 DATA 607,0,500,0,571,0,706,0,830,0,831,0,832,0,14,0 DATA 0,22,14,3,44,0,0,16,14,0,69,0,833,0,834,0 DATA 835,0,836,0,837,0,838,0,839,0,840,0,841,0,842,0 DATA 843,0,823,0,844,0,845,0,44,0,0,15
'Grass
'CC0 license - Credit "Kenney.nl" or "www.kenney.nl"
DATA 156,4287879972,4287814179,4287682083,4286627359 DATA 4286627103,4286757664,4288715570,4287475494 DATA 4286692383,4288062764,4288128044,4288780851 DATA 4286953250,4288845877,4290347331,4290020671 DATA 4287671336,4286822944,4288258606,4290216769 DATA 4290282050,4287605800,4289955390,4290412611 DATA 4288911157,4287018786,4288846132,4290478148 DATA 4289825085,4287736617,4286822689,4288193581 DATA 4290151488,4290217025,4288193326,4287671080 DATA 4289759804,4288911413,4287018787,4287149348 DATA 4288780596,4289759549,4287801642,4286888225 DATA 4288323887,4290020927,4290086464,4288389423 DATA 4286887969,4287801897,4287149092,4287083811 DATA 4288780852,4290151489,4290544457,4290478149 DATA 4289629243,4287867178,4289955647,4290543943 DATA 4289563707,4287083812,4287344678,4288976438 DATA 4290610250,4290939734,4290742096,4289694524 DATA 4287084067,4288585010,4289955646,4290544200 DATA 4290873683,4290873684,4288650290,4289628988 DATA 4289041974,4287410215,4287279653,4289237560 DATA 4291071579,4291071578,4286692128,4287018531 DATA 4288715571,4290544199,4288715315,4290742095 DATA 4291071322,4290610251,4287344934,4289302841 DATA 4290347330,4291137372,4290807889,4289759805 DATA 4287736361,4286953506,4291071321,4290939735 DATA 4289302585,4286626847,4286887970,4289368121 DATA 4287018530,4289498683,4290347075,4290609994 DATA 4289955391,4287540775,4288976693,4289498427 DATA 4289563708,4290676044,4291005528,4290085951 DATA 4289172279,4290609993,4290086207,4290741839 DATA 4291005784,4290676045,4290478406,4291005785 DATA 4291137630,4291137373,4290478405,4291269988 DATA 4291203681,4291203938,4291138145,4291269989 DATA 4291336040,4291137629,4291269731,4291336039 DATA 4291137631,4291401833,4291335783,4291269474 DATA 4291137887,4291203423,4291335782,4291269733 DATA 4291137886,4291270245,4291269732,4291269990 DATA 4291203424,4291203680,4291203939,4291203682 DATA 4291269475,4291203937,4291270246,4291204195 DATA 0,6,1,2,0,7,1,2,0,6,1,3,0,6,1,2 DATA 0,3,2,63,3,521,4,1,3,18,4,1,3,18,4,1 DATA 3,18,5,0,6,0,7,0,4,0,3,16,8,0,9,0 DATA 10,0,8,0,3,14,4,0,3,0,4,0,7,0,11,0 DATA 5,0,3,16,12,0,13,0,14,0,15,0,16,0,8,0 DATA 3,12,4,0,3,0,17,0,18,0,19,0,20,0,18,0 DATA 17,0,3,12,4,0,3,0,8,0,21,0,22,0,23,0 DATA 24,0,12,0,3,12,4,0,3,0,25,0,26,0,20,0 DATA 27,0,23,0,28,0,29,0,8,0,3,10,4,1,30,0 DATA 31,0,32,0,27,1,33,0,34,0,30,0,3,11,4,0 DATA 8,0,35,0,36,0,23,0,27,0,20,0,37,0,38,0 DATA 3,12,39,0,40,0,19,0,27,2,23,0,41,0,42,0 DATA 5,0,3,10,43,0,44,0,45,0,27,3,46,0,47,0 DATA 48,0,3,10,5,0,49,0,36,0,23,0,27,2,20,0 DATA 13,0,50,0,3,10,51,0,52,0,53,0,27,1,54,0 DATA 55,0,27,0,23,0,56,0,57,0,5,0,3,8,43,0 DATA 34,0,58,0,27,1,59,1,27,1,45,0,18,0,48,0 DATA 3,8,5,0,49,0,60,0,23,0,27,0,55,0,54,0 DATA 27,1,53,0,26,0,61,0,3,5,4,2,62,0,63,0 DATA 53,0,27,1,64,0,65,0,66,0,55,0,27,0,23,0 DATA 67,0,57,0,5,0,3,4,4,0,3,0,68,0,69,0 DATA 70,0,27,1,71,0,72,0,73,0,71,0,27,1,58,0 DATA 74,0,51,0,3,4,4,1,5,0,49,0,75,0,23,0 DATA 27,0,55,0,66,0,65,0,64,0,27,1,19,0,76,0 DATA 77,0,4,0,3,2,4,2,78,0,79,0,20,0,27,1 DATA 64,0,65,0,80,0,81,0,66,0,55,0,27,0,23,0 DATA 56,0,42,0,82,0,3,2,4,0,3,0,83,0,84,0 DATA 53,0,27,1,85,0,72,0,80,1,73,0,71,0,27,1 DATA 53,0,86,0,51,0,3,2,4,0,3,0,8,0,49,0 DATA 60,0,23,0,27,0,55,0,87,0,88,0,80,0,65,0 DATA 89,0,27,1,20,0,79,0,90,0,4,0,3,2,4,0 DATA 78,0,91,0,92,0,27,1,89,0,65,0,80,0,93,0 DATA 80,0,88,0,94,0,55,0,27,0,23,0,95,0,96,0 DATA 8,0,3,2,97,0,26,0,53,0,27,1,71,0,72,0 DATA 80,0,93,1,80,0,73,0,71,0,27,1,19,0,13,0 DATA 12,0,3,2,8,0,35,0,36,0,23,0,27,0,55,0 DATA 66,0,98,0,80,0,93,0,80,0,99,0,89,0,27,1 DATA 92,0,91,0,90,0,4,0,3,0,4,0,51,0,100,0 DATA 92,0,27,1,64,0,65,0,80,0,93,2,80,0,88,0 DATA 66,0,55,0,27,0,23,0,95,0,35,0,101,0,3,0 DATA 30,0,86,0,19,0,27,1,85,0,72,0,80,0,93,3 DATA 80,0,73,0,85,0,27,1,19,0,40,0,102,0,3,0 DATA 4,0,21,0,36,0,23,0,27,0,55,0,87,0,98,0 DATA 80,0,93,2,80,0,65,0,89,0,27,1,92,0,103,0 DATA 50,0,4,0,104,0,105,0,106,0,27,1,107,0,99,0 DATA 80,0,93,4,80,0,81,0,66,0,55,0,27,0,23,0 DATA 108,0,109,0,8,0,24,0,20,0,27,1,85,0,72,0 DATA 80,0,93,5,80,0,73,0,71,0,27,1,20,0,110,0 DATA 5,0,7,0,22,0,23,0,27,0,55,0,66,0,88,0 DATA 80,0,93,4,80,0,99,0,64,0,27,1,23,0,111,0 DATA 51,0,112,0,23,0,27,1,113,0,114,0,80,0,93,6 DATA 80,0,81,0,87,0,55,0,27,0,23,0,115,0,116,0 DATA 14,0,27,1,117,0,65,0,80,0,93,7,80,0,65,0 DATA 107,0,27,1,14,0,116,0,118,0,23,0,27,0,55,0 DATA 119,0,81,0,80,0,93,6,80,0,120,0,121,0,27,1 DATA 23,0,75,0,27,1,55,0,113,0,98,0,93,10,80,0 DATA 66,0,122,0,27,4,107,0,99,0,93,11,99,0,64,0 DATA 27,4,122,0,66,0,80,0,93,10,98,0,121,0,55,0 DATA 27,3,113,0,123,0,93,12,80,0,87,0,122,0,27,2 DATA 117,0,99,0,93,13,99,0,107,0,27,2,122,0,119,0 DATA 81,0,93,12,123,0,121,0,27,2,113,0,123,0,93,6 DATA 124,0,93,6,80,0,66,0,122,0,27,0,107,0,99,0 DATA 93,6,125,1,93,6,99,0,64,0,27,0,126,0,66,0 DATA 81,0,93,6,124,0,93,6,98,0,121,0,55,0,113,0 DATA 123,0,93,6,124,0,127,0,128,0,93,6,80,0,66,0 DATA 64,0,99,0,93,6,125,0,129,1,125,0,93,6,99,0 DATA 64,0,87,0,81,0,93,6,130,0,127,0,124,0,93,6 DATA 123,0,121,0,98,0,93,6,124,0,131,0,132,1,128,0 DATA 93,6,80,0,114,0,93,6,133,0,134,0,132,1,134,0 DATA 133,0,93,6,114,0,80,0,93,6,128,0,135,0,132,0 DATA 131,0,136,0,93,6,98,0,93,6,124,0,131,0,132,0 DATA 137,0,132,0,138,0,128,0,93,13,133,0,139,0,132,0 DATA 137,1,132,0,134,0,133,0,93,13,128,0,138,0,132,0 DATA 137,0,132,0,131,0,124,0,93,12,136,0,131,0,132,0 DATA 137,2,132,0,138,0,128,0,93,11,133,0,134,0,132,0 DATA 137,3,132,0,134,0,133,0,93,11,128,0,138,0,132,0 DATA 137,2,132,0,131,0,140,0,93,10,124,0,131,0,132,0 DATA 137,4,132,0,138,0,128,0,93,9,133,0,139,0,132,0 DATA 137,5,132,0,134,0,133,0,93,9,128,0,138,0,132,0 DATA 137,4,132,0,131,0,124,0,93,8,141,0,142,0,132,0 DATA 137,6,132,0,138,0,128,0,93,7,124,0,127,0,132,0 DATA 137,7,132,0,131,0,124,0,93,7,128,0,138,0,132,0 DATA 137,6,132,0,142,0,141,0,93,6,124,0,142,0,132,0 DATA 137,8,132,0,138,0,128,0,93,5,124,0,143,0,132,0 DATA 137,9,132,0,131,0,124,0,93,5,130,0,138,0,132,0 DATA 137,8,132,0,142,0,140,0,93,4,140,0,138,0,137,12 DATA 132,0,128,0,93,3,124,0,131,0,137,13,131,0,124,0 DATA 93,3,130,0,132,0,137,12,138,0,141,0,93,2,124,0 DATA 138,0,137,14,132,0,128,0,93,1,124,0,131,0,137,15 DATA 131,0,124,0,93,1,130,0,132,0,137,14,138,0,144,0 DATA 93,0,140,0,138,0,137,16,132,0,128,0,124,0,131,0 DATA 137,17,131,0,124,0,130,0,132,0,137,16,138,0,141,0 DATA 138,0,137,18,132,0,145,0,137,19,145,0,132,0,137,18 DATA 138,0,137,73,132,0,137,62,146,0,138,0,137,18,147,1 DATA 137,18,138,0,146,0,137,18,146,0,124,0,148,0,138,0 DATA 137,16,147,0,140,1,147,0,137,16,138,0,149,0,133,0 DATA 134,0,137,16,134,0,133,0,93,1,141,0,138,0,137,14 DATA 147,0,136,0,93,1,124,0,147,0,137,14,138,0,148,0 DATA 93,1,133,0,134,0,137,14,146,0,133,0,93,3,141,0 DATA 138,0,137,12,147,0,140,0,93,3,140,0,147,0,137,12 DATA 135,0,148,0,93,3,133,0,134,0,137,10,132,1,134,0 DATA 133,0,93,5,148,0,138,0,132,0,137,7,132,1,147,0 DATA 136,0,93,5,124,0,147,0,132,0,137,7,132,1,138,0 DATA 149,0,93,5,133,0,134,0,132,0,137,7,132,1,146,0 DATA 133,0,93,7,141,0,138,0,132,0,137,6,132,0,131,0 DATA 140,0,93,7,136,0,131,0,132,0,137,6,132,0,138,0 DATA 148,0,93,7,133,0,134,0,132,1,137,4,132,0,135,0 DATA 150,0,133,0,93,9,149,0,142,0,132,0,137,4,132,0 DATA 146,0,133,0,93,9,133,0,134,0,132,0,137,4,132,0 DATA 142,0,149,0,93,10,151,0,135,0,132,0,137,2,132,0 DATA 135,0,129,0,93,12,149,0,142,0,132,0,137,2,132,0 DATA 146,0,133,0,93,11,133,0,146,0,132,0,137,2,132,0 DATA 142,0,149,0,93,12,129,0,135,0,132,0,137,0,132,1 DATA 129,0,93,14,149,0,142,0,132,2,146,0,133,0,93,13 DATA 133,0,146,0,132,2,142,0,149,0,93,14,129,0,135,0 DATA 132,1,129,0,93,16,149,0,138,0,132,0,146,0,133,0 DATA 93,15,133,0,134,0,132,0,138,0,149,0,93,16,129,0 DATA 132,0,151,0,93,18,148,0,152,0,133,0,93,17,133,0 DATA 152,0,148,0,93,18,128,0,93,20,125,0,93,19,125,0 DATA 93,158,153,0,125,0,93,18,140,1,93,19,129,0,93,18 DATA 129,0,132,0,154,0,125,0,93,16,140,0,135,1,140,0 DATA 93,17,146,0,132,0,146,0,93,16,129,0,132,0,137,0 DATA 132,0,147,0,124,0,93,14,141,0,135,0,137,1,135,0 DATA 148,0,93,14,125,0,146,0,132,0,137,0,132,0,127,0 DATA 93,14,129,0,132,0,137,2,132,0,147,0,124,0,93,12 DATA 148,0,142,0,137,3,138,0,149,0,93,12,125,0,146,0 DATA 132,0,137,2,132,0,134,0,125,0,93,10,133,0,129,0 DATA 135,0,137,4,132,0,131,0,136,0,93,10,149,0,142,0 DATA 137,5,138,0,149,0,93,10,133,0,134,0,132,0,137,4 DATA 132,0,146,0,133,0,93,8,133,0,134,0,132,0,137,6 DATA 132,0,131,0,140,0,93,8,149,0,142,0,137,7,142,0 DATA 128,0,125,0,93,7,124,0,146,0,132,0,137,6,132,0 DATA 134,0,133,0,93,6,133,0,134,0,132,0,137,9,142,0 DATA 149,0,93,6,149,0,142,0,137,9,135,0,129,0,125,0 DATA 93,5,136,0,131,0,132,0,137,8,132,0,134,0,133,0 DATA 93,4,125,0,134,0,132,0,137,11,142,0,148,0,93,4 DATA 149,0,142,0,137,11,138,0,129,0,93,4,124,0,131,0 DATA 132,0,137,10,132,0,134,0,133,0,93,3,134,0,132,0 DATA 137,13,142,0,149,0,93,2,148,0,142,0,137,13,135,0 DATA 129,0,93,2,124,0,131,0,132,0,137,12,132,0,146,0 DATA 125,0,93,1,129,0,132,0,137,15,138,0,140,0,93,0 DATA 141,0,142,0,137,15,135,0,129,0,93,0,124,0,131,0 DATA 132,0,137,14,132,0,134,0,93,0,150,0,132,0,137,17 DATA 135,0,150,0,135,0,137,17,132,0,155,0,147,0,132,0 DATA 137,16,132,0,127,0,132,0,137,19,132,0,137,19,132,1
' Crate
DATA 423,4282460194,4283248930,4281212195,4283511331 DATA 4284759589,4285219623,4285876779,4286205228 DATA 4286336558,4286271022,4286139436,4285810986 DATA 4284825381,4282000418,4286204972,4287519283 DATA 4289359165,4290016323,4290147908,4289884994 DATA 4289227836,4287322161,4286139435,4285350952 DATA 4285876778,4287453746,4286008107,4287979317 DATA 4289819200,4289950529,4289753407,4287716660 DATA 4287387954,4286271021,4289490750,4287913781 DATA 4285482537,4288176438,4289556285,4289622078 DATA 4287519538,4282329110,4285811240,4289359164 DATA 4285219878,4282526231,4288176694,4287782196 DATA 4285548072,4288110646,4288702009,4285942571 DATA 4290082372,4289424957,4282854681,4278190080 DATA 4281409553,4288702265,4287913780,4280949518 DATA 4284234528,4285613865,4288307767,4289227580 DATA 4288307511,4285942315,4286468397,4281672210 DATA 4284891428,4289030715,4284300321,4281738003 DATA 4287322417,4287519539,4287979573,4289162044 DATA 4288241975,4287716404,4286073900,4287847989 DATA 4289293628,4288504887,4289030458,4289162043 DATA 4288899130,4289424956,4287650867,4288570680 DATA 4286599725,4288767801,4287847988,4288833338 DATA 4288504888,4289030714,4287585075,4288045109 DATA 4288439351,4288899386,4289884993,4282000660 DATA 4279569671,4284037407,4289424700,4285416744 DATA 4285351208,4285285416,4285548073,4288110902 DATA 4283183387,4279307014,4283249179,4281803539 DATA 4279438342,4283906079,4289096251,4288439352 DATA 4288964922,4289490751,4287453492,4284693795 DATA 4282854422,4282722837,4282657301,4282394387 DATA 4282788629,4282920214,4282723093,4282460180 DATA 4282591509,4282985751,4282854167,4284891172 DATA 4287387955,4289950785,4289622080,4283117594 DATA 4279306757,4288308022,4286139690,4289030459 DATA 4288701753,4288505143,4287125296,4288570936 DATA 4290148165,4287519541,4285022501,4284365346 DATA 4285679401,4286270764,4285285159,4284628259 DATA 4285088294,4286533677,4285153831,4285088038 DATA 4287650869,4290147909,4290082115,4287191088 DATA 4289490493,4285679658,4290279237,4290016578 DATA 4288373559,4286139947,4288702264,4284168992 DATA 4279898377,4283643421,4289687871,4290213701 DATA 4287782198,4285416745,4285942316,4286205230 DATA 4286073901,4284956710,4286533679,4287256370 DATA 4286402351,4286073645,4285810987,4287519284 DATA 4286402094,4285876780,4287847990,4290082114 DATA 4286074154,4280029449,4282657560,4288373815 DATA 4278386945,4282657816,4289687614,4290279494 DATA 4287387956,4285482281,4287519540,4290213702 DATA 4285482791,4278321408,4288308023,4290147910 DATA 4285942572,4290016579,4286731054,4287716659 DATA 4289490749,4290279238,4287585077,4286204973 DATA 4288636473,4287716406,4286993713,4290213445 DATA 4288570424,4288044854,4285614122,4286993712 DATA 4287453748,4286336557,4285745194,4287585076 DATA 4288570681,4286665006,4284628258,4288439095 DATA 4286796592,4285285160,4286796591,4286008108 DATA 4284299808,4287256369,4286139437,4287453747 DATA 4290082373,4283971358,4283051287,4286008364 DATA 4283773980,4282263058,4283905566,4286928175 DATA 4288636217,4288504632,4288176182,4286665262 DATA 4283642652,4282328595,4284102688,4283774237 DATA 4283840029,4286927919,4288767545,4290082371 DATA 4287519285,4285482536,4286730799,4283708444 DATA 4284102687,4285810731,4286205229,4285745195 DATA 4287125040,4288439096,4289687870,4286862127 DATA 4285876523,4283445787,4282131474,4284431137 DATA 4287125041,4290147907,4286927920,4283971102 DATA 4284234016,4283314202,4282197266,4290082117 DATA 4288176439,4283773981,4282000145,4284825378 DATA 4286665007,4285613866,4284102686,4289556286 DATA 4289424958,4287190833,4286862128,4286665263 DATA 4284234014,4289491006,4283379995,4287321906 DATA 4287059249,4286533678,4282394388,4285088295 DATA 4282131730,4290345030,4284036894,4284037151 DATA 4283839773,4284168223,4290345031,4283905565 DATA 4283577116,4288373303,4290147651,4289359422 DATA 4282460179,4284036895,4284365601,4289096250 DATA 4286796336,4290016322,4285876522,4290148164 DATA 4285088039,4286993456,4285153830,4286468143 DATA 4282263059,4283511579,4283511323,4287059248 DATA 4290213444,4283708701,4285745451,4283642908 DATA 4282197522,4284365345,4283839774,4283840030 DATA 4289950786,4282525716,4283905309,4283511324 DATA 4284168222,4283379994,4290016580,4287059505 DATA 4289293629,4290213700,4282525972,4288505144 DATA 4282000401,4284299807,4286665517,4283051802 DATA 4286731310,4283708445,4284891174,4284102430 DATA 4286993455,4283183131,4285351463,4289227835 DATA 4282723352,4286270765,4284760099,4281015055 DATA 4285548583,4281935124,4285285926,4284234529 DATA 4288768057,4286205739,4283380508,4287256625 DATA 4282328851,4284168479,4283314715,4286993967 DATA 4280949262,4278584322,4288044853,4286927921 DATA 4286270766,4287190834,4283117080,4284890916 DATA 4287650868,4289425215,4282394902,4278452993 DATA 4282197781,4284103199,4280226571,4285679912 DATA 4286073899,4286139692,4287913525,4280095242 DATA 4285220134,4288045110,4287125554,4288768059 DATA 4288439353,4287322419,4290082116,4284891684 DATA 4280226826,4283446044,4289096507,4282920473 DATA 4280292363,4286008362,4289753408,4281672211 DATA 4288242230,4281212176,4285877033,4287979318 DATA 4287256626,4285154087,4288833593,4288176183 DATA 4284759845,4281277987,4280423717,0,1 DATA 1,61,2,0,3,0,4,0,5,0,6,0,7,0,8,0 DATA 9,0,8,3,9,0,8,46,10,0,11,0,5,0,12,0 DATA 13,0,3,0,5,0,14,0,15,0,16,0,17,0,18,51 DATA 19,0,20,0,21,0,22,0,23,0,13,0,3,0,24,0 DATA 25,0,26,0,27,0,28,0,29,51,30,0,31,0,26,0 DATA 32,0,6,0,13,0,3,0,33,0,34,0,35,0,36,0 DATA 37,0,38,0,39,0,38,0,40,0,41,0,42,0,38,0 DATA 39,37,43,0,44,0,45,0,46,0,39,1,38,0,47,0 DATA 48,0,49,0,50,0,51,0,13,0,3,0,8,0,52,0 DATA 29,0,49,0,36,0,47,0,53,0,39,0,54,0,55,0 DATA 56,0,57,0,39,37,58,0,59,0,55,0,60,0,39,0 DATA 43,0,15,0,61,0,62,0,63,0,64,0,65,0,13,0 DATA 3,0,9,0,18,0,29,0,38,0,31,0,65,0,47,0 DATA 43,0,66,0,67,0,68,0,53,0,39,37,69,0,70,0 DATA 71,0,72,0,43,0,73,0,26,0,74,0,38,0,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,0 DATA 53,0,77,0,78,0,79,0,80,0,81,0,82,0,83,39 DATA 84,0,57,0,85,0,86,0,22,0,35,0,53,0,39,0 DATA 75,0,76,0,65,0,13,0,3,0,8,0,18,0,29,0 DATA 87,0,88,0,89,0,90,0,6,0,47,0,91,0,92,41 DATA 93,0,94,0,24,0,95,0,96,0,88,0,97,0,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,98,0,99,0 DATA 100,0,101,0,102,0,31,0,103,0,104,0,105,5,104,0 DATA 106,27,23,0,105,5,103,0,23,0,107,0,20,0,108,0 DATA 109,0,110,0,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,98,0,111,0,112,0,113,0,114,0,82,0,103,0 DATA 115,0,116,3,75,0,117,0,118,0,119,0,120,0,121,3 DATA 122,0,123,0,124,0,125,0,126,0,121,5,122,0,127,0 DATA 128,0,129,0,121,4,130,0,131,0,132,0,69,0,116,4 DATA 27,0,106,0,133,0,134,0,135,0,136,0,135,0,75,0 DATA 76,0,65,0,13,0,3,0,9,0,18,0,29,0,137,0 DATA 138,0,89,0,139,0,140,0,23,0,116,0,38,0,141,0 DATA 142,0,143,0,39,0,18,0,144,0,145,0,146,0,5,0 DATA 23,2,105,0,147,0,148,0,149,0,106,0,23,5,150,0 DATA 151,0,152,0,153,0,106,0,23,2,154,0,155,0,156,0 DATA 157,0,158,0,39,0,83,0,159,0,95,0,160,0,92,0 DATA 161,0,162,0,163,0,164,0,165,0,166,0,75,0,76,0 DATA 65,0,13,0,3,0,8,0,18,0,29,0,39,2,139,0 DATA 140,0,23,0,116,0,83,0,167,0,168,0,169,0,39,0 DATA 170,0,18,0,171,0,172,0,173,0,174,0,175,1,176,0 DATA 177,0,178,0,179,0,180,0,175,5,181,0,105,0,182,0 DATA 183,0,184,0,175,1,185,0,173,0,186,0,171,0,187,0 DATA 39,1,188,0,189,0,190,0,191,0,92,0,161,0,162,0 DATA 163,0,39,2,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,39,2,139,0,140,0,23,0,116,0,83,0 DATA 108,0,192,0,193,0,39,1,194,0,18,0,195,0,196,0 DATA 173,0,174,0,175,0,176,0,177,0,178,0,179,0,180,0 DATA 175,5,181,0,105,0,182,0,183,0,184,0,175,0,185,0 DATA 197,0,198,0,199,0,163,0,39,2,200,0,201,0,56,0 DATA 46,0,92,0,161,0,162,0,163,0,39,2,75,0,76,0 DATA 65,0,13,0,3,0,8,0,18,0,29,0,39,2,139,0 DATA 140,0,23,0,116,0,38,0,202,0,88,0,164,0,39,3 DATA 18,0,203,0,196,0,103,0,204,0,176,0,177,0,178,0 DATA 179,0,180,0,175,5,181,0,105,0,182,0,183,0,184,0 DATA 174,0,173,0,183,0,157,0,205,0,39,3,97,0,206,0 DATA 207,0,53,0,92,0,161,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,23,0,97,0,208,0,39,7,18,0,209,0 DATA 210,0,106,0,185,0,177,0,178,0,179,0,180,0,175,5 DATA 181,0,105,0,182,0,183,0,211,0,36,0,156,0,199,0 DATA 205,0,39,6,38,0,102,0,115,0,161,0,162,0,163,0 DATA 39,2,75,0,76,0,65,0,13,0,3,0,8,0,18,0 DATA 29,0,39,2,139,0,140,0,23,0,212,0,91,0,53,0 DATA 39,6,194,0,18,0,157,0,213,0,103,0,177,0,178,0 DATA 179,0,180,0,175,5,181,0,105,0,182,0,214,0,61,0 DATA 172,0,215,0,158,0,39,5,38,1,43,0,216,0,217,0 DATA 218,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,103,0 DATA 219,0,92,0,89,0,53,0,39,6,170,0,18,0,215,0 DATA 220,0,155,0,221,0,179,0,180,0,175,5,181,0,105,0 DATA 36,0,222,0,223,0,171,0,158,0,39,6,38,0,43,0 DATA 224,0,76,0,225,0,222,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,48,0,226,0,219,0,227,0,57,0,160,0 DATA 39,6,194,0,18,0,203,0,132,0,161,0,228,0,180,0 DATA 175,5,181,0,229,0,152,0,183,0,157,0,205,0,39,7 DATA 85,0,216,0,76,0,230,0,151,0,231,0,162,0,163,0 DATA 39,2,75,0,76,0,65,0,13,0,3,0,8,0,18,0 DATA 29,0,39,2,139,0,140,0,48,0,121,0,232,0,233,0 DATA 164,0,50,0,38,0,39,7,18,0,203,0,118,0,222,0 DATA 234,1,175,3,234,0,174,0,150,0,235,0,236,0,158,0 DATA 39,6,38,1,216,0,76,0,219,0,237,0,238,0,239,0 DATA 162,0,163,0,39,2,75,0,76,0,65,0,13,0,3,0 DATA 8,0,18,0,29,0,39,2,139,0,140,0,106,0,240,0 DATA 241,0,242,0,243,0,76,0,244,0,53,0,39,7,18,0 DATA 209,0,213,0,106,0,174,0,175,3,174,0,36,0,186,0 DATA 209,0,158,0,39,6,38,0,102,0,245,0,246,0,247,0 DATA 248,0,249,0,250,0,10,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,182,0,251,0,127,0,252,0,253,0 DATA 227,0,254,0,53,0,39,7,255,0,157,0,256,0,36,0 DATA 174,0,234,0,175,0,174,0,257,0,156,0,215,0,158,0 DATA 39,5,38,1,43,0,244,0,76,0,258,0,259,0,127,0 DATA 260,0,261,0,262,0,162,0,163,0,39,2,75,0,76,0 DATA 65,0,13,0,3,0,8,0,18,0,29,0,39,2,139,0 DATA 140,0,61,0,234,0,263,0,248,0,123,0,251,0,264,0 DATA 265,0,254,0,53,0,39,6,266,0,255,0,157,0,183,0 DATA 103,0,174,0,185,0,103,0,198,0,171,0,158,0,194,0 DATA 39,5,38,0,43,0,244,0,62,0,267,0,242,0,127,0 DATA 237,0,268,0,181,0,262,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,234,0,175,0,222,0,269,0,270,0 DATA 271,0,272,0,227,0,50,0,160,0,39,6,194,0,273,0 DATA 203,0,196,0,229,0,23,0,183,0,157,0,158,0,194,0 DATA 39,6,85,0,87,0,76,0,274,0,275,0,249,0,276,0 DATA 182,0,175,0,181,0,262,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,234,0,175,1,173,0,277,0,278,0 DATA 232,0,219,0,62,0,224,0,38,0,39,7,158,0,279,0 DATA 198,0,186,0,199,0,158,0,39,6,38,0,160,0,92,0 DATA 280,0,230,0,281,0,282,0,283,0,284,0,175,1,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,285,0,154,0,286,0,123,0,242,0,253,0 DATA 76,0,212,0,53,0,39,7,287,0,288,0,209,0,158,0 DATA 39,6,38,0,102,0,87,0,246,0,247,0,248,0,278,0 DATA 251,0,289,0,290,0,175,1,181,0,262,0,162,0,163,0 DATA 39,2,75,0,76,0,65,0,13,0,3,0,8,0,18,0 DATA 29,0,39,2,139,0,140,0,61,0,234,0,175,1,285,0 DATA 154,0,291,0,292,0,127,0,242,0,253,0,227,0,50,0 DATA 53,0,39,5,85,0,293,0,171,0,158,0,39,6,38,0 DATA 43,0,244,0,76,0,258,0,248,0,127,0,294,0,150,0 DATA 295,0,290,0,175,1,181,0,262,0,162,0,163,0,39,2 DATA 75,0,76,0,65,0,13,0,3,0,8,0,18,0,29,0 DATA 39,2,139,0,140,0,61,0,234,0,175,1,285,0,154,0 DATA 296,0,297,0,248,0,298,0,242,0,289,0,265,0,50,0 DATA 53,0,39,3,85,0,34,0,195,0,18,0,194,0,39,5 DATA 287,0,16,0,244,0,62,0,274,0,281,0,123,0,242,0 DATA 299,0,197,0,295,0,290,0,175,0,234,0,181,0,262,0 DATA 162,0,163,0,39,2,75,0,76,0,65,0,13,0,3,0 DATA 8,0,18,0,29,0,39,2,139,0,140,0,61,0,234,0 DATA 175,1,285,0,154,0,296,1,182,0,281,0,300,0,232,0 DATA 219,0,227,0,244,0,208,0,39,1,160,0,34,0,301,0 DATA 158,0,39,7,160,0,216,0,64,0,230,0,302,0,300,0 DATA 303,0,6,0,197,1,295,0,290,0,175,0,234,0,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,285,0,154,0,296,1,175,0,231,0,304,0 DATA 278,0,305,0,219,0,62,0,244,0,38,0,160,0,39,0 DATA 306,0,158,0,39,7,160,0,216,0,280,0,230,0,307,0 DATA 300,0,260,0,231,0,175,0,197,1,295,0,290,0,175,1 DATA 181,0,262,0,162,0,163,0,39,2,75,0,76,0,65,0 DATA 13,0,3,0,8,0,18,0,29,0,39,2,139,0,140,0 DATA 61,0,234,0,175,1,285,0,154,0,296,1,175,1,234,0 DATA 308,0,249,0,242,0,253,0,309,0,114,0,287,0,301,0 DATA 310,0,39,7,53,0,244,0,280,0,247,0,248,0,249,0 DATA 242,0,176,0,175,1,197,1,295,0,290,0,175,1,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,285,0,154,0,296,1,175,2,182,0,248,0 DATA 127,0,260,0,25,0,311,0,162,0,18,0,194,0,39,6 DATA 53,0,50,0,309,0,272,0,242,0,312,0,252,0,182,0 DATA 175,2,197,1,295,0,290,0,175,1,181,0,262,0,162,0 DATA 163,0,39,2,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,39,2,139,0,140,0,61,0,234,0,175,1 DATA 285,0,154,0,296,1,175,3,263,0,313,0,314,0,186,0 DATA 195,0,310,0,194,0,39,6,53,0,212,0,92,0,116,0 DATA 15,0,276,0,260,0,182,0,175,2,234,0,197,1,295,0 DATA 290,0,175,1,181,0,262,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,234,0,175,1,285,0,154,0,296,1 DATA 175,3,174,0,23,0,220,0,209,0,310,0,194,0,39,6 DATA 38,0,244,0,164,0,82,0,39,0,157,0,132,0,5,0 DATA 174,0,175,3,197,1,295,0,290,0,175,0,234,0,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,285,0,154,0,296,1,175,1,234,0,174,0 DATA 36,0,210,0,157,0,310,0,39,7,38,0,244,0,309,0 DATA 82,0,160,0,39,0,163,0,157,0,183,0,197,0,174,0 DATA 234,0,175,1,197,1,295,0,290,0,175,1,181,0,262,0 DATA 162,0,163,0,39,2,75,0,76,0,65,0,13,0,3,0 DATA 8,0,18,0,29,0,39,2,139,0,140,0,61,0,234,0 DATA 175,1,285,0,154,0,296,1,175,1,231,0,106,0,156,0 DATA 209,0,18,0,39,7,53,0,244,0,227,0,114,0,38,0 DATA 39,2,158,0,157,0,210,0,106,0,231,0,175,1,197,1 DATA 295,0,290,0,175,1,181,0,262,0,162,0,163,0,39,2 DATA 75,0,76,0,65,0,13,0,3,0,8,0,18,0,29,0 DATA 39,2,139,0,140,0,61,0,234,0,175,1,285,0,154,0 DATA 296,1,175,0,185,0,173,0,186,0,171,0,310,0,194,0 DATA 39,6,53,0,50,0,245,0,114,0,38,0,39,4,158,0 DATA 157,0,213,0,197,0,174,0,175,0,197,1,295,0,290,0 DATA 175,0,234,0,181,0,262,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,234,0,175,1,285,0,154,0,296,1 DATA 185,0,103,0,183,0,209,0,310,0,194,0,39,6,53,0 DATA 50,0,92,0,315,0,160,0,39,5,194,0,158,0,157,0 DATA 118,0,103,0,174,0,197,1,295,0,290,0,175,1,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,285,0,154,0,296,0,316,0,103,0,183,0 DATA 157,0,273,0,194,0,39,6,38,0,244,0,309,0,116,0 DATA 114,0,38,0,39,7,317,0,236,0,196,0,173,0,229,0 DATA 197,0,295,0,290,0,175,0,234,0,181,0,262,0,162,0 DATA 163,0,39,2,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,39,2,139,0,140,0,61,0,234,0,175,1 DATA 285,0,154,0,258,0,318,0,223,0,144,0,319,0,39,7 DATA 38,0,244,0,76,0,272,0,21,0,309,0,216,0,38,0 DATA 287,0,39,6,158,0,236,0,118,0,320,0,197,0,179,0 DATA 290,0,175,1,181,0,262,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,61,0,234,0,175,1,285,0,155,0,161,0 DATA 172,0,195,0,273,0,39,7,53,0,244,0,280,0,247,0 DATA 242,0,260,0,243,0,62,0,216,0,16,0,287,0,39,6 DATA 317,0,157,0,213,0,103,0,321,0,290,0,175,1,181,0 DATA 262,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,61,0 DATA 234,0,175,1,36,0,322,0,156,0,171,0,18,0,170,0 DATA 39,6,53,0,254,0,62,0,230,0,248,0,278,0,249,0 DATA 242,0,219,0,227,0,244,0,43,0,287,0,39,6,205,0 DATA 236,0,256,0,318,0,323,0,175,0,234,0,181,0,262,0 DATA 162,0,163,0,39,2,75,0,76,0,65,0,13,0,3,0 DATA 8,0,18,0,29,0,39,2,139,0,140,0,61,0,234,0 DATA 175,0,185,0,23,0,235,0,195,0,18,0,170,0,39,6 DATA 53,0,254,0,62,0,230,0,242,0,324,0,325,0,326,0 DATA 298,0,260,0,327,0,227,0,244,0,43,0,38,0,39,6 DATA 205,0,157,0,220,0,106,0,174,0,175,0,181,0,262,0 DATA 162,0,163,0,39,2,75,0,76,0,65,0,13,0,3,0 DATA 8,0,18,0,29,0,39,2,139,0,140,0,61,0,234,0 DATA 174,0,103,0,183,0,157,0,328,0,194,0,39,6,38,0 DATA 50,0,62,0,274,0,313,0,300,0,329,0,182,0,330,0 DATA 331,0,332,0,333,0,272,0,164,0,216,0,85,0,39,7 DATA 205,0,236,0,196,0,173,0,231,0,181,0,262,0,162,0 DATA 163,0,39,2,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,39,2,139,0,140,0,61,0,268,0,36,0 DATA 172,0,195,0,18,0,39,7,208,0,244,0,246,0,258,0 DATA 334,0,300,0,242,0,176,0,175,1,176,0,335,0,300,0 DATA 275,0,253,0,64,0,265,0,85,0,38,0,39,6,336,0 DATA 199,0,213,0,36,0,268,0,262,0,162,0,163,0,39,2 DATA 75,0,76,0,65,0,13,0,3,0,8,0,18,0,29,0 DATA 39,2,139,0,140,0,48,0,36,0,156,0,195,0,18,0 DATA 39,7,53,0,50,0,76,0,247,0,259,0,337,0,338,0 DATA 231,0,175,3,181,0,251,0,324,0,334,0,253,0,62,0 DATA 216,0,43,0,38,0,39,6,317,0,157,0,256,0,36,0 DATA 78,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,103,0 DATA 235,0,162,0,18,0,170,0,39,6,53,0,89,0,62,0 DATA 230,0,339,0,127,0,340,0,174,0,175,5,263,0,341,0 DATA 298,0,302,0,219,0,164,0,87,0,43,0,38,0,39,6 DATA 205,0,342,0,343,0,161,0,162,0,163,0,39,2,75,0 DATA 76,0,65,0,13,0,3,0,8,0,18,0,29,0,39,2 DATA 139,0,140,0,23,0,344,0,345,0,170,0,39,6,53,0 DATA 254,0,62,0,274,0,335,0,300,0,302,0,284,0,180,0 DATA 175,5,181,0,177,0,277,0,346,0,260,0,272,0,227,0 DATA 87,0,43,0,38,0,39,6,336,0,347,0,161,0,162,0 DATA 163,0,39,2,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,39,2,139,0,140,0,23,0,69,0,194,0 DATA 39,6,38,0,50,0,62,0,267,0,313,0,348,0,277,0 DATA 7,0,179,0,180,0,175,5,181,0,105,0,36,0,349,0 DATA 278,0,232,0,327,0,164,0,92,0,160,0,39,7,92,0 DATA 161,0,162,0,163,0,39,2,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,39,2,139,0,140,0,23,0 DATA 116,0,208,0,350,0,351,0,352,0,39,2,208,0,254,0 DATA 246,0,258,0,281,0,300,0,353,0,354,0,178,0,179,0 DATA 180,0,175,5,181,0,105,0,182,0,132,0,355,0,278,0 DATA 302,0,356,0,64,0,245,0,85,0,38,0,39,1,37,0 DATA 357,0,358,0,359,0,92,0,161,0,162,0,163,0,39,2 DATA 75,0,76,0,65,0,13,0,3,0,8,0,18,0,29,0 DATA 39,2,139,0,140,0,23,0,116,1,360,0,55,0,71,0 DATA 39,1,53,0,254,0,76,0,247,0,248,0,249,0,248,0 DATA 185,0,177,0,178,0,179,0,180,0,175,5,181,0,105,0 DATA 182,0,183,0,361,0,259,0,123,0,242,0,253,0,62,0 DATA 216,0,43,0,38,0,39,0,362,0,55,0,363,0,90,0 DATA 92,0,161,0,162,0,163,0,39,2,75,0,76,0,65,0 DATA 13,0,3,0,8,0,18,0,29,0,39,2,139,0,140,0 DATA 23,0,116,0,43,0,364,0,365,0,366,0,39,0,53,0 DATA 89,0,62,0,219,0,248,0,123,0,331,0,222,0,176,0 DATA 177,0,178,0,179,0,180,0,175,5,181,0,105,0,182,0 DATA 183,0,184,0,263,0,259,0,337,0,242,0,289,0,164,0 DATA 216,0,80,0,38,0,159,0,99,0,367,0,368,0,92,0 DATA 161,0,162,0,163,0,38,0,39,1,75,0,76,0,65,0 DATA 13,0,3,0,8,0,18,0,29,0,369,0,370,0,371,0 DATA 139,0,140,0,23,0,116,0,38,0,80,0,143,0,43,0 DATA 38,0,116,0,164,0,230,0,237,0,278,0,251,0,263,0 DATA 175,0,176,0,177,0,178,0,179,0,180,0,175,3,234,0 DATA 175,0,181,0,105,0,182,0,183,0,184,0,175,0,263,0 DATA 304,0,372,0,373,0,219,0,227,0,92,0,43,0,160,0 DATA 57,0,69,0,38,0,92,0,161,0,162,0,317,0,88,0 DATA 374,0,375,0,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,98,0,376,0,377,0,135,0,114,0,69,0,103,0 DATA 378,0,92,4,37,0,247,0,151,0,129,0,252,0,263,0 DATA 176,1,231,0,154,0,221,0,379,0,380,0,176,5,231,0 DATA 173,0,182,0,381,0,361,0,176,1,330,0,307,0,382,0 DATA 383,0,230,0,37,0,115,0,92,3,384,0,106,0,163,0 DATA 385,0,386,0,387,0,388,0,75,0,76,0,65,0,13,0 DATA 3,0,8,0,18,0,29,0,389,0,390,0,391,0,43,0 DATA 73,0,23,0,106,0,148,5,222,0,26,1,392,0,10,4 DATA 393,0,7,0,393,0,10,8,7,0,393,0,10,2,392,0 DATA 26,1,161,0,148,5,36,0,105,0,394,0,53,0,362,0 DATA 395,0,396,0,75,0,76,0,65,0,13,0,3,0,8,0 DATA 18,0,29,0,38,0,160,0,43,0,86,0,24,0,397,0 DATA 336,0,301,41,310,0,35,0,11,0,79,0,16,0,160,0 DATA 38,0,75,0,76,0,65,0,13,0,3,0,8,0,18,0 DATA 29,0,39,0,43,0,73,0,22,0,95,0,116,0,398,0 DATA 399,0,336,38,29,0,400,0,401,0,20,0,90,0,78,0 DATA 77,0,16,0,39,0,75,0,76,0,65,0,13,0,3,0 DATA 8,0,402,0,98,0,38,0,15,0,26,0,35,0,53,0 DATA 403,0,404,0,405,0,406,0,39,37,87,0,407,0,408,0 DATA 409,0,43,0,77,0,26,0,47,0,208,0,20,0,62,0 DATA 65,0,13,0,3,0,33,0,410,0,194,0,47,0,61,0 DATA 74,0,53,0,39,0,405,0,55,0,411,0,93,0,39,37 DATA 412,0,413,0,55,0,68,0,39,0,43,0,31,0,61,0 DATA 217,0,208,0,89,0,51,0,13,0,3,0,78,0,83,0 DATA 77,0,48,0,202,0,38,0,39,1,116,0,414,0,95,0 DATA 38,0,39,37,208,0,86,0,138,0,83,0,39,1,208,0 DATA 27,0,106,0,415,0,84,0,26,0,13,0,3,0,318,0 DATA 21,0,26,0,107,0,20,0,114,50,406,0,43,0,35,0 DATA 65,0,416,0,24,0,13,0,3,0,417,0,22,0,32,0 DATA 418,0,164,0,246,0,419,0,246,0,419,1,246,0,419,0 DATA 246,0,419,3,246,0,419,3,246,0,419,7,246,0,419,3 DATA 246,0,419,3,246,0,419,3,246,0,419,8,280,0,92,0 DATA 84,0,289,0,392,0,105,0,13,0,3,0,420,0,105,0 DATA 6,0,26,0,51,53,26,0,318,0,105,0,12,0,13,0
FOR j
= 0 TO palCount
- 1
rleCount = rleCount - 1