diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Node.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Node.class new file mode 100644 index 0000000..28a1d25 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Node.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.class new file mode 100644 index 0000000..e98eab2 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy$State.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy$State.class new file mode 100644 index 0000000..e6707c3 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy$State.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy.class index 0a1fe32..46ef36f 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Enemy.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player$State.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player$State.class new file mode 100644 index 0000000..5a6bd23 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player$State.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player.class index 249f20a..fbf79f0 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/Player.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.class new file mode 100644 index 0000000..7d9be71 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Task.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Task.class new file mode 100644 index 0000000..ab4eb2f Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Task.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.class new file mode 100644 index 0000000..f24a00e Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Scenes/Hud.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Scenes/Hud.class index d638b6c..e92cf3f 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Scenes/Hud.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Scenes/Hud.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Screens/PlayScreen.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Screens/PlayScreen.class index 81df8c5..dea1f9c 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Screens/PlayScreen.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Screens/PlayScreen.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/SpaceGamePrototype.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/SpaceGamePrototype.class index dad1e7a..d298926 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/SpaceGamePrototype.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/SpaceGamePrototype.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/BinarySearch.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/BinarySearch.class new file mode 100644 index 0000000..3fda0ed Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/BinarySearch.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.class index 9137025..e7bafba 100644 Binary files a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.class and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/EnemyUpdater.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/EnemyUpdater.class new file mode 100644 index 0000000..6ec20b4 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/EnemyUpdater.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.class new file mode 100644 index 0000000..a04d9d5 Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/QuickSort.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/QuickSort.class new file mode 100644 index 0000000..491279a Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/QuickSort.class differ diff --git a/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/WorldContactListener.class b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/WorldContactListener.class new file mode 100644 index 0000000..dbcee2a Binary files /dev/null and b/SpaceGameFolder/core/bin/main/com/davidalexanderkelly/game/Tools/WorldContactListener.class differ diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Node.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Node.java index e2d459b..f2db42b 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Node.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Node.java @@ -1,27 +1,27 @@ -package com.davidalexanderkelly.game.Entities.Behaviors; - -import com.badlogic.gdx.math.Vector2; - -public class Node { - - private Vector2 worldPosition; - - public float gCost; - public float hCost; - public Node parent; - - public Node(Vector2 worldPosition) { - this.worldPosition = worldPosition; - } - - - - public Vector2 getWorldPosition() { - return worldPosition; - } - - public float fCost(){ - return gCost + hCost; - } - -} +package com.davidalexanderkelly.game.Entities.Behaviors; + +import com.badlogic.gdx.math.Vector2; + +public class Node { + + private Vector2 worldPosition; + + public float gCost; + public float hCost; + public Node parent; + + public Node(Vector2 worldPosition) { + this.worldPosition = worldPosition; + } + + + + public Vector2 getWorldPosition() { + return worldPosition; + } + + public float fCost(){ + return gCost + hCost; + } + +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.java index c6fec88..6d5be93 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Behaviors/Pathfinding.java @@ -1,104 +1,102 @@ -package com.davidalexanderkelly.game.Entities.Behaviors; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -import com.badlogic.gdx.math.Vector2; -import com.davidalexanderkelly.game.Screens.PlayScreen; -import com.davidalexanderkelly.game.Tools.PathfindingWorldCreator; - -public class Pathfinding { - - private float depth; - PathfindingWorldCreator pathfinder; - - public static float round(float d, int decimalPlace) { - BigDecimal bd = new BigDecimal(Float.toString(d)); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); - return bd.floatValue(); - } - - public ArrayList findPath(Node startPosition,Node goalPosition, PathfindingWorldCreator pathfinder) { - this.pathfinder = pathfinder; - Node startNode = startPosition; - Node endNode = goalPosition; - depth = 0f; - - ArrayList openSet = new ArrayList(); - HashSet closedSet = new HashSet(); - openSet.add(startNode); - while(openSet.size() > 0) { - Node currentNode = openSet.get(0); - for(int i = 1; i < openSet.size(); i++) { - if((openSet.get(i).fCost() < currentNode.fCost() || (openSet.get(i).fCost() == currentNode.fCost() && openSet.get(i).hCost < currentNode.hCost)) && depth > currentNode.fCost()) { - currentNode = openSet.get(i); - depth = currentNode.fCost(); - - - - } - } - openSet.remove(currentNode); - closedSet.add(currentNode); - if(round(currentNode.getWorldPosition().x,2) == round(endNode.getWorldPosition().x,2) && round(currentNode.getWorldPosition().y,2) == round(endNode.getWorldPosition().y,2)) { - ArrayList returnPath = new ArrayList(); - returnPath = retracePath(startNode,currentNode); - - return returnPath; - - } - - for(Node neighbour : pathfinder.getNeighbours(currentNode)){ - if(closedSet.contains(neighbour)) { - - continue; - - } - - float newMovementCostToNeighbour = currentNode.gCost + getDistance(currentNode,neighbour); - if(newMovementCostToNeighbour < neighbour.gCost || !openSet.contains(neighbour)) { - neighbour.gCost = newMovementCostToNeighbour; - neighbour.hCost = getDistance(neighbour,endNode); - neighbour.parent = currentNode; - - if(!openSet.contains(neighbour)) { - openSet.add(neighbour); - - - } - } - - } - - } - - return openSet; - - } - - public ArrayList retracePath(Node startNode, Node endNode) { - - ArrayList path = new ArrayList(); - Node currentNode = endNode; - while(currentNode != startNode) { - path.add(currentNode); - currentNode = currentNode.parent; - } - - Collections.reverse(path); - return path; - } - - public float getDistance(Node nodeA, Node nodeB) { - - float distanceX = round(nodeA.getWorldPosition().x,2) - round(nodeB.getWorldPosition().x,2); - float distanceY = round(nodeA.getWorldPosition().y,2) - round(nodeB.getWorldPosition().y,2); - - if(distanceX > distanceY) - return 14*distanceY + 10*(distanceX-distanceY); - return 14*distanceX + 10*(distanceY-distanceX); - } -} +package com.davidalexanderkelly.game.Entities.Behaviors; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import com.davidalexanderkelly.game.Tools.PathfindingWorldCreator; + +public class Pathfinding { + + private float depth; + PathfindingWorldCreator pathfinder; + + public static float round(float d, int decimalPlace) { + BigDecimal bd = new BigDecimal(Float.toString(d)); + bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + return bd.floatValue(); + } + + public ArrayList findPath(Node startPosition,Node goalPosition, PathfindingWorldCreator pathfinder) { + this.pathfinder = pathfinder; + + Node startNode = startPosition; + Node endNode = goalPosition; + depth = 0f; + + ArrayList openSet = new ArrayList(); + HashSet closedSet = new HashSet(); + openSet.add(startNode); + while(openSet.size() > 0) { + Node currentNode = openSet.get(0); + for(int i = 1; i < openSet.size(); i++) { + if((openSet.get(i).fCost() < currentNode.fCost() || (openSet.get(i).fCost() == currentNode.fCost() && openSet.get(i).hCost < currentNode.hCost)) && depth > currentNode.fCost()) { + currentNode = openSet.get(i); + depth = currentNode.fCost(); + + + + } + } + openSet.remove(currentNode); + closedSet.add(currentNode); + if(round(currentNode.getWorldPosition().x,2) == round(endNode.getWorldPosition().x,2) && round(currentNode.getWorldPosition().y,2) == round(endNode.getWorldPosition().y,2)) { + ArrayList returnPath = new ArrayList(); + returnPath = retracePath(startNode,currentNode); + + return returnPath; + + } + + for(Node neighbour : pathfinder.getNeighbours(currentNode)){ + + if(closedSet.contains(neighbour)) { + + continue; + + } + + float newMovementCostToNeighbour = currentNode.gCost + getDistance(currentNode,neighbour); + if(newMovementCostToNeighbour < neighbour.gCost || !openSet.contains(neighbour)) { + neighbour.gCost = newMovementCostToNeighbour; + neighbour.hCost = getDistance(neighbour,endNode); + neighbour.parent = currentNode; + + if(!openSet.contains(neighbour)) { + openSet.add(neighbour); + + + } + } + + } + + } + + return openSet; + + } + + public ArrayList retracePath(Node startNode, Node endNode) { + + ArrayList path = new ArrayList(); + Node currentNode = endNode; + while(currentNode != startNode) { + path.add(currentNode); + currentNode = currentNode.parent; + } + + Collections.reverse(path); + return path; + } + + public float getDistance(Node nodeA, Node nodeB) { + + float distanceX = round(nodeA.getWorldPosition().x,2) - round(nodeB.getWorldPosition().x,2); + float distanceY = round(nodeA.getWorldPosition().y,2) - round(nodeB.getWorldPosition().y,2); + + if(distanceX > distanceY) + return 14*distanceY + 10*(distanceX-distanceY); + return 14*distanceX + 10*(distanceY-distanceX); + } +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Enemy.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Enemy.java index 8c6d420..015995f 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Enemy.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Enemy.java @@ -7,7 +7,6 @@ import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.CircleShape; @@ -17,17 +16,17 @@ import com.davidalexanderkelly.game.SpaceGamePrototype; import com.davidalexanderkelly.game.Entities.Behaviors.Node; import com.davidalexanderkelly.game.Entities.Behaviors.Pathfinding; +import com.davidalexanderkelly.game.Entities.TileObjects.Task; import com.davidalexanderkelly.game.Screens.PlayScreen; -import com.davidalexanderkelly.game.Tools.InteractableWorldCreator; -import com.davidalexanderkelly.game.Tools.PathfindingWorldCreator; public class Enemy extends Sprite{ public enum State{IDLE,RUNNING}; public State currentState; public State previousState; + + private float x; + private float y; - - private InteractableWorldCreator interactables; private Animation playerIdle; private Animation playerRun; private float stateTimer; @@ -42,14 +41,18 @@ public enum State{IDLE,RUNNING}; private ArrayList path; private boolean moving; + private boolean moved; - public Enemy(World world,PlayScreen screen) { + public Enemy(World world,PlayScreen screen, float x, float y) { super(screen.getAtlas().findRegion("enemyIdle")); this.screen = screen; this.world = world; + this.x = x; + this.y = y; + currentState = State.IDLE; previousState = State.IDLE; stateTimer = 0; @@ -70,11 +73,16 @@ public Enemy(World world,PlayScreen screen) { defineEnemy(); setBounds(0,0,19 / SpaceGamePrototype.PixelsPerMetre, 23 / SpaceGamePrototype.PixelsPerMetre); - setPath(0,1); + + moved = false; } public void update(float deltaTime) { + if(moved == false) { + setPath(0,1); + moved = true; + } setPosition((box2dBody.getPosition().x - getWidth()/2),(box2dBody.getPosition().y - getHeight()/4) ); setRegion(getFrame(deltaTime)); @@ -163,21 +171,28 @@ public State getState() { } public void setPath(int start, int end) { + System.out.println("Ok"); moving = false; pathfinding = new Pathfinding(); - List interactables = screen.interactables.getLocations(); + List interactables = new ArrayList(); + interactables.add(new Node(box2dBody.getPosition())); + for(Task task : screen.creator.getTasks()) { + interactables.add(new Node(task.getPosition())); + } + path = pathfinding.findPath(interactables.get(start),interactables.get(end),screen.pathfinder); + } public void defineEnemy() { BodyDef bodyDefinition = new BodyDef(); - bodyDefinition.position.set(screen.interactables.getLocations().get(0).getWorldPosition().x,screen.interactables.getLocations().get(0).getWorldPosition().y); + bodyDefinition.position.set(x,y); bodyDefinition.type = BodyDef.BodyType.DynamicBody; box2dBody = world.createBody(bodyDefinition); FixtureDef fixtureDefinition = new FixtureDef(); CircleShape shape = new CircleShape(); - shape.setRadius(0 / SpaceGamePrototype.PixelsPerMetre); + shape.setRadius(2 / SpaceGamePrototype.PixelsPerMetre); fixtureDefinition.shape = shape; diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Player.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Player.java index 97b9c47..0b77beb 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Player.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/Player.java @@ -109,10 +109,25 @@ public void definePlayer() { FixtureDef fixtureDefinition = new FixtureDef(); CircleShape shape = new CircleShape(); shape.setRadius(5 / SpaceGamePrototype.PixelsPerMetre); + fixtureDefinition.filter.categoryBits = SpaceGamePrototype.PLAYER_BIT; + fixtureDefinition.filter.maskBits = SpaceGamePrototype.DEFAULT_BIT | + SpaceGamePrototype.TELEPORTER_BIT; + fixtureDefinition.shape = shape; - - box2dBody.createFixture(fixtureDefinition); + + box2dBody.createFixture(fixtureDefinition).setUserData(this); + + CircleShape sensor = new CircleShape(); + sensor.setRadius(6 / SpaceGamePrototype.PixelsPerMetre); + fixtureDefinition.shape = sensor; + fixtureDefinition.isSensor = true; + box2dBody.createFixture(fixtureDefinition).setUserData(this); + + } + + public void teleport(float x, float y) { + box2dBody.setTransform(100f,100f,0); } diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.java new file mode 100644 index 0000000..da6d85a --- /dev/null +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/InteractiveTileObject.java @@ -0,0 +1,59 @@ +package com.davidalexanderkelly.game.Entities.TileObjects; + +import com.badlogic.gdx.maps.MapObject; +import com.badlogic.gdx.maps.objects.RectangleMapObject; +import com.badlogic.gdx.maps.tiled.TiledMap; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.Filter; +import com.badlogic.gdx.physics.box2d.Fixture; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.badlogic.gdx.physics.box2d.World; +import com.davidalexanderkelly.game.SpaceGamePrototype; +import com.davidalexanderkelly.game.Screens.PlayScreen; +import com.davidalexanderkelly.game.Entities.Player; + +public abstract class InteractiveTileObject { + protected World world; + protected TiledMap map; + protected Rectangle bounds; + protected Body body; + protected PlayScreen screen; + protected MapObject object; + + protected Fixture fixture; + + public InteractiveTileObject(PlayScreen screen, MapObject object){ + this.object = object; + this.screen = screen; + this.world = screen.getWorld(); + this.map = screen.getMap(); + this.bounds = ((RectangleMapObject) object).getRectangle(); + + BodyDef bdef = new BodyDef(); + FixtureDef fdef = new FixtureDef(); + PolygonShape shape = new PolygonShape(); + + bdef.type = BodyDef.BodyType.StaticBody; + bdef.position.set((bounds.getX() + bounds.getWidth() / 2) / SpaceGamePrototype.PixelsPerMetre, (bounds.getY() + bounds.getHeight() / 2) / SpaceGamePrototype.PixelsPerMetre); + + body = world.createBody(bdef); + + shape.setAsBox(bounds.getWidth() / 2 / SpaceGamePrototype.PixelsPerMetre, bounds.getHeight() / 2 / SpaceGamePrototype.PixelsPerMetre); + fdef.shape = shape; + fixture = body.createFixture(fdef); + + } + + public abstract void collide(Player player); + + public void setCategoryFilter(short filterBit){ + Filter filter = new Filter(); + filter.categoryBits = filterBit; + fixture.setFilterData(filter); + } + + +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Task.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Task.java new file mode 100644 index 0000000..66a5285 --- /dev/null +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Task.java @@ -0,0 +1,32 @@ +package com.davidalexanderkelly.game.Entities.TileObjects; + +import com.badlogic.gdx.maps.MapObject; +import com.badlogic.gdx.math.Vector2; +import com.davidalexanderkelly.game.SpaceGamePrototype; +import com.davidalexanderkelly.game.Screens.PlayScreen; +import com.davidalexanderkelly.game.Entities.Player; + + +public class Task extends InteractiveTileObject { + + private float x; + private float y; + + public Task(PlayScreen screen, MapObject object, float x, float y){ + super(screen, object); + fixture.setUserData(this); + setCategoryFilter(SpaceGamePrototype.TASK_BIT); + this.x = x; + this.y = y; + } + + @Override + public void collide(Player player) { + System.out.println("Ok"); + } + + public Vector2 getPosition() { + return new Vector2(x,y); + } + +} \ No newline at end of file diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.java new file mode 100644 index 0000000..863ea70 --- /dev/null +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Entities/TileObjects/Teleporter.java @@ -0,0 +1,42 @@ +package com.davidalexanderkelly.game.Entities.TileObjects; + +import java.util.List; +import com.badlogic.gdx.maps.MapObject; +import com.badlogic.gdx.math.Vector2; +import com.davidalexanderkelly.game.SpaceGamePrototype; +import com.davidalexanderkelly.game.Screens.PlayScreen; +import com.davidalexanderkelly.game.Entities.Player; + + +public class Teleporter extends InteractiveTileObject { + + private float x; + private float y; + + public Teleporter(PlayScreen screen, MapObject object,float x,float y){ + super(screen, object); + fixture.setUserData(this); + setCategoryFilter(SpaceGamePrototype.TELEPORTER_BIT); + this.x = x; + this.y = y; + } + + @Override + public void collide(Player player) { + List teleporters = screen.creator.getTeleporters(); + for(int i = 0; i < teleporters.size(); i++) { + if(teleporters.get(i) == this) { + if(i % 2 == 0 ) + player.teleport(teleporters.get(i+1).getPosition().x,teleporters.get(i+1).getPosition().y); + else + player.teleport(teleporters.get(i-1).getPosition().x,teleporters.get(i-1).getPosition().y); + + } + } + } + + public Vector2 getPosition() { + return new Vector2(x,y); + } + +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Scenes/Hud.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Scenes/Hud.java index cff19e0..df594ce 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Scenes/Hud.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Scenes/Hud.java @@ -1,16 +1,42 @@ package com.davidalexanderkelly.game.Scenes; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.utils.Disposable; +import com.badlogic.gdx.utils.viewport.ExtendViewport; import com.badlogic.gdx.utils.viewport.Viewport; +import com.davidalexanderkelly.game.SpaceGamePrototype; public class Hud implements Disposable{ public Stage stage; private Viewport viewport; + private Integer health; + + Label healthLabel; + Label healthWordLabel; + public Hud(SpriteBatch sb) { + health = 100; + + viewport = new ExtendViewport(SpaceGamePrototype.V_WIDTH,SpaceGamePrototype.V_HEIGHT, new OrthographicCamera()); + stage = new Stage(viewport, sb); + + Table table = new Table(); + table.top(); + table.setFillParent(true); + + healthLabel = new Label(String.format("%3d", health), new Label.LabelStyle(new BitmapFont(), Color.WHITE)); + healthWordLabel = new Label("HEALTH", new Label.LabelStyle(new BitmapFont(), Color.WHITE)); + table.add(healthWordLabel).expandX().padTop(10); + table.add(healthLabel).expandX().padTop(10); + } @Override diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Screens/PlayScreen.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Screens/PlayScreen.java index 97bfd92..3701e3c 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Screens/PlayScreen.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Screens/PlayScreen.java @@ -1,49 +1,31 @@ package com.davidalexanderkelly.game.Screens; - - -import java.util.ArrayList; -import java.util.List; -import java.util.Vector; - import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.Screen; -import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.maps.MapObject; -import com.badlogic.gdx.maps.objects.RectangleMapObject; import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TmxMapLoader; import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; -import com.badlogic.gdx.physics.box2d.FixtureDef; -import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.badlogic.gdx.utils.Timer.Task; import com.badlogic.gdx.utils.viewport.ExtendViewport; -import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; import com.davidalexanderkelly.game.SpaceGamePrototype; import com.davidalexanderkelly.game.Entities.Enemy; import com.davidalexanderkelly.game.Entities.Player; -import com.davidalexanderkelly.game.Entities.Behaviors.Node; -import com.davidalexanderkelly.game.Entities.Behaviors.Pathfinding; import com.davidalexanderkelly.game.Scenes.Hud; import com.davidalexanderkelly.game.Tools.Assets; import com.davidalexanderkelly.game.Tools.Box2DWorldCreator; -import com.davidalexanderkelly.game.Tools.InteractableWorldCreator; -import com.davidalexanderkelly.game.Tools.PathfindingWorldCreator; import com.davidalexanderkelly.game.Tools.EnemyUpdater; +import com.davidalexanderkelly.game.Tools.PathfindingWorldCreator; +import com.davidalexanderkelly.game.Tools.WorldContactListener; public class PlayScreen implements Screen { //Reference to Game, used to set screen @@ -54,11 +36,7 @@ public class PlayScreen implements Screen { private TextureAtlas atlas; public Texture img; private Skin skin; - - private static final int IDLE = 0; - private static final int RUNNING = 1; - - + //Camera and Camera manipulation variables private OrthographicCamera gamecam; private Viewport gamePort; @@ -72,15 +50,13 @@ public class PlayScreen implements Screen { //Box2d variables private World world; private Box2DDebugRenderer collisionRenderer; + public Box2DWorldCreator creator; public PathfindingWorldCreator pathfinder; - public InteractableWorldCreator interactables; + private Assets assets; private Player player; - private Enemy enemy; - - public PlayScreen(SpaceGamePrototype game) { @@ -104,19 +80,15 @@ public PlayScreen(SpaceGamePrototype game) { //Creates the collision world world = new World(new Vector2(0,0), true); + creator = new Box2DWorldCreator(this); - interactables = new InteractableWorldCreator(map); - interactables.setLocations(); pathfinder = new PathfindingWorldCreator(map); pathfinder.setLocations(); - - - + //allows the rendering of collision boxes collisionRenderer = new Box2DDebugRenderer(); - new Box2DWorldCreator(this); batch = new SpriteBatch(); @@ -126,12 +98,12 @@ public PlayScreen(SpaceGamePrototype game) { skin = new Skin(); skin.addRegions(assets.manager.get("assets/Sprites/Spritepack.atlas", TextureAtlas.class)); - - ArrayList path = new ArrayList(); - + //creates Player in the world player = new Player(world,this ); - enemy = new Enemy(world,this); + + + world.setContactListener(new WorldContactListener()); @@ -179,12 +151,12 @@ public void update(float deltaTime) { //updates physics 60 times per second world.step(1/60f,6,2); player.update(deltaTime); - EnemyUpdater enemyUpdate = new EnemyUpdater(enemy,deltaTime); - enemyUpdate.start(); + for(Enemy imposter : creator.getEnemies()) { + imposter.update(deltaTime); + } //Game camera follows the player gamecam.position.x = player.box2dBody.getPosition().x; gamecam.position.y = player.box2dBody.getPosition().y; - //System.out.println(player.box2dBody.getPosition()); gamecam.update(); @@ -207,10 +179,14 @@ public void render(float delta) { //renderer for the collision boxes collisionRenderer.render(world, gamecam.combined); - game.batch.setProjectionMatrix(gamecam.combined); + game.batch.setProjectionMatrix(hud.stage.getCamera().combined); + hud.stage.draw(); game.batch.begin(); player.draw(game.batch); - enemy.draw(game.batch); + for(Enemy imposter : creator.getEnemies()) { + imposter.draw(game.batch); + } + game.batch.end(); } diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/SpaceGamePrototype.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/SpaceGamePrototype.java index aef8de3..a8fa356 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/SpaceGamePrototype.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/SpaceGamePrototype.java @@ -1,12 +1,6 @@ package com.davidalexanderkelly.game; - - -import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Game; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.davidalexanderkelly.game.Screens.PlayScreen; @@ -17,6 +11,11 @@ public class SpaceGamePrototype extends Game { public static final int V_HEIGHT = 720; public static final float PixelsPerMetre = 100; + public static final short DEFAULT_BIT = 1; + public static final short PLAYER_BIT =2; + public static final short TELEPORTER_BIT = 4; + public static final short TASK_BIT = 8; + public SpriteBatch batch; diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/BinarySearch.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/BinarySearch.java index 9c54822..a4a13fe 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/BinarySearch.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/BinarySearch.java @@ -1,63 +1,63 @@ -package com.davidalexanderkelly.game.Tools; - -import java.math.BigDecimal; -import java.util.List; - -import com.davidalexanderkelly.game.Entities.Behaviors.Node; - -class BinarySearch { - - public int binarySearch(List locations, Node x) - { - int lowerBound = 0, upperBound = (locations.size() - 1); - boolean foundX = false; - int mid = 0; - while (lowerBound <= upperBound) { - if(foundX == false) { - mid = (lowerBound + upperBound) / 2; - } - - - if (round(locations.get(mid).getWorldPosition().x,2) == round(x.getWorldPosition().x,2) ) { - foundX = true; - if(round(locations.get(mid).getWorldPosition().y,2) == round(x.getWorldPosition().y,2) ) { - - return mid; - } - - if(round(locations.get(mid).getWorldPosition().y,2) < round(x.getWorldPosition().y,2)) { - mid +=1; - lowerBound +=1; - } - else { - mid -=1; - upperBound -=1; - } - - } - else if(foundX == true) { - return -1; - } - - - if (round(locations.get(mid).getWorldPosition().x,2) < round(x.getWorldPosition().x,2)) { - lowerBound = mid + 1; - - } - else { - upperBound = mid - 1; - } - - } - - return -1; - } - - public static float round(float d, int decimalPlace) { - BigDecimal bd = new BigDecimal(Float.toString(d)); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); - return bd.floatValue(); - } - - -} +package com.davidalexanderkelly.game.Tools; + +import java.math.BigDecimal; +import java.util.List; + +import com.davidalexanderkelly.game.Entities.Behaviors.Node; + +class BinarySearch { + + public int binarySearch(List locations, Node x) + { + int lowerBound = 0, upperBound = (locations.size() - 1); + boolean foundX = false; + int mid = 0; + while (lowerBound <= upperBound) { + if(foundX == false) { + mid = (lowerBound + upperBound) / 2; + } + + + if (round(locations.get(mid).getWorldPosition().x,2) == round(x.getWorldPosition().x,2) ) { + foundX = true; + if(round(locations.get(mid).getWorldPosition().y,2) == round(x.getWorldPosition().y,2) ) { + + return mid; + } + + if(round(locations.get(mid).getWorldPosition().y,2) < round(x.getWorldPosition().y,2)) { + mid +=1; + lowerBound +=1; + } + else { + mid -=1; + upperBound -=1; + } + + } + else if(foundX == true) { + return -1; + } + + + if (round(locations.get(mid).getWorldPosition().x,2) < round(x.getWorldPosition().x,2)) { + lowerBound = mid + 1; + + } + else { + upperBound = mid - 1; + } + + } + + return -1; + } + + public static float round(float d, int decimalPlace) { + BigDecimal bd = new BigDecimal(Float.toString(d)); + bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + return bd.floatValue(); + } + + +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.java index d68e96e..af4fbf8 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/Box2DWorldCreator.java @@ -1,5 +1,7 @@ package com.davidalexanderkelly.game.Tools; +import java.util.ArrayList; + import com.badlogic.gdx.maps.MapObject; import com.badlogic.gdx.maps.objects.RectangleMapObject; import com.badlogic.gdx.maps.tiled.TiledMap; @@ -11,27 +13,75 @@ import com.badlogic.gdx.physics.box2d.World; import com.davidalexanderkelly.game.SpaceGamePrototype; import com.davidalexanderkelly.game.Screens.PlayScreen; +import com.davidalexanderkelly.game.Entities.Enemy; +import com.davidalexanderkelly.game.Entities.TileObjects.Task; +import com.davidalexanderkelly.game.Entities.TileObjects.Teleporter; + + public class Box2DWorldCreator { - public Box2DWorldCreator(PlayScreen screen) { - World world = screen.getWorld(); - TiledMap map = screen.getMap(); - - BodyDef bodyDefinition = new BodyDef(); - PolygonShape shape = new PolygonShape(); - FixtureDef fixtureDefinition = new FixtureDef(); - Body body; - - for(MapObject object : map.getLayers().get("Collision").getObjects().getByType(RectangleMapObject.class)){ - Rectangle rect = ((RectangleMapObject) object).getRectangle(); - - bodyDefinition.type = BodyDef.BodyType.StaticBody; - bodyDefinition.position.set((rect.getX() + rect.getWidth() / 2) / SpaceGamePrototype.PixelsPerMetre, (rect.getY() + rect.getHeight() / 2) / SpaceGamePrototype.PixelsPerMetre); - - body = world.createBody(bodyDefinition); - shape.setAsBox(rect.getWidth() / 2 / SpaceGamePrototype.PixelsPerMetre, rect.getHeight() /2 / SpaceGamePrototype.PixelsPerMetre); - fixtureDefinition.shape = shape; - body.createFixture(fixtureDefinition); - }; - } + private ArrayList enemies; + private ArrayList teleporters; + private ArrayList tasks; + + public Box2DWorldCreator(PlayScreen screen){ + World world = screen.getWorld(); + TiledMap map = screen.getMap(); + //create body and fixture variables + BodyDef bdef = new BodyDef(); + PolygonShape shape = new PolygonShape(); + FixtureDef fdef = new FixtureDef(); + Body body; + + //create collision bodies/fixtures + for(MapObject object : map.getLayers().get("Collision").getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + + bdef.type = BodyDef.BodyType.StaticBody; + bdef.position.set((rect.getX() + rect.getWidth() / 2) / SpaceGamePrototype.PixelsPerMetre, (rect.getY() + rect.getHeight() / 2) / SpaceGamePrototype.PixelsPerMetre); + + body = world.createBody(bdef); + + shape.setAsBox(rect.getWidth() / 2 / SpaceGamePrototype.PixelsPerMetre, rect.getHeight() / 2 / SpaceGamePrototype.PixelsPerMetre); + fdef.shape = shape; + body.createFixture(fdef); + } + + //create Teleporter bodies/fixtures + teleporters = new ArrayList(); + for(MapObject object : map.getLayers().get("Teleporters").getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + teleporters.add(new Teleporter(screen, object,(rect.getX() / SpaceGamePrototype.PixelsPerMetre) - 0.08f,(rect.getY() / SpaceGamePrototype.PixelsPerMetre) - 0.08f)); + } + + //create Task bodies/fixtures + tasks = new ArrayList(); + for(MapObject object : map.getLayers().get("Tasks").getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + tasks.add(new Task(screen, object,(rect.getX() / SpaceGamePrototype.PixelsPerMetre) - 0.08f,(rect.getY() / SpaceGamePrototype.PixelsPerMetre) - 0.08f)); + + } + + //create all imposters + enemies = new ArrayList(); + for(MapObject object : map.getLayers().get("Imposters").getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + enemies.add(new Enemy(world,screen,(rect.getX() / SpaceGamePrototype.PixelsPerMetre) - 0.08f,(rect.getY() / SpaceGamePrototype.PixelsPerMetre) - 0.08f)); + + } + + + } + + public ArrayList getEnemies() { + return enemies; + } + + public ArrayList getTeleporters(){ + return teleporters; + } + + public ArrayList getTasks(){ + return tasks; + } } diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/EnemyUpdater.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/EnemyUpdater.java index 365dc6d..df7fdf2 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/EnemyUpdater.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/EnemyUpdater.java @@ -1,18 +1,19 @@ -package com.davidalexanderkelly.game.Tools; - -import com.davidalexanderkelly.game.Entities.Enemy; - -public class EnemyUpdater extends Thread { - - Enemy enemy; - float deltaTime; - - public EnemyUpdater(Enemy enemy, float deltaTime) { - this.enemy = enemy; - this.deltaTime = deltaTime; - } - - public void run() { - enemy.update(deltaTime); - } -} +package com.davidalexanderkelly.game.Tools; + +import com.davidalexanderkelly.game.Entities.Enemy; + +public class EnemyUpdater extends Thread { + + Enemy enemy; + float deltaTime; + + public EnemyUpdater(Enemy enemy, float deltaTime) { + this.enemy = enemy; + this.deltaTime = deltaTime; + } + + public void run() { + enemy.update(deltaTime); + + } +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.java new file mode 100644 index 0000000..5c57b61 --- /dev/null +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/PathfindingWorldCreator.java @@ -0,0 +1,84 @@ +package com.davidalexanderkelly.game.Tools; + +import com.badlogic.gdx.maps.MapObject; +import com.badlogic.gdx.maps.objects.RectangleMapObject; +import com.badlogic.gdx.maps.tiled.TiledMap; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.davidalexanderkelly.game.SpaceGamePrototype; +import com.davidalexanderkelly.game.Entities.Behaviors.Node; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + + + +public class PathfindingWorldCreator { + + private List locations; + private TiledMap map; + + + public PathfindingWorldCreator(TiledMap map) { + + this.map = map; + } + + public void setLocations() { + + this.locations = new ArrayList(); + + for(MapObject object : map.getLayers().get("Ai Pathing").getObjects().getByType(RectangleMapObject.class)){ + Rectangle rect = ((RectangleMapObject) object).getRectangle(); + Vector2 vPosition = new Vector2((rect.getX() + rect.getWidth() / 2) / SpaceGamePrototype.PixelsPerMetre,(rect.getY() + rect.getHeight() / 2) / SpaceGamePrototype.PixelsPerMetre); + Node newNode = new Node(vPosition); + locations.add(newNode); + + } + QuickSort ob = new QuickSort(locations); + ob.sort(0, (locations.size())-1); + locations = ob.path; + + + } + + + + public List getLocations() { + + return locations; + } + + public static float round(float d, int decimalPlace) { + BigDecimal bd = new BigDecimal(Float.toString(d)); + bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + return bd.floatValue(); + } + + public ArrayList getNeighbours(Node node){ + ArrayList neighbours = new ArrayList(); + for(int x = -1; x<= 1; x++) { + for(int y = -1; y<= 1; y++) { + if(x == y || (x+y) == 0) + continue; + + float checkX = node.getWorldPosition().x + (x*0.16f); + float checkY = node.getWorldPosition().y + (y*0.16f); + Vector2 checkV = new Vector2(checkX,checkY); + Node checkN = new Node(checkV); + BinarySearch ob = new BinarySearch(); + int result = ob.binarySearch(locations,checkN); + + if(result != -1) { + neighbours.add(locations.get(result)); + + } + + } + } + return neighbours; + } + + +} diff --git a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/QuickSort.java b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/QuickSort.java index 8871f71..683377a 100644 --- a/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/QuickSort.java +++ b/SpaceGameFolder/core/src/com/davidalexanderkelly/game/Tools/QuickSort.java @@ -1,61 +1,61 @@ -package com.davidalexanderkelly.game.Tools; - -import java.util.List; - -import com.davidalexanderkelly.game.Entities.Behaviors.Node; - -class QuickSort { - - public List path; - - public QuickSort(List path) { - this.path = path; - } - - public int partition(int low, int high) - { - float pivot = path.get(high).getWorldPosition().x; - float pivotY = path.get(high).getWorldPosition().y; - int i = (low-1); - for (int j=low; j path; + + public QuickSort(List path) { + this.path = path; + } + + public int partition(int low, int high) + { + float pivot = path.get(high).getWorldPosition().x; + float pivotY = path.get(high).getWorldPosition().y; + int i = (low-1); + for (int j=low; j - - - + + + + diff --git a/SpaceGameFolder/desktop/assets/Maps/SpaceStation.tmx b/SpaceGameFolder/desktop/assets/Maps/SpaceStation.tmx index 371fef8..86efafb 100644 --- a/SpaceGameFolder/desktop/assets/Maps/SpaceStation.tmx +++ b/SpaceGameFolder/desktop/assets/Maps/SpaceStation.tmx @@ -1,2309 +1,2326 @@ - - - - - -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,34,23,36,31,9,9,9,31,36,23,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483671,2147483684,2147483679,2147483657,2147483657,2147483657,2147483679,2147483684,2147483682,2147483671,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,91,92,93,3221225505,91,92,93,3221225505,21,21,121,124,125,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483773,2147483772,2147483769,2147483669,2147483669,1073741857,2147483735,2147483734,2147483733,1073741857,85,86,87,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,103,104,105,3221225505,103,104,105,3221225505,21,21,133,136,137,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741840,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483785,2147483784,2147483781,2147483669,2147483669,1073741857,2147483747,2147483746,2147483745,1073741857,97,98,99,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,115,116,117,3221225505,115,116,117,3221225505,21,21,21,21,21,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741831,31,31,29,29,29,31,9,10,10,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483759,2147483758,2147483757,1073741857,109,110,111,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,123,124,125,21,2147483665,3221225478,6,2147483654,2147483654,2147483654,2147483654,2147483654,5,0,0,0,1073741831,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,2147483653,6,6,6,6,6,2147483654,1073741830,17,2147483669,2147483773,2147483772,2147483771,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,91,92,93,3221225505,91,92,93,3221225505,21,21,135,136,137,21,2147483679,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483679,3221225479,0,0,0,1073741831,21,65,21,21,65,21,21,21,21,21,65,21,21,65,21,3221225479,0,0,0,1073741831,31,29,29,29,29,29,29,31,2147483669,2147483785,2147483784,2147483783,2147483669,2147483669,1073741857,2147483735,2147483734,2147483733,1073741857,94,95,96,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,103,104,105,3221225505,103,104,105,3221225505,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,21,77,21,21,77,21,21,21,21,21,77,21,21,77,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483747,2147483746,2147483745,1073741857,106,107,108,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,115,116,117,3221225505,115,116,117,3221225505,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483759,2147483758,2147483757,1073741857,118,119,120,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,1073741840,3221225478,3221225478,3221225478,5,3221225493,3221225493,3221225493,3221225477,6,6,6,1073741829,21,65,21,21,65,21,21,21,21,21,65,21,21,65,21,3221225477,2147483654,2147483654,2147483654,1073741829,1073741845,1073741845,1073741845,2147483653,1073741830,1073741830,1073741830,3221225488,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,94,95,96,3221225505,21,21,21,21,21,21,21,21,21,2147483773,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,2147483679,2147483677,2147483677,2147483677,2147483679,21,77,21,21,77,21,21,21,21,21,77,21,21,77,21,31,29,29,29,31,1073741845,1073741845,1073741845,1073741831,0,0,0,7,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,85,86,87,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,106,107,108,3221225505,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,21,536870945,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2684354593,2147483669,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,7,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,97,98,99,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,118,119,120,3221225505,21,21,21,21,21,21,21,21,21,2147483773,2147483655,0,0,0,3221225479,3221225493,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,3758096417,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,21,21,21,1073741845,1073741831,0,0,0,7,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,109,110,111,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,1073741828,6,6,6,6,6,6,6,1073741841,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225489,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,3221225476,0,0,0,7,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,2147483664,0,0,0,0,0,0,0,0,0,0,0,1073741831,125,44,45,2147483773,125,21,21,21,21,21,2147483773,125,2147483689,2147483688,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,16,2147483654,2147483654,2147483654,2147483654,2147483654,1073741841,2147483681,2147483681,2147483681,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,56,57,2147483785,137,21,21,21,21,21,2147483785,137,2147483701,2147483700,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,125,44,45,2147483773,125,21,21,21,21,21,2147483773,125,2147483689,2147483688,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,56,57,2147483785,137,21,21,21,21,21,2147483785,137,2147483701,2147483700,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,3221225476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,3221225477,6,6,6,6,6,6,6,6,6,6,6,6,6,5,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,2147483653,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,1073741829,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483679,2147483679,29,29,29,29,29,29,29,29,29,29,2147483679,2147483679,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,31,31,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,31,31,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,3221225478,1073741830,1073741830,1073741830,1073741830,1073741830,5,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483653,3221225478,3221225478,3221225478,3221225478,3221225478,1073741830,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,2147483664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,1073741831,21,21,21,7,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,29,29,29,31,29,29,29,31,31,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483677,2147483677,2147483679,29,29,29,2147483679,2147483677,2147483677,2147483677,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,137,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225477,2147483654,6,6,17,21,21,21,3221225477,2147483654,6,6,17,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225477,2147483654,6,6,17,2147483669,2147483669,2147483669,3221225477,2147483654,6,6,17,2147483669,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,21,1073741845,21,31,29,29,29,31,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,2147483669,3221225493,2147483669,31,29,29,29,31,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,1073741845,1073741845,1073741845,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,3221225493,3221225493,3221225493,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483653,3221225478,1073741830,1073741830,5,1073741845,1073741845,1073741845,2147483653,3221225478,1073741830,1073741830,5,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483653,3221225478,1073741830,1073741830,5,3221225493,3221225493,3221225493,2147483653,3221225478,1073741830,1073741830,5,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,125,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,1073741830,1073741830,1073741830,1073741830,1073741830,6,6,6,6,6,3221225476,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,3221225476,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741828,2147483654,2147483654,2147483654,2147483654,2147483654,3221225478,3221225478,3221225478,3221225478,3221225478,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483653,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741829,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225477,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2147483679,2147483679,29,29,29,29,29,29,29,29,29,29,2147483679,2147483679,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,31,31,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,31,31,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483653,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741829,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,3221225477,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,5,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,2147483669,2147483669,2147483669,2147483665,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483677,2147483677,2147483679,2147483681,2147483681,2147483681,2147483679,2147483677,2147483677,2147483677,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,2147483653,6,6,6,6,6,2147483654,1073741830,17,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483665,3221225478,6,2147483654,2147483654,2147483654,2147483654,2147483654,5,0,0,0,1073741831,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,1073741831,31,29,29,29,29,29,29,31,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483679,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483679,3221225479,0,0,0,1073741831,137,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225477,2147483654,2147483654,2147483654,1073741829,1073741845,1073741845,1073741845,2147483653,1073741830,1073741830,1073741830,3221225488,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1073741840,3221225478,3221225478,3221225478,5,3221225493,3221225493,3221225493,3221225477,6,6,6,1073741829,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,2147483679,2147483677,2147483677,2147483677,2147483679,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2684354593,2147483669,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,21,536870945,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,21,21,21,1073741845,1073741831,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,2147483655,0,0,0,3221225479,3221225493,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,3758096417,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225489,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,3221225476,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,1073741828,6,6,6,6,6,6,6,1073741841,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,2147483664,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,125,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1073741829,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225477,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,34,23,36,31,9,9,9,31,36,23,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483671,2147483684,2147483679,2147483657,2147483657,2147483657,2147483679,2147483684,2147483682,2147483671,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,91,92,93,3221225505,91,92,93,3221225505,21,21,121,124,125,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483773,2147483772,2147483769,2147483669,2147483669,1073741857,2147483735,2147483734,2147483733,1073741857,85,86,87,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,103,104,105,3221225505,103,104,105,3221225505,21,21,133,136,137,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741840,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483785,2147483784,2147483781,2147483669,2147483669,1073741857,2147483747,2147483746,2147483745,1073741857,97,98,99,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,115,116,117,3221225505,115,116,117,3221225505,21,21,21,21,21,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741831,31,31,29,29,29,31,9,10,10,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483759,2147483758,2147483757,1073741857,109,110,111,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,123,124,125,21,2147483665,3221225478,6,2147483654,2147483654,2147483654,2147483654,2147483654,5,0,0,0,1073741831,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,2147483653,6,6,6,6,6,2147483654,1073741830,17,2147483669,2147483773,2147483772,2147483771,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,91,92,93,3221225505,91,92,93,3221225505,21,21,135,136,137,21,2147483679,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483679,3221225479,0,0,0,1073741831,21,65,21,21,65,21,21,21,21,21,65,21,21,65,21,3221225479,0,0,0,1073741831,31,29,29,29,29,29,29,31,2147483669,2147483785,2147483784,2147483783,2147483669,2147483669,1073741857,2147483735,2147483734,2147483733,1073741857,94,95,96,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,103,104,105,3221225505,103,104,105,3221225505,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,21,77,21,21,77,21,21,21,21,21,77,21,21,77,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483747,2147483746,2147483745,1073741857,106,107,108,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,115,116,117,3221225505,115,116,117,3221225505,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,2147483759,2147483758,2147483757,1073741857,118,119,120,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,1073741840,3221225478,3221225478,3221225478,5,3221225493,3221225493,3221225493,3221225477,6,6,6,1073741829,21,65,21,21,65,21,21,21,21,21,65,21,21,65,21,3221225477,2147483654,2147483654,2147483654,1073741829,1073741845,1073741845,1073741845,2147483653,1073741830,1073741830,1073741830,3221225488,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,94,95,96,3221225505,21,21,21,21,21,21,21,21,21,2147483773,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,2147483679,2147483677,2147483677,2147483677,2147483679,21,77,21,21,77,21,21,21,21,21,77,21,21,77,21,31,29,29,29,31,1073741845,1073741845,1073741845,1073741831,0,0,0,7,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,85,86,87,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,106,107,108,3221225505,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,21,536870945,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2684354593,2147483669,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,7,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,97,98,99,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,118,119,120,3221225505,21,21,21,21,21,21,21,21,21,2147483773,2147483655,0,0,0,3221225479,3221225493,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,3758096417,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,21,21,21,1073741845,1073741831,0,0,0,7,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,109,110,111,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,3221225505,3221225505,3221225505,3221225505,3221225505,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,1073741828,6,6,6,6,6,6,6,1073741841,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225489,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,3221225476,0,0,0,7,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,1073741857,1073741857,1073741857,1073741857,1073741857,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,2147483664,0,0,0,0,0,0,0,0,0,0,0,1073741831,125,44,45,2147483773,125,21,21,21,21,21,2147483773,125,2147483689,2147483688,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,16,2147483654,2147483654,2147483654,2147483654,2147483654,1073741841,2147483681,2147483681,2147483681,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,56,57,2147483785,137,21,21,21,21,21,2147483785,137,2147483701,2147483700,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,125,44,45,2147483773,125,21,21,21,21,21,2147483773,125,2147483689,2147483688,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,56,57,2147483785,137,21,21,21,21,21,2147483785,137,2147483701,2147483700,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,3221225476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,3221225477,6,6,6,6,6,6,6,6,6,6,6,6,6,5,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,2147483653,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,1073741829,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483679,2147483679,29,29,29,29,29,29,29,29,29,29,2147483679,2147483679,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,31,31,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,31,31,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,3221225478,1073741830,1073741830,1073741830,1073741830,1073741830,5,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483653,3221225478,3221225478,3221225478,3221225478,3221225478,1073741830,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,2147483664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,21,21,21,7,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3221225488,0,0,0,1073741831,21,21,21,7,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,29,29,29,31,29,29,29,31,31,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483677,2147483677,2147483679,29,29,29,2147483679,2147483677,2147483677,2147483677,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,137,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,21,21,21,7,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,2147483655,2147483669,2147483669,2147483669,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225477,2147483654,6,6,17,21,21,21,3221225477,2147483654,6,6,17,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225477,2147483654,6,6,17,2147483669,2147483669,2147483669,3221225477,2147483654,6,6,17,2147483669,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,21,1073741845,21,31,29,29,29,31,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,2147483669,3221225493,2147483669,31,29,29,29,31,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,1073741845,1073741845,1073741845,1610612769,21,21,21,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,1610612769,3221225493,3221225493,3221225493,1610612769,21,21,21,1610612769,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483653,3221225478,1073741830,1073741830,5,1073741845,1073741845,1073741845,2147483653,3221225478,1073741830,1073741830,5,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483653,3221225478,1073741830,1073741830,5,3221225493,3221225493,3221225493,2147483653,3221225478,1073741830,1073741830,5,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,125,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,1073741830,1073741830,1073741830,1073741830,1073741830,6,6,6,6,6,3221225476,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,16,6,6,6,6,6,3221225488,33,33,33,3221225489,6,6,6,6,6,3221225476,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741828,2147483654,2147483654,2147483654,2147483654,2147483654,3221225478,3221225478,3221225478,3221225478,3221225478,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483653,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741829,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225477,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2147483679,2147483679,29,29,29,29,29,29,29,29,29,29,2147483679,2147483679,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,31,31,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,31,31,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225479,0,0,0,0,0,0,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483653,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741830,1073741829,0,0,0,0,0,0,0,0,0,7,21,21,21,7,0,0,0,0,0,0,0,0,0,3221225477,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,3221225478,5,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,1073741831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225479,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,6,6,6,6,6,17,21,21,21,16,6,6,6,6,6,3221225488,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741840,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,2147483669,2147483669,2147483669,2147483665,2147483654,2147483654,2147483654,2147483654,2147483654,2147483652,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,31,31,29,29,29,31,33,33,33,31,29,29,29,31,31,3221225479,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,2147483655,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483679,2147483679,2147483677,2147483677,2147483677,2147483679,2147483681,2147483681,2147483681,2147483679,2147483677,2147483677,2147483677,2147483679,2147483679,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,125,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483773,3221225479,0,0,0,2147483653,6,6,6,6,6,2147483654,1073741830,17,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483665,3221225478,6,2147483654,2147483654,2147483654,2147483654,2147483654,5,0,0,0,1073741831,125,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,137,94,95,96,21,21,21,21,21,21,21,94,95,96,2147483785,3221225479,0,0,0,1073741831,31,29,29,29,29,29,29,31,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483679,2147483677,2147483677,2147483677,2147483677,2147483677,2147483677,2147483679,3221225479,0,0,0,1073741831,137,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,118,119,120,21,21,21,21,21,21,21,118,119,120,21,3221225479,0,0,0,1073741831,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1610612769,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3758096417,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,3221225479,0,0,0,1073741831,2147483669,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225477,2147483654,2147483654,2147483654,1073741829,1073741845,1073741845,1073741845,2147483653,1073741830,1073741830,1073741830,3221225488,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1073741840,3221225478,3221225478,3221225478,5,3221225493,3221225493,3221225493,3221225477,6,6,6,1073741829,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,31,29,29,29,31,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,2147483679,2147483677,2147483677,2147483677,2147483679,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,2684354593,2147483669,1073741845,1073741845,1073741845,1073741845,1073741845,1073741845,1073741831,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,2147483655,0,0,0,3221225479,3221225493,3221225493,3221225493,3221225493,3221225493,3221225493,21,536870945,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,1610612769,21,21,21,21,21,21,1073741845,1073741831,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,2147483655,0,0,0,3221225479,3221225493,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,3758096417,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225489,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,3221225476,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,2147483655,0,0,0,1073741828,6,6,6,6,6,6,6,1073741841,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,2147483664,0,0,0,0,0,0,0,0,0,0,0,2147483655,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,94,95,96,21,21,21,21,21,21,21,94,95,96,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483744,2147483743,2147483742,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483744,2147483743,2147483742,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,21,106,107,108,21,21,21,21,21,21,21,106,107,108,21,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,2147483669,2147483756,2147483755,2147483754,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483756,2147483755,2147483754,2147483669,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,125,118,119,120,21,21,21,21,21,21,21,118,119,120,2147483773,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,125,2147483768,2147483767,2147483766,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483768,2147483767,2147483766,2147483773,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,137,21,21,21,21,21,21,21,21,21,21,21,21,21,2147483785,3221225479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1073741831,137,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483669,2147483785,2147483655,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1073741829,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221225477,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483654,2147483664,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +