diff --git a/pathfinding-algorithms/character.gd b/pathfinding-algorithms/character.gd index 460e8b2..c16a90d 100644 --- a/pathfinding-algorithms/character.gd +++ b/pathfinding-algorithms/character.gd @@ -6,6 +6,7 @@ const ACCELERATION: int = 2400 func _physics_process(delta: float) -> void: + await get_tree().physics_frame var movement: Vector2 = Vector2() nav.target_position = get_global_mouse_position() diff --git a/pathfinding-algorithms/project.godot b/pathfinding-algorithms/project.godot index 5ce20ed..163daf5 100644 --- a/pathfinding-algorithms/project.godot +++ b/pathfinding-algorithms/project.godot @@ -15,6 +15,10 @@ run/main_scene="res://scenes/mario-party/MarioParty.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" +[display] + +window/stretch/mode="viewport" + [input] draw_toggle_polygon={ diff --git a/pathfinding-algorithms/scenes/custom-solver/CNavigationPolygon.gd b/pathfinding-algorithms/scenes/custom-solver/CNavigationPolygon.gd index 5b2aeea..667f3b1 100644 --- a/pathfinding-algorithms/scenes/custom-solver/CNavigationPolygon.gd +++ b/pathfinding-algorithms/scenes/custom-solver/CNavigationPolygon.gd @@ -5,17 +5,17 @@ var polygon: PackedVector2Array var center_node: NavigationNode func _init() -> void: - polygon = PackedVector2Array() + polygon = PackedVector2Array() func set_polygon(new_polygon: PackedVector2Array) -> PackedVector2Array: - var new_polygon_clone: PackedVector2Array = new_polygon.duplicate() - new_polygon_clone.append(new_polygon_clone[0]) - polygon = new_polygon_clone - return polygon + var new_polygon_clone: PackedVector2Array = new_polygon.duplicate() + new_polygon_clone.append(new_polygon_clone[0]) + polygon = new_polygon_clone + return polygon func center() -> Vector2: - var center: Vector2 = Vector2() - for point in polygon: - center += Vector2(point.x, point.y) - center /= polygon.size() - return center + var center: Vector2 = Vector2() + for point in polygon: + center += Vector2(point.x, point.y) + center /= polygon.size() + return center diff --git a/pathfinding-algorithms/scenes/custom-solver/CustomNavMovement.gd b/pathfinding-algorithms/scenes/custom-solver/CustomNavMovement.gd index fa2b948..99f7ac4 100644 --- a/pathfinding-algorithms/scenes/custom-solver/CustomNavMovement.gd +++ b/pathfinding-algorithms/scenes/custom-solver/CustomNavMovement.gd @@ -8,26 +8,26 @@ var frozen: bool = false func _physics_process(delta: float) -> void: - # check if space is pressed - if Input.is_action_just_pressed("ui_select"): - frozen = !frozen + # check if space is pressed + if Input.is_action_just_pressed("ui_select"): + frozen = !frozen - var movement: Vector2 = Vector2() - if frozen: - return + var movement: Vector2 = Vector2() + if frozen: + return - var pathfinding_result: PathfindingResult = graph.determine_next_position(position, get_global_mouse_position()) - graph.draw_pathfinding_result(pathfinding_result) + var pathfinding_result: PathfindingResult = graph.determine_next_position(position, get_global_mouse_position()) + graph.draw_pathfinding_result(pathfinding_result) - movement = pathfinding_result.next_position - global_position + movement = pathfinding_result.next_position - global_position - if pathfinding_result.is_next_target and movement.length() < 20: - movement = -velocity * 0.2 - else: - movement = movement.normalized() * ACCELERATION * delta + if pathfinding_result.is_next_target and movement.length() < 20: + movement = -velocity * 0.2 + else: + movement = movement.normalized() * ACCELERATION * delta - velocity += movement - if velocity.length() > MAX_SPEED: - velocity = velocity.normalized() * MAX_SPEED + velocity += movement + if velocity.length() > MAX_SPEED: + velocity = velocity.normalized() * MAX_SPEED - move_and_slide() + move_and_slide() diff --git a/pathfinding-algorithms/scenes/custom-solver/NavigationGraph.gd b/pathfinding-algorithms/scenes/custom-solver/NavigationGraph.gd index 99e89f1..b8b40cc 100644 --- a/pathfinding-algorithms/scenes/custom-solver/NavigationGraph.gd +++ b/pathfinding-algorithms/scenes/custom-solver/NavigationGraph.gd @@ -5,6 +5,7 @@ extends Node2D var navigation_nodes: Dictionary = {} # type is Dictionary[CNavigationPolygon, Array[NavigationNode]] var polygon_nodes: Dictionary = {} + var latest_navigation_result: PathfindingResult = null var draw_polygons: bool = true var draw_nodes: bool = false @@ -12,297 +13,294 @@ var draw_edges: bool = false func all_nodes() -> Array[NavigationNode]: - # i've had a problem where godot would not allow me to directly return navigation_nodes.keys() - # because it wasn't able to cast the keys to Array[NavigationNode] directly because the type is not explicit - # on the dictionary, so i had to do this workaround. - var keys: Array = navigation_nodes.keys() - var nodes: Array[NavigationNode] = [] - for key in keys: - if key is NavigationNode: - nodes.append(key) - else: - push_error("Key is not a NavigationNode: %s" % key) - return nodes + # i've had a problem where godot would not allow me to directly return navigation_nodes.keys() + # because it wasn't able to cast the keys to Array[NavigationNode] directly because the type is not explicit + # on the dictionary, so i had to do this workaround. + var keys: Array = navigation_nodes.keys() + var nodes: Array[NavigationNode] = [] + for key in keys: + if key is NavigationNode: + nodes.append(key) + else: + push_error("Key is not a NavigationNode: %s" % key) + return nodes func get_connections(from: NavigationNode) -> Array[NavigationNode]: - # the same problem as the all_nodes() function - var connections: Array = navigation_nodes[from] - var nodes: Array[NavigationNode] = [] - for connection in connections: - if connection is NavigationNode: - nodes.append(connection) - else: - push_error("Connection is not a NavigationNode: %s" % connection) - return nodes + # the same problem as the all_nodes() function + var connections: Array = navigation_nodes[from] + var nodes: Array[NavigationNode] = [] + for connection in connections: + if connection is NavigationNode: + nodes.append(connection) + else: + push_error("Connection is not a NavigationNode: %s" % connection) + return nodes func add_connection(from: NavigationNode, to: NavigationNode) -> void: - if all_nodes().has(from): - navigation_nodes[from].append(to) - else: - navigation_nodes[from] = [to] + if all_nodes().has(from): + navigation_nodes[from].append(to) + else: + navigation_nodes[from] = [to] func add_node(x: float, y: float, merge_threshold: float = -1.0) -> NavigationNode: - if merge_threshold > 0: - var closest_node: NavigationNode = find_closest_node_with_threshold(Vector2(x, y), merge_threshold) - if closest_node: - closest_node.was_merged = true - return closest_node - var node: NavigationNode = NavigationNode.new() - node.set_position(Vector2(x, y)) - navigation_nodes[node] = [] - return node + if merge_threshold > 0: + var closest_node: NavigationNode = find_closest_node_with_threshold(Vector2(x, y), merge_threshold) + if closest_node: + closest_node.was_merged = true + return closest_node + var node: NavigationNode = NavigationNode.new() + node.set_position(Vector2(x, y)) + navigation_nodes[node] = [] + return node func find_closest_node_with_threshold(position: Vector2, threshold: float) -> NavigationNode: - var closest_node: NavigationNode = null - var closest_distance: float = threshold - for node in all_nodes(): - var distance: float = position.distance_to(node.position) - if distance < closest_distance: - closest_node = node - closest_distance = distance - return closest_node + var closest_node: NavigationNode = null + var closest_distance: float = threshold + for node in all_nodes(): + var distance: float = position.distance_to(node.position) + if distance < closest_distance: + closest_node = node + closest_distance = distance + return closest_node func remove_connection(from: NavigationNode, to: NavigationNode) -> void: - if all_nodes().has(from): - navigation_nodes[from].erase(to) + if all_nodes().has(from): + navigation_nodes[from].erase(to) func remove_node(node: NavigationNode) -> void: - navigation_nodes.erase(node) - for other_node in all_nodes(): - if other_node != node: - remove_connection(other_node, node) - for poly in all_polygons(): - if node in polygon_nodes[poly]: - polygon_nodes[poly].erase(node) + navigation_nodes.erase(node) + for other_node in all_nodes(): + if other_node != node: + remove_connection(other_node, node) + for poly in all_polygons(): + if node in polygon_nodes[poly]: + polygon_nodes[poly].erase(node) func all_polygons() -> Array[CNavigationPolygon]: - var keys: Array = polygon_nodes.keys() - var polygons: Array[CNavigationPolygon] = [] - for key in keys: - if key is CNavigationPolygon: - polygons.append(key) - else: - push_error("Key is not a NavigationPolygon: %s" % key) - return polygons + var keys: Array = polygon_nodes.keys() + var polygons: Array[CNavigationPolygon] = [] + for key in keys: + if key is CNavigationPolygon: + polygons.append(key) + else: + push_error("Key is not a NavigationPolygon: %s" % key) + return polygons func get_nodes_in_polygon(poly: CNavigationPolygon) -> Array[NavigationNode]: - var relevant_nodes: Array = polygon_nodes[poly] - var nodes: Array[NavigationNode] = [] - for node in relevant_nodes: - if node is NavigationNode: - nodes.append(node) - else: - push_error("Node is not a NavigationNode: %s" % node) - return nodes + var relevant_nodes: Array = polygon_nodes[poly] + var nodes: Array[NavigationNode] = [] + for node in relevant_nodes: + if node is NavigationNode: + nodes.append(node) + else: + push_error("Node is not a NavigationNode: %s" % node) + return nodes func erase_and_create_nodes_from_polygons(new_polys: Array[PackedVector2Array]) -> void: - navigation_nodes.clear() - polygon_nodes.clear() + navigation_nodes.clear() + polygon_nodes.clear() - for poly in new_polys: - if poly.size() == 0: - continue + for poly in new_polys: + if poly.size() == 0: + continue - var navpoly: CNavigationPolygon = CNavigationPolygon.new() - poly = navpoly.set_polygon(poly) - polygon_nodes[navpoly] = [] + var navpoly: CNavigationPolygon = CNavigationPolygon.new() + poly = navpoly.set_polygon(poly) + polygon_nodes[navpoly] = [] - polygon_nodes[navpoly] = [] + # create one in the center of each polygon that is kept no matter what + # var poly_center: Vector2 = navpoly.center() + # var center_node: NavigationNode = add_node(poly_center.x, poly_center.y, -1) + # center_node.was_merged = true + # polygon_nodes[navpoly].append(center_node) + # navpoly.center_node = center_node - # create one in the center of each polygon that is kept no matter what - # var poly_center: Vector2 = navpoly.center() - # var center_node: NavigationNode = add_node(poly_center.x, poly_center.y, -1) - # center_node.was_merged = true - # polygon_nodes[navpoly].append(center_node) - # navpoly.center_node = center_node + for i in range(len(poly) - 1): + var center: Vector2 = (poly[i] + poly[i + 1]) / 2 + polygon_nodes[navpoly].append(add_node(center.x, center.y, 10)) + var quater: Vector2 = (poly[i] + center) / 2 + polygon_nodes[navpoly].append(add_node(quater.x, quater.y, 10)) + var three_quater: Vector2 = (center + poly[i + 1]) / 2 + polygon_nodes[navpoly].append(add_node(three_quater.x, three_quater.y, 10)) - for i in range(len(poly) - 1): - var center: Vector2 = (poly[i] + poly[i + 1]) / 2 - polygon_nodes[navpoly].append(add_node(center.x, center.y, 10)) - var quater: Vector2 = (poly[i] + center) / 2 - polygon_nodes[navpoly].append(add_node(quater.x, quater.y, 10)) - var three_quater: Vector2 = (center + poly[i + 1]) / 2 - polygon_nodes[navpoly].append(add_node(three_quater.x, three_quater.y, 10)) + # clear any that were not merged + for node in all_nodes(): + if not node.was_merged: + remove_node(node) - # clear any that were not merged - for node in all_nodes(): - if not node.was_merged: - remove_node(node) - - # connect all within a polygon - for poly in all_polygons(): - var nodes_in_polygon: Array[NavigationNode] = get_nodes_in_polygon(poly) - connect_all_nodes(nodes_in_polygon) + # connect all within a polygon + for poly in all_polygons(): + var nodes_in_polygon: Array[NavigationNode] = get_nodes_in_polygon(poly) + connect_all_nodes(nodes_in_polygon) func connect_all_nodes(nodes: Array[NavigationNode]) -> void: - for i in range(len(nodes)): - for j in range(len(nodes)): - if i != j: - add_connection(nodes[i], nodes[j]) + for i in range(len(nodes)): + for j in range(len(nodes)): + if i != j: + add_connection(nodes[i], nodes[j]) func _draw() -> void: - if draw_nodes or draw_edges: - for from in all_nodes(): - if draw_edges: - for to in get_connections(from): - draw_line(from.position, to.position, Color.RED, 1, false) - if draw_nodes: - draw_circle(from.position, 5, Color.RED) + if draw_nodes or draw_edges: + for from in all_nodes(): + if draw_edges: + for to in get_connections(from): + draw_line(from.position, to.position, Color.RED, 1, false) + if draw_nodes: + draw_circle(from.position, 5, Color.RED) - if draw_polygons: - for poly in all_polygons(): - draw_colored_polygon(poly.polygon, Color(0.5, 0.4, 0.9, 0.3)) - draw_polyline(poly.polygon, Color.WHITE, 1, true) + if draw_polygons: + for poly in all_polygons(): + draw_colored_polygon(poly.polygon, Color(0.5, 0.4, 0.9, 0.3)) + draw_polyline(poly.polygon, Color.WHITE, 1, true) - if latest_navigation_result != null: - if latest_navigation_result.path.size() > 1: - for i in range(latest_navigation_result.path.size() - 1): - draw_line(latest_navigation_result.path[i].position, latest_navigation_result.path[i + 1].position, Color.GREEN, 1, false) - draw_circle(latest_navigation_result.next_position, 5, Color.GREEN) + if latest_navigation_result != null: + if latest_navigation_result.path.size() > 1: + for i in range(latest_navigation_result.path.size() - 1): + draw_line(latest_navigation_result.path[i].position, latest_navigation_result.path[i + 1].position, Color.GREEN, 1, false) + draw_circle(latest_navigation_result.next_position, 5, Color.GREEN) func draw_pathfinding_result(result: PathfindingResult) -> void: - if latest_navigation_result and latest_navigation_result.is_identical_to(result): - return - latest_navigation_result = result - queue_redraw() + if latest_navigation_result and latest_navigation_result.is_identical_to(result): + return + latest_navigation_result = result + queue_redraw() func determine_next_position(current_position: Vector2, target_position: Vector2) -> PathfindingResult: - var result: PathfindingResult = PathfindingResult.new() + var result: PathfindingResult = PathfindingResult.new() - # find both polygons containing the current and target positions - var current_polygon: CNavigationPolygon = null - var target_polygon: CNavigationPolygon = null + # find both polygons containing the current and target positions + var current_polygon: CNavigationPolygon = null + var target_polygon: CNavigationPolygon = null - for poly in all_polygons(): - if Geometry2D.is_point_in_polygon(current_position, poly.polygon): - current_polygon = poly - if Geometry2D.is_point_in_polygon(target_position, poly.polygon): - target_polygon = poly + for poly in all_polygons(): + if Geometry2D.is_point_in_polygon(current_position, poly.polygon): + current_polygon = poly + if Geometry2D.is_point_in_polygon(target_position, poly.polygon): + target_polygon = poly - # if the current position is not in any polygon, navigate to the closest node - if not current_polygon: - var closest_node: NavigationNode = find_closest_node_with_threshold(current_position, 100000) - result.next_position = closest_node.position - return result + # if the current position is not in any polygon, navigate to the closest node + if not current_polygon: + var closest_node: NavigationNode = find_closest_node_with_threshold(current_position, 100000) + result.next_position = closest_node.position + return result - # if the target position is not in any polygon, return current position (cannot navigate) - if not target_polygon: - result.is_next_target = true - result.next_position = current_position - return result + # if the target position is not in any polygon, return current position (cannot navigate) + if not target_polygon: + result.is_next_target = true + result.next_position = current_position + return result - # if the current and target positions are in the same polygon, return the target position - if current_polygon == target_polygon: - result.is_next_target = true - result.next_position = target_position - return result + # if the current and target positions are in the same polygon, return the target position + if current_polygon == target_polygon: + result.is_next_target = true + result.next_position = target_position + return result - # we will have to insert the start node into the graph and connect it to the nodes within the polygon, - # and remove it later on again - var start_node: NavigationNode = add_node(current_position.x, current_position.y, -1) - var nodes_in_current_polygon: Array[NavigationNode] = get_nodes_in_polygon(current_polygon) - polygon_nodes[current_polygon].append(start_node) - for node in nodes_in_current_polygon: - add_connection(start_node, node) + # we will have to insert the start node into the graph and connect it to the nodes within the polygon, + # and remove it later on again + var start_node: NavigationNode = add_node(current_position.x, current_position.y, -1) + var nodes_in_current_polygon: Array[NavigationNode] = get_nodes_in_polygon(current_polygon) + polygon_nodes[current_polygon].append(start_node) + for node in nodes_in_current_polygon: + add_connection(start_node, node) - # the target position is simple, just find the closest node in the polygon to the target position, - # the alternate algorithm for within a polygon above will take care of the rest - var end_node: NavigationNode = null - var min_distance: float = INF + # the target position is simple, just find the closest node in the polygon to the target position, + # the alternate algorithm for within a polygon above will take care of the rest + var end_node: NavigationNode = null + var min_distance: float = INF - var nodes_in_target_polygon: Array[NavigationNode] = get_nodes_in_polygon(target_polygon) - for node in nodes_in_target_polygon: - var distance: float = target_position.distance_to(node.position) - if distance < min_distance: - min_distance = distance - end_node = node + var nodes_in_target_polygon: Array[NavigationNode] = get_nodes_in_polygon(target_polygon) + for node in nodes_in_target_polygon: + var distance: float = target_position.distance_to(node.position) + if distance < min_distance: + min_distance = distance + end_node = node - var path: Array[NavigationNode] = dijkstra(start_node, end_node) - result.path = path + var path: Array[NavigationNode] = dijkstra(start_node, end_node) + result.path = path - # remove the start node again - remove_node(start_node) + # remove the start node again + remove_node(start_node) - # if a path is found, return the position of the next node in the path - if path.size() > 1: - # next node in the path - result.next_position = path[1].position - return result - elif path.size() == 1: - # directly reachable - result.is_next_target = true - result.next_position = target_position - else: - # no path found; return current position - result.is_next_target = true - result.next_position = current_position + # if a path is found, return the position of the next node in the path + if path.size() > 1: + # next node in the path + result.next_position = path[1].position + return result + elif path.size() == 1: + # directly reachable + result.is_next_target = true + result.next_position = target_position + else: + # no path found; return current position + result.is_next_target = true + result.next_position = current_position - return result + return result func array_contains_node(arr: Array, node: NavigationNode) -> bool: - for item in arr: - if item == node: - return true - return false + for item in arr: + if item == node: + return true + return false func dijkstra(start_node: NavigationNode, end_node: NavigationNode) -> Array[NavigationNode]: - var open_set: Array[NavigationNode] = [] - var closed_set: Array[NavigationNode] = [] - var distances: Dictionary = {} - var previous_nodes: Dictionary = {} + var open_set: Array[NavigationNode] = [] + var closed_set: Array[NavigationNode] = [] + var distances: Dictionary = {} + var previous_nodes: Dictionary = {} - distances[start_node] = 0 - open_set.append(start_node) + distances[start_node] = 0 + open_set.append(start_node) - while open_set.size() > 0: - # Find the node with the smallest tentative distance - var current_node: NavigationNode = open_set[0] - var current_distance: float = distances[current_node] - for node in open_set: - if distances[node] < current_distance: - current_node = node - current_distance = distances[node] + while open_set.size() > 0: + var current_node: NavigationNode = open_set[0] + var current_distance: float = distances[current_node] + for node in open_set: + if distances[node] < current_distance: + current_node = node + current_distance = distances[node] - # If the end node is reached, reconstruct the path - if current_node == end_node: - var path: Array[NavigationNode] = [] - var node: NavigationNode = end_node - while node != null: - path.insert(0, node) - node = previous_nodes.get(node, null) - return path + # if the end node is reached, reconstruct path + if current_node == end_node: + var path: Array[NavigationNode] = [] + var node: NavigationNode = end_node + while node != null: + path.insert(0, node) + node = previous_nodes.get(node, null) + return path - open_set.erase(current_node) - closed_set.append(current_node) + open_set.erase(current_node) + closed_set.append(current_node) - # Examine neighbors of the current node - var neighbors = get_connections(current_node) - for neighbor in neighbors: - if array_contains_node(closed_set, neighbor): - continue + # neighbors of the current node + var neighbors = get_connections(current_node) + for neighbor in neighbors: + if array_contains_node(closed_set, neighbor): + continue - var tentative_distance: float = distances[current_node] + current_node.position.distance_to(neighbor.position) + var tentative_distance: float = distances[current_node] + current_node.position.distance_to(neighbor.position) - if not array_contains_node(open_set, neighbor) or tentative_distance < distances.get(neighbor, INF): - distances[neighbor] = tentative_distance - previous_nodes[neighbor] = current_node - if not array_contains_node(open_set, neighbor): - open_set.append(neighbor) + if not array_contains_node(open_set, neighbor) or tentative_distance < distances.get(neighbor, INF): + distances[neighbor] = tentative_distance + previous_nodes[neighbor] = current_node + if not array_contains_node(open_set, neighbor): + open_set.append(neighbor) - # No path found; return an empty array - return [] + # no path found + return [] diff --git a/pathfinding-algorithms/scenes/custom-solver/custom-graph-solver.tscn b/pathfinding-algorithms/scenes/custom-solver/custom-graph-solver.tscn index cbaeef5..4ad1ab3 100644 --- a/pathfinding-algorithms/scenes/custom-solver/custom-graph-solver.tscn +++ b/pathfinding-algorithms/scenes/custom-solver/custom-graph-solver.tscn @@ -14,10 +14,10 @@ script = ExtResource("1_tis1c") navigation_polygon = [NodePath("NavPolygon2D_1"), NodePath("SmallPolygon2D"), NodePath("NavPolygon2D_2")] [node name="NavPolygon2D_2" type="Polygon2D" parent="."] -polygon = PackedVector2Array(474, 298, 379, 295, 381, 261, 479, 98, 422, 71, 336, 203, 334, 47, 255, 43, 49, 42, 48, 119, 55, 247, 109, 244, 112, 126, 253, 119, 249, 176, 153, 177, 153, 240, 253, 236, 289, 322, 69, 300, 74, 390, 475, 400, 484, 463, 104, 458, 108, 630, 222, 633, 222, 542, 476, 569, 748, 642, 984, 642, 979, 580, 911, 563, 910, 495, 831, 495, 847, 563, 701, 493, 656, 402, 926, 414, 995, 516, 1110, 517, 985, 319, 774, 292, 765, 244, 884, 266, 896, 206, 764, 167, 675, 226, 703, 295, 652, 295, 554, 179, 805, 106, 935, 128, 998, 249, 1105, 257, 934, 19, 616, 61, 476, 167) +visible = false +polygon = PackedVector2Array(474, 298, 379, 295, 381, 261, 479, 98, 422, 71, 336, 203, 334, 47, 255, 43, 49, 42, 48, 119, 55, 247, 109, 244, 134, 127, 253, 119, 249, 176, 153, 177, 153, 240, 253, 236, 289, 322, 69, 300, 74, 390, 475, 400, 619, 511, 222, 449, 108, 630, 222, 633, 297, 544, 476, 569, 748, 642, 984, 642, 979, 580, 911, 563, 910, 495, 831, 495, 847, 563, 701, 493, 656, 402, 926, 414, 995, 516, 1110, 517, 985, 319, 774, 292, 765, 244, 884, 266, 896, 206, 764, 167, 675, 226, 703, 295, 652, 295, 600, 200, 805, 106, 935, 128, 998, 249, 1105, 257, 934, 19, 616, 61, 476, 167) [node name="NavPolygon2D_1" type="Polygon2D" parent="."] -visible = false polygon = PackedVector2Array(164, 56, 379, 23, 603, 53, 684, 152, 759, 255, 572, 293, 598, 166, 422, 106, 344, 158, 509, 312, 438, 454, 489, 504, 610, 342, 734, 323, 834, 199, 786, 85, 958, 43, 1117, 48, 1109, 194, 1137, 565, 916, 550, 887, 386, 965, 359, 962, 473, 1000, 494, 1002, 204, 928, 184, 916, 304, 837, 382, 835, 541, 752, 563, 732, 421, 627, 450, 592, 618, 335, 540, 295, 412, 361, 311, 190, 169, 194, 329, 278, 510, 132, 589, 133, 459, 77, 311, 48, 130) [node name="SmallPolygon2D" type="Polygon2D" parent="."] diff --git a/pathfinding-algorithms/scenes/custom-solver/custom_graph_solver.gd b/pathfinding-algorithms/scenes/custom-solver/custom_graph_solver.gd index 0833d76..25093d3 100644 --- a/pathfinding-algorithms/scenes/custom-solver/custom_graph_solver.gd +++ b/pathfinding-algorithms/scenes/custom-solver/custom_graph_solver.gd @@ -9,33 +9,33 @@ var seleted_polygon: int = 0 func _ready() -> void: - for polygon in navigation_polygon: - polygon.hide() + for polygon in navigation_polygon: + polygon.hide() - update_polygon() + update_polygon() func update_polygon(): - var polygons: Array[PackedVector2Array] = Geometry2D.decompose_polygon_in_convex(navigation_polygon[seleted_polygon].polygon) - graph.erase_and_create_nodes_from_polygons(polygons) + var polygons: Array[PackedVector2Array] = Geometry2D.decompose_polygon_in_convex(navigation_polygon[seleted_polygon].polygon) + graph.erase_and_create_nodes_from_polygons(polygons) func _process(delta: float) -> void: - # check for left and right arrow keys to change the selected polygon (0, len(navigation_polygon)-1) - if Input.is_action_just_pressed("ui_right"): - seleted_polygon += 1 - if seleted_polygon >= len(navigation_polygon): - seleted_polygon = 0 - update_polygon() + # check for left and right arrow keys to change the selected polygon (0, len(navigation_polygon)-1) + if Input.is_action_just_pressed("ui_right"): + seleted_polygon += 1 + if seleted_polygon >= len(navigation_polygon): + seleted_polygon = 0 + update_polygon() - if Input.is_action_just_pressed("ui_left"): - seleted_polygon -= 1 - if seleted_polygon < 0: - seleted_polygon = len(navigation_polygon) - 1 - update_polygon() + if Input.is_action_just_pressed("ui_left"): + seleted_polygon -= 1 + if seleted_polygon < 0: + seleted_polygon = len(navigation_polygon) - 1 + update_polygon() - if Input.is_action_just_pressed("draw_toggle_polygon"): - graph.draw_polygons = !graph.draw_polygons - if Input.is_action_just_pressed("draw_toggle_nodes") or Input.is_action_just_pressed("draw_toggle_edges"): - graph.draw_nodes = !graph.draw_nodes - graph.draw_edges = !graph.draw_edges + if Input.is_action_just_pressed("draw_toggle_polygon"): + graph.draw_polygons = !graph.draw_polygons + if Input.is_action_just_pressed("draw_toggle_nodes") or Input.is_action_just_pressed("draw_toggle_edges"): + graph.draw_nodes = !graph.draw_nodes + graph.draw_edges = !graph.draw_edges diff --git a/pathfinding-algorithms/scenes/mario-party/MarioParty.tscn b/pathfinding-algorithms/scenes/mario-party/MarioParty.tscn index 31f5f10..f748301 100644 --- a/pathfinding-algorithms/scenes/mario-party/MarioParty.tscn +++ b/pathfinding-algorithms/scenes/mario-party/MarioParty.tscn @@ -13,9 +13,16 @@ height = 49.9999 [node name="MarioParty" type="Node2D"] script = ExtResource("1_r0jft") +[node name="WaterLayer" type="TileMapLayer" parent="."] +scale = Vector2(2, 2) +tile_map_data = PackedByteArray("AAAAAAAAAAACAAAAAAAAAAEAAAACAAAAAAAAAAIAAAADAAAAAAAAAAMAAAABAAAAAAAAAAQAAAADAAAAAAAAAAUAAAACAAAAAAAAAAYAAAAAAAAAAAAAAAcAAAADAAAAAAAAAAgAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAoAAAABAAAAAAAAAAsAAAAAAAAAAAAAAAwAAAABAAAAAAAAAA0AAAADAAAAAAAAAA4AAAADAAAAAAAAAA8AAAADAAAAAAAAABAAAAAAAAAAAAAAABEAAAAAAAAAAAAAABIAAAABAAAAAAAAABMAAAAAAAAAAAAAABQAAAADAAAAAAABAAAAAAACAAAAAAABAAEAAAADAAAAAAABAAIAAAACAAAAAAABAAMAAAADAAAAAAABAAQAAAABAAAAAAABAAUAAAADAAAAAAABAAYAAAABAAAAAAABAAcAAAABAAAAAAABAAgAAAACAAAAAAABAAkAAAACAAAAAAABAAoAAAADAAAAAAABAAsAAAACAAAAAAABAAwAAAADAAAAAAABAA0AAAAAAAAAAAABAA4AAAACAAAAAAABAA8AAAAAAAAAAAABABAAAAADAAAAAAABABEAAAADAAAAAAABABIAAAACAAAAAAABABMAAAAAAAAAAAABABQAAAABAAAAAAACAAAAAAACAAAAAAACAAEAAAABAAAAAAACAAIAAAADAAAAAAACAAMAAAAAAAAAAAACAAQAAAADAAAAAAACAAUAAAACAAAAAAACAAYAAAADAAAAAAACAAcAAAABAAAAAAACAAgAAAACAAAAAAACAAkAAAAAAAAAAAACAAoAAAABAAAAAAACAAsAAAABAAAAAAACAAwAAAACAAAAAAACAA0AAAACAAAAAAACAA4AAAAAAAAAAAACAA8AAAACAAAAAAACABAAAAACAAAAAAACABEAAAABAAAAAAACABIAAAAAAAAAAAACABMAAAAAAAAAAAACABQAAAAAAAAAAAADAAAAAAACAAAAAAADAAEAAAAAAAAAAAADAAIAAAADAAAAAAADAAMAAAACAAAAAAADAAQAAAADAAAAAAADAAUAAAAAAAAAAAADAAYAAAACAAAAAAADAAcAAAAAAAAAAAADAAgAAAACAAAAAAADAAkAAAAAAAAAAAADAAoAAAADAAAAAAADAAsAAAACAAAAAAADAAwAAAADAAAAAAADAA0AAAAAAAAAAAADAA4AAAAAAAAAAAADAA8AAAADAAAAAAADABAAAAADAAAAAAADABEAAAADAAAAAAADABIAAAAAAAAAAAADABMAAAACAAAAAAADABQAAAAAAAAAAAAEAAAAAAADAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAMAAAABAAAAAAAEAAQAAAABAAAAAAAEAAUAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAgAAAADAAAAAAAEAAkAAAABAAAAAAAEAAoAAAADAAAAAAAEAAsAAAABAAAAAAAEAAwAAAABAAAAAAAEAA0AAAAAAAAAAAAEAA4AAAAAAAAAAAAEAA8AAAAAAAAAAAAEABAAAAADAAAAAAAEABEAAAADAAAAAAAEABIAAAACAAAAAAAEABMAAAACAAAAAAAEABQAAAABAAAAAAAFAAAAAAAAAAAAAAAFAAEAAAADAAAAAAAFAAIAAAADAAAAAAAFAAMAAAABAAAAAAAFAAQAAAADAAAAAAAFAAUAAAADAAAAAAAFAAYAAAACAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAABAAAAAAAFAAkAAAABAAAAAAAFAAoAAAABAAAAAAAFAAsAAAACAAAAAAAFAAwAAAAAAAAAAAAFAA0AAAACAAAAAAAFAA4AAAAAAAAAAAAFAA8AAAACAAAAAAAFABAAAAADAAAAAAAFABEAAAABAAAAAAAFABIAAAACAAAAAAAFABMAAAABAAAAAAAFABQAAAACAAAAAAAGAAAAAAAAAAAAAAAGAAEAAAACAAAAAAAGAAIAAAAAAAAAAAAGAAMAAAABAAAAAAAGAAQAAAABAAAAAAAGAAUAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAgAAAACAAAAAAAGAAkAAAAAAAAAAAAGAAoAAAACAAAAAAAGAAsAAAADAAAAAAAGAAwAAAADAAAAAAAGAA0AAAACAAAAAAAGAA4AAAAAAAAAAAAGAA8AAAAAAAAAAAAGABAAAAADAAAAAAAGABEAAAAAAAAAAAAGABIAAAABAAAAAAAGABMAAAAAAAAAAAAGABQAAAABAAAAAAAHAAAAAAADAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAADAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAABAAAAAAAHAAUAAAADAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAADAAAAAAAHAAgAAAADAAAAAAAHAAkAAAABAAAAAAAHAAoAAAACAAAAAAAHAAsAAAACAAAAAAAHAAwAAAABAAAAAAAHAA0AAAABAAAAAAAHAA4AAAADAAAAAAAHAA8AAAACAAAAAAAHABAAAAACAAAAAAAHABEAAAADAAAAAAAHABIAAAABAAAAAAAHABMAAAABAAAAAAAHABQAAAAAAAAAAAAIAAAAAAADAAAAAAAIAAEAAAADAAAAAAAIAAIAAAADAAAAAAAIAAMAAAABAAAAAAAIAAQAAAADAAAAAAAIAAUAAAACAAAAAAAIAAYAAAACAAAAAAAIAAcAAAABAAAAAAAIAAgAAAACAAAAAAAIAAkAAAABAAAAAAAIAAoAAAABAAAAAAAIAAsAAAABAAAAAAAIAAwAAAACAAAAAAAIAA0AAAACAAAAAAAIAA4AAAAAAAAAAAAIAA8AAAAAAAAAAAAIABAAAAADAAAAAAAIABEAAAACAAAAAAAIABIAAAACAAAAAAAIABMAAAAAAAAAAAAIABQAAAAAAAAAAAAJAAAAAAABAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAADAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAACAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAADAAAAAAAJAAcAAAACAAAAAAAJAAgAAAACAAAAAAAJAAkAAAACAAAAAAAJAAoAAAADAAAAAAAJAAsAAAADAAAAAAAJAAwAAAAAAAAAAAAJAA0AAAAAAAAAAAAJAA4AAAADAAAAAAAJAA8AAAADAAAAAAAJABAAAAAAAAAAAAAJABEAAAADAAAAAAAJABIAAAAAAAAAAAAJABMAAAADAAAAAAAJABQAAAADAAAAAAAKAAAAAAADAAAAAAAKAAEAAAACAAAAAAAKAAIAAAACAAAAAAAKAAMAAAACAAAAAAAKAAQAAAADAAAAAAAKAAUAAAACAAAAAAAKAAYAAAABAAAAAAAKAAcAAAADAAAAAAAKAAgAAAACAAAAAAAKAAkAAAADAAAAAAAKAAoAAAAAAAAAAAAKAAsAAAABAAAAAAAKAAwAAAAAAAAAAAAKAA0AAAAAAAAAAAAKAA4AAAADAAAAAAAKAA8AAAACAAAAAAAKABAAAAABAAAAAAAKABEAAAACAAAAAAAKABIAAAAAAAAAAAAKABMAAAADAAAAAAAKABQAAAACAAAAAAALAAAAAAACAAAAAAALAAEAAAABAAAAAAALAAIAAAABAAAAAAALAAMAAAACAAAAAAALAAQAAAABAAAAAAALAAUAAAABAAAAAAALAAYAAAAAAAAAAAALAAcAAAACAAAAAAALAAgAAAACAAAAAAALAAkAAAABAAAAAAALAAoAAAADAAAAAAALAAsAAAABAAAAAAALAAwAAAADAAAAAAALAA0AAAABAAAAAAALAA4AAAADAAAAAAALAA8AAAABAAAAAAALABAAAAAAAAAAAAALABEAAAADAAAAAAALABIAAAAAAAAAAAALABMAAAADAAAAAAALABQAAAACAAAAAAAMAAAAAAADAAAAAAAMAAEAAAAAAAAAAAAMAAIAAAADAAAAAAAMAAMAAAACAAAAAAAMAAQAAAABAAAAAAAMAAUAAAACAAAAAAAMAAYAAAAAAAAAAAAMAAcAAAAAAAAAAAAMAAgAAAAAAAAAAAAMAAkAAAADAAAAAAAMAAoAAAAAAAAAAAAMAAsAAAABAAAAAAAMAAwAAAACAAAAAAAMAA0AAAACAAAAAAAMAA4AAAACAAAAAAAMAA8AAAABAAAAAAAMABAAAAACAAAAAAAMABEAAAABAAAAAAAMABIAAAABAAAAAAAMABMAAAAAAAAAAAAMABQAAAADAAAAAAANAAAAAAACAAAAAAANAAEAAAACAAAAAAANAAIAAAACAAAAAAANAAMAAAADAAAAAAANAAQAAAADAAAAAAANAAUAAAAAAAAAAAANAAYAAAABAAAAAAANAAcAAAACAAAAAAANAAgAAAAAAAAAAAANAAkAAAABAAAAAAANAAoAAAACAAAAAAANAAsAAAADAAAAAAANAAwAAAAAAAAAAAANAA0AAAABAAAAAAANAA4AAAACAAAAAAANAA8AAAABAAAAAAANABAAAAABAAAAAAANABEAAAADAAAAAAANABIAAAABAAAAAAANABMAAAABAAAAAAANABQAAAACAAAAAAAOAAAAAAADAAAAAAAOAAEAAAADAAAAAAAOAAIAAAACAAAAAAAOAAMAAAACAAAAAAAOAAQAAAADAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAADAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAOAAkAAAACAAAAAAAOAAoAAAADAAAAAAAOAAsAAAACAAAAAAAOAAwAAAADAAAAAAAOAA0AAAADAAAAAAAOAA4AAAADAAAAAAAOAA8AAAABAAAAAAAOABAAAAACAAAAAAAOABEAAAADAAAAAAAOABIAAAAAAAAAAAAOABMAAAABAAAAAAAOABQAAAADAAAAAAAPAAAAAAAAAAAAAAAPAAEAAAACAAAAAAAPAAIAAAADAAAAAAAPAAMAAAABAAAAAAAPAAQAAAACAAAAAAAPAAUAAAACAAAAAAAPAAYAAAABAAAAAAAPAAcAAAADAAAAAAAPAAgAAAAAAAAAAAAPAAkAAAACAAAAAAAPAAoAAAABAAAAAAAPAAsAAAADAAAAAAAPAAwAAAACAAAAAAAPAA0AAAABAAAAAAAPAA4AAAACAAAAAAAPAA8AAAAAAAAAAAAPABAAAAAAAAAAAAAPABEAAAABAAAAAAAPABIAAAAAAAAAAAAPABMAAAACAAAAAAAPABQAAAACAAAAAAAQAAAAAAADAAAAAAAQAAEAAAADAAAAAAAQAAIAAAABAAAAAAAQAAMAAAADAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAADAAAAAAAQAAYAAAACAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAADAAAAAAAQAAkAAAACAAAAAAAQAAoAAAACAAAAAAAQAAsAAAADAAAAAAAQAAwAAAADAAAAAAAQAA0AAAAAAAAAAAAQAA4AAAACAAAAAAAQAA8AAAABAAAAAAAQABAAAAAAAAAAAAAQABEAAAAAAAAAAAAQABIAAAAAAAAAAAAQABMAAAAAAAAAAAAQABQAAAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAAAAAAAAAARAAIAAAADAAAAAAARAAMAAAACAAAAAAARAAQAAAABAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAADAAAAAAARAAkAAAABAAAAAAARAAoAAAACAAAAAAARAAsAAAACAAAAAAARAAwAAAADAAAAAAARAA0AAAABAAAAAAARAA4AAAAAAAAAAAARAA8AAAADAAAAAAARABAAAAADAAAAAAARABEAAAABAAAAAAARABIAAAACAAAAAAARABMAAAADAAAAAAARABQAAAABAAAAAAASAAAAAAACAAAAAAASAAEAAAABAAAAAAASAAIAAAADAAAAAAASAAMAAAAAAAAAAAASAAQAAAABAAAAAAASAAUAAAADAAAAAAASAAYAAAADAAAAAAASAAcAAAADAAAAAAASAAgAAAADAAAAAAASAAkAAAAAAAAAAAASAAoAAAAAAAAAAAASAAsAAAAAAAAAAAASAAwAAAADAAAAAAASAA0AAAAAAAAAAAASAA4AAAAAAAAAAAASAA8AAAACAAAAAAASABAAAAADAAAAAAASABEAAAAAAAAAAAASABIAAAABAAAAAAASABMAAAABAAAAAAASABQAAAACAAAAAAATAAAAAAACAAAAAAATAAEAAAAAAAAAAAATAAIAAAADAAAAAAATAAMAAAACAAAAAAATAAQAAAAAAAAAAAATAAUAAAABAAAAAAATAAYAAAACAAAAAAATAAcAAAADAAAAAAATAAgAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAACAAAAAAATAAsAAAACAAAAAAATAAwAAAAAAAAAAAATAA0AAAADAAAAAAATAA4AAAAAAAAAAAATAA8AAAADAAAAAAATABAAAAAAAAAAAAATABEAAAACAAAAAAATABIAAAAAAAAAAAATABMAAAAAAAAAAAATABQAAAACAAAAAAAUAAAAAAABAAAAAAAUAAEAAAAAAAAAAAAUAAIAAAADAAAAAAAUAAMAAAAAAAAAAAAUAAQAAAACAAAAAAAUAAUAAAACAAAAAAAUAAYAAAAAAAAAAAAUAAcAAAADAAAAAAAUAAgAAAADAAAAAAAUAAkAAAABAAAAAAAUAAoAAAAAAAAAAAAUAAsAAAADAAAAAAAUAAwAAAADAAAAAAAUAA0AAAAAAAAAAAAUAA4AAAADAAAAAAAUAA8AAAADAAAAAAAUABAAAAACAAAAAAAUABEAAAABAAAAAAAUABIAAAAAAAAAAAAUABMAAAAAAAAAAAAUABQAAAADAAAAAAAVAAAAAAAAAAAAAAAVAAEAAAAAAAAAAAAVAAIAAAABAAAAAAAVAAMAAAACAAAAAAAVAAQAAAABAAAAAAAVAAUAAAABAAAAAAAVAAYAAAADAAAAAAAVAAcAAAABAAAAAAAVAAgAAAABAAAAAAAVAAkAAAAAAAAAAAAVAAoAAAADAAAAAAAVAAsAAAAAAAAAAAAVAAwAAAABAAAAAAAVAA0AAAABAAAAAAAVAA4AAAADAAAAAAAVAA8AAAAAAAAAAAAVABAAAAADAAAAAAAVABEAAAABAAAAAAAVABIAAAACAAAAAAAVABMAAAACAAAAAAAVABQAAAABAAAAAAAWAAAAAAACAAAAAAAWAAEAAAACAAAAAAAWAAIAAAADAAAAAAAWAAMAAAACAAAAAAAWAAQAAAADAAAAAAAWAAUAAAABAAAAAAAWAAYAAAACAAAAAAAWAAcAAAADAAAAAAAWAAgAAAAAAAAAAAAWAAkAAAABAAAAAAAWAAoAAAAAAAAAAAAWAAsAAAADAAAAAAAWAAwAAAADAAAAAAAWAA0AAAAAAAAAAAAWAA4AAAAAAAAAAAAWAA8AAAADAAAAAAAWABAAAAADAAAAAAAWABEAAAAAAAAAAAAWABIAAAAAAAAAAAAWABMAAAADAAAAAAAWABQAAAAAAAAAAAAXAAAAAAADAAAAAAAXAAEAAAABAAAAAAAXAAIAAAACAAAAAAAXAAMAAAABAAAAAAAXAAQAAAACAAAAAAAXAAUAAAABAAAAAAAXAAYAAAABAAAAAAAXAAcAAAAAAAAAAAAXAAgAAAABAAAAAAAXAAkAAAACAAAAAAAXAAoAAAABAAAAAAAXAAsAAAABAAAAAAAXAAwAAAAAAAAAAAAXAA0AAAACAAAAAAAXAA4AAAABAAAAAAAXAA8AAAACAAAAAAAXABAAAAABAAAAAAAXABEAAAABAAAAAAAXABIAAAABAAAAAAAXABMAAAABAAAAAAAXABQAAAABAAAAAAAYAAAAAAABAAAAAAAYAAEAAAADAAAAAAAYAAIAAAADAAAAAAAYAAMAAAABAAAAAAAYAAQAAAACAAAAAAAYAAUAAAABAAAAAAAYAAYAAAACAAAAAAAYAAcAAAADAAAAAAAYAAgAAAABAAAAAAAYAAkAAAACAAAAAAAYAAoAAAACAAAAAAAYAAsAAAADAAAAAAAYAAwAAAACAAAAAAAYAA0AAAAAAAAAAAAYAA4AAAAAAAAAAAAYAA8AAAACAAAAAAAYABAAAAADAAAAAAAYABEAAAABAAAAAAAYABIAAAADAAAAAAAYABMAAAADAAAAAAAYABQAAAADAAAAAAAZAAAAAAADAAAAAAAZAAEAAAADAAAAAAAZAAIAAAABAAAAAAAZAAMAAAABAAAAAAAZAAQAAAADAAAAAAAZAAUAAAADAAAAAAAZAAYAAAACAAAAAAAZAAcAAAADAAAAAAAZAAgAAAACAAAAAAAZAAkAAAABAAAAAAAZAAoAAAAAAAAAAAAZAAsAAAADAAAAAAAZAAwAAAABAAAAAAAZAA0AAAADAAAAAAAZAA4AAAAAAAAAAAAZAA8AAAADAAAAAAAZABAAAAAAAAAAAAAZABEAAAAAAAAAAAAZABIAAAABAAAAAAAZABMAAAACAAAAAAAZABQAAAADAAAAAAAaAAAAAAABAAAAAAAaAAEAAAAAAAAAAAAaAAIAAAABAAAAAAAaAAMAAAADAAAAAAAaAAQAAAACAAAAAAAaAAUAAAABAAAAAAAaAAYAAAACAAAAAAAaAAcAAAADAAAAAAAaAAgAAAABAAAAAAAaAAkAAAADAAAAAAAaAAoAAAAAAAAAAAAaAAsAAAACAAAAAAAaAAwAAAACAAAAAAAaAA0AAAABAAAAAAAaAA4AAAABAAAAAAAaAA8AAAADAAAAAAAaABAAAAABAAAAAAAaABEAAAADAAAAAAAaABIAAAABAAAAAAAaABMAAAACAAAAAAAaABQAAAACAAAAAAAbAAAAAAACAAAAAAAbAAEAAAAAAAAAAAAbAAIAAAACAAAAAAAbAAMAAAADAAAAAAAbAAQAAAACAAAAAAAbAAUAAAAAAAAAAAAbAAYAAAACAAAAAAAbAAcAAAABAAAAAAAbAAgAAAADAAAAAAAbAAkAAAACAAAAAAAbAAoAAAABAAAAAAAbAAsAAAAAAAAAAAAbAAwAAAACAAAAAAAbAA0AAAABAAAAAAAbAA4AAAAAAAAAAAAbAA8AAAAAAAAAAAAbABAAAAAAAAAAAAAbABEAAAAAAAAAAAAbABIAAAACAAAAAAAbABMAAAADAAAAAAAbABQAAAADAAAAAAAcAAAAAAABAAAAAAAcAAEAAAACAAAAAAAcAAIAAAABAAAAAAAcAAMAAAABAAAAAAAcAAQAAAAAAAAAAAAcAAUAAAADAAAAAAAcAAYAAAAAAAAAAAAcAAcAAAABAAAAAAAcAAgAAAABAAAAAAAcAAkAAAACAAAAAAAcAAoAAAAAAAAAAAAcAAsAAAABAAAAAAAcAAwAAAAAAAAAAAAcAA0AAAAAAAAAAAAcAA4AAAABAAAAAAAcAA8AAAACAAAAAAAcABAAAAAAAAAAAAAcABEAAAABAAAAAAAcABIAAAAAAAAAAAAcABMAAAACAAAAAAAcABQAAAACAAAAAAAdAAAAAAAAAAAAAAAdAAEAAAABAAAAAAAdAAIAAAACAAAAAAAdAAMAAAAAAAAAAAAdAAQAAAADAAAAAAAdAAUAAAADAAAAAAAdAAYAAAACAAAAAAAdAAcAAAADAAAAAAAdAAgAAAACAAAAAAAdAAkAAAABAAAAAAAdAAoAAAADAAAAAAAdAAsAAAACAAAAAAAdAAwAAAADAAAAAAAdAA0AAAABAAAAAAAdAA4AAAADAAAAAAAdAA8AAAADAAAAAAAdABAAAAABAAAAAAAdABEAAAAAAAAAAAAdABIAAAADAAAAAAAdABMAAAADAAAAAAAdABQAAAABAAAAAAAeAAAAAAAAAAAAAAAeAAEAAAACAAAAAAAeAAIAAAABAAAAAAAeAAMAAAADAAAAAAAeAAQAAAACAAAAAAAeAAUAAAADAAAAAAAeAAYAAAABAAAAAAAeAAcAAAAAAAAAAAAeAAgAAAABAAAAAAAeAAkAAAACAAAAAAAeAAoAAAACAAAAAAAeAAsAAAABAAAAAAAeAAwAAAACAAAAAAAeAA0AAAACAAAAAAAeAA4AAAABAAAAAAAeAA8AAAACAAAAAAAeABAAAAABAAAAAAAeABEAAAABAAAAAAAeABIAAAADAAAAAAAeABMAAAADAAAAAAAeABQAAAACAAAAAAAfAAAAAAACAAAAAAAfAAEAAAAAAAAAAAAfAAIAAAADAAAAAAAfAAMAAAABAAAAAAAfAAQAAAABAAAAAAAfAAUAAAADAAAAAAAfAAYAAAABAAAAAAAfAAcAAAADAAAAAAAfAAgAAAADAAAAAAAfAAkAAAADAAAAAAAfAAoAAAACAAAAAAAfAAsAAAACAAAAAAAfAAwAAAADAAAAAAAfAA0AAAABAAAAAAAfAA4AAAAAAAAAAAAfAA8AAAADAAAAAAAfABAAAAAAAAAAAAAfABEAAAACAAAAAAAfABIAAAABAAAAAAAfABMAAAABAAAAAAAfABQAAAAAAAAAAAAgAAAAAAACAAAAAAAgAAEAAAADAAAAAAAgAAIAAAACAAAAAAAgAAMAAAABAAAAAAAgAAQAAAABAAAAAAAgAAUAAAAAAAAAAAAgAAYAAAAAAAAAAAAgAAcAAAACAAAAAAAgAAgAAAABAAAAAAAgAAkAAAAAAAAAAAAgAAoAAAADAAAAAAAgAAsAAAADAAAAAAAgAAwAAAADAAAAAAAgAA0AAAABAAAAAAAgAA4AAAADAAAAAAAgAA8AAAADAAAAAAAgABAAAAABAAAAAAAgABEAAAAAAAAAAAAgABIAAAAAAAAAAAAgABMAAAADAAAAAAAgABQAAAADAAAAAAAhAAAAAAADAAAAAAAhAAEAAAADAAAAAAAhAAIAAAADAAAAAAAhAAMAAAADAAAAAAAhAAQAAAABAAAAAAAhAAUAAAABAAAAAAAhAAYAAAACAAAAAAAhAAcAAAACAAAAAAAhAAgAAAABAAAAAAAhAAkAAAACAAAAAAAhAAoAAAADAAAAAAAhAAsAAAACAAAAAAAhAAwAAAAAAAAAAAAhAA0AAAABAAAAAAAhAA4AAAAAAAAAAAAhAA8AAAADAAAAAAAhABAAAAABAAAAAAAhABEAAAADAAAAAAAhABIAAAADAAAAAAAhABMAAAADAAAAAAAhABQAAAABAAAAAAAiAAAAAAADAAAAAAAiAAEAAAAAAAAAAAAiAAIAAAABAAAAAAAiAAMAAAAAAAAAAAAiAAQAAAABAAAAAAAiAAUAAAADAAAAAAAiAAYAAAAAAAAAAAAiAAcAAAABAAAAAAAiAAgAAAACAAAAAAAiAAkAAAAAAAAAAAAiAAoAAAABAAAAAAAiAAsAAAABAAAAAAAiAAwAAAADAAAAAAAiAA0AAAACAAAAAAAiAA4AAAAAAAAAAAAiAA8AAAABAAAAAAAiABAAAAACAAAAAAAiABEAAAABAAAAAAAiABIAAAABAAAAAAAiABMAAAACAAAAAAAiABQAAAAAAAAAAAAjAAAAAAABAAAAAAAjAAEAAAADAAAAAAAjAAIAAAACAAAAAAAjAAMAAAAAAAAAAAAjAAQAAAAAAAAAAAAjAAUAAAABAAAAAAAjAAYAAAABAAAAAAAjAAcAAAABAAAAAAAjAAgAAAAAAAAAAAAjAAkAAAACAAAAAAAjAAoAAAACAAAAAAAjAAsAAAABAAAAAAAjAAwAAAACAAAAAAAjAA0AAAACAAAAAAAjAA4AAAABAAAAAAAjAA8AAAAAAAAAAAAjABAAAAAAAAAAAAAjABEAAAADAAAAAAAjABIAAAAAAAAAAAAjABMAAAABAAAAAAAjABQAAAADAAAAAAA=") +tile_set = ExtResource("1_3jghe") +collision_enabled = false +navigation_enabled = false + [node name="GroundLayer" type="TileMapLayer" parent="."] scale = Vector2(2, 2) -tile_map_data = PackedByteArray("AAAAAAAAAgAFAAEAAAABAAAAAgAEAAAAAAACAAAAAgADAAAAAAADAAAAAgABAAEAAAAEAAAAAgAAAAEAAAAEAAEAAgAAAAAAAAAAAAEAAgACAAAAAAAAAAIAAgACAAEAAAAAAAMAAgAFAAAAAAAAAAQAAgADAAAAAAAAAAUAAgAAAAAAAAAAAAYAAgABAAAAAAAAAAcAAgABAAAAAAAAAAgAAgAFAAAAAAAAAAkAAgAAAAAAAAAAAAoAAgACAAAAAAAAAAsAAgADAAAAAAAAAAwAAgAEAAEAAAAAAA0AAgAEAAEAAAAAAA4AAgABAAAAAAAAAA8AAgAAAAAAAAAAABAAAgABAAEAAAAAABEAAgADAAEAAAAAABIAAgAFAAAAAAAAABMAAgACAAAAAAABAAEAAgAFAAEAAAABAAIAAgADAAAAAAABAAMAAgADAAAAAAABAAQAAgAFAAEAAAABAAUAAgADAAEAAAABAAYAAgACAAAAAAABAAcAAgAAAAEAAAABAAgAAgADAAAAAAABAAkAAgADAAAAAAABAAoAAgAEAAEAAAABAAsAAgACAAEAAAABAAwAAgACAAAAAAABAA0AAgAAAAAAAAABAA4AAgAFAAAAAAABAA8AAgAEAAAAAAABABAAAgAEAAAAAAABABEAAgABAAEAAAABABIAAgAEAAEAAAABABMAAgABAAAAAAACAAEAAgAEAAAAAAACAAIAAgABAAAAAAACAAMAAgAEAAEAAAACAAQAAgAAAAAAAAACAAUAAgAFAAAAAAACAAYAAgABAAAAAAACAAcAAgAFAAAAAAACAAgAAgAEAAEAAAACAAkAAgAFAAAAAAACAAoAAgADAAEAAAACAAsAAgAEAAEAAAACAAwAAgADAAAAAAACAA0AAgABAAEAAAACAA4AAgAFAAAAAAACAA8AAgACAAAAAAACABAAAgACAAAAAAACABEAAgAEAAAAAAACABIAAgABAAEAAAACABMAAgADAAEAAAADAAEAAgABAAAAAAADAAIAAgAAAAEAAAADAAMAAgADAAEAAAADAAQAAgABAAAAAAADAAUAAgACAAAAAAADAAYAAgACAAAAAAADAAcAAgADAAAAAAADAAgAAgABAAAAAAADAAkAAgAAAAEAAAADAAoAAgADAAEAAAADAAsAAgAAAAEAAAADAAwAAgAEAAAAAAADAA0AAgAFAAEAAAADAA4AAgAAAAEAAAADAA8AAgADAAEAAAADABAAAgACAAEAAAADABEAAgAAAAEAAAADABIAAgABAAAAAAADABMAAgADAAEAAAAEAAIAAgABAAAAAAAEAAMAAgAAAAAAAAAEAAQAAgAFAAAAAAAEAAUAAgAEAAAAAAAEAAYAAgABAAEAAAAEAAcAAgABAAEAAAAEAAgAAgABAAEAAAAEAAkAAgADAAEAAAAEAAoAAgAEAAAAAAAEAAsAAgAAAAAAAAAEAAwAAgAFAAAAAAAEAA0AAgAFAAAAAAAEAA4AAgAAAAAAAAAEAA8AAgAEAAAAAAAEABAAAgACAAEAAAAEABEAAgADAAEAAAAEABIAAgAAAAAAAAAEABMAAgACAAAAAAAFAAAAAgABAAEAAAAFAAEAAgAEAAEAAAAFAAIAAgABAAEAAAAFAAMAAgAFAAEAAAAFAAQAAgAAAAEAAAAFAAUAAgACAAEAAAAFAAYAAgACAAEAAAAFAAcAAgAAAAEAAAAFAAgAAgAFAAEAAAAFAAkAAgAAAAEAAAAFAAoAAgAEAAEAAAAFAAsAAgAAAAEAAAAFAAwAAgAAAAAAAAAFAA0AAgADAAEAAAAFAA4AAgADAAAAAAAFAA8AAgADAAEAAAAFABAAAgAFAAEAAAAFABEAAgAEAAAAAAAFABIAAgADAAAAAAAFABMAAgAAAAEAAAAGAAAAAgAAAAEAAAAGAAEAAgAFAAEAAAAGAAIAAgAEAAEAAAAGAAMAAgAFAAEAAAAGAAQAAgAAAAAAAAAGAAUAAgADAAAAAAAGAAYAAgADAAAAAAAGAAcAAgAEAAEAAAAGAAgAAgACAAEAAAAGAAkAAgACAAAAAAAGAAoAAgAAAAAAAAAGAAsAAgADAAAAAAAGAAwAAgAAAAEAAAAGAA0AAgABAAEAAAAGAA4AAgADAAEAAAAGAA8AAgAEAAEAAAAGABAAAgABAAEAAAAGABEAAgAAAAAAAAAGABIAAgAAAAEAAAAGABMAAgABAAAAAAAHAAAAAgADAAEAAAAHAAEAAgABAAEAAAAHAAIAAgAFAAEAAAAHAAMAAgAEAAAAAAAHAAQAAgAEAAEAAAAHAAUAAgACAAAAAAAHAAYAAgAFAAAAAAAHAAcAAgACAAAAAAAHAAgAAgAAAAAAAAAHAAkAAgACAAAAAAAHAAoAAgAFAAEAAAAHAAsAAgABAAEAAAAHAAwAAgAEAAEAAAAHAA0AAgABAAAAAAAHAA4AAgAFAAAAAAAHAA8AAgAAAAEAAAAHABAAAgAFAAEAAAAHABEAAgABAAAAAAAHABIAAgAFAAAAAAAHABMAAgADAAAAAAAIAAAAAgAFAAAAAAAIAAEAAgAAAAEAAAAIAAIAAgAAAAAAAAAIAAMAAgACAAAAAAAIAAQAAgAAAAAAAAAIAAUAAgACAAAAAAAIAAYAAgADAAEAAAAIAAcAAgAEAAEAAAAIAAgAAgABAAEAAAAIAAkAAgAFAAEAAAAIAAoAAgADAAEAAAAIAAsAAgAFAAEAAAAIAAwAAgACAAAAAAAIAA0AAgACAAAAAAAIAA4AAgACAAEAAAAIAA8AAgAEAAAAAAAIABAAAgAAAAEAAAAIABEAAgAFAAAAAAAIABIAAgADAAAAAAAIABMAAgAFAAEAAAAJAAAAAgABAAAAAAAJAAEAAgADAAEAAAAJAAIAAgAAAAEAAAAJAAMAAgADAAAAAAAJAAQAAgADAAAAAAAJAAUAAgAAAAEAAAAJAAYAAgAFAAEAAAAJAAcAAgACAAAAAAAJAAgAAgABAAAAAAAJAAkAAgAFAAAAAAAJAAoAAgAAAAEAAAAJAAsAAgADAAAAAAAJAAwAAgAFAAEAAAAJAA0AAgAFAAEAAAAJAA4AAgAAAAAAAAAJAA8AAgABAAEAAAAJABAAAgAEAAAAAAAJABEAAgAAAAAAAAAJABIAAgADAAAAAAAJABMAAgABAAEAAAAKAAAAAgABAAEAAAAKAAEAAgACAAEAAAAKAAIAAgAAAAAAAAAKAAMAAgABAAEAAAAKAAQAAgAAAAEAAAAKAAUAAgAAAAAAAAAKAAYAAgABAAAAAAAKAAcAAgAAAAAAAAAKAAgAAgAEAAEAAAAKAAkAAgAAAAAAAAAKAAoAAgABAAAAAAAKAAsAAgACAAAAAAAKAAwAAgAEAAAAAAAKAA0AAgACAAAAAAAKAA4AAgABAAAAAAAKAA8AAgABAAAAAAAKABAAAgACAAEAAAAKABEAAgABAAAAAAAKABIAAgAFAAEAAAAKABMAAgABAAEAAAALAAAAAgABAAEAAAALAAEAAgAFAAEAAAALAAIAAgADAAAAAAALAAMAAgAEAAAAAAALAAQAAgAFAAAAAAALAAUAAgABAAEAAAALAAYAAgAFAAAAAAALAAcAAgAEAAEAAAALAAgAAgAAAAAAAAALAAkAAgAAAAEAAAALAAoAAgAEAAAAAAALAAsAAgAFAAEAAAALAAwAAgAFAAAAAAALAA0AAgADAAAAAAALAA4AAgABAAAAAAALAA8AAgADAAAAAAALABAAAgAFAAEAAAALABEAAgACAAAAAAALABIAAgACAAEAAAALABMAAgAFAAEAAAAMAAAAAgAAAAAAAAAMAAEAAgACAAEAAAAMAAIAAgACAAAAAAAMAAMAAgAAAAAAAAAMAAQAAgADAAAAAAAMAAUAAgAEAAEAAAAMAAYAAgABAAEAAAAMAAcAAgADAAEAAAAMAAgAAgACAAAAAAAMAAkAAgAEAAAAAAAMAAoAAgAEAAEAAAAMAAsAAgAEAAAAAAAMAAwAAgABAAAAAAAMAA0AAgACAAAAAAAMAA4AAgAEAAEAAAAMAA8AAgAEAAAAAAAMABAAAgAAAAEAAAAMABEAAgAEAAEAAAAMABIAAgAEAAAAAAAMABMAAgAAAAAAAAANAAAAAgADAAEAAAANAAEAAgAEAAEAAAANAAIAAgAEAAEAAAANAAMAAgADAAEAAAANAAQAAgAAAAEAAAANAAUAAgAEAAAAAAANAAYAAgACAAEAAAANAAcAAgACAAAAAAANAAgAAgAEAAAAAAANAAkAAgADAAEAAAANAAoAAgABAAAAAAANAAsAAgACAAEAAAANAAwAAgADAAAAAAANAA0AAgACAAAAAAANAA4AAgABAAEAAAANAA8AAgAFAAEAAAANABAAAgACAAEAAAANABEAAgAFAAAAAAANABIAAgADAAAAAAANABMAAgAFAAAAAAAOAAAAAgAFAAEAAAAOAAEAAgABAAEAAAAOAAIAAgAAAAEAAAAOAAMAAgAFAAEAAAAOAAQAAgAAAAAAAAAOAAUAAgACAAAAAAAOAAYAAgABAAAAAAAOAAcAAgAAAAAAAAAOAAgAAgACAAEAAAAOAAkAAgAAAAEAAAAOAAoAAgAEAAAAAAAOAAsAAgABAAEAAAAOAAwAAgAFAAEAAAAOAA0AAgACAAAAAAAOAA4AAgADAAAAAAAOAA8AAgAEAAEAAAAOABAAAgABAAEAAAAOABEAAgAFAAEAAAAOABIAAgAAAAEAAAAOABMAAgAEAAAAAAAPAAAAAgAAAAEAAAAPAAEAAgAEAAAAAAAPAAIAAgACAAAAAAAPAAMAAgACAAEAAAAPAAQAAgAEAAAAAAAPAAUAAgAEAAEAAAAPAAYAAgAFAAAAAAAPAAcAAgAAAAAAAAAPAAgAAgAFAAAAAAAPAAkAAgABAAEAAAAPAAoAAgACAAAAAAAPAAsAAgAFAAAAAAAPAAwAAgAAAAEAAAAPAA0AAgAFAAEAAAAPAA4AAgABAAEAAAAPAA8AAgACAAEAAAAPABAAAgACAAEAAAAPABEAAgADAAAAAAAPABIAAgACAAEAAAAPABMAAgAAAAAAAAAQAAAAAgAFAAEAAAAQAAEAAgAEAAEAAAAQAAIAAgADAAEAAAAQAAMAAgABAAAAAAAQAAQAAgAFAAEAAAAQAAUAAgACAAAAAAAQAAYAAgAAAAEAAAAQAAcAAgACAAAAAAAQAAgAAgAAAAAAAAAQAAkAAgAEAAEAAAAQAAoAAgAFAAAAAAAQAAsAAgABAAEAAAAQAAwAAgADAAAAAAAQAA0AAgAAAAEAAAAQAA4AAgAEAAAAAAAQAA8AAgACAAAAAAAQABAAAgACAAEAAAAQABEAAgADAAAAAAAQABIAAgABAAAAAAAQABMAAgAEAAAAAAARAAAAAgAAAAEAAAARAAEAAgACAAEAAAARAAIAAgACAAEAAAARAAMAAgABAAAAAAARAAQAAgAFAAEAAAARAAUAAgADAAAAAAARAAYAAgABAAAAAAARAAcAAgAEAAEAAAARAAgAAgABAAAAAAARAAkAAgADAAAAAAARAAoAAgAFAAEAAAARAAsAAgAFAAEAAAARAAwAAgAAAAAAAAARAA0AAgAFAAAAAAARAA4AAgAEAAAAAAARAA8AAgACAAAAAAARABAAAgAAAAEAAAARABEAAgADAAAAAAARABIAAgABAAAAAAARABMAAgAFAAAAAAASAAAAAgADAAEAAAASAAEAAgAAAAEAAAASAAIAAgABAAEAAAASAAMAAgAFAAEAAAASAAQAAgABAAEAAAASAAUAAgAEAAAAAAASAAYAAgAFAAAAAAASAAcAAgAFAAAAAAASAAgAAgABAAAAAAASAAkAAgACAAEAAAASAAoAAgACAAEAAAASAAsAAgAAAAEAAAASAAwAAgACAAEAAAASAA0AAgADAAAAAAASAA4AAgADAAEAAAASAA8AAgAFAAAAAAASABAAAgAFAAAAAAASABEAAgACAAEAAAASABIAAgABAAEAAAASABMAAgAEAAAAAAATAAAAAgADAAEAAAATAAEAAgAEAAAAAAATAAIAAgAAAAAAAAATAAMAAgAAAAAAAAATAAQAAgACAAEAAAATAAUAAgAFAAAAAAATAAYAAgAEAAEAAAATAAcAAgACAAAAAAATAAgAAgABAAAAAAATAAkAAgABAAEAAAATAAoAAgADAAAAAAATAAsAAgAFAAEAAAATAAwAAgADAAAAAAATAA0AAgAFAAAAAAATAA4AAgAFAAAAAAATAA8AAgADAAEAAAATABAAAgACAAAAAAATABEAAgADAAAAAAATABIAAgAFAAAAAAATABMAAgACAAEAAAAUAAAAAgAAAAAAAAAUAAEAAgADAAEAAAAUAAIAAgAEAAAAAAAUAAMAAgAAAAEAAAAUAAQAAgACAAEAAAAUAAUAAgAFAAEAAAAUAAYAAgABAAAAAAAUAAcAAgAAAAEAAAAUAAgAAgADAAEAAAAUAAkAAgACAAAAAAAUAAoAAgAFAAAAAAAUAAsAAgAEAAEAAAAUAAwAAgACAAEAAAAUAA0AAgAAAAEAAAAUAA4AAgABAAAAAAAUAA8AAgAAAAEAAAAUABAAAgAAAAEAAAAUABEAAgACAAEAAAAUABIAAgAFAAEAAAAUABMAAgACAAEAAAAVAAAAAgABAAEAAAAVAAEAAgAEAAAAAAAVAAIAAgAEAAAAAAAVAAMAAgACAAAAAAAVAAQAAgAEAAEAAAAVAAUAAgABAAAAAAAVAAYAAgAFAAAAAAAVAAcAAgADAAEAAAAVAAgAAgABAAEAAAAVAAkAAgACAAEAAAAVAAoAAgADAAAAAAAVAAsAAgAEAAEAAAAVAAwAAgAEAAAAAAAVAA0AAgACAAAAAAAVAA4AAgABAAAAAAAVAA8AAgACAAEAAAAVABAAAgADAAAAAAAVABEAAgABAAEAAAAVABIAAgAAAAEAAAAVABMAAgADAAAAAAAWAAAAAgABAAAAAAAWAAEAAgAAAAEAAAAWAAIAAgACAAAAAAAWAAMAAgAEAAEAAAAWAAQAAgAFAAAAAAAWAAUAAgACAAEAAAAWAAYAAgADAAEAAAAWAAcAAgABAAEAAAAWAAgAAgACAAEAAAAWAAkAAgAFAAAAAAAWAAoAAgAFAAAAAAAWAAsAAgADAAEAAAAWAAwAAgAFAAEAAAAWAA0AAgADAAEAAAAWAA4AAgAAAAEAAAAWAA8AAgAFAAAAAAAWABAAAgAAAAEAAAAWABEAAgAEAAAAAAAWABIAAgAEAAEAAAAWABMAAgACAAAAAAAXAAAAAgABAAEAAAAXAAEAAgABAAEAAAAXAAIAAgACAAAAAAAXAAMAAgAEAAAAAAAXAAQAAgAFAAAAAAAXAAUAAgAEAAEAAAAXAAYAAgAEAAAAAAAXAAcAAgABAAEAAAAXAAgAAgAEAAEAAAAXAAkAAgADAAEAAAAXAAoAAgAFAAEAAAAXAAsAAgAFAAEAAAAXAAwAAgABAAAAAAAXAA0AAgADAAEAAAAXAA4AAgADAAEAAAAXAA8AAgABAAAAAAAXABAAAgADAAAAAAAXABEAAgABAAAAAAAXABIAAgAAAAAAAAAXABMAAgADAAEAAAAYAAAAAgADAAAAAAAYAAEAAgAFAAAAAAAYAAIAAgADAAEAAAAYAAMAAgAFAAEAAAAYAAQAAgAFAAAAAAAYAAUAAgAFAAEAAAAYAAYAAgAEAAAAAAAYAAcAAgAAAAEAAAAYAAgAAgACAAAAAAAYAAkAAgAEAAEAAAAYAAoAAgABAAEAAAAYAAsAAgACAAEAAAAYAAwAAgAAAAAAAAAYAA0AAgACAAEAAAAYAA4AAgABAAAAAAAYAA8AAgADAAEAAAAYABAAAgAAAAEAAAAYABEAAgAEAAEAAAAYABIAAgADAAAAAAAYABMAAgAFAAEAAAAZAAAAAgAFAAAAAAAZAAEAAgAEAAEAAAAZAAIAAgAAAAAAAAAZAAMAAgAFAAEAAAAZAAQAAgADAAAAAAAZAAUAAgAEAAEAAAAZAAYAAgACAAEAAAAZAAcAAgACAAAAAAAZAAgAAgACAAEAAAAZAAkAAgAEAAEAAAAZAAoAAgABAAEAAAAZAAsAAgAEAAEAAAAZAAwAAgABAAAAAAAZAA0AAgABAAAAAAAZAA4AAgAAAAEAAAAZAA8AAgADAAAAAAAZABAAAgAFAAAAAAAZABEAAgAFAAAAAAAZABIAAgAEAAEAAAAZABMAAgAFAAAAAAAaAAAAAgACAAEAAAAaAAEAAgAEAAAAAAAaAAIAAgAEAAEAAAAaAAMAAgAEAAAAAAAaAAQAAgAAAAAAAAAaAAUAAgAAAAAAAAAaAAYAAgAEAAAAAAAaAAcAAgAEAAAAAAAaAAgAAgADAAEAAAAaAAkAAgADAAAAAAAaAAoAAgACAAEAAAAaAAsAAgADAAAAAAAaAAwAAgAEAAAAAAAaAA0AAgACAAAAAAAaAA4AAgABAAEAAAAaAA8AAgABAAAAAAAaABAAAgAAAAEAAAAaABEAAgABAAAAAAAaABIAAgADAAAAAAAaABMAAgAAAAAAAAAbAAAAAgAAAAAAAAAbAAEAAgAEAAEAAAAbAAIAAgAAAAAAAAAbAAMAAgACAAEAAAAbAAQAAgAEAAAAAAAbAAUAAgAAAAEAAAAbAAYAAgACAAAAAAAbAAcAAgABAAEAAAAbAAgAAgAAAAAAAAAbAAkAAgAAAAEAAAAbAAoAAgAAAAEAAAAbAAsAAgADAAAAAAAbAAwAAgAEAAEAAAAbAA0AAgACAAAAAAAbAA4AAgAFAAAAAAAbAA8AAgABAAEAAAAbABAAAgABAAEAAAAbABEAAgAAAAEAAAAbABIAAgAFAAAAAAAbABMAAgADAAEAAAAcAAAAAgAAAAEAAAAcAAEAAgABAAEAAAAcAAIAAgACAAEAAAAcAAMAAgABAAAAAAAcAAQAAgABAAAAAAAcAAUAAgADAAEAAAAcAAYAAgAEAAEAAAAcAAcAAgAAAAEAAAAcAAgAAgAFAAEAAAAcAAkAAgABAAAAAAAcAAoAAgAFAAAAAAAcAAsAAgABAAAAAAAcAAwAAgAFAAEAAAAcAA0AAgAEAAEAAAAcAA4AAgAEAAEAAAAcAA8AAgADAAAAAAAcABAAAgAAAAAAAAAcABEAAgACAAEAAAAcABIAAgACAAAAAAAcABMAAgAAAAEAAAAdAAAAAgAEAAAAAAAdAAEAAgAFAAEAAAAdAAIAAgAAAAEAAAAdAAMAAgAFAAAAAAAdAAQAAgAAAAEAAAAdAAUAAgAEAAAAAAAdAAYAAgAEAAEAAAAdAAcAAgAEAAEAAAAdAAgAAgADAAEAAAAdAAkAAgADAAEAAAAdAAoAAgACAAEAAAAdAAsAAgABAAAAAAAdAAwAAgADAAEAAAAdAA0AAgAAAAEAAAAdAA4AAgAEAAAAAAAdAA8AAgACAAAAAAAdABAAAgAAAAEAAAAdABEAAgACAAEAAAAdABIAAgAEAAAAAAAdABMAAgACAAAAAAAeAAAAAgADAAAAAAAeAAEAAgACAAEAAAAeAAIAAgAFAAEAAAAeAAMAAgAAAAEAAAAeAAQAAgAFAAEAAAAeAAUAAgABAAAAAAAeAAYAAgAFAAAAAAAeAAcAAgADAAAAAAAeAAgAAgABAAEAAAAeAAkAAgACAAAAAAAeAAoAAgACAAAAAAAeAAsAAgADAAEAAAAeAAwAAgAFAAEAAAAeAA0AAgABAAAAAAAeAA4AAgACAAAAAAAeAA8AAgAAAAEAAAAeABAAAgAFAAAAAAAeABEAAgABAAEAAAAeABIAAgABAAEAAAAeABMAAgAEAAAAAAAfAAAAAgACAAEAAAAfAAEAAgAEAAAAAAAfAAIAAgAFAAEAAAAfAAMAAgAEAAAAAAAfAAQAAgACAAEAAAAfAAUAAgAEAAAAAAAfAAYAAgADAAEAAAAfAAcAAgAAAAEAAAAfAAgAAgABAAEAAAAfAAkAAgAEAAEAAAAfAAoAAgAAAAEAAAAfAAsAAgADAAAAAAAfAAwAAgABAAEAAAAfAA0AAgABAAEAAAAfAA4AAgAAAAAAAAAfAA8AAgADAAEAAAAfABAAAgABAAAAAAAfABEAAgACAAEAAAAfABIAAgABAAEAAAAfABMAAgAAAAAAAAAgAAAAAgADAAAAAAAgAAEAAgAFAAEAAAAgAAIAAgAEAAAAAAAgAAMAAgAEAAAAAAAgAAQAAgAEAAAAAAAgAAUAAgABAAAAAAAgAAYAAgACAAAAAAAgAAcAAgAFAAAAAAAgAAgAAgACAAEAAAAgAAkAAgACAAAAAAAgAAoAAgAFAAEAAAAgAAsAAgAAAAAAAAAgAAwAAgAFAAEAAAAgAA0AAgAFAAAAAAAgAA4AAgACAAAAAAAgAA8AAgAAAAEAAAAgABAAAgAFAAEAAAAgABEAAgAEAAEAAAAgABIAAgACAAEAAAAgABMAAgACAAAAAAAhAAAAAgABAAAAAAAhAAEAAgAAAAEAAAAhAAIAAgABAAEAAAAhAAMAAgAFAAEAAAAhAAQAAgAFAAAAAAAhAAUAAgAAAAAAAAAhAAYAAgAFAAEAAAAhAAcAAgABAAEAAAAhAAgAAgAEAAEAAAAhAAkAAgAFAAAAAAAhAAoAAgAAAAEAAAAhAAsAAgACAAEAAAAhAAwAAgAFAAAAAAAhAA0AAgABAAEAAAAhAA4AAgADAAEAAAAhAA8AAgAEAAEAAAAhABAAAgADAAEAAAAhABEAAgAFAAEAAAAhABIAAgABAAEAAAAhABMAAgAEAAAAAAAiAAAAAgACAAAAAAAiAAEAAgACAAEAAAAiAAIAAgACAAEAAAAiAAMAAgADAAAAAAAiAAQAAgAEAAEAAAAiAAUAAgADAAAAAAAiAAYAAgACAAEAAAAiAAcAAgAEAAAAAAAiAAgAAgAFAAAAAAAiAAkAAgAFAAAAAAAiAAoAAgAEAAAAAAAiAAsAAgADAAEAAAAiAAwAAgAFAAEAAAAiAA0AAgAEAAAAAAAiAA4AAgADAAEAAAAiAA8AAgAAAAEAAAAiABAAAgACAAAAAAAiABEAAgABAAAAAAAiABIAAgABAAEAAAAiABMAAgAAAAEAAAAjAAAAAgACAAEAAAAjAAEAAgAAAAAAAAAjAAIAAgAAAAEAAAAjAAMAAgABAAEAAAAjAAQAAgACAAEAAAAjAAUAAgABAAEAAAAjAAYAAgAAAAAAAAAjAAcAAgAAAAEAAAAjAAgAAgADAAEAAAAjAAkAAgAFAAEAAAAjAAoAAgAEAAAAAAAjAAsAAgAFAAAAAAAjAAwAAgABAAEAAAAjAA0AAgABAAAAAAAjAA4AAgACAAEAAAAjAA8AAgACAAEAAAAjABAAAgADAAEAAAAjABEAAgADAAEAAAAjABIAAgADAAEAAAAjABMAAgACAAAAAAAAABQAAgABAAAAAAABABQAAgACAAAAAAACABQAAgABAAAAAAADABQAAgACAAAAAAAEABQAAgADAAEAAAAFABQAAgABAAEAAAAGABQAAgACAAAAAAAHABQAAgACAAAAAAAIABQAAgAFAAAAAAAJABQAAgACAAAAAAAKABQAAgAFAAAAAAALABQAAgACAAAAAAAMABQAAgAEAAAAAAANABQAAgADAAAAAAAOABQAAgACAAEAAAAPABQAAgADAAEAAAAQABQAAgAEAAEAAAARABQAAgACAAEAAAASABQAAgABAAAAAAATABQAAgADAAAAAAAUABQAAgADAAEAAAAVABQAAgAEAAEAAAAWABQAAgACAAAAAAAXABQAAgAFAAAAAAAYABQAAgAEAAAAAAAZABQAAgAEAAAAAAAaABQAAgAEAAAAAAAbABQAAgAAAAEAAAAcABQAAgADAAAAAAAdABQAAgAEAAEAAAAeABQAAgACAAEAAAAfABQAAgAEAAAAAAAgABQAAgABAAEAAAAhABQAAgACAAEAAAAiABQAAgABAAAAAAAjABQAAgAEAAEAAAA=") +tile_map_data = PackedByteArray("AAAEAAIAAgACAAQAAAAEAAMAAgACAAQAAAAEAAQAAgAEAAEAAAAEAAUAAgAFAAEAAAAEAAYAAgACAAAAAAAEAAcAAgACAAQAAAAEAAgAAgACAAQAAAAEAAkAAgABAAAAAAAEAAoAAgACAAQAAAAEAAsAAgACAAQAAAAEAAwAAgACAAQAAAAEAA0AAgABAAAAAAAEAA4AAgAEAAEAAAAEAA8AAgACAAQAAAAEABAAAgACAAQAAAAEABEAAgACAAQAAAAEABIAAgACAAUAAAAFAAIAAgACAAQAAAAFAAMAAgACAAQAAAAFAAQAAgACAAQAAAAFAAUAAgAFAAAAAAAFAAYAAgACAAQAAAAFAAcAAgACAAQAAAAFAAgAAgAFAAAAAAAFAAkAAgAAAAEAAAAFAAoAAgACAAQAAAAFAAsAAgAFAAEAAAAFAAwAAgAEAAEAAAAFAA0AAgAFAAAAAAAFAA4AAgAEAAEAAAAFAA8AAgACAAQAAAAFABAAAgACAAQAAAAFABEAAgACAAQAAAAFABIAAgACAAUAAAAGAAIAAgACAAQAAAAGAAMAAgACAAQAAAAGAAQAAgACAAQAAAAGAAUAAgABAAAAAAAGAAYAAgAEAAAAAAAGAAcAAgABAAAAAAAGAAgAAgACAAQAAAAGAAkAAgABAAEAAAAGAAoAAgACAAQAAAAGAAsAAgACAAQAAAAGAAwAAgACAAQAAAAGAA0AAgACAAQAAAAGAA4AAgACAAQAAAAGAA8AAgACAAQAAAAGABAAAgACAAQAAAAGABEAAgACAAQAAAAGABIAAgACAAUAAAAHAAIAAgACAAQAAAAHAAMAAgACAAQAAAAHAAQAAgACAAAAAAAHAAUAAgADAAAAAAAHAAYAAgACAAQAAAAHAAcAAgAEAAEAAAAHAAgAAgAEAAAAAAAHAAkAAgACAAQAAAAHAAoAAgACAAQAAAAHAAsAAgACAAQAAAAHAAwAAgACAAQAAAAHAA0AAgACAAQAAAAHAA4AAgACAAQAAAAHAA8AAgACAAQAAAAHABAAAgACAAQAAAAHABEAAgACAAQAAAAHABIAAgACAAUAAAAIAAIAAgACAAQAAAAIAAMAAgAEAAAAAAAIAAQAAgABAAAAAAAIAAUAAgACAAEAAAAIAAYAAgACAAQAAAAIAAcAAgACAAQAAAAIAAgAAgABAAAAAAAIAAkAAgACAAQAAAAIAAoAAgAFAAEAAAAIAAsAAgABAAAAAAAIAAwAAgACAAQAAAAIAA0AAgACAAQAAAAIAA4AAgACAAQAAAAIAA8AAgACAAQAAAAIABAAAgACAAQAAAAIABEAAgACAAQAAAAIABIAAgACAAUAAAAJAAIAAgACAAQAAAAJAAMAAgAFAAEAAAAJAAQAAgADAAAAAAAJAAUAAgACAAAAAAAJAAYAAgAEAAAAAAAJAAcAAgAEAAEAAAAJAAgAAgABAAAAAAAJAAkAAgACAAQAAAAJAAoAAgACAAQAAAAJAAsAAgADAAAAAAAJAAwAAgACAAQAAAAJAA0AAgACAAQAAAAJAA4AAgACAAQAAAAJAA8AAgACAAQAAAAJABAAAgACAAQAAAAJABEAAgACAAQAAAAJABIAAgACAAUAAAAKAAIAAgACAAQAAAAKAAMAAgACAAEAAAAKAAQAAgABAAAAAAAKAAUAAgAFAAEAAAAKAAYAAgAEAAEAAAAKAAcAAgAFAAAAAAAKAAgAAgACAAQAAAAKAAkAAgACAAQAAAAKAAoAAgABAAAAAAAKAAsAAgACAAQAAAAKAAwAAgACAAQAAAAKAA0AAgACAAQAAAAKAA4AAgACAAQAAAAKAA8AAgACAAQAAAAKABAAAgACAAQAAAAKABEAAgACAAQAAAAKABIAAgACAAUAAAALAAIAAgACAAQAAAALAAMAAgAFAAEAAAALAAQAAgAEAAAAAAALAAUAAgAEAAEAAAALAAYAAgAFAAAAAAALAAcAAgABAAEAAAALAAgAAgACAAQAAAALAAkAAgACAAQAAAALAAoAAgAAAAAAAAALAAsAAgACAAQAAAALAAwAAgAFAAEAAAALAA0AAgACAAAAAAALAA4AAgACAAQAAAALAA8AAgACAAQAAAALABAAAgACAAQAAAALABEAAgACAAQAAAALABIAAgACAAUAAAAMAAIAAgACAAQAAAAMAAMAAgABAAAAAAAMAAQAAgAEAAAAAAAMAAUAAgAFAAAAAAAMAAYAAgACAAQAAAAMAAcAAgACAAQAAAAMAAgAAgAAAAEAAAAMAAkAAgACAAQAAAAMAAoAAgADAAAAAAAMAAsAAgACAAQAAAAMAAwAAgACAAEAAAAMAA0AAgAAAAAAAAAMAA4AAgACAAQAAAAMAA8AAgACAAQAAAAMABAAAgACAAQAAAAMABEAAgACAAQAAAAMABIAAgAFAAQAAAANAAIAAgACAAQAAAANAAMAAgACAAEAAAANAAQAAgADAAEAAAANAAUAAgACAAEAAAANAAYAAgACAAQAAAANAAcAAgACAAQAAAANAAgAAgAEAAEAAAANAAkAAgADAAAAAAANAAoAAgACAAQAAAANAAsAAgACAAQAAAANAAwAAgAFAAEAAAANAA0AAgACAAAAAAANAA4AAgACAAQAAAANAA8AAgACAAQAAAANABAAAgACAAQAAAANABEAAgACAAQAAAANABIAAgABAAAAAAANABMAAgACAAEAAAAOAAIAAgACAAQAAAAOAAMAAgACAAEAAAAOAAQAAgABAAAAAAAOAAUAAgADAAAAAAAOAAYAAgACAAQAAAAOAAcAAgACAAQAAAAOAAgAAgAAAAEAAAAOAAkAAgACAAEAAAAOAAoAAgACAAQAAAAOAAsAAgACAAQAAAAOAAwAAgABAAEAAAAOAA0AAgAFAAEAAAAOAA4AAgACAAEAAAAOAA8AAgACAAQAAAAOABAAAgACAAQAAAAOABEAAgACAAQAAAAOABIAAgACAAAAAAAOABMAAgAEAAEAAAAPAAIAAgACAAQAAAAPAAMAAgABAAEAAAAPAAQAAgABAAAAAAAPAAUAAgACAAEAAAAPAAYAAgACAAQAAAAPAAcAAgACAAQAAAAPAAgAAgAEAAAAAAAPAAkAAgAAAAEAAAAPAAoAAgAAAAEAAAAPAAsAAgAFAAAAAAAPAAwAAgACAAQAAAAPAA0AAgABAAEAAAAPAA4AAgACAAQAAAAPAA8AAgAAAAAAAAAPABAAAgAFAAEAAAAPABEAAgACAAQAAAAPABIAAgAAAAEAAAAPABMAAgAFAAAAAAAQAAIAAgACAAQAAAAQAAMAAgACAAQAAAAQAAQAAgACAAQAAAAQAAUAAgACAAQAAAAQAAYAAgACAAQAAAAQAAcAAgACAAEAAAAQAAgAAgACAAEAAAAQAAkAAgAFAAEAAAAQAAoAAgACAAQAAAAQAAsAAgACAAQAAAAQAAwAAgACAAEAAAAQAA0AAgACAAAAAAAQAA4AAgACAAQAAAAQAA8AAgACAAQAAAAQABAAAgACAAQAAAAQABEAAgACAAQAAAAQABIAAgADAAEAAAAQABMAAgAEAAEAAAARAAIAAgACAAAAAAARAAMAAgACAAQAAAARAAQAAgACAAQAAAARAAUAAgACAAQAAAARAAYAAgACAAQAAAARAAcAAgAAAAAAAAARAAgAAgAEAAEAAAARAAkAAgACAAQAAAARAAoAAgACAAQAAAARAAsAAgACAAQAAAARAAwAAgAAAAEAAAARAA0AAgACAAAAAAARAA4AAgADAAAAAAARAA8AAgAAAAAAAAARABAAAgACAAQAAAARABEAAgAEAAAAAAARABIAAgABAAEAAAARABMAAgAFAAAAAAASAAIAAgACAAQAAAASAAMAAgADAAEAAAASAAQAAgACAAQAAAASAAUAAgACAAQAAAASAAYAAgADAAEAAAASAAcAAgACAAQAAAASAAgAAgAFAAEAAAASAAkAAgAFAAEAAAASAAoAAgACAAQAAAASAAsAAgACAAQAAAASAAwAAgACAAQAAAASAA0AAgAFAAAAAAASAA4AAgACAAQAAAASAA8AAgADAAAAAAASABAAAgACAAQAAAASABEAAgACAAQAAAASABIAAgACAAQAAAASABMAAgACAAQAAAATAAAAAgAAAAAAAAATAAEAAgACAAQAAAATAAIAAgACAAQAAAATAAMAAgAEAAEAAAATAAQAAgAAAAEAAAATAAUAAgACAAQAAAATAAYAAgADAAAAAAATAAcAAgADAAAAAAATAAgAAgAEAAEAAAATAAkAAgAFAAAAAAATAAoAAgABAAAAAAATAAsAAgACAAQAAAATAAwAAgACAAQAAAATAA0AAgACAAQAAAATAA4AAgAFAAAAAAATAA8AAgACAAQAAAATABAAAgACAAQAAAATABEAAgAAAAEAAAATABIAAgACAAQAAAATABMAAgACAAQAAAAUAAAAAgAAAAEAAAAUAAEAAgACAAQAAAAUAAIAAgACAAEAAAAUAAMAAgABAAEAAAAUAAQAAgADAAAAAAAUAAUAAgADAAEAAAAUAAYAAgAAAAAAAAAUAAcAAgACAAQAAAAUAAgAAgACAAQAAAAUAAkAAgACAAQAAAAUAAoAAgACAAQAAAAUAAsAAgACAAAAAAAUAAwAAgABAAEAAAAUAA0AAgABAAAAAAAUAA4AAgACAAQAAAAUAA8AAgACAAQAAAAUABAAAgACAAQAAAAUABEAAgAFAAAAAAAUABIAAgACAAQAAAAUABMAAgACAAQAAAAVAAAAAgAAAAEAAAAVAAEAAgACAAQAAAAVAAIAAgABAAEAAAAVAAMAAgACAAQAAAAVAAQAAgADAAAAAAAVAAUAAgAEAAEAAAAVAAYAAgACAAQAAAAVAAcAAgACAAQAAAAVAAgAAgABAAEAAAAVAAkAAgACAAQAAAAVAAoAAgACAAQAAAAVAAsAAgAAAAEAAAAVAAwAAgAAAAEAAAAVAA0AAgACAAAAAAAVAA4AAgAFAAEAAAAVAA8AAgACAAQAAAAVABAAAgACAAQAAAAVABEAAgAEAAAAAAAVABIAAgACAAQAAAAVABMAAgAFAAAAAAAWAAAAAgAFAAAAAAAWAAEAAgACAAQAAAAWAAIAAgADAAEAAAAWAAMAAgACAAQAAAAWAAQAAgADAAEAAAAWAAUAAgAAAAAAAAAWAAYAAgACAAQAAAAWAAcAAgACAAQAAAAWAAgAAgABAAAAAAAWAAkAAgACAAQAAAAWAAoAAgACAAQAAAAWAAsAAgAFAAAAAAAWAAwAAgAFAAEAAAAWAA0AAgACAAQAAAAWAA4AAgAAAAAAAAAWAA8AAgACAAQAAAAWABAAAgAFAAAAAAAWABEAAgACAAQAAAAWABIAAgAAAAEAAAAWABMAAgACAAQAAAAXAAAAAgAFAAEAAAAXAAEAAgACAAQAAAAXAAIAAgAEAAAAAAAXAAMAAgABAAAAAAAXAAQAAgACAAQAAAAXAAUAAgACAAQAAAAXAAYAAgACAAQAAAAXAAcAAgACAAQAAAAXAAgAAgAEAAEAAAAXAAkAAgACAAQAAAAXAAoAAgACAAEAAAAXAAsAAgACAAAAAAAXAAwAAgAAAAAAAAAXAA0AAgACAAAAAAAXAA4AAgAEAAAAAAAXAA8AAgABAAEAAAAXABAAAgACAAQAAAAXABEAAgACAAQAAAAXABIAAgADAAEAAAAXABMAAgACAAQAAAAYAAAAAgAAAAEAAAAYAAEAAgACAAQAAAAYAAIAAgAAAAEAAAAYAAMAAgAAAAEAAAAYAAQAAgACAAQAAAAYAAUAAgACAAQAAAAYAAYAAgACAAQAAAAYAAcAAgACAAQAAAAYAAgAAgAAAAEAAAAYAAkAAgAAAAAAAAAYAAoAAgAAAAAAAAAYAAsAAgAFAAAAAAAYAAwAAgADAAAAAAAYAA0AAgACAAAAAAAYAA4AAgAEAAAAAAAYAA8AAgACAAQAAAAYABAAAgACAAQAAAAYABEAAgABAAEAAAAYABIAAgAEAAEAAAAYABMAAgACAAQAAAAZAAAAAgACAAQAAAAZAAEAAgACAAQAAAAZAAIAAgADAAEAAAAZAAMAAgAFAAAAAAAZAAQAAgADAAEAAAAZAAUAAgACAAQAAAAZAAYAAgACAAQAAAAZAAcAAgACAAQAAAAZAAgAAgAAAAAAAAAZAAkAAgAEAAAAAAAZAAoAAgAFAAAAAAAZAAsAAgACAAQAAAAZAAwAAgACAAEAAAAZAA0AAgAEAAEAAAAZAA4AAgAFAAEAAAAZAA8AAgACAAQAAAAZABAAAgACAAQAAAAZABEAAgAFAAEAAAAZABIAAgACAAAAAAAZABMAAgACAAQAAAAaAAAAAgACAAQAAAAaAAEAAgACAAQAAAAaAAIAAgAEAAAAAAAaAAMAAgACAAQAAAAaAAQAAgACAAQAAAAaAAUAAgAFAAEAAAAaAAYAAgACAAQAAAAaAAcAAgADAAEAAAAaAAgAAgACAAQAAAAaAAkAAgAFAAAAAAAaAAoAAgAFAAEAAAAaAAsAAgABAAEAAAAaAAwAAgAEAAEAAAAaAA0AAgAAAAEAAAAaAA4AAgACAAEAAAAaAA8AAgACAAEAAAAaABAAAgAEAAQAAAAaABEAAgADAAQAAAAaABIAAgADAAQAAAAaABMAAgADAAQAAAAbAAAAAgACAAQAAAAbAAEAAgACAAQAAAAbAAIAAgAEAAAAAAAbAAMAAgACAAQAAAAbAAQAAgACAAQAAAAbAAUAAgAAAAEAAAAbAAYAAgAFAAEAAAAbAAcAAgACAAQAAAAbAAgAAgABAAAAAAAbAAkAAgAFAAAAAAAbAAoAAgACAAQAAAAbAAsAAgACAAAAAAAbAAwAAgACAAQAAAAbAA0AAgACAAQAAAAbAA4AAgADAAAAAAAbAA8AAgACAAAAAAAbABAAAgACAAUAAAAcAAAAAgACAAQAAAAcAAEAAgACAAQAAAAcAAIAAgACAAQAAAAcAAMAAgADAAAAAAAcAAQAAgADAAEAAAAcAAUAAgACAAQAAAAcAAYAAgABAAEAAAAcAAcAAgABAAEAAAAcAAgAAgAEAAEAAAAcAAkAAgACAAAAAAAcAAoAAgACAAQAAAAcAAsAAgACAAQAAAAcAAwAAgACAAQAAAAcAA0AAgADAAAAAAAcAA4AAgAEAAEAAAAcAA8AAgACAAQAAAAcABAAAgACAAUAAAAdAAAAAgACAAQAAAAdAAEAAgAEAAAAAAAdAAIAAgADAAEAAAAdAAMAAgAAAAEAAAAdAAQAAgACAAQAAAAdAAUAAgACAAQAAAAdAAYAAgADAAEAAAAdAAcAAgAEAAAAAAAdAAgAAgAEAAEAAAAdAAkAAgACAAAAAAAdAAoAAgAAAAAAAAAdAAsAAgABAAAAAAAdAAwAAgADAAEAAAAdAA0AAgAFAAEAAAAdAA4AAgAFAAEAAAAdAA8AAgACAAQAAAAdABAAAgACAAUAAAAeAAAAAgACAAQAAAAeAAEAAgACAAEAAAAeAAIAAgAEAAAAAAAeAAMAAgAFAAEAAAAeAAQAAgACAAQAAAAeAAUAAgACAAQAAAAeAAYAAgACAAAAAAAeAAcAAgAFAAEAAAAeAAgAAgADAAAAAAAeAAkAAgAEAAEAAAAeAAoAAgACAAEAAAAeAAsAAgAFAAAAAAAeAAwAAgAAAAAAAAAeAA0AAgADAAEAAAAeAA4AAgAAAAEAAAAeAA8AAgABAAEAAAAeABAAAgACAAUAAAAfAAAAAgACAAQAAAAfAAEAAgADAAEAAAAfAAIAAgABAAAAAAAfAAMAAgAFAAEAAAAfAAQAAgACAAQAAAAfAAUAAgACAAQAAAAfAAYAAgAFAAEAAAAfAAcAAgAAAAAAAAAfAAgAAgACAAAAAAAfAAkAAgABAAEAAAAfAAoAAgACAAQAAAAfAAsAAgADAAEAAAAfAAwAAgADAAAAAAAfAA0AAgADAAAAAAAfAA4AAgABAAEAAAAfAA8AAgACAAEAAAAfABAAAgACAAUAAAAgAAAAAgADAAQAAAAgAAEAAgADAAQAAAAgAAIAAgADAAQAAAAgAAMAAgADAAQAAAAgAAQAAgADAAQAAAAgAAUAAgADAAQAAAAgAAYAAgADAAQAAAAgAAcAAgADAAQAAAAgAAgAAgAEAAUAAAAgAAkAAgAEAAAAAAAgAAoAAgAEAAEAAAAgAAsAAgACAAQAAAAgAAwAAgACAAQAAAAgAA0AAgACAAQAAAAgAA4AAgACAAEAAAAgAA8AAgACAAQAAAAgABAAAgACAAUAAAAhAAwAAgADAAAAAAAhAA0AAgAAAAAAAAAhAA4AAgADAAEAAAAhAA8AAgACAAQAAAAhABAAAgACAAUAAAAMABQAAgABAAQAAAANABQAAgABAAEAAAAOABQAAgAAAAEAAAAPABQAAgABAAEAAAAQABQAAgADAAAAAAARABQAAgAAAAEAAAASABQAAgACAAAAAAATABQAAgAEAAAAAAAUABQAAgAFAAEAAAAVABQAAgACAAQAAAAWABQAAgACAAQAAAAXABQAAgACAAQAAAAYABQAAgACAAQAAAAZABQAAgACAAQAAAAaABQAAgADAAQAAAADAAIAAgABAAQAAAADAAMAAgABAAQAAAADAAQAAgABAAQAAAADAAUAAgABAAQAAAADAAYAAgABAAQAAAADAAcAAgABAAQAAAADAAgAAgABAAQAAAADAAkAAgABAAQAAAADAAoAAgABAAQAAAADAAsAAgABAAQAAAADAAwAAgABAAQAAAADAA0AAgABAAQAAAADAA4AAgABAAQAAAADAA8AAgABAAQAAAADABAAAgABAAQAAAADABEAAgABAAQAAAADABIAAgABAAUAAAAEAAEAAgACAAMAAAAFAAEAAgACAAMAAAAGAAEAAgACAAMAAAAHAAEAAgACAAMAAAAIAAEAAgACAAMAAAAJAAEAAgACAAMAAAAKAAEAAgACAAMAAAALAAEAAgACAAMAAAAMAAEAAgACAAMAAAANAAEAAgACAAMAAAAOAAEAAgACAAMAAAAPAAEAAgACAAMAAAAQAAEAAgACAAMAAAARAAEAAgACAAMAAAASAAAAAgABAAQAAAASAAEAAgAFAAUAAAADAAEAAgABAAMAAAAiAAwAAgACAAQAAAAiAA0AAgACAAQAAAAiAA4AAgACAAQAAAAiAA8AAgACAAQAAAAiABAAAgACAAUAAAAhAAgAAgACAAMAAAAhAAkAAgACAAAAAAAhAAoAAgADAAAAAAAhAAsAAgACAAQAAAAiAAgAAgACAAMAAAAiAAkAAgACAAQAAAAiAAoAAgACAAAAAAAiAAsAAgACAAQAAAAjAAgAAgACAAMAAAAjAAkAAgACAAQAAAAjAAoAAgACAAQAAAAjAAsAAgACAAQAAAAjAAwAAgAFAAAAAAAjAA0AAgAAAAEAAAAjAA4AAgAEAAAAAAAjAA8AAgAEAAEAAAAjABAAAgACAAUAAAAMABMAAgABAAQAAAABABIAAgAFAAIAAAAiABIAAgAFAAIAAAAiAAUAAgAEAAMAAAAjAAEAAgAFAAIAAAAAAAIAAgAFAAIAAAABAAcAAgAFAAMAAAAeABMAAgAEAAIAAAAcABIAAgAEAAMAAAAJABMAAgAEAAIAAAA=") tile_set = ExtResource("1_3jghe") collision_enabled = false navigation_enabled = false @@ -26,9 +33,8 @@ tile_map_data = PackedByteArray("AAAGAAYAAwAAAAEAAAAGAAcAAwAAAAEAAAAGAAgAAwAAAAE tile_set = ExtResource("1_3jghe") [node name="DataLayer" type="TileMapLayer" parent="."] -visible = false scale = Vector2(2, 2) -tile_map_data = PackedByteArray("AAAGAAYAAQAAAAAAAAAGAAcAAQABAAAAAAAGAAgAAQAAAAEAAAAGAAkAAQABAAAAAAAGAAoAAQAAAAEAAAAGAAsAAQAAAAAAAAAGAAwAAQAAAAAAAAAGAA0AAQABAAAAAAAGAA4AAQAAAAEAAAAGAA8AAQABAAAAAAAGABAAAQAAAAEAAAARAA4AAQAAAAEAAAASAA4AAQAAAAAAAAATAA4AAQAEAAAAAAAUAA4AAQAAAAEAAAAWAA4AAQAEAAAAAAAXAA4AAQAAAAEAAAAZAA4AAQAEAAAAAAAcAA4AAQAAAAAAAAARAA8AAQADAAAAAAARABAAAQAAAAEAAAAHABAAAQAAAAAAAAAIABAAAQAEAAAAAAAJABAAAQAAAAEAAAAKABAAAQAAAAAAAAAMABAAAQAEAAAAAAANABAAAQAAAAEAAAAPABAAAQAAAAAAAAAQABAAAQAEAAAAAAAJAAgAAQAAAAEAAAAJAAkAAQAAAAAAAAAJAA8AAQABAAAAAAAHAAgAAQACAAAAAAAIAAgAAQAAAAAAAAAKAAgAAQACAAAAAAALAAgAAQAAAAAAAAAMAAgAAQAAAAEAAAANAAgAAQACAAAAAAAOAAgAAQAAAAAAAAAPAAgAAQAAAAEAAAAQAAgAAQACAAAAAAARAAgAAQAAAAAAAAASAAgAAQAAAAEAAAATAAgAAQACAAAAAAAUAAgAAQAAAAAAAAAVAAgAAQAAAAEAAAAWAAgAAQACAAAAAAAXAAgAAQAAAAAAAAAYAAgAAQAAAAEAAAAZAAgAAQACAAAAAAAaAAgAAQAAAAAAAAAbAAgAAQAAAAEAAAAcAAgAAQACAAAAAAAeAAcAAQAAAAAAAAAeAAgAAQAAAAEAAAAeAAkAAQADAAAAAAAeAAoAAQAAAAAAAAAeAAsAAQAAAAEAAAAeAAwAAQADAAAAAAAeAA0AAQAAAAAAAAAeAA4AAQAAAAEAAAAdAA4AAQAEAAAAAAAdAAgAAQAAAAAAAAAVAA4AAQAAAAAAAAAYAA4AAQAAAAAAAAAaAA4AAQAAAAEAAAAbAA4AAQAAAAAAAAALABAAAQAAAAAAAAAOABAAAQAAAAAAAAAJAAsAAQAAAAEAAAAJAAwAAQABAAAAAAAJAA0AAQAAAAEAAAAJAA4AAQAAAAAAAAAJAAoAAQABAAAAAAAGAAMAAQAAAAEAAAAHAAMAAQACAAAAAAAIAAMAAQAAAAAAAAAJAAMAAQAAAAEAAAAKAAMAAQACAAAAAAALAAMAAQAAAAAAAAAMAAMAAQAAAAEAAAANAAMAAQACAAAAAAAOAAMAAQAAAAAAAAAPAAMAAQAAAAEAAAAQAAMAAQACAAAAAAARAAMAAQAAAAAAAAASAAMAAQAAAAEAAAATAAMAAQACAAAAAAAUAAMAAQAAAAAAAAAVAAMAAQAAAAEAAAAWAAMAAQACAAAAAAAXAAMAAQAAAAAAAAAYAAMAAQAAAAEAAAAZAAMAAQACAAAAAAAaAAMAAQAAAAAAAAAbAAMAAQAAAAEAAAAcAAMAAQACAAAAAAAdAAMAAQAAAAAAAAAeAAMAAQAAAAEAAAAGAAQAAQABAAAAAAAGAAUAAQAAAAEAAAAeAAQAAQADAAAAAAAeAAUAAQAAAAEAAAAeAAYAAQADAAAAAAAPAAQAAQADAAAAAAAPAAUAAQAAAAEAAAAQAAUAAQACAAAAAAARAAUAAQAAAAAAAAASAAUAAQAAAAAAAAATAAUAAQAAAAAAAAAUAAUAAQAAAAAAAAAVAAUAAQAAAAAAAAAWAAUAAQAAAAAAAAAXAAUAAQAAAAAAAAAYAAUAAQAAAAEAAAAYAAYAAQADAAAAAAAYAAcAAQAAAAAAAAAaAAsAAQAAAAEAAAAaAAwAAQAAAAAAAAAaAA0AAQABAAAAAAARAAsAAQAAAAEAAAASAAsAAQAAAAAAAAATAAsAAQAAAAAAAAAUAAsAAQAEAAAAAAAVAAsAAQAAAAEAAAAWAAsAAQAAAAAAAAAXAAsAAQAAAAAAAAAYAAsAAQAAAAAAAAAZAAsAAQAEAAAAAAARAAwAAQADAAAAAAARAA0AAQAAAAAAAAAVAAkAAQABAAAAAAAVAAoAAQAAAAAAAAAPAAkAAQADAAAAAAAPAAoAAQAAAAAAAAAPAAsAAQAAAAEAAAANAAsAAQAAAAEAAAAOAAsAAQAEAAAAAAANAAwAAQADAAAAAAANAA0AAQAAAAAAAAANAA4AAQAAAAAAAAANAA8AAQAAAAAAAAA=") +tile_map_data = PackedByteArray("AAAGAAYAAQAAAAAAAAAGAAcAAQABAAAAAAAGAAgAAQAAAAEAAAAGAAkAAQABAAAAAAAGAAoAAQAAAAEAAAAGAAsAAQAAAAAAAAAGAAwAAQAAAAAAAAAGAA0AAQABAAAAAAAGAA4AAQAAAAEAAAAGAA8AAQABAAAAAAAGABAAAQAAAAEAAAARAA4AAQAAAAEAAAASAA4AAQAAAAAAAAATAA4AAQAEAAAAAAAUAA4AAQAAAAEAAAAWAA4AAQAEAAAAAAAXAA4AAQAAAAEAAAAZAA4AAQAEAAAAAAAcAA4AAQAAAAAAAAARAA8AAQADAAAAAAARABAAAQAAAAEAAAAHABAAAQAAAAAAAAAIABAAAQAEAAAAAAAJABAAAQAAAAEAAAAKABAAAQAAAAAAAAAMABAAAQAEAAAAAAANABAAAQAAAAEAAAAPABAAAQAAAAAAAAAQABAAAQAEAAAAAAAJAAgAAQAAAAEAAAAJAAkAAQAAAAAAAAAJAA8AAQABAAAAAAAHAAgAAQACAAAAAAAIAAgAAQAAAAAAAAAKAAgAAQACAAAAAAALAAgAAQAAAAAAAAAMAAgAAQAAAAEAAAANAAgAAQACAAAAAAAOAAgAAQAAAAAAAAAPAAgAAQAAAAEAAAAQAAgAAQACAAAAAAARAAgAAQAAAAAAAAASAAgAAQAAAAEAAAATAAgAAQACAAAAAAAUAAgAAQAAAAAAAAAVAAgAAQAAAAEAAAAWAAgAAQACAAAAAAAXAAgAAQAAAAAAAAAYAAgAAQAAAAEAAAAZAAgAAQACAAAAAAAaAAgAAQAAAAAAAAAbAAgAAQAAAAEAAAAcAAgAAQACAAAAAAAeAAcAAQAAAAAAAAAeAAgAAQAAAAEAAAAeAAkAAQADAAAAAAAeAAoAAQAAAAAAAAAeAAsAAQAAAAEAAAAeAAwAAQADAAAAAAAeAA0AAQAAAAAAAAAeAA4AAQAAAAEAAAAdAA4AAQAEAAAAAAAdAAgAAQAAAAAAAAAVAA4AAQAAAAAAAAAYAA4AAQAAAAAAAAAaAA4AAQAAAAEAAAAbAA4AAQAAAAAAAAALABAAAQAAAAAAAAAOABAAAQAAAAAAAAAJAAsAAQAAAAEAAAAJAAwAAQABAAAAAAAJAA0AAQAAAAEAAAAJAA4AAQAAAAAAAAAJAAoAAQABAAAAAAAGAAMAAQAAAAEAAAAHAAMAAQACAAAAAAAIAAMAAQAAAAAAAAAJAAMAAQAAAAEAAAAKAAMAAQACAAAAAAALAAMAAQAAAAAAAAAMAAMAAQAAAAEAAAANAAMAAQACAAAAAAAOAAMAAQAAAAAAAAAPAAMAAQAAAAEAAAAQAAMAAQACAAAAAAARAAMAAQAAAAAAAAASAAMAAQAAAAEAAAATAAMAAQACAAAAAAAUAAMAAQAAAAAAAAAVAAMAAQAAAAEAAAAWAAMAAQACAAAAAAAXAAMAAQAAAAAAAAAYAAMAAQAAAAEAAAAZAAMAAQACAAAAAAAaAAMAAQAAAAAAAAAbAAMAAQAAAAEAAAAcAAMAAQACAAAAAAAdAAMAAQAAAAAAAAAeAAMAAQAAAAEAAAAGAAQAAQABAAAAAAAGAAUAAQAAAAEAAAAeAAQAAQADAAAAAAAeAAUAAQAAAAEAAAAeAAYAAQADAAAAAAAPAAQAAQADAAAAAAAPAAUAAQAAAAEAAAAQAAUAAQACAAAAAAARAAUAAQAAAAAAAAASAAUAAQAAAAAAAAATAAUAAQAAAAAAAAAUAAUAAQAAAAAAAAAVAAUAAQAAAAAAAAAWAAUAAQAAAAAAAAAXAAUAAQAAAAAAAAAYAAUAAQAAAAEAAAAYAAYAAQADAAAAAAAYAAcAAQAAAAAAAAAaAAsAAQAAAAEAAAAaAAwAAQAAAAAAAAAaAA0AAQABAAAAAAARAAsAAQAAAAEAAAASAAsAAQAAAAAAAAATAAsAAQAAAAAAAAAUAAsAAQAEAAAAAAAVAAsAAQAAAAEAAAAWAAsAAQAAAAAAAAAXAAsAAQAAAAAAAAAYAAsAAQAAAAAAAAAZAAsAAQAEAAAAAAARAAwAAQADAAAAAAARAA0AAQAAAAAAAAAVAAkAAQABAAAAAAAVAAoAAQAAAAAAAAAPAAkAAQADAAAAAAAPAAoAAQAAAAAAAAAPAAsAAQAAAAEAAAANAAsAAQAAAAEAAAAOAAsAAQAEAAAAAAANAAwAAQADAAAAAAANAA0AAQAAAAAAAAANAA4AAQAAAAAAAAANAA8AAQAAAAAAAAAMAAQAAQADAAAAAAAMAAUAAQAAAAAAAAAMAAYAAQAAAAAAAAAMAAcAAQAAAAAAAAA=") tile_set = ExtResource("1_3jghe") [node name="TestDataLayer" type="TileMapLayer" parent="."] @@ -55,10 +61,10 @@ texture = ExtResource("5_3opuj") shape = SubResource("CapsuleShape2D_cgpao") [node name="ResultLabel" type="Label" parent="."] -offset_left = 442.0 -offset_top = 574.0 -offset_right = 701.0 -offset_bottom = 646.0 +offset_left = 501.0 +offset_top = 577.0 +offset_right = 760.0 +offset_bottom = 649.0 theme_override_constants/outline_size = 15 theme_override_font_sizes/font_size = 51 text = "Rolled a 2" diff --git a/pathfinding-algorithms/scenes/mario-party/MarioPartyManagement.gd b/pathfinding-algorithms/scenes/mario-party/MarioPartyManagement.gd index f9cc16d..c068edb 100644 --- a/pathfinding-algorithms/scenes/mario-party/MarioPartyManagement.gd +++ b/pathfinding-algorithms/scenes/mario-party/MarioPartyManagement.gd @@ -12,187 +12,191 @@ var last_dice_result: int = 0 var global_transform_size: Vector2 = Vector2(0, 0) # const DIRECTIONS: Dictionary = { - "up": Vector2(0, -1), - "down": Vector2(0, 1), - "left": Vector2(-1, 0), - "right": Vector2(1, 0) - } + "up": Vector2(0, -1), + "down": Vector2(0, 1), + "left": Vector2(-1, 0), + "right": Vector2(1, 0) + } var node_positions: Dictionary = {} func _ready() -> void: - global_transform_size = Vector2(16, 16) * data_layer.transform.get_scale() + global_transform_size = Vector2(16, 16) * data_layer.transform.get_scale() - build_graph() + build_graph() - # place the player at the first node - var current_player_position: Vector2 = node_positions.keys()[0] - player.global_position = local_to_world(current_player_position) + # place the player at the first node + var current_player_position: Vector2 = node_positions.keys()[0] + player.global_position = local_to_world(current_player_position) - # bring player to top - player.z_index = 1 + # bring player to top + player.z_index = 1 - roll_dice() + roll_dice() - player.finished_movement.connect(roll_dice) + player.finished_movement.connect(roll_dice) func _physics_process(delta: float) -> void: - if Input.is_action_just_pressed("draw_toggle_nodes") or Input.is_action_just_pressed("draw_toggle_edges"): - navigation_graph.draw_nodes = !navigation_graph.draw_nodes - navigation_graph.draw_edges = !navigation_graph.draw_edges - navigation_graph.queue_redraw() + if Input.is_action_just_pressed("draw_toggle_nodes") or Input.is_action_just_pressed("draw_toggle_edges"): + navigation_graph.draw_nodes = !navigation_graph.draw_nodes + navigation_graph.draw_edges = !navigation_graph.draw_edges + navigation_graph.queue_redraw() var dice_controls_min: int = 2 var dice_controls_max: int = 8 func roll_dice() -> void: - last_dice_result = randi() % (dice_controls_max - dice_controls_min + 1) + dice_controls_min - print("Dice result: ", last_dice_result) - $ResultLabel.text = "Rolled a " + str(last_dice_result) + last_dice_result = randi() % (dice_controls_max - dice_controls_min + 1) + dice_controls_min + print("Dice result: ", last_dice_result) + $ResultLabel.text = "Rolled a " + str(last_dice_result) - # Find possible movement options - var movement_options: Array[MPNavigationNode] = find_nodes_with_distance(world_to_local(player.global_position), last_dice_result) - # visualize by spawning an indicator at each possible node, with a click event to move the player - for node in movement_options: - # res://scenes/mario-party/TileIndicator.tscn - var indicator_scene: Node2D = preload("res://scenes/mario-party/TileIndicator.tscn").instantiate() - indicator_scene.scale = Vector2(2, 2) - var area_node: Area2D = indicator_scene.get_node("area") - area_node.set_data(node.position, "player_movement") - area_node.indicator_clicked.connect(_on_indicator_clicked) - indicator_scene.global_position = local_to_world(node.get_position()) - add_child(indicator_scene) + # Find possible movement options + var movement_options: Array[MPNavigationNode] = find_nodes_with_distance(world_to_local(player.global_position), last_dice_result) + # visualize by spawning an indicator at each possible node, with a click event to move the player + for node in movement_options: + # res://scenes/mario-party/TileIndicator.tscn + var indicator_scene: Node2D = preload("res://scenes/mario-party/TileIndicator.tscn").instantiate() + indicator_scene.scale = Vector2(2, 2) + var area_node: Area2D = indicator_scene.get_node("area") + area_node.set_data(node.position, "player_movement") + area_node.indicator_clicked.connect(_on_indicator_clicked) + indicator_scene.global_position = local_to_world(node.get_position()) + add_child(indicator_scene) + + # await get_tree().create_timer(1.0).timeout + # var picked = movement_options[randi() % (len(movement_options))] + # _on_indicator_clicked(picked.position, "player_movement") func _on_indicator_clicked(pos: Vector2, type: String) -> void: - print("Indicator clicked: ", type, " ", pos) - if type == "player_movement": - player.move_to(pos) - # delete all indicators - for child in get_children(): - if child is Node2D: - var area_node: Area2D = child.get_node("area") - if area_node != null: - if area_node.get_type() == "player_movement": - child.queue_free() + print("Indicator clicked: ", type, " ", pos) + if type == "player_movement": + player.move_to(pos) + # delete all indicators + for child in get_children(): + if child is Node2D: + var area_node: Area2D = child.get_node("area") + if area_node != null: + if area_node.get_type() == "player_movement": + child.queue_free() func local_to_world(location: Vector2) -> Vector2: - return location * global_transform_size + global_transform_size / 2 + return location * global_transform_size + global_transform_size / 2 func world_to_local(location: Vector2) -> Vector2: - return (location - global_transform_size / 2) / global_transform_size + return (location - global_transform_size / 2) / global_transform_size func build_graph() -> void: - print("Identifying nodes") - # Step 1: Place nodes at positions where is_tile is true - for position in data_layer.get_used_cells(): - var tile_data: TileData = data_layer.get_cell_tile_data(position) - var is_tile: bool = tile_data.get_custom_data("is_tile") - if is_tile: - var node: MPNavigationNode = navigation_graph.add_node(position.x, position.y) - node_positions[position] = node - var indicator_scene: Node2D = preload("res://scenes/mario-party/TileIndicator.tscn").instantiate() - var area_node: Area2D = indicator_scene.get_node("area") - area_node.set_display_type("node") - indicator_scene.global_position = local_to_world(position) - add_child(indicator_scene) + print("Identifying nodes") + # Step 1: Place nodes at positions where is_tile is true + for position in data_layer.get_used_cells(): + var tile_data: TileData = data_layer.get_cell_tile_data(position) + var is_tile: bool = tile_data.get_custom_data("is_tile") + if is_tile: + var node: MPNavigationNode = navigation_graph.add_node(position.x, position.y) + node_positions[position] = node + var indicator_scene: Node2D = preload("res://scenes/mario-party/TileIndicator.tscn").instantiate() + var area_node: Area2D = indicator_scene.get_node("area") + area_node.set_display_type("node") + indicator_scene.global_position = local_to_world(position) + add_child(indicator_scene) - # Step 2: Connect nodes using flood-fill based on walkable tiles - print("Connecting nodes") - for position in node_positions.keys(): - connect_node(position) + # Step 2: Connect nodes using flood-fill based on walkable tiles + print("Connecting nodes") + for position in node_positions.keys(): + connect_node(position) func connect_node(start_position: Vector2) -> void: - var start_node = node_positions.get(Vector2i(start_position)) - var visited: Dictionary = {} - visited[start_position] = true - # print("Connecting node at ", start_position) + var start_node = node_positions.get(Vector2i(start_position)) + var visited: Dictionary = {} + visited[start_position] = true + # print("Connecting node at ", start_position) - # For each direction, perform flood-fill - for dir_name in DIRECTIONS.keys(): - var direction = DIRECTIONS[dir_name] - var next_position = start_position + direction + # For each direction, perform flood-fill + for dir_name in DIRECTIONS.keys(): + var direction = DIRECTIONS[dir_name] + var next_position = start_position + direction - # print("Checking direction ", dir_name, " from ", start_position, " to ", next_position) + # print("Checking direction ", dir_name, " from ", start_position, " to ", next_position) - # Ensure the first tile respects the direction - if not is_valid_direction(next_position, dir_name): - continue - # print("Flood-fill in direction ", dir_name, " from ", next_position) + # Ensure the first tile respects the direction + if not is_valid_direction(next_position, dir_name): + continue + # print("Flood-fill in direction ", dir_name, " from ", next_position) - # Perform flood-fill from the valid tile - var connected_nodes: Array = flood_fill(next_position, visited) + # Perform flood-fill from the valid tile + var connected_nodes: Array = flood_fill(next_position, visited) - # Add connections between the start node and found nodes - for target_position in connected_nodes: - if target_position != start_position: - if node_positions.has(Vector2i(target_position)): - var target_node = node_positions.get(Vector2i(target_position)) - navigation_graph.add_connection(start_node, target_node) - print(start_position, " --> ", target_position) + # Add connections between the start node and found nodes + for target_position in connected_nodes: + if target_position != start_position: + if node_positions.has(Vector2i(target_position)): + var target_node = node_positions.get(Vector2i(target_position)) + navigation_graph.add_connection(start_node, target_node) + print(start_position, " --> ", target_position) func flood_fill(start_position: Vector2, visited: Dictionary) -> Array: - var stack: Array[Vector2] = [start_position] - var connected_nodes: Array[Vector2] = [] + var stack: Array[Vector2] = [start_position] + var connected_nodes: Array[Vector2] = [] - while stack.size() > 0: - var current_position = stack.pop_back() - # print(" - Visiting ", current_position) + while stack.size() > 0: + var current_position = stack.pop_back() + # print(" - Visiting ", current_position) - # Skip if already visited - if visited.has(current_position): - continue + # Skip if already visited + if visited.has(current_position): + continue - visited[current_position] = true + visited[current_position] = true - # Skip if not walkable - var tile_data: TileData = data_layer.get_cell_tile_data(current_position) - if tile_data == null: - continue + # Skip if not walkable + var tile_data: TileData = data_layer.get_cell_tile_data(current_position) + if tile_data == null: + continue - var is_walkable: bool = tile_data.get_custom_data("is_walkable") - var is_tile: bool = tile_data.get_custom_data("is_tile") - if (not is_walkable) and (not is_tile): - continue + var is_walkable: bool = tile_data.get_custom_data("is_walkable") + var is_tile: bool = tile_data.get_custom_data("is_tile") + if (not is_walkable) and (not is_tile): + continue - # If this position is a node, add it to the result - if is_tile: - # print(" - Found node tile at ", current_position) - connected_nodes.append(current_position) + # If this position is a node, add it to the result + if is_tile: + # print(" - Found node tile at ", current_position) + connected_nodes.append(current_position) - # Add neighboring tiles to the stack if they respect the direction - for dir_name in DIRECTIONS.keys(): - var direction = DIRECTIONS[dir_name] - var neighbor_position = current_position + direction + # Add neighboring tiles to the stack if they respect the direction + for dir_name in DIRECTIONS.keys(): + var direction = DIRECTIONS[dir_name] + var neighbor_position = current_position + direction - if not visited.has(neighbor_position): - if is_valid_direction(current_position, dir_name): - stack.append(neighbor_position) + if not visited.has(neighbor_position): + if is_valid_direction(current_position, dir_name): + stack.append(neighbor_position) - return connected_nodes + return connected_nodes func is_valid_direction(position: Vector2, required_dir: String) -> bool: - var tile_data: TileData = data_layer.get_cell_tile_data(position) - if tile_data == null: - return false + var tile_data: TileData = data_layer.get_cell_tile_data(position) + if tile_data == null: + return false - var is_walkable: bool = tile_data.get_custom_data("is_walkable") - var walk_dir: String = tile_data.get_custom_data("walk_dir") - if walk_dir == "": - walk_dir = "any" + var is_walkable: bool = tile_data.get_custom_data("is_walkable") + var walk_dir: String = tile_data.get_custom_data("walk_dir") + if walk_dir == "": + walk_dir = "any" - # print(" L ", position, " ", is_walkable, " ", walk_dir, " ", required_dir) + # print(" L ", position, " ", is_walkable, " ", walk_dir, " ", required_dir) - # Check if the tile is walkable and allows movement in the required direction - return is_walkable and (walk_dir == required_dir or walk_dir == "any") + # Check if the tile is walkable and allows movement in the required direction + return is_walkable and (walk_dir == required_dir or walk_dir == "any") # the first function that evaluates the finished graph @@ -201,35 +205,35 @@ func is_valid_direction(position: Vector2, required_dir: String) -> bool: # distance here is the amount of nodes to travel, not the actual distance in pixels # must use the MPNavigationNode class and the navigation_graph.get_connections(node: MPNavigationNode) function func find_nodes_with_distance(start_position: Vector2, distance: int) -> Array[MPNavigationNode]: - var start_node = node_positions.get(Vector2i(start_position)) - if start_node == null: - print("Error: No node found at starting position ", start_position) - return [] + var start_node = node_positions.get(Vector2i(start_position)) + if start_node == null: + print("Error: No node found at starting position ", start_position) + return [] - # Initialize BFS - var queue: Array = [[start_node, 0]] # Each element is [node, current_distance] - var visited: Dictionary = {start_node: true} - var result_nodes: Array[MPNavigationNode] = [] + # Initialize BFS + var queue: Array = [[start_node, 0]] # Each element is [node, current_distance] + var visited: Dictionary = {start_node: true} + var result_nodes: Array[MPNavigationNode] = [] - while queue.size() > 0: - var current = queue.pop_front() - var current_node: MPNavigationNode = current[0] - var current_distance: int = current[1] + while queue.size() > 0: + var current = queue.pop_front() + var current_node: MPNavigationNode = current[0] + var current_distance: int = current[1] - # If the target distance is reached, add the node to the result - if current_distance == distance: - result_nodes.append(current_node) - continue # Do not explore further from this node + # If the target distance is reached, add the node to the result + if current_distance == distance: + result_nodes.append(current_node) + continue # Do not explore further from this node - # If the current distance exceeds the target, stop exploring - if current_distance > distance: - break + # If the current distance exceeds the target, stop exploring + if current_distance > distance: + break - # Explore neighbors of the current node - var neighbors: Array[MPNavigationNode] = navigation_graph.get_connections(current_node) - for neighbor in neighbors: - if not visited.has(neighbor): - visited[neighbor] = true - queue.append([neighbor, current_distance + 1]) + # Explore neighbors of the current node + var neighbors: Array[MPNavigationNode] = navigation_graph.get_connections(current_node) + for neighbor in neighbors: + if not visited.has(neighbor): + visited[neighbor] = true + queue.append([neighbor, current_distance + 1]) - return result_nodes + return result_nodes diff --git a/pathfinding-algorithms/scenes/mario-party/MarioPartyTiles.tres b/pathfinding-algorithms/scenes/mario-party/MarioPartyTiles.tres index a12a922..7c3d3d1 100644 --- a/pathfinding-algorithms/scenes/mario-party/MarioPartyTiles.tres +++ b/pathfinding-algorithms/scenes/mario-party/MarioPartyTiles.tres @@ -1,9 +1,17 @@ -[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://cm6wi7fjgfk56"] +[gd_resource type="TileSet" load_steps=9 format=3 uid="uid://cm6wi7fjgfk56"] +[ext_resource type="Texture2D" uid="uid://bif0n5c12bwrh" path="res://addons/sprout_lands_tilemap/assets/Tilesets/Water.png" id="1_j6mfj"] [ext_resource type="Texture2D" uid="uid://cmb6k735nhxmy" path="res://scenes/mario-party/img/data_layer.png" id="1_pdyr2"] [ext_resource type="Texture2D" uid="uid://bngfh7nslvij1" path="res://addons/sprout_lands_tilemap/assets/Tilesets/Grass.png" id="2_ev1xx"] [ext_resource type="Texture2D" uid="uid://cvemyer4jq6we" path="res://addons/sprout_lands_tilemap/assets/Objects/Paths.png" id="3_eigvu"] +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wcjgp"] +texture = ExtResource("1_j6mfj") +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tp5r2"] texture = ExtResource("1_pdyr2") 0:0/0 = 0 @@ -120,3 +128,4 @@ custom_data_layer_2/type = 4 sources/1 = SubResource("TileSetAtlasSource_tp5r2") sources/2 = SubResource("TileSetAtlasSource_m45pk") sources/3 = SubResource("TileSetAtlasSource_xi3gi") +sources/0 = SubResource("TileSetAtlasSource_wcjgp") diff --git a/pathfinding-algorithms/scenes/tilemap_nav.gd b/pathfinding-algorithms/scenes/tilemap_nav.gd index e9902d9..1e4dc2d 100644 --- a/pathfinding-algorithms/scenes/tilemap_nav.gd +++ b/pathfinding-algorithms/scenes/tilemap_nav.gd @@ -2,7 +2,6 @@ extends Node2D @onready var floor: NavigationRegion2D = $BaseNavigationRegion2D @onready var road: NavigationRegion2D = $CheapPathNavigationRegion2D -# @onready var road_poly: Polygon2D = $CheapPathNavigationRegion2D/CheapPath @onready var road_poly: Polygon2D = $BaseNavigationRegion2D/CheapPath # Called when the node enters the scene tree for the first time. diff --git a/pathfinding-algorithms/scenes/tilemap_nav.tscn b/pathfinding-algorithms/scenes/tilemap_nav.tscn index fee40da..9329f45 100644 --- a/pathfinding-algorithms/scenes/tilemap_nav.tscn +++ b/pathfinding-algorithms/scenes/tilemap_nav.tscn @@ -27,10 +27,10 @@ polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)]) agent_radius = 0.0 -[sub_resource type="NavigationPolygon" id="NavigationPolygon_ommyp"] -vertices = PackedVector2Array(5.33594, -2.66406, 5.33594, 8, -5.33594, 8, -5.33594, -2.66406, 0, -5.33594) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(-5.33333, 8, -5.33333, -2.66667, 0, -5.33333, 5.33333, -2.66667, 5.33333, 8)]) +[sub_resource type="NavigationPolygon" id="NavigationPolygon_fvbua"] +vertices = PackedVector2Array(8, 8, -8, 8, -8, -8, 8, -8) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)]) agent_radius = 0.0 [sub_resource type="NavigationPolygon" id="NavigationPolygon_sxfhh"] @@ -372,7 +372,7 @@ texture = ExtResource("1_hjsyr") 0:2/0/terrain_set = 0 0:2/0/terrain = 0 0:2/0/terrains_peering_bit/bottom_side = 0 -0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_ommyp") +0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_fvbua") 1:2/0 = 0 1:2/0/terrain_set = 0 1:2/0/terrain = 0 @@ -1963,7 +1963,7 @@ navigation_enabled = false [node name="Grass" type="TileMapLayer" parent="BaseNavigationRegion2D" groups=["base_nav"]] use_parent_material = true -tile_map_data = PackedByteArray("AAACAAEAAAAAAAEAAAACAAIAAAADAAEAAAADAAIAAAACAAQAAAAEAAIAAAACAAQAAAAEAAMAAAACAAQAAAAFAAMAAAACAAQAAAAGAAMAAAACAAQAAAAHAAMAAAACAAQAAAAIAAMAAAACAAQAAAAJAAMAAAACAAQAAAAIAAQAAAAEAAAAAAAJAAQAAAACAAQAAAAKAAQAAAACAAQAAAAKAAMAAAACAAQAAAADAAMAAAACAAQAAAAEAAQAAAACAAQAAAAFAAQAAAACAAQAAAAGAAQAAAACAAQAAAAHAAQAAAABAAEAAAADAAEAAAACAAEAAAAFAAIAAAACAAQAAAAGAAIAAAACAAQAAAAHAAIAAAACAAQAAAAIAAIAAAACAAQAAAALAAMAAAACAAQAAAALAAQAAAAEAAAAAAAMAAMAAAACAAQAAAAAAAAAAAACAAQAAAABAAAAAAACAAQAAAABAAEAAAACAAQAAAAEAAEAAAACAAQAAAAFAAEAAAACAAQAAAAGAAEAAAACAAQAAAAJAAIAAAACAAQAAAAMAAQAAAAFAAAAAAANAAQAAAABAAEAAAAOAAQAAAACAAQAAAAPAAQAAAACAAQAAAAPAAUAAAACAAUAAAAQAAUAAAACAAUAAAARAAUAAAACAAUAAAASAAYAAAABAAUAAAATAAYAAAACAAUAAAAUAAYAAAACAAUAAAAWAAcAAAABAAUAAAAXAAcAAAACAAUAAAAdAAsAAAABAAUAAABGABUAAAACAAQAAABGABQAAAACAAQAAABGABMAAAACAAQAAABGABIAAAACAAQAAABGABEAAAACAAQAAABGABAAAAACAAQAAABGAA8AAAACAAQAAABGAA4AAAACAAQAAABGAA0AAAACAAQAAABGAAwAAAACAAQAAABGAAsAAAACAAQAAABGAAoAAAACAAQAAABGAAkAAAACAAQAAABGAAgAAAACAAQAAABGAAcAAAACAAQAAABHAAcAAAACAAQAAABHAAYAAAACAAQAAABHAAUAAAACAAQAAABHAAQAAAACAAQAAABHAAMAAAACAAQAAABHAAIAAAACAAQAAABHAAEAAAACAAQAAABHAAAAAAACAAQAAABHAAgAAAACAAQAAABHAAkAAAACAAQAAABHAAoAAAACAAQAAABHAAsAAAACAAQAAABHAAwAAAACAAQAAABHAA0AAAACAAQAAABHAA4AAAACAAQAAABHAA8AAAACAAQAAABHABAAAAACAAQAAABHABEAAAACAAQAAABHABIAAAACAAQAAABHABMAAAACAAQAAABHABQAAAACAAQAAABHABUAAAACAAQAAAAAABsAAAACAAQAAAAAABoAAAACAAQAAAAAABkAAAACAAQAAAAAABgAAAACAAQAAAAAABcAAAACAAQAAAAAABYAAAACAAQAAAAAABUAAAACAAQAAAAAABQAAAACAAQAAAAAABMAAAACAAQAAAAAABIAAAACAAQAAAAAABEAAAACAAQAAAAAABAAAAACAAQAAAAAAA8AAAACAAQAAAAAAA4AAAACAAQAAAAAAA0AAAACAAQAAAAAAAwAAAACAAQAAAAAAAsAAAACAAQAAAAAAAoAAAACAAQAAAAAAAkAAAACAAQAAAAAAAgAAAACAAQAAAAAAAcAAAACAAQAAAAAAAYAAAACAAQAAAAAAAUAAAACAAQAAAAAAAQAAAACAAQAAAAAAAMAAAACAAQAAAAAAAIAAAACAAQAAAAAAAEAAAACAAQAAAACAAAAAAACAAQAAAADAAAAAAACAAQAAAAEAAAAAAACAAQAAAAFAAAAAAACAAQAAAAGAAAAAAACAAQAAAAHAAAAAAACAAQAAAAIAAAAAAACAAQAAAAJAAAAAAACAAQAAAAKAAAAAAACAAQAAAALAAAAAAACAAQAAAAMAAAAAAACAAQAAAANAAAAAAACAAQAAAAOAAAAAAACAAQAAAAPAAAAAAACAAQAAAAQAAAAAAACAAQAAAARAAAAAAACAAQAAAASAAAAAAACAAQAAAATAAAAAAACAAQAAAAUAAAAAAACAAQAAAAVAAAAAAACAAQAAAAWAAAAAAACAAQAAAAXAAAAAAACAAQAAAAYAAAAAAACAAQAAAAZAAAAAAACAAQAAAAaAAAAAAACAAQAAAAbAAAAAAACAAQAAAAcAAAAAAACAAQAAAAdAAAAAAACAAQAAAAeAAAAAAACAAQAAAAfAAAAAAACAAQAAAAgAAAAAAACAAQAAAAhAAAAAAACAAQAAAAiAAAAAAACAAQAAAAjAAAAAAACAAQAAAAkAAAAAAACAAQAAAAlAAAAAAACAAQAAAAmAAAAAAACAAQAAAAnAAAAAAACAAQAAAAoAAAAAAACAAQAAAApAAAAAAACAAQAAAAqAAAAAAACAAQAAAArAAAAAAACAAQAAAAsAAAAAAACAAQAAAAtAAAAAAACAAQAAAAuAAAAAAACAAQAAAAvAAAAAAACAAQAAAAwAAAAAAACAAQAAAAxAAAAAAACAAQAAAAyAAAAAAACAAQAAAAzAAAAAAACAAQAAAA0AAAAAAACAAQAAAA1AAAAAAACAAQAAAA2AAAAAAACAAQAAAA3AAAAAAACAAQAAAA4AAAAAAACAAQAAAA5AAAAAAACAAQAAAA6AAAAAAACAAQAAAA7AAAAAAACAAQAAAA8AAAAAAACAAQAAAA9AAAAAAACAAQAAAA+AAAAAAACAAQAAAA/AAAAAAACAAQAAABAAAAAAAACAAQAAABBAAAAAAACAAQAAABCAAAAAAACAAQAAABDAAAAAAACAAQAAABEAAAAAAACAAQAAABFAAAAAAACAAQAAABGAAEAAAACAAQAAABGAAAAAAACAAQAAAAHAAEAAAACAAQAAAAIAAEAAAACAAQAAAAJAAEAAAACAAQAAAAKAAEAAAACAAQAAAALAAEAAAACAAQAAAAMAAEAAAACAAQAAAANAAEAAAACAAQAAAAOAAEAAAACAAQAAAAPAAEAAAACAAQAAAAQAAEAAAACAAQAAAARAAEAAAACAAQAAAASAAEAAAACAAQAAAATAAEAAAACAAQAAAATAAIAAAACAAQAAAAUAAIAAAACAAQAAAAVAAIAAAACAAQAAAAWAAIAAAACAAQAAAAXAAIAAAACAAQAAAAYAAIAAAACAAQAAAAZAAIAAAACAAQAAAAaAAIAAAACAAQAAAAbAAIAAAACAAQAAAAcAAIAAAACAAQAAAAdAAIAAAACAAQAAAAeAAIAAAACAAQAAAAfAAIAAAACAAQAAAAgAAIAAAACAAQAAAAhAAIAAAACAAQAAAAiAAIAAAACAAQAAAAjAAIAAAACAAQAAAAkAAIAAAACAAQAAAAlAAIAAAACAAQAAAAmAAIAAAACAAQAAAAnAAIAAAACAAQAAAAgAAEAAAACAAQAAAAfAAEAAAACAAQAAAAeAAEAAAACAAQAAAAdAAEAAAACAAQAAAAcAAEAAAACAAQAAAAbAAEAAAACAAQAAAAaAAEAAAACAAQAAAAZAAEAAAACAAQAAAAYAAEAAAACAAQAAAAXAAEAAAACAAQAAAAWAAEAAAACAAQAAAAVAAEAAAACAAQAAAAUAAEAAAACAAQAAAAhAAEAAAACAAQAAAAiAAEAAAACAAQAAAAjAAEAAAACAAQAAAAkAAEAAAACAAQAAAAlAAEAAAACAAQAAAAmAAEAAAACAAQAAAAnAAEAAAACAAQAAAAoAAEAAAACAAQAAAApAAEAAAACAAQAAAAqAAEAAAACAAQAAAArAAEAAAACAAQAAAAsAAEAAAACAAQAAAAtAAEAAAACAAQAAAAuAAEAAAACAAQAAAAvAAEAAAACAAQAAAAwAAEAAAACAAQAAAAxAAEAAAACAAQAAAAyAAEAAAACAAQAAAAzAAEAAAACAAQAAAA0AAEAAAACAAQAAAA1AAEAAAACAAQAAAA2AAEAAAACAAQAAAA3AAEAAAACAAQAAAA4AAEAAAACAAQAAAA5AAEAAAACAAQAAAA6AAEAAAACAAQAAAA7AAEAAAACAAQAAAA8AAEAAAACAAQAAAA9AAEAAAACAAQAAAA+AAEAAAACAAQAAAA/AAEAAAACAAQAAABAAAEAAAACAAQAAABBAAEAAAACAAQAAABCAAEAAAACAAQAAABDAAEAAAACAAQAAABEAAEAAAACAAQAAABFAAEAAAACAAQAAABFAAIAAAACAAQAAABGAAIAAAACAAQAAABGAAMAAAACAAQAAABGAAQAAAACAAQAAABGAAUAAAACAAQAAABGAAYAAAACAAQAAAABAAIAAAACAAQAAAABAAMAAAACAAQAAAABAAQAAAACAAQAAAABAAUAAAACAAQAAAABAAYAAAACAAQAAAABAAcAAAACAAQAAAABAAgAAAACAAQAAAABAAkAAAACAAQAAAABAAoAAAACAAQAAAABAAsAAAACAAQAAAABAAwAAAACAAQAAAABAA0AAAACAAQAAAABAA4AAAACAAQAAAABAA8AAAACAAQAAAABABAAAAACAAQAAAABABEAAAACAAQAAAABABIAAAACAAQAAAABABMAAAACAAQAAAABABQAAAACAAQAAAABABUAAAACAAQAAAABABYAAAACAAQAAAABABcAAAACAAQAAAABABgAAAACAAQAAAABABkAAAACAAQAAAABABoAAAACAAQAAAABABsAAAACAAQAAAACAAMAAAACAAQAAAACAAQAAAACAAQAAAACAAUAAAACAAQAAAACAAYAAAACAAEAAAACAAcAAAABAAAAAAACAAgAAAAFAAAAAAACAAkAAAACAAQAAAACAAoAAAACAAQAAAACAAsAAAACAAQAAAACAAwAAAACAAQAAAACAA0AAAACAAQAAAACAA4AAAACAAQAAAACAA8AAAACAAQAAAACABAAAAACAAQAAAACABEAAAACAAQAAAACABIAAAACAAQAAAACABMAAAACAAQAAAACABQAAAACAAQAAAACABUAAAACAAQAAAACABYAAAACAAQAAAACABcAAAACAAQAAAACABgAAAACAAQAAAACABkAAAACAAQAAAACABoAAAACAAQAAAACABsAAAACAAQAAAADAAQAAAACAAQAAAADAAUAAAACAAQAAAADAAYAAAACAAQAAAADAAcAAAABAAEAAAADAAgAAAACAAQAAAADAAkAAAAFAAEAAAADAAoAAAAFAAEAAAADAAsAAAACAAQAAAADAAwAAAACAAQAAAADAA0AAAACAAQAAAADAA4AAAACAAQAAAADAA8AAAACAAQAAAADABAAAAACAAQAAAADABEAAAACAAQAAAADABIAAAACAAQAAAADABMAAAACAAQAAAADABQAAAACAAQAAAADABUAAAACAAQAAAADABYAAAACAAQAAAADABcAAAACAAQAAAADABgAAAACAAQAAAADABkAAAACAAQAAAADABoAAAACAAQAAAADABsAAAAEAAAAAAAEAAUAAAACAAQAAAAEAAYAAAACAAQAAAAEAAcAAAACAAQAAAAEAAgAAAACAAQAAAAEAAkAAAACAAQAAAAEAAoAAAACAAQAAAAEAAsAAAACAAQAAAAEAAwAAAACAAQAAAAEAA0AAAACAAQAAAAEAA4AAAACAAQAAAAEAA8AAAAAAAAAAAAEABAAAAAEAAAAAAAEABEAAAACAAAAAAAEABIAAAACAAAAAAAEABMAAAADAAAAAAAEABQAAAACAAQAAAAEABUAAAACAAQAAAAEABYAAAACAAQAAAAEABcAAAACAAQAAAAEABgAAAACAAQAAAAEABkAAAACAAQAAAAEABoAAAACAAQAAAAEABsAAAACAAAAAAAFAAUAAAACAAQAAAAFAAYAAAACAAQAAAAFAAcAAAACAAQAAAAFAAgAAAACAAQAAAAFAAkAAAACAAQAAAAFAAoAAAAEAAQAAAAFAAsAAAADAAQAAAAFAAwAAAADAAQAAAAFAA0AAAADAAQAAAAFAA4AAAADAAQAAAAFAA8AAAADAAQAAAAFABAAAAADAAQAAAAFABEAAAAEAAUAAAAFABIAAAADAAAAAAAFABMAAAABAAEAAAAFABQAAAACAAQAAAAFABUAAAACAAQAAAAFABYAAAACAAQAAAAFABcAAAACAAQAAAAFABgAAAACAAQAAAAFABkAAAACAAQAAAAFABoAAAACAAAAAAAFABsAAAAEAAEAAAAGAAUAAAACAAQAAAAGAAYAAAACAAQAAAAGAAcAAAACAAQAAAAGAAgAAAACAAQAAAAGAAkAAAACAAQAAAAGAAoAAAACAAUAAAAGABEAAAADAAMAAAAGABIAAAAEAAUAAAAGABMAAAAEAAAAAAAGABQAAAACAAQAAAAGABUAAAACAAQAAAAGABYAAAACAAQAAAAGABcAAAACAAQAAAAGABgAAAACAAQAAAAGABkAAAACAAQAAAAGABoAAAACAAQAAAAGABsAAAACAAEAAAAHAAUAAAACAAQAAAAHAAYAAAACAAQAAAAHAAcAAAACAAQAAAAHAAgAAAACAAQAAAAHAAkAAAAEAAQAAAAHAAoAAAADAAUAAAAHABIAAAACAAMAAAAHABMAAAACAAQAAAAHABQAAAACAAQAAAAHABUAAAACAAQAAAAHABYAAAACAAQAAAAHABcAAAACAAQAAAAHABgAAAACAAQAAAAHABkAAAACAAQAAAAHABoAAAACAAQAAAAHABsAAAAAAAAAAAAIAAUAAAACAAQAAAAIAAYAAAACAAQAAAAIAAcAAAACAAQAAAAIAAgAAAACAAQAAAAIAAkAAAACAAUAAAAIABIAAAADAAMAAAAIABMAAAAEAAUAAAAIABQAAAACAAQAAAAIABUAAAACAAQAAAAIABYAAAACAAQAAAAIABcAAAACAAQAAAAIABgAAAACAAQAAAAIABkAAAACAAQAAAAIABoAAAACAAQAAAAIABsAAAACAAQAAAAJAAUAAAACAAQAAAAJAAYAAAACAAQAAAAJAAcAAAACAAQAAAAJAAgAAAACAAQAAAAJAAkAAAACAAUAAAAJABMAAAACAAMAAAAJABQAAAACAAQAAAAJABUAAAACAAQAAAAJABYAAAACAAQAAAAJABcAAAACAAQAAAAJABgAAAACAAQAAAAJABkAAAACAAQAAAAJABoAAAACAAQAAAAJABsAAAACAAQAAAAKAAIAAAACAAQAAAAKAAUAAAACAAQAAAAKAAYAAAACAAQAAAAKAAcAAAACAAQAAAAKAAgAAAAEAAQAAAAKAAkAAAADAAUAAAAKABMAAAACAAMAAAAKABQAAAACAAQAAAAKABUAAAACAAQAAAAKABYAAAACAAQAAAAKABcAAAACAAQAAAAKABgAAAACAAQAAAAKABkAAAACAAQAAAAKABoAAAACAAQAAAAKABsAAAACAAQAAAALAAIAAAACAAQAAAALAAUAAAACAAQAAAALAAYAAAAEAAQAAAALAAcAAAADAAQAAAALAAgAAAADAAUAAAALABMAAAACAAMAAAALABQAAAACAAQAAAALABUAAAACAAQAAAALABYAAAACAAQAAAALABcAAAACAAQAAAALABgAAAACAAQAAAALABkAAAACAAQAAAALABoAAAACAAQAAAALABsAAAACAAQAAAAMAAIAAAACAAQAAAAMAAUAAAACAAQAAAAMAAYAAAACAAUAAAAMABMAAAACAAMAAAAMABQAAAACAAQAAAAMABUAAAACAAQAAAAMABYAAAACAAQAAAAMABcAAAACAAQAAAAMABgAAAACAAQAAAAMABkAAAABAAAAAAAMABoAAAACAAQAAAAMABsAAAACAAQAAAANAAIAAAACAAQAAAANAAMAAAACAAQAAAANAAUAAAAEAAQAAAANAAYAAAADAAUAAAANAA0AAAAEAAMAAAANABMAAAADAAMAAAANABQAAAAEAAUAAAANABUAAAACAAQAAAANABYAAAACAAQAAAANABcAAAAFAAAAAAANABgAAAADAAAAAAANABkAAAABAAAAAAANABoAAAAFAAAAAAANABsAAAACAAQAAAAOAAIAAAACAAQAAAAOAAMAAAACAAQAAAAOAAUAAAACAAUAAAAOAAwAAAAFAAIAAAAOABQAAAACAAMAAAAOABUAAAACAAQAAAAOABYAAAACAAQAAAAOABcAAAABAAAAAAAOABgAAAACAAQAAAAOABkAAAADAAAAAAAOABoAAAAEAAEAAAAOABsAAAACAAQAAAAPAAIAAAACAAQAAAAPAAMAAAACAAQAAAAPAAwAAAAEAAMAAAAPAA0AAAAFAAMAAAAPABQAAAACAAMAAAAPABUAAAACAAQAAAAPABYAAAACAAQAAAAPABcAAAADAAEAAAAPABgAAAACAAQAAAAPABkAAAADAAAAAAAPABoAAAABAAAAAAAPABsAAAACAAQAAAAQAAIAAAACAAQAAAAQAAMAAAACAAQAAAAQAAQAAAACAAQAAAAQABQAAAACAAMAAAAQABUAAAACAAQAAAAQABYAAAAFAAEAAAAQABcAAAACAAQAAAAQABgAAAADAAEAAAAQABkAAAACAAQAAAAQABoAAAABAAEAAAAQABsAAAACAAQAAAARAAIAAAACAAQAAAARAAMAAAACAAQAAAARAAQAAAACAAQAAAARABQAAAACAAMAAAARABUAAAACAAQAAAARABYAAAAAAAEAAAARABcAAAABAAEAAAARABgAAAACAAAAAAARABkAAAAAAAEAAAARABoAAAADAAEAAAARABsAAAACAAQAAAASAAIAAAACAAQAAAASAAMAAAACAAQAAAASAAQAAAACAAQAAAASAAUAAAAFAAQAAAASABQAAAACAAMAAAASABUAAAACAAQAAAASABYAAAADAAEAAAASABcAAAADAAEAAAASABgAAAACAAQAAAASABkAAAACAAAAAAASABoAAAAEAAAAAAASABsAAAACAAQAAAATAAMAAAACAAQAAAATAAQAAAACAAQAAAATAAUAAAADAAAAAAATABMAAAABAAMAAAATABQAAAAFAAUAAAATABUAAAACAAQAAAATABYAAAAAAAAAAAATABcAAAADAAEAAAATABgAAAADAAEAAAATABkAAAACAAAAAAATABoAAAAEAAAAAAATABsAAAACAAQAAAAUAAMAAAACAAQAAAAUAAQAAAACAAQAAAAUAAUAAAADAAAAAAAVAAMAAAACAAQAAAAVAAQAAAACAAQAAAAVAAUAAAACAAQAAAAVAAYAAAACAAUAAAAWAAMAAAACAAQAAAAWAAQAAAACAAQAAAAWAAUAAAACAAQAAAAWAAYAAAAFAAQAAAAXAAMAAAADAAEAAAAXAAQAAAACAAQAAAAXAAUAAAACAAQAAAAXAAYAAAACAAQAAAAYAAMAAAACAAAAAAAYAAQAAAACAAQAAAAYAAUAAAACAAQAAAAYAAYAAAACAAQAAAAYAAcAAAACAAUAAAAZAAMAAAAFAAEAAAAZAAQAAAACAAQAAAAZAAUAAAACAAQAAAAZAAYAAAACAAQAAAAZAAcAAAACAAUAAAAZAAsAAAAFAAMAAAAaAAMAAAADAAEAAAAaAAQAAAAFAAAAAAAaAAUAAAACAAQAAAAaAAYAAAACAAQAAAAaAAcAAAACAAUAAAAaAAsAAAAEAAIAAAAbAAMAAAADAAAAAAAbAAQAAAAEAAAAAAAbAAUAAAACAAQAAAAbAAYAAAACAAQAAAAbAAcAAAAFAAQAAAAbAAgAAAABAAUAAAAbAAsAAAAFAAMAAAAcAAMAAAAEAAAAAAAcAAQAAAAFAAEAAAAcAAUAAAACAAQAAAAcAAYAAAACAAQAAAAcAAcAAAACAAQAAAAcAAgAAAAFAAQAAAAcAAkAAAABAAUAAAAdAAMAAAAAAAEAAAAdAAQAAAAFAAAAAAAdAAUAAAACAAQAAAAdAAYAAAACAAQAAAAdAAcAAAACAAQAAAAdAAgAAAACAAQAAAAdAAkAAAAFAAQAAAAdAAoAAAABAAQAAAAeAAMAAAADAAEAAAAeAAQAAAABAAEAAAAeAAUAAAACAAQAAAAeAAYAAAACAAQAAAAeAAcAAAACAAQAAAAeAAgAAAACAAQAAAAeAAkAAAACAAQAAAAeAAoAAAACAAQAAAAeAAsAAAACAAUAAAAfAAMAAAAEAAEAAAAfAAQAAAADAAAAAAAfAAUAAAACAAQAAAAfAAYAAAACAAQAAAAfAAcAAAACAAQAAAAfAAgAAAACAAQAAAAfAAkAAAACAAQAAAAfAAoAAAACAAQAAAAfAAsAAAACAAUAAAAgAAMAAAAFAAEAAAAgAAQAAAADAAAAAAAgAAUAAAACAAQAAAAgAAYAAAACAAQAAAAgAAcAAAACAAQAAAAgAAgAAAACAAQAAAAgAAkAAAACAAQAAAAgAAoAAAACAAQAAAAgAAsAAAAFAAQAAAAhAAMAAAACAAAAAAAhAAQAAAAFAAEAAAAhAAUAAAACAAEAAAAhAAYAAAACAAQAAAAhAAcAAAACAAQAAAAhAAgAAAACAAQAAAAhAAkAAAACAAQAAAAhAAoAAAACAAQAAAAhAAsAAAACAAQAAAAiAAMAAAABAAEAAAAiAAQAAAADAAAAAAAiAAUAAAAAAAAAAAAiAAYAAAACAAQAAAAiAAcAAAACAAQAAAAiAAgAAAACAAQAAAAiAAkAAAACAAQAAAAiAAoAAAACAAQAAAAiAAsAAAACAAQAAAAjAAMAAAACAAQAAAAjAAQAAAAFAAEAAAAjAAUAAAAEAAEAAAAjAAYAAAACAAQAAAAjAAcAAAACAAQAAAAjAAgAAAACAAQAAAAjAAkAAAACAAQAAAAjAAoAAAACAAQAAAAjAAsAAAACAAQAAAAkAAMAAAACAAQAAAAkAAQAAAACAAAAAAAkAAUAAAACAAQAAAAkAAYAAAACAAQAAAAkAAcAAAACAAQAAAAkAAgAAAACAAQAAAAkAAkAAAACAAQAAAAkAAoAAAACAAQAAAAkAAsAAAACAAQAAAAlAAMAAAACAAQAAAAlAAQAAAAAAAEAAAAlAAUAAAACAAQAAAAlAAYAAAACAAQAAAAlAAcAAAACAAQAAAAlAAgAAAACAAQAAAAlAAkAAAACAAQAAAAlAAoAAAACAAQAAAAlAAsAAAACAAQAAAAmAAMAAAACAAQAAAAmAAQAAAAEAAEAAAAmAAUAAAACAAQAAAAmAAYAAAACAAQAAAAmAAcAAAACAAQAAAAmAAgAAAACAAQAAAAmAAkAAAACAAQAAAAmAAoAAAACAAQAAAAmAAsAAAACAAEAAAAnAAMAAAACAAQAAAAnAAQAAAADAAEAAAAnAAUAAAACAAQAAAAnAAYAAAACAAQAAAAnAAcAAAACAAQAAAAnAAgAAAACAAQAAAAnAAkAAAACAAQAAAAnAAoAAAACAAQAAAAnAAsAAAADAAAAAAAoAAIAAAACAAQAAAAoAAMAAAACAAQAAAAoAAcAAAACAAQAAAAoAAgAAAACAAQAAAAoAAkAAAACAAQAAAAoAAoAAAACAAQAAAAoAAsAAAADAAAAAAApAAIAAAACAAQAAAApAAMAAAACAAQAAAApAAcAAAACAAQAAAApAAgAAAACAAQAAAApAAkAAAACAAQAAAApAAoAAAACAAQAAAApAAsAAAACAAQAAAAqAAIAAAACAAQAAAAqAAMAAAACAAQAAAAqAAcAAAACAAQAAAAqAAgAAAACAAQAAAAqAAkAAAACAAQAAAAqAAoAAAACAAQAAAAqAAsAAAACAAQAAAArAAIAAAACAAQAAAArAAMAAAACAAQAAAArAAQAAAACAAQAAAArAAUAAAACAAQAAAArAAYAAAACAAQAAAArAAcAAAACAAQAAAArAAgAAAACAAQAAAArAAkAAAACAAQAAAArAAoAAAACAAQAAAArAAsAAAACAAQAAAAsAAIAAAACAAQAAAAsAAMAAAACAAQAAAAsAAQAAAACAAQAAAAsAAUAAAACAAQAAAAsAAYAAAACAAQAAAAsAAcAAAACAAQAAAAsAAgAAAACAAQAAAAsAAkAAAACAAQAAAAsAAoAAAACAAQAAAAsAAsAAAACAAQAAAAtAAIAAAACAAQAAAAtAAMAAAACAAQAAAAtAAQAAAACAAQAAAAtAAUAAAACAAQAAAAtAAYAAAACAAQAAAAtAAcAAAACAAQAAAAtAAgAAAACAAQAAAAtAAkAAAACAAQAAAAtAAoAAAACAAQAAAAtAAsAAAACAAQAAAAuAAIAAAACAAQAAAAuAAMAAAACAAQAAAAuAAQAAAACAAQAAAAuAAUAAAACAAQAAAAuAAYAAAACAAQAAAAuAAcAAAACAAQAAAAuAAgAAAACAAQAAAAuAAkAAAACAAQAAAAuAAoAAAACAAQAAAAuAAsAAAACAAQAAAAvAAIAAAACAAQAAAAvAAMAAAACAAQAAAAvAAQAAAACAAQAAAAvAAUAAAACAAQAAAAvAAYAAAACAAQAAAAvAAcAAAACAAQAAAAvAAgAAAACAAQAAAAvAAkAAAACAAQAAAAvAAoAAAACAAQAAAAvAAsAAAACAAQAAAAwAAIAAAACAAQAAAAwAAMAAAACAAQAAAAwAAQAAAAAAAEAAAAwAAUAAAACAAQAAAAwAAYAAAACAAQAAAAwAAcAAAACAAQAAAAwAAgAAAACAAQAAAAwAAkAAAACAAQAAAAwAAoAAAACAAQAAAAwAAsAAAACAAQAAAAxAAIAAAACAAQAAAAxAAMAAAACAAQAAAAxAAQAAAACAAQAAAAxAAUAAAACAAQAAAAxAAYAAAACAAQAAAAxAAcAAAACAAQAAAAxAAgAAAACAAQAAAAxAAkAAAACAAQAAAAxAAoAAAACAAAAAAAxAAsAAAAFAAEAAAAyAAIAAAACAAQAAAAyAAMAAAACAAQAAAAyAAQAAAACAAQAAAAyAAUAAAACAAQAAAAyAAYAAAACAAQAAAAyAAcAAAACAAQAAAAyAAgAAAACAAQAAAAyAAkAAAADAAAAAAAyAAoAAAADAAAAAAAyAAsAAAACAAQAAAAzAAIAAAACAAQAAAAzAAMAAAAFAAEAAAAzAAQAAAAAAAEAAAAzAAUAAAACAAQAAAAzAAYAAAACAAQAAAAzAAcAAAACAAQAAAAzAAgAAAACAAQAAAAzAAkAAAACAAEAAAAzAAoAAAAEAAAAAAAzAAsAAAACAAAAAAA0AAIAAAACAAQAAAA0AAMAAAAEAAAAAAA0AAQAAAACAAEAAAA0AAUAAAACAAQAAAA0AAYAAAACAAQAAAA0AAcAAAACAAQAAAA0AAgAAAABAAAAAAA0AAkAAAAFAAEAAAA0AAoAAAAAAAAAAAA0AAsAAAAFAAEAAAA0AAwAAAADAAEAAAA0AA0AAAACAAQAAAA0AA4AAAACAAQAAAA0AA8AAAACAAQAAAA0ABAAAAACAAQAAAA0ABEAAAACAAQAAAA0ABIAAAACAAQAAAA0ABMAAAACAAQAAAA0ABQAAAACAAQAAAA0ABUAAAADAAAAAAA0ABYAAAAAAAAAAAA0ABcAAAACAAQAAAA1AAIAAAACAAQAAAA1AAMAAAAEAAEAAAA1AAQAAAAAAAEAAAA1AAUAAAACAAQAAAA1AAYAAAACAAQAAAA1AAcAAAACAAQAAAA1AAgAAAAFAAEAAAA1AAkAAAACAAQAAAA1AAoAAAABAAAAAAA1AAsAAAACAAAAAAA1AAwAAAACAAEAAAA1AA0AAAACAAQAAAA1AA4AAAACAAQAAAA1AA8AAAACAAQAAAA1ABAAAAACAAQAAAA1ABEAAAACAAQAAAA1ABIAAAACAAQAAAA1ABMAAAACAAQAAAA1ABQAAAACAAQAAAA1ABUAAAACAAQAAAA1ABYAAAACAAQAAAA1ABcAAAACAAQAAAA2AAIAAAAAAAAAAAA2AAMAAAADAAEAAAA2AAQAAAADAAAAAAA2AAUAAAADAAEAAAA2AAYAAAACAAQAAAA2AAcAAAACAAQAAAA2AAgAAAABAAAAAAA2AAkAAAACAAQAAAA2AAoAAAADAAAAAAA2AAsAAAAAAAEAAAA2AAwAAAADAAEAAAA2AA0AAAACAAQAAAA2AA4AAAACAAQAAAA2AA8AAAACAAQAAAA2ABAAAAACAAQAAAA2ABEAAAACAAQAAAA2ABIAAAACAAQAAAA2ABMAAAACAAQAAAA2ABQAAAACAAQAAAA2ABUAAAACAAQAAAA2ABYAAAACAAQAAAA2ABcAAAACAAQAAAA3AAIAAAAAAAEAAAA3AAMAAAAAAAAAAAA3AAQAAAAEAAEAAAA3AAUAAAABAAEAAAA3AAYAAAACAAQAAAA3AAcAAAACAAQAAAA3AAgAAAABAAEAAAA3AAkAAAACAAQAAAA3AAoAAAAAAAAAAAA3AAsAAAAFAAEAAAA3AAwAAAAFAAEAAAA3AA0AAAACAAQAAAA3AA4AAAACAAQAAAA3AA8AAAACAAQAAAA3ABAAAAACAAQAAAA3ABEAAAACAAQAAAA3ABIAAAACAAQAAAA3ABMAAAACAAQAAAA3ABQAAAACAAQAAAA3ABUAAAACAAQAAAA3ABYAAAACAAQAAAA3ABcAAAABAAEAAAA4AAIAAAAAAAEAAAA4AAMAAAAAAAAAAAA4AAQAAAAEAAEAAAA4AAUAAAACAAAAAAA4AAYAAAACAAQAAAA4AAcAAAACAAQAAAA4AAgAAAAFAAEAAAA4AAkAAAACAAQAAAA4AAoAAAAAAAEAAAA4AAsAAAABAAAAAAA4AAwAAAACAAQAAAA4AA0AAAACAAQAAAA4AA4AAAACAAQAAAA4AA8AAAACAAQAAAA4ABAAAAACAAQAAAA4ABEAAAACAAQAAAA4ABIAAAACAAQAAAA4ABMAAAACAAQAAAA4ABQAAAACAAQAAAA4ABUAAAACAAQAAAA4ABYAAAACAAQAAAA4ABcAAAAEAAQAAAA5AAIAAAABAAEAAAA5AAMAAAACAAQAAAA5AAQAAAAAAAAAAAA5AAUAAAAEAAEAAAA5AAYAAAACAAQAAAA5AAcAAAACAAQAAAA5AAgAAAAAAAEAAAA5AAkAAAACAAQAAAA5AAoAAAABAAEAAAA5AAsAAAAAAAAAAAA5AAwAAAACAAQAAAA5AA0AAAACAAQAAAA5AA4AAAACAAQAAAA5AA8AAAACAAQAAAA5ABAAAAACAAQAAAA5ABEAAAACAAQAAAA5ABIAAAACAAQAAAA5ABMAAAACAAQAAAA5ABQAAAACAAQAAAA5ABUAAAACAAQAAAA6AAIAAAAFAAAAAAA6AAMAAAACAAQAAAA6AAQAAAAAAAEAAAA6AAUAAAADAAAAAAA6AAYAAAACAAQAAAA6AAcAAAACAAQAAAA6AAgAAAABAAEAAAA6AAkAAAACAAQAAAA6AAoAAAADAAEAAAA6AAsAAAAFAAEAAAA6AAwAAAACAAQAAAA6AA0AAAACAAQAAAA6AA4AAAACAAQAAAA6AA8AAAACAAQAAAA6ABAAAAACAAQAAAA6ABEAAAACAAQAAAA6ABIAAAABAAAAAAA6ABMAAAACAAQAAAA6ABQAAAACAAQAAAA6ABUAAAACAAQAAAA7AAIAAAADAAAAAAA7AAMAAAACAAQAAAA7AAQAAAAAAAAAAAA7AAUAAAADAAAAAAA7AAYAAAACAAQAAAA7AAcAAAACAAQAAAA7AAgAAAADAAEAAAA7AAkAAAAEAAAAAAA7AAoAAAAEAAAAAAA7AAsAAAACAAQAAAA7AAwAAAACAAQAAAA7AA0AAAACAAQAAAA7AA4AAAACAAQAAAA7AA8AAAACAAQAAAA7ABAAAAAAAAAAAAA7ABEAAAACAAQAAAA7ABIAAAAFAAEAAAA7ABMAAAACAAQAAAA7ABQAAAACAAQAAAA7ABUAAAACAAQAAAA8AAIAAAACAAEAAAA8AAMAAAACAAQAAAA8AAQAAAAAAAEAAAA8AAUAAAAAAAEAAAA8AAYAAAACAAQAAAA8AAcAAAACAAQAAAA8AAgAAAAEAAEAAAA8AAkAAAAEAAAAAAA8AAoAAAADAAAAAAA8AAsAAAACAAQAAAA8AAwAAAACAAQAAAA8AA0AAAACAAQAAAA8AA4AAAACAAQAAAA8AA8AAAAEAAAAAAA8ABAAAAABAAAAAAA8ABEAAAACAAQAAAA8ABIAAAADAAEAAAA8ABMAAAACAAQAAAA8ABQAAAACAAQAAAA8ABUAAAACAAQAAAA9AAIAAAACAAQAAAA9AAMAAAACAAQAAAA9AAQAAAACAAQAAAA9AAUAAAAAAAAAAAA9AAYAAAACAAQAAAA9AAcAAAACAAQAAAA9AAgAAAAEAAEAAAA9AAkAAAACAAAAAAA9AAoAAAAEAAAAAAA9AAsAAAACAAQAAAA9AAwAAAACAAQAAAA9AA0AAAACAAQAAAA9AA4AAAACAAQAAAA9AA8AAAAFAAEAAAA9ABAAAAACAAQAAAA9ABEAAAACAAQAAAA9ABIAAAACAAEAAAA9ABMAAAACAAQAAAA9ABQAAAACAAQAAAA9ABUAAAACAAQAAAA+AAIAAAACAAAAAAA+AAMAAAACAAQAAAA+AAQAAAACAAQAAAA+AAUAAAAEAAAAAAA+AAYAAAACAAQAAAA+AAcAAAACAAQAAAA+AAgAAAACAAQAAAA+AAkAAAADAAEAAAA+AAoAAAACAAQAAAA+AAsAAAACAAQAAAA+AAwAAAACAAQAAAA+AA0AAAACAAQAAAA+AA4AAAACAAQAAAA+AA8AAAACAAEAAAA+ABAAAAACAAQAAAA+ABEAAAACAAQAAAA+ABIAAAABAAEAAAA+ABMAAAACAAQAAAA+ABQAAAACAAQAAAA+ABUAAAACAAQAAAA/AAIAAAADAAEAAAA/AAMAAAACAAQAAAA/AAQAAAACAAQAAAA/AAUAAAACAAQAAAA/AAYAAAACAAQAAAA/AAcAAAACAAQAAAA/AAgAAAACAAQAAAA/AAkAAAACAAQAAAA/AAoAAAACAAQAAAA/AAsAAAACAAQAAAA/AAwAAAACAAQAAAA/AA0AAAACAAQAAAA/AA4AAAACAAQAAAA/AA8AAAAAAAEAAAA/ABAAAAACAAQAAAA/ABEAAAACAAQAAAA/ABIAAAACAAQAAAA/ABMAAAACAAQAAAA/ABQAAAACAAQAAAA/ABUAAAACAAQAAABAAAIAAAADAAAAAABAAAMAAAACAAQAAABAAAQAAAACAAQAAABAAAUAAAACAAQAAABAAAYAAAACAAQAAABAAAcAAAACAAQAAABAAAgAAAACAAQAAABAAAkAAAACAAQAAABAAAoAAAACAAQAAABAAAsAAAACAAQAAABAAAwAAAACAAQAAABAAA0AAAACAAQAAABAAA4AAAACAAQAAABAAA8AAAACAAQAAABAABAAAAACAAQAAABAABEAAAAEAAEAAABAABIAAAACAAQAAABAABMAAAACAAQAAABAABQAAAACAAQAAABAABUAAAAAAAEAAABBAAIAAAAAAAAAAABBAAMAAAACAAQAAABBAAQAAAACAAQAAABBAAUAAAACAAQAAABBAAYAAAACAAQAAABBAAcAAAACAAQAAABBAAgAAAACAAQAAABBAAkAAAACAAQAAABBAAoAAAACAAQAAABBAAsAAAACAAQAAABBAAwAAAACAAQAAABBAA0AAAACAAQAAABBAA4AAAACAAQAAABBAA8AAAACAAQAAABBABAAAAACAAQAAABBABEAAAACAAQAAABBABIAAAACAAQAAABBABMAAAACAAQAAABBABQAAAACAAQAAABBABUAAAAEAAEAAABCAAIAAAAEAAAAAABCAAMAAAACAAQAAABCAAQAAAACAAQAAABCAAUAAAACAAQAAABCAAYAAAACAAQAAABCAAcAAAACAAQAAABCAAgAAAACAAQAAABCAAkAAAACAAQAAABCAAoAAAACAAQAAABCAAsAAAACAAQAAABCAAwAAAACAAQAAABCAA0AAAACAAQAAABCAA4AAAACAAQAAABCAA8AAAACAAQAAABCABAAAAACAAQAAABCABEAAAACAAQAAABCABIAAAACAAQAAABCABMAAAACAAQAAABCABQAAAACAAQAAABCABUAAAADAAAAAABDAAIAAAACAAQAAABDAAMAAAACAAQAAABDAAQAAAACAAQAAABDAAUAAAACAAQAAABDAAYAAAACAAQAAABDAAcAAAACAAQAAABDAAgAAAACAAQAAABDAAkAAAACAAQAAABDAAoAAAACAAQAAABDAAsAAAACAAQAAABDAAwAAAACAAQAAABDAA0AAAACAAQAAABDAA4AAAACAAQAAABDAA8AAAACAAQAAABDABAAAAACAAQAAABDABEAAAACAAQAAABDABIAAAACAAQAAABDABMAAAACAAQAAABDABQAAAACAAEAAABDABUAAAAFAAEAAABEAAIAAAACAAQAAABEAAMAAAACAAQAAABEAAQAAAACAAQAAABEAAUAAAACAAQAAABEAAYAAAACAAQAAABEAAcAAAACAAQAAABEAAgAAAACAAQAAABEAAkAAAACAAQAAABEAAoAAAACAAQAAABEAAsAAAACAAQAAABEAAwAAAACAAQAAABEAA0AAAACAAQAAABEAA4AAAACAAQAAABEAA8AAAACAAQAAABEABAAAAACAAQAAABEABEAAAACAAQAAABEABIAAAACAAQAAABEABMAAAACAAQAAABEABQAAAAFAAEAAABEABUAAAACAAAAAABFAAMAAAACAAQAAABFAAQAAAACAAQAAABFAAUAAAACAAQAAABFAAYAAAACAAQAAABFAAcAAAACAAQAAABFAAgAAAACAAQAAABFAAkAAAACAAQAAABFAAoAAAACAAQAAABFAAsAAAACAAQAAABFAAwAAAACAAQAAABFAA0AAAACAAQAAABFAA4AAAACAAQAAABFAA8AAAACAAQAAABFABAAAAACAAQAAABFABEAAAACAAQAAABFABIAAAACAAQAAABFABMAAAACAAQAAABFABQAAAAAAAEAAABFABUAAAACAAQAAAAUABMAAAACAAMAAAAUABQAAAACAAQAAAAVABMAAAADAAMAAAAVABQAAAAEAAUAAAAWAA4AAAAEAAMAAAAXAA8AAAAFAAIAAAAYAA8AAAAFAAMAAAAbAAwAAAAEAAMAAAAdABQAAAACAAQAAAAeABMAAAACAAMAAAAfABMAAAACAAMAAAAfABQAAAADAAAAAAAgAAwAAAABAAUAAAAhAAwAAAACAAUAAAAiAAwAAAAFAAQAAAAiAA0AAAABAAQAAAAjAAwAAAACAAQAAAAjAA0AAAACAAQAAAAWABQAAAACAAMAAAAXABQAAAACAAMAAAAYABQAAAACAAMAAAAZABQAAAACAAMAAAAaABQAAAACAAMAAAAbABQAAAACAAMAAAAcABMAAAABAAMAAAAcABQAAAAFAAUAAAAdABMAAAACAAMAAAAeABQAAAAAAAAAAAAgABIAAAABAAMAAAAgABMAAAAFAAUAAAAgABQAAAACAAAAAAAhABAAAAABAAMAAAAhABEAAAABAAQAAAAhABIAAAAFAAUAAAAhABMAAAAFAAAAAAAhABQAAAAEAAAAAAAiAA4AAAABAAQAAAAiAA8AAAABAAQAAAAiABAAAAAFAAUAAAAiABEAAAACAAQAAAAiABIAAAADAAAAAAAiABMAAAADAAAAAAAiABQAAAACAAQAAAAjAA4AAAACAAQAAAAjAA8AAAACAAQAAAAjABAAAAACAAQAAAAjABEAAAACAAQAAAAjABIAAAADAAEAAAAjABMAAAAAAAEAAAAjABQAAAAEAAEAAAAkAAwAAAACAAQAAAAkAA0AAAACAAQAAAAkAA4AAAACAAQAAAAkAA8AAAACAAQAAAAkABAAAAACAAQAAAAkABEAAAACAAQAAAAkABIAAAACAAQAAAAkABMAAAACAAQAAAAkABQAAAACAAQAAAAkABUAAAACAAQAAAAkABYAAAACAAQAAAAkABcAAAACAAQAAAAkABgAAAABAAEAAAAkABkAAAACAAQAAAAkABoAAAACAAUAAAAlAAwAAAACAAQAAAAlAA0AAAACAAQAAAAlAA4AAAACAAQAAAAlAA8AAAACAAQAAAAlABAAAAACAAQAAAAlABEAAAACAAQAAAAlABIAAAACAAQAAAAlABMAAAACAAQAAAAlABQAAAACAAQAAAAlABUAAAACAAQAAAAlABYAAAACAAQAAAAlABcAAAACAAQAAAAmAAwAAAAFAAEAAAAmAA0AAAACAAQAAAAmAA4AAAACAAQAAAAmAA8AAAACAAQAAAAmABAAAAACAAQAAAAmABEAAAACAAQAAAAmABIAAAACAAQAAAAmABMAAAACAAQAAAAmABQAAAACAAQAAAAmABUAAAACAAQAAAAmABYAAAACAAQAAAAmABcAAAACAAQAAAAnAAwAAAADAAEAAAAnAA0AAAACAAQAAAAnAA4AAAACAAQAAAAnAA8AAAACAAQAAAAnABAAAAACAAQAAAAnABEAAAACAAQAAAAnABIAAAACAAQAAAAnABMAAAACAAQAAAAnABQAAAACAAQAAAAnABUAAAACAAQAAAAnABYAAAACAAQAAAAnABcAAAACAAQAAAAoAAwAAAAAAAAAAAAoAA0AAAACAAQAAAAoAA4AAAACAAQAAAAoAA8AAAACAAQAAAAoABAAAAACAAQAAAAoABEAAAACAAQAAAAoABIAAAACAAQAAAAoABMAAAAAAAAAAAAoABQAAAACAAQAAAAoABUAAAACAAQAAAAoABYAAAACAAQAAAAoABcAAAACAAQAAAApAAwAAAAAAAAAAAApAA0AAAACAAQAAAApAA4AAAACAAQAAAApAA8AAAACAAQAAAApABAAAAACAAQAAAApABEAAAACAAQAAAApABIAAAACAAQAAAApABMAAAADAAAAAAApABQAAAACAAQAAAApABUAAAACAAQAAAApABYAAAACAAQAAAApABcAAAACAAQAAAAqAAwAAAACAAQAAAAqAA0AAAACAAQAAAAqAA4AAAACAAQAAAAqAA8AAAACAAQAAAAqABAAAAACAAQAAAAqABEAAAACAAQAAAAqABIAAAACAAQAAAAqABMAAAABAAAAAAAqABQAAAACAAEAAAAqABUAAAACAAQAAAAqABYAAAACAAQAAAAqABcAAAACAAEAAAArAAwAAAACAAQAAAArAA0AAAACAAQAAAArAA4AAAACAAQAAAArAA8AAAACAAQAAAArABAAAAACAAQAAAArABEAAAACAAQAAAArABIAAAACAAQAAAArABMAAAABAAAAAAArABQAAAADAAAAAAArABUAAAACAAQAAAArABYAAAACAAQAAAArABcAAAACAAEAAAAsAAwAAAACAAQAAAAsAA0AAAACAAQAAAAsAA4AAAACAAQAAAAsAA8AAAACAAQAAAAsABAAAAACAAQAAAAsABEAAAACAAQAAAAsABIAAAABAAAAAAAsABMAAAABAAEAAAAsABQAAAACAAAAAAAsABUAAAACAAQAAAAsABYAAAACAAQAAAAsABcAAAACAAEAAAAtAAwAAAAEAAEAAAAtAA0AAAACAAQAAAAtAA4AAAACAAQAAAAtAA8AAAACAAQAAAAtABAAAAACAAQAAAAtABEAAAACAAQAAAAtABIAAAABAAEAAAAtABMAAAACAAAAAAAtABQAAAADAAAAAAAtABUAAAACAAQAAAAtABYAAAACAAQAAAAtABcAAAACAAQAAAAuAAwAAAACAAQAAAAuAA0AAAACAAQAAAAuAA4AAAACAAQAAAAuAA8AAAACAAQAAAAuABAAAAACAAQAAAAuABEAAAACAAQAAAAuABIAAAACAAAAAAAuABMAAAACAAQAAAAuABQAAAACAAQAAAAuABUAAAACAAQAAAAuABYAAAACAAQAAAAuABcAAAACAAQAAAAvAAwAAAACAAQAAAAvAA0AAAACAAQAAAAvAA4AAAACAAQAAAAvAA8AAAACAAQAAAAvABAAAAACAAQAAAAvABEAAAACAAQAAAAvABIAAAACAAQAAAAvABMAAAACAAQAAAAvABQAAAACAAQAAAAvABUAAAACAAQAAAAvABYAAAACAAQAAAAvABcAAAACAAQAAAAwAAwAAAACAAQAAAAwAA0AAAACAAQAAAAwAA4AAAACAAQAAAAwAA8AAAACAAQAAAAwABAAAAACAAQAAAAwABEAAAACAAQAAAAwABIAAAACAAQAAAAwABMAAAACAAQAAAAwABQAAAACAAQAAAAwABUAAAACAAQAAAAwABYAAAACAAQAAAAwABcAAAACAAQAAAAxAAwAAAACAAQAAAAxAA0AAAACAAQAAAAxAA4AAAACAAQAAAAxAA8AAAACAAQAAAAxABAAAAACAAQAAAAxABEAAAACAAQAAAAxABIAAAACAAQAAAAxABMAAAACAAQAAAAxABQAAAACAAQAAAAxABUAAAACAAQAAAAxABYAAAACAAQAAAAxABcAAAACAAQAAAAyAAwAAAACAAQAAAAyAA0AAAACAAQAAAAyAA4AAAACAAQAAAAyAA8AAAACAAQAAAAyABAAAAACAAQAAAAyABEAAAACAAQAAAAyABIAAAACAAQAAAAyABMAAAACAAQAAAAyABQAAAACAAQAAAAyABUAAAACAAQAAAAyABYAAAACAAQAAAAyABcAAAACAAQAAAAzAAwAAAACAAQAAAAzAA0AAAACAAQAAAAzAA4AAAACAAQAAAAzAA8AAAACAAQAAAAzABAAAAACAAQAAAAzABEAAAACAAQAAAAzABIAAAACAAQAAAAzABMAAAACAAQAAAAzABQAAAACAAQAAAAzABUAAAACAAQAAAAzABYAAAACAAQAAAAzABcAAAACAAQAAAAUABUAAAACAAQAAAAUABYAAAACAAQAAAAUABcAAAACAAQAAAAUABgAAAACAAQAAAAUABkAAAACAAQAAAAUABoAAAACAAQAAAAUABsAAAACAAQAAAAVABUAAAACAAQAAAAVABYAAAACAAQAAAAVABcAAAACAAQAAAAVABgAAAACAAQAAAAVABkAAAACAAQAAAAVABoAAAACAAQAAAAVABsAAAACAAQAAAAWABUAAAACAAQAAAAWABYAAAACAAQAAAAWABcAAAACAAQAAAAWABgAAAACAAQAAAAWABkAAAACAAQAAAAWABoAAAACAAQAAAAWABsAAAACAAQAAAAXABUAAAACAAQAAAAXABYAAAACAAQAAAAXABcAAAACAAQAAAAXABgAAAACAAQAAAAXABkAAAACAAQAAAAXABoAAAACAAQAAAAXABsAAAACAAQAAAAYABUAAAACAAQAAAAYABYAAAACAAQAAAAYABcAAAACAAQAAAAYABgAAAACAAQAAAAYABkAAAACAAQAAAAYABoAAAACAAQAAAAYABsAAAACAAQAAAAZABUAAAACAAQAAAAZABYAAAACAAQAAAAZABcAAAACAAQAAAAZABgAAAACAAQAAAAZABkAAAACAAQAAAAZABoAAAADAAAAAAAZABsAAAACAAQAAAAaABUAAAACAAQAAAAaABYAAAACAAQAAAAaABcAAAACAAQAAAAaABgAAAACAAQAAAAaABkAAAABAAAAAAAaABoAAAACAAAAAAAaABsAAAACAAQAAAAbABUAAAACAAQAAAAbABYAAAACAAQAAAAbABcAAAACAAQAAAAbABgAAAACAAQAAAAbABkAAAADAAAAAAAbABoAAAAAAAEAAAAbABsAAAACAAQAAAAcABUAAAACAAQAAAAcABYAAAACAAQAAAAcABcAAAACAAQAAAAcABgAAAACAAQAAAAcABkAAAACAAQAAAAcABoAAAAEAAQAAAAcABsAAAADAAQAAAAdABUAAAACAAQAAAAdABYAAAACAAQAAAAdABcAAAACAAQAAAAdABgAAAACAAQAAAAdABkAAAACAAQAAAAdABoAAAACAAUAAAAeABUAAAACAAQAAAAeABYAAAACAAQAAAAeABcAAAACAAQAAAAeABgAAAACAAQAAAAeABkAAAACAAQAAAAeABoAAAACAAUAAAAfABUAAAACAAQAAAAfABYAAAACAAQAAAAfABcAAAACAAQAAAAfABgAAAACAAQAAAAfABkAAAACAAQAAAAfABoAAAACAAUAAAAgABUAAAACAAQAAAAgABYAAAACAAQAAAAgABcAAAACAAQAAAAgABgAAAACAAQAAAAgABkAAAACAAQAAAAgABoAAAACAAUAAAAhABUAAAACAAQAAAAhABYAAAACAAQAAAAhABcAAAACAAQAAAAhABgAAAACAAQAAAAhABkAAAACAAQAAAAhABoAAAACAAUAAAAiABUAAAACAAQAAAAiABYAAAACAAQAAAAiABcAAAACAAQAAAAiABgAAAACAAQAAAAiABkAAAACAAQAAAAiABoAAAACAAUAAAAjABUAAAACAAQAAAAjABYAAAACAAQAAAAjABcAAAACAAQAAAAjABgAAAAEAAAAAAAjABkAAAACAAQAAAAjABoAAAACAAUAAAAlABgAAAADAAAAAAAlABkAAAACAAQAAAAlABoAAAACAAUAAAAmABgAAAABAAEAAAAmABkAAAACAAQAAAAmABoAAAACAAUAAAAnABgAAAACAAQAAAAnABkAAAACAAQAAAAnABoAAAACAAUAAAAoABgAAAACAAQAAAAoABkAAAACAAQAAAAoABoAAAACAAUAAAApABgAAAACAAQAAAApABkAAAACAAQAAAApABoAAAACAAUAAAAqABgAAAAEAAAAAAAqABkAAAACAAQAAAAqABoAAAACAAUAAAArABgAAAAFAAAAAAArABkAAAACAAQAAAArABoAAAACAAUAAAAsABgAAAAEAAEAAAAsABkAAAACAAQAAAAsABoAAAACAAUAAAAtABgAAAACAAQAAAAtABkAAAACAAQAAAAtABoAAAACAAUAAAAuABgAAAACAAQAAAAuABkAAAACAAQAAAAuABoAAAACAAUAAAAvABgAAAACAAEAAAAvABkAAAADAAAAAAAvABoAAAACAAUAAAAwABgAAAAFAAAAAAAwABkAAAAEAAEAAAAwABoAAAACAAUAAAAxABgAAAACAAAAAAAxABkAAAAEAAAAAAAxABoAAAACAAUAAAAyABgAAAAEAAAAAAAyABkAAAACAAQAAAAyABoAAAACAAUAAAAzABgAAAAAAAEAAAAzABkAAAACAAQAAAAzABoAAAACAAUAAAA0ABgAAAACAAQAAAA0ABkAAAACAAQAAAA0ABoAAAACAAUAAAA1ABgAAAACAAQAAAA1ABkAAAACAAQAAAA1ABoAAAACAAUAAAA2ABgAAAACAAQAAAA2ABkAAAACAAQAAAA2ABoAAAACAAUAAAA3ABgAAAACAAQAAAA3ABkAAAACAAQAAAA3ABoAAAACAAUAAAA4ABgAAAADAAQAAAA4ABkAAAADAAQAAAA4ABoAAAADAAUAAAA5ABYAAAACAAQAAAA5ABcAAAACAAUAAAA6ABYAAAACAAQAAAA6ABcAAAACAAUAAAA7ABYAAAACAAQAAAA7ABcAAAACAAUAAAA8ABYAAAACAAQAAAA8ABcAAAACAAUAAAA9ABYAAAACAAQAAAA9ABcAAAACAAUAAAA+ABYAAAACAAQAAAA+ABcAAAACAAUAAAA/ABYAAAACAAQAAAA/ABcAAAACAAUAAABAABYAAAACAAQAAABAABcAAAACAAUAAABBABYAAAACAAQAAABBABcAAAACAAUAAABCABYAAAACAAQAAABCABcAAAACAAUAAABDABYAAAACAAQAAABDABcAAAACAAUAAABEABYAAAACAAQAAABEABcAAAACAAUAAABFABYAAAACAAQAAABFABcAAAACAAUAAABGABYAAAACAAQAAABGABcAAAACAAUAAABHABYAAAACAAQAAABHABcAAAACAAUAAAAAABwAAAACAAQAAAAAAB0AAAACAAQAAAABABwAAAACAAQAAAABAB0AAAACAAQAAAACABwAAAACAAQAAAACAB0AAAACAAQAAAADABwAAAACAAQAAAADAB0AAAACAAQAAAAEABwAAAACAAQAAAAEAB0AAAACAAQAAAAFABwAAAACAAQAAAAFAB0AAAACAAQAAAAGABwAAAAAAAAAAAAGAB0AAAACAAQAAAAHABwAAAACAAQAAAAHAB0AAAACAAQAAAAIABwAAAACAAQAAAAIAB0AAAACAAQAAAAJABwAAAACAAQAAAAJAB0AAAACAAQAAAAKABwAAAACAAQAAAAKAB0AAAAEAAQAAAALABwAAAACAAQAAAALAB0AAAACAAUAAAAMABwAAAACAAQAAAAMAB0AAAACAAUAAAANABwAAAACAAQAAAANAB0AAAACAAUAAAAOABwAAAACAAQAAAAOAB0AAAACAAUAAAAPABwAAAACAAQAAAAPAB0AAAACAAUAAAAQABwAAAACAAQAAAAQAB0AAAACAAUAAAARABwAAAACAAQAAAARAB0AAAACAAUAAAASABwAAAACAAQAAAASAB0AAAACAAUAAAATABwAAAACAAQAAAATAB0AAAACAAUAAAAUABwAAAACAAQAAAAUAB0AAAACAAUAAAAVABwAAAACAAQAAAAVAB0AAAACAAUAAAAWABwAAAACAAQAAAAWAB0AAAACAAUAAAAXABwAAAACAAQAAAAXAB0AAAACAAUAAAAYABwAAAACAAQAAAAYAB0AAAACAAUAAAAZABwAAAACAAQAAAAZAB0AAAACAAUAAAAaABwAAAACAAQAAAAaAB0AAAACAAUAAAAbABwAAAACAAQAAAAbAB0AAAACAAUAAAAcABwAAAADAAQAAAAcAB0AAAADAAUAAAAoAAQAAAACAAQAAAAoAAUAAAACAAQAAAAoAAYAAAACAAQAAAApAAQAAAACAAQAAAApAAUAAAACAAQAAAApAAYAAAACAAQAAAAqAAQAAAACAAQAAAAqAAUAAAACAAQAAAAqAAYAAAACAAQAAAAKAB4AAAADAAUAAAAJAB4AAAACAAUAAAAIAB4AAAACAAUAAAAHAB4AAAACAAUAAAAGAB4AAAACAAUAAAAFAB4AAAACAAUAAAAEAB4AAAACAAUAAAADAB4AAAACAAUAAAACAB4AAAACAAUAAAABAB4AAAACAAUAAAAAAB4AAAACAAUAAAA=") +tile_map_data = PackedByteArray("AAACAAEAAAAAAAEAAAACAAIAAAADAAEAAAADAAIAAAACAAQAAAAEAAIAAAACAAQAAAAEAAMAAAACAAQAAAAFAAMAAAACAAQAAAAGAAMAAAACAAQAAAAHAAMAAAACAAQAAAAIAAMAAAACAAQAAAAJAAMAAAACAAQAAAAIAAQAAAAEAAAAAAAJAAQAAAACAAQAAAAKAAQAAAACAAQAAAAKAAMAAAACAAQAAAADAAMAAAACAAQAAAAEAAQAAAACAAQAAAAFAAQAAAACAAQAAAAGAAQAAAACAAQAAAAHAAQAAAABAAEAAAADAAEAAAACAAEAAAAFAAIAAAACAAQAAAAGAAIAAAACAAQAAAAHAAIAAAACAAQAAAAIAAIAAAACAAQAAAALAAMAAAACAAQAAAALAAQAAAAEAAAAAAAMAAMAAAACAAQAAAAAAAAAAAACAAQAAAABAAAAAAACAAQAAAABAAEAAAACAAQAAAAEAAEAAAACAAQAAAAFAAEAAAACAAQAAAAGAAEAAAACAAQAAAAJAAIAAAACAAQAAAAMAAQAAAAFAAAAAAANAAQAAAABAAEAAAAOAAQAAAACAAQAAAAPAAQAAAACAAQAAAAPAAUAAAACAAUAAAAQAAUAAAACAAUAAAARAAUAAAACAAUAAAASAAYAAAABAAUAAAATAAYAAAACAAUAAAAUAAYAAAACAAUAAAAWAAcAAAABAAUAAAAXAAcAAAACAAUAAAAdAAsAAAABAAUAAABGABUAAAACAAQAAABGABQAAAACAAQAAABGABMAAAACAAQAAABGABIAAAACAAQAAABGABEAAAACAAQAAABGABAAAAACAAQAAABGAA8AAAACAAQAAABGAA4AAAACAAQAAABGAA0AAAACAAQAAABGAAwAAAACAAQAAABGAAsAAAACAAQAAABGAAoAAAACAAQAAABGAAkAAAACAAQAAABGAAgAAAACAAQAAABGAAcAAAACAAQAAABHAAcAAAACAAQAAABHAAYAAAACAAQAAABHAAUAAAACAAQAAABHAAQAAAACAAQAAABHAAMAAAACAAQAAABHAAIAAAACAAQAAABHAAEAAAACAAQAAABHAAAAAAACAAQAAABHAAgAAAACAAQAAABHAAkAAAACAAQAAABHAAoAAAACAAQAAABHAAsAAAACAAQAAABHAAwAAAACAAQAAABHAA0AAAACAAQAAABHAA4AAAACAAQAAABHAA8AAAACAAQAAABHABAAAAACAAQAAABHABEAAAACAAQAAABHABIAAAACAAQAAABHABMAAAACAAQAAABHABQAAAACAAQAAABHABUAAAACAAQAAAAAABsAAAACAAQAAAAAABoAAAACAAQAAAAAABkAAAACAAQAAAAAABgAAAACAAQAAAAAABcAAAACAAQAAAAAABYAAAACAAQAAAAAABUAAAACAAQAAAAAABQAAAACAAQAAAAAABMAAAACAAQAAAAAABIAAAACAAQAAAAAABEAAAACAAQAAAAAABAAAAACAAQAAAAAAA8AAAACAAQAAAAAAA4AAAACAAQAAAAAAA0AAAACAAQAAAAAAAwAAAACAAQAAAAAAAsAAAACAAQAAAAAAAoAAAACAAQAAAAAAAkAAAACAAQAAAAAAAgAAAACAAQAAAAAAAcAAAACAAQAAAAAAAYAAAACAAQAAAAAAAUAAAACAAQAAAAAAAQAAAACAAQAAAAAAAMAAAACAAQAAAAAAAIAAAACAAQAAAAAAAEAAAACAAQAAAACAAAAAAACAAQAAAADAAAAAAACAAQAAAAEAAAAAAACAAQAAAAFAAAAAAACAAQAAAAGAAAAAAACAAQAAAAHAAAAAAACAAQAAAAIAAAAAAACAAQAAAAJAAAAAAACAAQAAAAKAAAAAAACAAQAAAALAAAAAAACAAQAAAAMAAAAAAACAAQAAAANAAAAAAACAAQAAAAOAAAAAAACAAQAAAAPAAAAAAACAAQAAAAQAAAAAAACAAQAAAARAAAAAAACAAQAAAASAAAAAAACAAQAAAATAAAAAAACAAQAAAAUAAAAAAACAAQAAAAVAAAAAAACAAQAAAAWAAAAAAACAAQAAAAXAAAAAAACAAQAAAAYAAAAAAACAAQAAAAZAAAAAAACAAQAAAAaAAAAAAACAAQAAAAbAAAAAAACAAQAAAAcAAAAAAACAAQAAAAdAAAAAAACAAQAAAAeAAAAAAACAAQAAAAfAAAAAAACAAQAAAAgAAAAAAACAAQAAAAhAAAAAAACAAQAAAAiAAAAAAACAAQAAAAjAAAAAAACAAQAAAAkAAAAAAACAAQAAAAlAAAAAAACAAQAAAAmAAAAAAACAAQAAAAnAAAAAAACAAQAAAAoAAAAAAACAAQAAAApAAAAAAACAAQAAAAqAAAAAAACAAQAAAArAAAAAAACAAQAAAAsAAAAAAACAAQAAAAtAAAAAAACAAQAAAAuAAAAAAACAAQAAAAvAAAAAAACAAQAAAAwAAAAAAACAAQAAAAxAAAAAAACAAQAAAAyAAAAAAACAAQAAAAzAAAAAAACAAQAAAA0AAAAAAACAAQAAAA1AAAAAAACAAQAAAA2AAAAAAACAAQAAAA3AAAAAAACAAQAAAA4AAAAAAACAAQAAAA5AAAAAAACAAQAAAA6AAAAAAACAAQAAAA7AAAAAAACAAQAAAA8AAAAAAACAAQAAAA9AAAAAAACAAQAAAA+AAAAAAACAAQAAAA/AAAAAAACAAQAAABAAAAAAAACAAQAAABBAAAAAAACAAQAAABCAAAAAAACAAQAAABDAAAAAAACAAQAAABEAAAAAAACAAQAAABFAAAAAAACAAQAAABGAAEAAAACAAQAAABGAAAAAAACAAQAAAAHAAEAAAACAAQAAAAIAAEAAAACAAQAAAAJAAEAAAACAAQAAAAKAAEAAAACAAQAAAALAAEAAAACAAQAAAAMAAEAAAACAAQAAAANAAEAAAACAAQAAAAOAAEAAAACAAQAAAAPAAEAAAACAAQAAAAQAAEAAAACAAQAAAARAAEAAAACAAQAAAASAAEAAAACAAQAAAATAAEAAAACAAQAAAATAAIAAAACAAQAAAAUAAIAAAACAAQAAAAVAAIAAAACAAQAAAAWAAIAAAACAAQAAAAXAAIAAAACAAQAAAAYAAIAAAACAAQAAAAZAAIAAAACAAQAAAAaAAIAAAACAAQAAAAbAAIAAAACAAQAAAAcAAIAAAACAAQAAAAdAAIAAAACAAQAAAAeAAIAAAACAAQAAAAfAAIAAAACAAQAAAAgAAIAAAACAAQAAAAhAAIAAAACAAQAAAAiAAIAAAACAAQAAAAjAAIAAAACAAQAAAAkAAIAAAACAAQAAAAlAAIAAAACAAQAAAAmAAIAAAACAAQAAAAnAAIAAAACAAQAAAAgAAEAAAACAAQAAAAfAAEAAAACAAQAAAAeAAEAAAACAAQAAAAdAAEAAAACAAQAAAAcAAEAAAACAAQAAAAbAAEAAAACAAQAAAAaAAEAAAACAAQAAAAZAAEAAAACAAQAAAAYAAEAAAACAAQAAAAXAAEAAAACAAQAAAAWAAEAAAACAAQAAAAVAAEAAAACAAQAAAAUAAEAAAACAAQAAAAhAAEAAAACAAQAAAAiAAEAAAACAAQAAAAjAAEAAAACAAQAAAAkAAEAAAACAAQAAAAlAAEAAAACAAQAAAAmAAEAAAACAAQAAAAnAAEAAAACAAQAAAAoAAEAAAACAAQAAAApAAEAAAACAAQAAAAqAAEAAAACAAQAAAArAAEAAAACAAQAAAAsAAEAAAACAAQAAAAtAAEAAAACAAQAAAAuAAEAAAACAAQAAAAvAAEAAAACAAQAAAAwAAEAAAACAAQAAAAxAAEAAAACAAQAAAAyAAEAAAACAAQAAAAzAAEAAAACAAQAAAA0AAEAAAACAAQAAAA1AAEAAAACAAQAAAA2AAEAAAACAAQAAAA3AAEAAAACAAQAAAA4AAEAAAACAAQAAAA5AAEAAAACAAQAAAA6AAEAAAACAAQAAAA7AAEAAAACAAQAAAA8AAEAAAACAAQAAAA9AAEAAAACAAQAAAA+AAEAAAACAAQAAAA/AAEAAAACAAQAAABAAAEAAAACAAQAAABBAAEAAAACAAQAAABCAAEAAAACAAQAAABDAAEAAAACAAQAAABEAAEAAAACAAQAAABFAAEAAAACAAQAAABFAAIAAAACAAQAAABGAAIAAAACAAQAAABGAAMAAAACAAQAAABGAAQAAAACAAQAAABGAAUAAAACAAQAAABGAAYAAAACAAQAAAABAAIAAAACAAQAAAABAAMAAAACAAQAAAABAAQAAAACAAQAAAABAAUAAAACAAQAAAABAAYAAAACAAQAAAABAAcAAAACAAQAAAABAAgAAAACAAQAAAABAAkAAAACAAQAAAABAAoAAAACAAQAAAABAAsAAAACAAQAAAABAAwAAAACAAQAAAABAA0AAAACAAQAAAABAA4AAAACAAQAAAABAA8AAAACAAQAAAABABAAAAACAAQAAAABABEAAAACAAQAAAABABIAAAACAAQAAAABABMAAAACAAQAAAABABQAAAACAAQAAAABABUAAAACAAQAAAABABYAAAACAAQAAAABABcAAAACAAQAAAABABgAAAACAAQAAAABABkAAAACAAQAAAABABoAAAACAAQAAAABABsAAAACAAQAAAACAAMAAAACAAQAAAACAAQAAAACAAQAAAACAAUAAAACAAQAAAACAAYAAAACAAEAAAACAAcAAAABAAAAAAACAAgAAAAFAAAAAAACAAkAAAACAAQAAAACAAoAAAACAAQAAAACAAsAAAACAAQAAAACAAwAAAACAAQAAAACAA0AAAACAAQAAAACAA4AAAACAAQAAAACAA8AAAACAAQAAAACABAAAAACAAQAAAACABEAAAACAAQAAAACABIAAAACAAQAAAACABMAAAACAAQAAAACABQAAAACAAQAAAACABUAAAACAAQAAAACABYAAAACAAQAAAACABcAAAACAAQAAAACABgAAAACAAQAAAACABkAAAACAAQAAAACABoAAAACAAQAAAACABsAAAACAAQAAAADAAQAAAACAAQAAAADAAUAAAACAAQAAAADAAYAAAACAAQAAAADAAcAAAABAAEAAAADAAgAAAACAAQAAAADAAkAAAAFAAEAAAADAAoAAAAFAAEAAAADAAsAAAACAAQAAAADAAwAAAACAAQAAAADAA0AAAACAAQAAAADAA4AAAACAAQAAAADAA8AAAACAAQAAAADABAAAAACAAQAAAADABEAAAACAAQAAAADABIAAAACAAQAAAADABMAAAACAAQAAAADABQAAAACAAQAAAADABUAAAACAAQAAAADABYAAAACAAQAAAADABcAAAACAAQAAAADABgAAAACAAQAAAADABkAAAACAAQAAAADABoAAAACAAQAAAADABsAAAAEAAAAAAAEAAUAAAACAAQAAAAEAAYAAAACAAQAAAAEAAcAAAACAAQAAAAEAAgAAAACAAQAAAAEAAkAAAACAAQAAAAEAAoAAAACAAQAAAAEAAsAAAACAAQAAAAEAAwAAAACAAQAAAAEAA0AAAACAAQAAAAEAA4AAAACAAQAAAAEAA8AAAAAAAAAAAAEABAAAAAEAAAAAAAEABEAAAACAAAAAAAEABIAAAACAAAAAAAEABMAAAADAAAAAAAEABQAAAACAAQAAAAEABUAAAACAAQAAAAEABYAAAACAAQAAAAEABcAAAACAAQAAAAEABgAAAACAAQAAAAEABkAAAACAAQAAAAEABoAAAACAAQAAAAEABsAAAACAAAAAAAFAAUAAAACAAQAAAAFAAYAAAACAAQAAAAFAAcAAAACAAQAAAAFAAgAAAACAAQAAAAFAAkAAAACAAQAAAAFAAoAAAAEAAQAAAAFAAsAAAADAAQAAAAFAAwAAAADAAQAAAAFAA0AAAADAAQAAAAFAA4AAAADAAQAAAAFAA8AAAADAAQAAAAFABAAAAADAAQAAAAFABEAAAAEAAUAAAAFABIAAAADAAAAAAAFABMAAAABAAEAAAAFABQAAAACAAQAAAAFABUAAAACAAQAAAAFABYAAAACAAQAAAAFABcAAAACAAQAAAAFABgAAAACAAQAAAAFABkAAAACAAQAAAAFABoAAAACAAAAAAAFABsAAAAEAAEAAAAGAAUAAAACAAQAAAAGAAYAAAACAAQAAAAGAAcAAAACAAQAAAAGAAgAAAACAAQAAAAGAAkAAAACAAQAAAAGAAoAAAACAAUAAAAGABEAAAADAAMAAAAGABIAAAAEAAUAAAAGABMAAAAEAAAAAAAGABQAAAACAAQAAAAGABUAAAACAAQAAAAGABYAAAACAAQAAAAGABcAAAACAAQAAAAGABgAAAACAAQAAAAGABkAAAACAAQAAAAGABoAAAACAAQAAAAGABsAAAACAAEAAAAHAAUAAAACAAQAAAAHAAYAAAACAAQAAAAHAAcAAAACAAQAAAAHAAgAAAACAAQAAAAHAAkAAAAEAAQAAAAHAAoAAAADAAUAAAAHABIAAAACAAMAAAAHABMAAAACAAQAAAAHABQAAAACAAQAAAAHABUAAAACAAQAAAAHABYAAAACAAQAAAAHABcAAAACAAQAAAAHABgAAAACAAQAAAAHABkAAAACAAQAAAAHABoAAAACAAQAAAAHABsAAAAAAAAAAAAIAAUAAAACAAQAAAAIAAYAAAACAAQAAAAIAAcAAAACAAQAAAAIAAgAAAACAAQAAAAIAAkAAAACAAUAAAAIABIAAAADAAMAAAAIABMAAAAEAAUAAAAIABQAAAACAAQAAAAIABUAAAACAAQAAAAIABYAAAACAAQAAAAIABcAAAACAAQAAAAIABgAAAACAAQAAAAIABkAAAACAAQAAAAIABoAAAACAAQAAAAIABsAAAACAAQAAAAJAAUAAAACAAQAAAAJAAYAAAACAAQAAAAJAAcAAAACAAQAAAAJAAgAAAACAAQAAAAJAAkAAAACAAUAAAAJABMAAAACAAMAAAAJABQAAAACAAQAAAAJABUAAAACAAQAAAAJABYAAAACAAQAAAAJABcAAAACAAQAAAAJABgAAAACAAQAAAAJABkAAAACAAQAAAAJABoAAAACAAQAAAAJABsAAAACAAQAAAAKAAIAAAACAAQAAAAKAAUAAAACAAQAAAAKAAYAAAACAAQAAAAKAAcAAAACAAQAAAAKAAgAAAAEAAQAAAAKAAkAAAADAAUAAAAKABMAAAACAAMAAAAKABQAAAACAAQAAAAKABUAAAACAAQAAAAKABYAAAACAAQAAAAKABcAAAACAAQAAAAKABgAAAACAAQAAAAKABkAAAACAAQAAAAKABoAAAACAAQAAAAKABsAAAACAAQAAAALAAIAAAACAAQAAAALAAUAAAACAAQAAAALAAYAAAAEAAQAAAALAAcAAAADAAQAAAALAAgAAAADAAUAAAALABMAAAACAAMAAAALABQAAAACAAQAAAALABUAAAACAAQAAAALABYAAAACAAQAAAALABcAAAACAAQAAAALABgAAAACAAQAAAALABkAAAACAAQAAAALABoAAAACAAQAAAALABsAAAACAAQAAAAMAAIAAAACAAQAAAAMAAUAAAACAAQAAAAMAAYAAAACAAUAAAAMABMAAAACAAMAAAAMABQAAAACAAQAAAAMABUAAAACAAQAAAAMABYAAAACAAQAAAAMABcAAAACAAQAAAAMABgAAAACAAQAAAAMABkAAAABAAAAAAAMABoAAAACAAQAAAAMABsAAAACAAQAAAANAAIAAAACAAQAAAANAAMAAAACAAQAAAANAAUAAAAEAAQAAAANAAYAAAADAAUAAAANAA0AAAAEAAMAAAANABMAAAADAAMAAAANABQAAAAEAAUAAAANABUAAAACAAQAAAANABYAAAACAAQAAAANABcAAAAFAAAAAAANABgAAAADAAAAAAANABkAAAABAAAAAAANABoAAAAFAAAAAAANABsAAAACAAQAAAAOAAIAAAACAAQAAAAOAAMAAAACAAQAAAAOAAUAAAACAAUAAAAOAAwAAAAFAAIAAAAOABQAAAACAAMAAAAOABUAAAACAAQAAAAOABYAAAACAAQAAAAOABcAAAABAAAAAAAOABgAAAACAAQAAAAOABkAAAADAAAAAAAOABoAAAAEAAEAAAAOABsAAAACAAQAAAAPAAIAAAACAAQAAAAPAAMAAAACAAQAAAAPAAwAAAAEAAMAAAAPAA0AAAAFAAMAAAAPABQAAAACAAMAAAAPABUAAAACAAQAAAAPABYAAAACAAQAAAAPABcAAAADAAEAAAAPABgAAAACAAQAAAAPABkAAAADAAAAAAAPABoAAAABAAAAAAAPABsAAAACAAQAAAAQAAIAAAACAAQAAAAQAAMAAAACAAQAAAAQAAQAAAACAAQAAAAQABQAAAACAAMAAAAQABUAAAACAAQAAAAQABYAAAAFAAEAAAAQABcAAAACAAQAAAAQABgAAAADAAEAAAAQABkAAAACAAQAAAAQABoAAAABAAEAAAAQABsAAAACAAQAAAARAAIAAAACAAQAAAARAAMAAAACAAQAAAARAAQAAAACAAQAAAARABQAAAACAAMAAAARABUAAAACAAQAAAARABYAAAAAAAEAAAARABcAAAABAAEAAAARABgAAAACAAAAAAARABkAAAAAAAEAAAARABoAAAADAAEAAAARABsAAAACAAQAAAASAAIAAAACAAQAAAASAAMAAAACAAQAAAASAAQAAAACAAQAAAASAAUAAAAFAAQAAAASABQAAAACAAMAAAASABUAAAACAAQAAAASABYAAAADAAEAAAASABcAAAADAAEAAAASABgAAAACAAQAAAASABkAAAACAAAAAAASABoAAAAEAAAAAAASABsAAAACAAQAAAATAAMAAAACAAQAAAATAAQAAAACAAQAAAATAAUAAAADAAAAAAATABMAAAABAAMAAAATABQAAAAFAAUAAAATABUAAAACAAQAAAATABYAAAAAAAAAAAATABcAAAADAAEAAAATABgAAAADAAEAAAATABkAAAACAAAAAAATABoAAAAEAAAAAAATABsAAAACAAQAAAAUAAMAAAACAAQAAAAUAAQAAAACAAQAAAAUAAUAAAADAAAAAAAVAAMAAAACAAQAAAAVAAQAAAACAAQAAAAVAAUAAAACAAQAAAAVAAYAAAACAAUAAAAWAAMAAAACAAQAAAAWAAQAAAACAAQAAAAWAAUAAAACAAQAAAAWAAYAAAAFAAQAAAAXAAMAAAADAAEAAAAXAAQAAAACAAQAAAAXAAUAAAACAAQAAAAXAAYAAAACAAQAAAAYAAMAAAACAAAAAAAYAAQAAAACAAQAAAAYAAUAAAACAAQAAAAYAAYAAAACAAQAAAAYAAcAAAACAAUAAAAZAAMAAAAFAAEAAAAZAAQAAAACAAQAAAAZAAUAAAACAAQAAAAZAAYAAAACAAQAAAAZAAcAAAACAAUAAAAZAAsAAAAFAAMAAAAaAAMAAAADAAEAAAAaAAQAAAAFAAAAAAAaAAUAAAACAAQAAAAaAAYAAAACAAQAAAAaAAcAAAACAAUAAAAaAAsAAAAEAAIAAAAbAAMAAAADAAAAAAAbAAQAAAAEAAAAAAAbAAUAAAACAAQAAAAbAAYAAAACAAQAAAAbAAcAAAAFAAQAAAAbAAgAAAABAAUAAAAbAAsAAAAFAAMAAAAcAAMAAAAEAAAAAAAcAAQAAAAFAAEAAAAcAAUAAAACAAQAAAAcAAYAAAACAAQAAAAcAAcAAAACAAQAAAAcAAgAAAAFAAQAAAAcAAkAAAABAAUAAAAdAAMAAAAAAAEAAAAdAAQAAAAFAAAAAAAdAAUAAAACAAQAAAAdAAYAAAACAAQAAAAdAAcAAAACAAQAAAAdAAgAAAACAAQAAAAdAAkAAAAFAAQAAAAdAAoAAAABAAQAAAAeAAMAAAADAAEAAAAeAAQAAAABAAEAAAAeAAUAAAACAAQAAAAeAAYAAAACAAQAAAAeAAcAAAACAAQAAAAeAAgAAAACAAQAAAAeAAkAAAACAAQAAAAeAAoAAAACAAQAAAAeAAsAAAACAAUAAAAfAAMAAAAEAAEAAAAfAAQAAAADAAAAAAAfAAUAAAACAAQAAAAfAAYAAAACAAQAAAAfAAcAAAACAAQAAAAfAAgAAAACAAQAAAAfAAkAAAACAAQAAAAfAAoAAAACAAQAAAAfAAsAAAACAAUAAAAgAAMAAAAFAAEAAAAgAAQAAAADAAAAAAAgAAUAAAACAAQAAAAgAAYAAAACAAQAAAAgAAcAAAACAAQAAAAgAAgAAAACAAQAAAAgAAkAAAACAAQAAAAgAAoAAAACAAQAAAAgAAsAAAAFAAQAAAAhAAMAAAACAAAAAAAhAAQAAAAFAAEAAAAhAAUAAAACAAEAAAAhAAYAAAACAAQAAAAhAAcAAAACAAQAAAAhAAgAAAACAAQAAAAhAAkAAAACAAQAAAAhAAoAAAACAAQAAAAhAAsAAAACAAQAAAAiAAMAAAABAAEAAAAiAAQAAAADAAAAAAAiAAUAAAAAAAAAAAAiAAYAAAACAAQAAAAiAAcAAAACAAQAAAAiAAgAAAACAAQAAAAiAAkAAAACAAQAAAAiAAoAAAACAAQAAAAiAAsAAAACAAQAAAAjAAMAAAACAAQAAAAjAAQAAAAFAAEAAAAjAAUAAAAEAAEAAAAjAAYAAAACAAQAAAAjAAcAAAACAAQAAAAjAAgAAAACAAQAAAAjAAkAAAACAAQAAAAjAAoAAAACAAQAAAAjAAsAAAACAAQAAAAkAAMAAAACAAQAAAAkAAQAAAACAAAAAAAkAAUAAAACAAQAAAAkAAYAAAACAAQAAAAkAAcAAAACAAQAAAAkAAgAAAACAAQAAAAkAAkAAAACAAQAAAAkAAoAAAACAAQAAAAkAAsAAAACAAQAAAAlAAMAAAACAAQAAAAlAAQAAAAAAAEAAAAlAAUAAAACAAQAAAAlAAYAAAACAAQAAAAlAAcAAAACAAQAAAAlAAgAAAACAAQAAAAlAAkAAAACAAQAAAAlAAoAAAACAAQAAAAlAAsAAAACAAQAAAAmAAMAAAACAAQAAAAmAAQAAAAEAAEAAAAmAAUAAAACAAQAAAAmAAYAAAACAAQAAAAmAAcAAAACAAQAAAAmAAgAAAACAAQAAAAmAAkAAAACAAQAAAAmAAoAAAACAAQAAAAmAAsAAAACAAEAAAAnAAMAAAACAAQAAAAnAAQAAAADAAEAAAAnAAUAAAACAAQAAAAnAAYAAAACAAQAAAAnAAcAAAACAAQAAAAnAAgAAAACAAQAAAAnAAkAAAACAAQAAAAnAAoAAAACAAQAAAAnAAsAAAADAAAAAAAoAAIAAAACAAQAAAAoAAMAAAACAAQAAAAoAAcAAAACAAQAAAAoAAgAAAACAAQAAAAoAAkAAAACAAQAAAAoAAoAAAACAAQAAAAoAAsAAAADAAAAAAApAAIAAAACAAQAAAApAAMAAAACAAQAAAApAAcAAAACAAQAAAApAAgAAAACAAQAAAApAAkAAAACAAQAAAApAAoAAAACAAQAAAApAAsAAAACAAQAAAAqAAIAAAACAAQAAAAqAAMAAAACAAQAAAAqAAcAAAACAAQAAAAqAAgAAAACAAQAAAAqAAkAAAACAAQAAAAqAAoAAAACAAQAAAAqAAsAAAACAAQAAAArAAIAAAACAAQAAAArAAMAAAACAAQAAAArAAQAAAACAAQAAAArAAUAAAACAAQAAAArAAYAAAACAAQAAAArAAcAAAACAAQAAAArAAgAAAACAAQAAAArAAkAAAACAAQAAAArAAoAAAACAAQAAAArAAsAAAACAAQAAAAsAAIAAAACAAQAAAAsAAMAAAACAAQAAAAsAAQAAAACAAQAAAAsAAUAAAACAAQAAAAsAAYAAAACAAQAAAAsAAcAAAACAAQAAAAsAAgAAAACAAQAAAAsAAkAAAACAAQAAAAsAAoAAAACAAQAAAAsAAsAAAACAAQAAAAtAAIAAAACAAQAAAAtAAMAAAACAAQAAAAtAAQAAAACAAQAAAAtAAUAAAACAAQAAAAtAAYAAAACAAQAAAAtAAcAAAACAAQAAAAtAAgAAAACAAQAAAAtAAkAAAACAAQAAAAtAAoAAAACAAQAAAAtAAsAAAACAAQAAAAuAAIAAAACAAQAAAAuAAMAAAACAAQAAAAuAAQAAAACAAQAAAAuAAUAAAACAAQAAAAuAAYAAAACAAQAAAAuAAcAAAACAAQAAAAuAAgAAAACAAQAAAAuAAkAAAACAAQAAAAuAAoAAAACAAQAAAAuAAsAAAACAAQAAAAvAAIAAAACAAQAAAAvAAMAAAACAAQAAAAvAAQAAAACAAQAAAAvAAUAAAACAAQAAAAvAAYAAAACAAQAAAAvAAcAAAACAAQAAAAvAAgAAAACAAQAAAAvAAkAAAACAAQAAAAvAAoAAAACAAQAAAAvAAsAAAACAAQAAAAwAAIAAAACAAQAAAAwAAMAAAACAAQAAAAwAAQAAAAAAAEAAAAwAAUAAAACAAQAAAAwAAYAAAACAAQAAAAwAAcAAAACAAQAAAAwAAgAAAACAAQAAAAwAAkAAAACAAQAAAAwAAoAAAACAAQAAAAwAAsAAAACAAQAAAAxAAIAAAACAAQAAAAxAAMAAAACAAQAAAAxAAQAAAACAAQAAAAxAAUAAAACAAQAAAAxAAYAAAACAAQAAAAxAAcAAAACAAQAAAAxAAgAAAACAAQAAAAxAAkAAAACAAQAAAAxAAoAAAACAAAAAAAxAAsAAAAFAAEAAAAyAAIAAAACAAQAAAAyAAMAAAACAAQAAAAyAAQAAAACAAQAAAAyAAUAAAACAAQAAAAyAAYAAAACAAQAAAAyAAcAAAACAAQAAAAyAAgAAAACAAQAAAAyAAkAAAADAAAAAAAyAAoAAAADAAAAAAAyAAsAAAACAAQAAAAzAAIAAAACAAQAAAAzAAMAAAAFAAEAAAAzAAQAAAAAAAEAAAAzAAUAAAACAAQAAAAzAAYAAAACAAQAAAAzAAcAAAACAAQAAAAzAAgAAAACAAQAAAAzAAkAAAACAAEAAAAzAAoAAAAEAAAAAAAzAAsAAAACAAAAAAA0AAIAAAACAAQAAAA0AAMAAAAEAAAAAAA0AAQAAAACAAEAAAA0AAUAAAACAAQAAAA0AAYAAAACAAQAAAA0AAcAAAACAAQAAAA0AAgAAAABAAAAAAA0AAkAAAAFAAEAAAA0AAoAAAAAAAAAAAA0AAsAAAAFAAEAAAA0AAwAAAADAAEAAAA0AA0AAAACAAQAAAA0AA4AAAACAAQAAAA0AA8AAAACAAQAAAA0ABAAAAACAAQAAAA0ABEAAAACAAQAAAA0ABIAAAACAAQAAAA0ABMAAAACAAQAAAA0ABQAAAACAAQAAAA0ABUAAAADAAAAAAA0ABYAAAAAAAAAAAA0ABcAAAACAAQAAAA1AAIAAAACAAQAAAA1AAMAAAAEAAEAAAA1AAQAAAAAAAEAAAA1AAUAAAACAAQAAAA1AAYAAAACAAQAAAA1AAcAAAACAAQAAAA1AAgAAAAFAAEAAAA1AAkAAAACAAQAAAA1AAoAAAABAAAAAAA1AAsAAAACAAAAAAA1AAwAAAACAAEAAAA1AA0AAAACAAQAAAA1AA4AAAACAAQAAAA1AA8AAAACAAQAAAA1ABAAAAACAAQAAAA1ABEAAAACAAQAAAA1ABIAAAACAAQAAAA1ABMAAAACAAQAAAA1ABQAAAACAAQAAAA1ABUAAAACAAQAAAA1ABYAAAACAAQAAAA1ABcAAAACAAQAAAA2AAIAAAAAAAAAAAA2AAMAAAADAAEAAAA2AAQAAAADAAAAAAA2AAUAAAADAAEAAAA2AAYAAAACAAQAAAA2AAcAAAACAAQAAAA2AAgAAAABAAAAAAA2AAkAAAACAAQAAAA2AAoAAAADAAAAAAA2AAsAAAAAAAEAAAA2AAwAAAADAAEAAAA2AA0AAAACAAQAAAA2AA4AAAACAAQAAAA2AA8AAAACAAQAAAA2ABAAAAACAAQAAAA2ABEAAAACAAQAAAA2ABIAAAACAAQAAAA2ABMAAAACAAQAAAA2ABQAAAACAAQAAAA2ABUAAAACAAQAAAA2ABYAAAACAAQAAAA2ABcAAAACAAQAAAA3AAIAAAAAAAEAAAA3AAMAAAAAAAAAAAA3AAQAAAAEAAEAAAA3AAUAAAABAAEAAAA3AAYAAAACAAQAAAA3AAcAAAACAAQAAAA3AAgAAAABAAEAAAA3AAkAAAACAAQAAAA3AAoAAAAAAAAAAAA3AAsAAAAFAAEAAAA3AAwAAAAFAAEAAAA3AA0AAAACAAQAAAA3AA4AAAACAAQAAAA3AA8AAAACAAQAAAA3ABAAAAACAAQAAAA3ABEAAAACAAQAAAA3ABIAAAACAAQAAAA3ABMAAAACAAQAAAA3ABQAAAACAAQAAAA3ABUAAAACAAQAAAA3ABYAAAACAAQAAAA3ABcAAAABAAEAAAA4AAIAAAAAAAEAAAA4AAMAAAAAAAAAAAA4AAQAAAAEAAEAAAA4AAUAAAACAAAAAAA4AAYAAAACAAQAAAA4AAcAAAACAAQAAAA4AAgAAAAFAAEAAAA4AAkAAAACAAQAAAA4AAoAAAAAAAEAAAA4AAsAAAABAAAAAAA4AAwAAAACAAQAAAA4AA0AAAACAAQAAAA4AA4AAAACAAQAAAA4AA8AAAACAAQAAAA4ABAAAAACAAQAAAA4ABEAAAACAAQAAAA4ABIAAAACAAQAAAA4ABMAAAACAAQAAAA4ABQAAAACAAQAAAA4ABUAAAACAAQAAAA4ABYAAAACAAQAAAA4ABcAAAAEAAQAAAA5AAIAAAABAAEAAAA5AAMAAAACAAQAAAA5AAQAAAAAAAAAAAA5AAUAAAAEAAEAAAA5AAYAAAACAAQAAAA5AAcAAAACAAQAAAA5AAgAAAAAAAEAAAA5AAkAAAACAAQAAAA5AAoAAAABAAEAAAA5AAsAAAAAAAAAAAA5AAwAAAACAAQAAAA5AA0AAAACAAQAAAA5AA4AAAACAAQAAAA5AA8AAAACAAQAAAA5ABAAAAACAAQAAAA5ABEAAAACAAQAAAA5ABIAAAACAAQAAAA5ABMAAAACAAQAAAA5ABQAAAACAAQAAAA5ABUAAAACAAQAAAA6AAIAAAAFAAAAAAA6AAMAAAACAAQAAAA6AAQAAAAAAAEAAAA6AAUAAAADAAAAAAA6AAYAAAACAAQAAAA6AAcAAAACAAQAAAA6AAgAAAABAAEAAAA6AAkAAAACAAQAAAA6AAoAAAADAAEAAAA6AAsAAAAFAAEAAAA6AAwAAAACAAQAAAA6AA0AAAACAAQAAAA6AA4AAAACAAQAAAA6AA8AAAACAAQAAAA6ABAAAAACAAQAAAA6ABEAAAACAAQAAAA6ABIAAAABAAAAAAA6ABMAAAACAAQAAAA6ABQAAAACAAQAAAA6ABUAAAACAAQAAAA7AAIAAAADAAAAAAA7AAMAAAACAAQAAAA7AAQAAAAAAAAAAAA7AAUAAAADAAAAAAA7AAYAAAACAAQAAAA7AAcAAAACAAQAAAA7AAgAAAADAAEAAAA7AAkAAAAEAAAAAAA7AAoAAAAEAAAAAAA7AAsAAAACAAQAAAA7AAwAAAACAAQAAAA7AA0AAAACAAQAAAA7AA4AAAACAAQAAAA7AA8AAAACAAQAAAA7ABAAAAAAAAAAAAA7ABEAAAACAAQAAAA7ABIAAAAFAAEAAAA7ABMAAAACAAQAAAA7ABQAAAACAAQAAAA7ABUAAAACAAQAAAA8AAIAAAACAAEAAAA8AAMAAAACAAQAAAA8AAQAAAAAAAEAAAA8AAUAAAAAAAEAAAA8AAYAAAACAAQAAAA8AAcAAAACAAQAAAA8AAgAAAAEAAEAAAA8AAkAAAAEAAAAAAA8AAoAAAADAAAAAAA8AAsAAAACAAQAAAA8AAwAAAACAAQAAAA8AA0AAAACAAQAAAA8AA4AAAACAAQAAAA8AA8AAAAEAAAAAAA8ABAAAAABAAAAAAA8ABEAAAACAAQAAAA8ABIAAAADAAEAAAA8ABMAAAACAAQAAAA8ABQAAAACAAQAAAA8ABUAAAACAAQAAAA9AAIAAAACAAQAAAA9AAMAAAACAAQAAAA9AAQAAAACAAQAAAA9AAUAAAAAAAAAAAA9AAYAAAACAAQAAAA9AAcAAAACAAQAAAA9AAgAAAAEAAEAAAA9AAkAAAACAAAAAAA9AAoAAAAEAAAAAAA9AAsAAAACAAQAAAA9AAwAAAACAAQAAAA9AA0AAAACAAQAAAA9AA4AAAACAAQAAAA9AA8AAAAFAAEAAAA9ABAAAAACAAQAAAA9ABEAAAACAAQAAAA9ABIAAAACAAEAAAA9ABMAAAACAAQAAAA9ABQAAAACAAQAAAA9ABUAAAACAAQAAAA+AAIAAAACAAAAAAA+AAMAAAACAAQAAAA+AAQAAAACAAQAAAA+AAUAAAAEAAAAAAA+AAYAAAACAAQAAAA+AAcAAAACAAQAAAA+AAgAAAACAAQAAAA+AAkAAAADAAEAAAA+AAoAAAACAAQAAAA+AAsAAAACAAQAAAA+AAwAAAACAAQAAAA+AA0AAAACAAQAAAA+AA4AAAACAAQAAAA+AA8AAAACAAEAAAA+ABAAAAACAAQAAAA+ABEAAAACAAQAAAA+ABIAAAABAAEAAAA+ABMAAAACAAQAAAA+ABQAAAACAAQAAAA+ABUAAAACAAQAAAA/AAIAAAADAAEAAAA/AAMAAAACAAQAAAA/AAQAAAACAAQAAAA/AAUAAAACAAQAAAA/AAYAAAACAAQAAAA/AAcAAAACAAQAAAA/AAgAAAACAAQAAAA/AAkAAAACAAQAAAA/AAoAAAACAAQAAAA/AAsAAAACAAQAAAA/AAwAAAACAAQAAAA/AA0AAAACAAQAAAA/AA4AAAACAAQAAAA/AA8AAAAAAAEAAAA/ABAAAAACAAQAAAA/ABEAAAACAAQAAAA/ABIAAAACAAQAAAA/ABMAAAACAAQAAAA/ABQAAAACAAQAAAA/ABUAAAACAAQAAABAAAIAAAADAAAAAABAAAMAAAACAAQAAABAAAQAAAACAAQAAABAAAUAAAACAAQAAABAAAYAAAACAAQAAABAAAcAAAACAAQAAABAAAgAAAACAAQAAABAAAkAAAACAAQAAABAAAoAAAACAAQAAABAAAsAAAACAAQAAABAAAwAAAACAAQAAABAAA0AAAACAAQAAABAAA4AAAACAAQAAABAAA8AAAACAAQAAABAABAAAAACAAQAAABAABEAAAAEAAEAAABAABIAAAACAAQAAABAABMAAAACAAQAAABAABQAAAACAAQAAABAABUAAAAAAAEAAABBAAIAAAAAAAAAAABBAAMAAAACAAQAAABBAAQAAAACAAQAAABBAAUAAAACAAQAAABBAAYAAAACAAQAAABBAAcAAAACAAQAAABBAAgAAAACAAQAAABBAAkAAAACAAQAAABBAAoAAAACAAQAAABBAAsAAAACAAQAAABBAAwAAAACAAQAAABBAA0AAAACAAQAAABBAA4AAAACAAQAAABBAA8AAAACAAQAAABBABAAAAACAAQAAABBABEAAAACAAQAAABBABIAAAACAAQAAABBABMAAAACAAQAAABBABQAAAACAAQAAABBABUAAAAEAAEAAABCAAIAAAAEAAAAAABCAAMAAAACAAQAAABCAAQAAAACAAQAAABCAAUAAAACAAQAAABCAAYAAAACAAQAAABCAAcAAAACAAQAAABCAAgAAAACAAQAAABCAAkAAAACAAQAAABCAAoAAAACAAQAAABCAAsAAAACAAQAAABCAAwAAAACAAQAAABCAA0AAAACAAQAAABCAA4AAAACAAQAAABCAA8AAAACAAQAAABCABAAAAACAAQAAABCABEAAAACAAQAAABCABIAAAACAAQAAABCABMAAAACAAQAAABCABQAAAACAAQAAABCABUAAAADAAAAAABDAAIAAAACAAQAAABDAAMAAAACAAQAAABDAAQAAAACAAQAAABDAAUAAAACAAQAAABDAAYAAAACAAQAAABDAAcAAAACAAQAAABDAAgAAAACAAQAAABDAAkAAAACAAQAAABDAAoAAAACAAQAAABDAAsAAAACAAQAAABDAAwAAAACAAQAAABDAA0AAAACAAQAAABDAA4AAAACAAQAAABDAA8AAAACAAQAAABDABAAAAACAAQAAABDABEAAAACAAQAAABDABIAAAACAAQAAABDABMAAAACAAQAAABDABQAAAACAAEAAABDABUAAAAFAAEAAABEAAIAAAACAAQAAABEAAMAAAACAAQAAABEAAQAAAACAAQAAABEAAUAAAACAAQAAABEAAYAAAACAAQAAABEAAcAAAACAAQAAABEAAgAAAACAAQAAABEAAkAAAACAAQAAABEAAoAAAACAAQAAABEAAsAAAACAAQAAABEAAwAAAACAAQAAABEAA0AAAACAAQAAABEAA4AAAACAAQAAABEAA8AAAACAAQAAABEABAAAAACAAQAAABEABEAAAACAAQAAABEABIAAAACAAQAAABEABMAAAACAAQAAABEABQAAAAFAAEAAABEABUAAAACAAAAAABFAAMAAAACAAQAAABFAAQAAAACAAQAAABFAAUAAAACAAQAAABFAAYAAAACAAQAAABFAAcAAAACAAQAAABFAAgAAAACAAQAAABFAAkAAAACAAQAAABFAAoAAAACAAQAAABFAAsAAAACAAQAAABFAAwAAAACAAQAAABFAA0AAAACAAQAAABFAA4AAAACAAQAAABFAA8AAAACAAQAAABFABAAAAACAAQAAABFABEAAAACAAQAAABFABIAAAACAAQAAABFABMAAAACAAQAAABFABQAAAAAAAEAAABFABUAAAACAAQAAAAUABMAAAACAAMAAAAUABQAAAACAAQAAAAVABMAAAADAAMAAAAVABQAAAAEAAUAAAAWAA4AAAAEAAMAAAAXAA8AAAAFAAIAAAAYAA8AAAAFAAMAAAAbAAwAAAAEAAMAAAAdABQAAAACAAQAAAAeABMAAAACAAMAAAAfABMAAAACAAMAAAAfABQAAAADAAAAAAAgAAwAAAABAAUAAAAhAAwAAAACAAUAAAAiAAwAAAAFAAQAAAAiAA0AAAABAAQAAAAjAAwAAAACAAQAAAAjAA0AAAACAAQAAAAWABQAAAACAAMAAAAXABQAAAACAAMAAAAYABQAAAACAAMAAAAZABQAAAACAAMAAAAaABQAAAACAAMAAAAbABQAAAACAAMAAAAcABMAAAABAAMAAAAcABQAAAAFAAUAAAAdABMAAAACAAMAAAAeABQAAAAAAAAAAAAgABIAAAABAAMAAAAgABMAAAAFAAUAAAAgABQAAAACAAAAAAAhABAAAAABAAMAAAAhABEAAAABAAQAAAAhABIAAAAFAAUAAAAhABMAAAAFAAAAAAAhABQAAAAEAAAAAAAiAA4AAAABAAQAAAAiAA8AAAABAAQAAAAiABAAAAAFAAUAAAAiABEAAAACAAQAAAAiABIAAAADAAAAAAAiABMAAAADAAAAAAAiABQAAAACAAQAAAAjAA4AAAACAAQAAAAjAA8AAAACAAQAAAAjABAAAAACAAQAAAAjABEAAAACAAQAAAAjABIAAAADAAEAAAAjABMAAAAAAAEAAAAjABQAAAAEAAEAAAAkAAwAAAACAAQAAAAkAA0AAAACAAQAAAAkAA4AAAACAAQAAAAkAA8AAAACAAQAAAAkABAAAAACAAQAAAAkABEAAAACAAQAAAAkABIAAAACAAQAAAAkABMAAAACAAQAAAAkABQAAAACAAQAAAAkABUAAAACAAQAAAAkABYAAAACAAQAAAAkABcAAAACAAQAAAAkABgAAAABAAEAAAAkABkAAAACAAQAAAAkABoAAAACAAUAAAAlAAwAAAACAAQAAAAlAA0AAAACAAQAAAAlAA4AAAACAAQAAAAlAA8AAAACAAQAAAAlABAAAAACAAQAAAAlABMAAAACAAQAAAAlABQAAAACAAQAAAAlABUAAAACAAQAAAAlABYAAAACAAQAAAAlABcAAAACAAQAAAAmAAwAAAAFAAEAAAAmAA0AAAACAAQAAAAmAA4AAAACAAQAAAAmAA8AAAACAAQAAAAmABAAAAACAAQAAAAmABMAAAACAAQAAAAmABQAAAACAAQAAAAmABUAAAACAAQAAAAmABYAAAACAAQAAAAmABcAAAACAAQAAAAnAAwAAAADAAEAAAAnAA0AAAACAAQAAAAnAA4AAAACAAQAAAAnAA8AAAACAAQAAAAnABAAAAACAAQAAAAnABEAAAACAAQAAAAnABIAAAACAAQAAAAnABMAAAACAAQAAAAnABQAAAACAAQAAAAnABUAAAACAAQAAAAnABYAAAACAAQAAAAnABcAAAACAAQAAAAoAAwAAAAAAAAAAAAoAA0AAAACAAQAAAAoAA4AAAACAAQAAAAoAA8AAAACAAQAAAAoABAAAAACAAQAAAAoABEAAAACAAQAAAAoABIAAAACAAQAAAAoABMAAAAAAAAAAAAoABQAAAACAAQAAAAoABUAAAACAAQAAAAoABYAAAACAAQAAAAoABcAAAACAAQAAAApAAwAAAAAAAAAAAApAA0AAAACAAQAAAApAA4AAAACAAQAAAApAA8AAAACAAQAAAApABAAAAACAAQAAAApABEAAAACAAQAAAApABIAAAACAAQAAAApABMAAAADAAAAAAApABQAAAACAAQAAAApABUAAAACAAQAAAApABYAAAACAAQAAAApABcAAAACAAQAAAAqAAwAAAACAAQAAAAqAA0AAAACAAQAAAAqAA4AAAACAAQAAAAqAA8AAAACAAQAAAAqABAAAAACAAQAAAAqABEAAAACAAQAAAAqABIAAAACAAQAAAAqABMAAAABAAAAAAAqABQAAAACAAEAAAAqABUAAAACAAQAAAAqABYAAAACAAQAAAAqABcAAAACAAEAAAArAAwAAAACAAQAAAArAA0AAAACAAQAAAArAA4AAAACAAQAAAArAA8AAAACAAQAAAArABAAAAACAAQAAAArABEAAAACAAQAAAArABIAAAACAAQAAAArABMAAAABAAAAAAArABQAAAADAAAAAAArABUAAAACAAQAAAArABYAAAACAAQAAAArABcAAAACAAEAAAAsAAwAAAACAAQAAAAsAA0AAAACAAQAAAAsAA4AAAACAAQAAAAsAA8AAAACAAQAAAAsABAAAAACAAQAAAAsABEAAAACAAQAAAAsABIAAAABAAAAAAAsABMAAAABAAEAAAAsABQAAAACAAAAAAAsABUAAAACAAQAAAAsABYAAAACAAQAAAAsABcAAAACAAEAAAAtAAwAAAAEAAEAAAAtAA0AAAACAAQAAAAtAA4AAAACAAQAAAAtAA8AAAACAAQAAAAtABAAAAACAAQAAAAtABEAAAACAAQAAAAtABIAAAABAAEAAAAtABMAAAACAAAAAAAtABQAAAADAAAAAAAtABUAAAACAAQAAAAtABYAAAACAAQAAAAtABcAAAACAAQAAAAuAAwAAAACAAQAAAAuAA0AAAACAAQAAAAuAA4AAAACAAQAAAAuAA8AAAACAAQAAAAuABAAAAACAAQAAAAuABEAAAACAAQAAAAuABIAAAACAAAAAAAuABMAAAACAAQAAAAuABQAAAACAAQAAAAuABUAAAACAAQAAAAuABYAAAACAAQAAAAuABcAAAACAAQAAAAvAAwAAAACAAQAAAAvAA0AAAACAAQAAAAvAA4AAAACAAQAAAAvAA8AAAACAAQAAAAvABAAAAACAAQAAAAvABEAAAACAAQAAAAvABIAAAACAAQAAAAvABMAAAACAAQAAAAvABQAAAACAAQAAAAvABUAAAACAAQAAAAvABYAAAACAAQAAAAvABcAAAACAAQAAAAwAAwAAAACAAQAAAAwAA0AAAACAAQAAAAwAA4AAAACAAQAAAAwAA8AAAACAAQAAAAwABAAAAACAAQAAAAwABEAAAACAAQAAAAwABIAAAACAAQAAAAwABMAAAACAAQAAAAwABQAAAACAAQAAAAwABUAAAACAAQAAAAwABYAAAACAAQAAAAwABcAAAACAAQAAAAxAAwAAAACAAQAAAAxAA0AAAACAAQAAAAxAA4AAAACAAQAAAAxAA8AAAACAAQAAAAxABAAAAACAAQAAAAxABEAAAACAAQAAAAxABIAAAACAAQAAAAxABMAAAACAAQAAAAxABQAAAACAAQAAAAxABUAAAACAAQAAAAxABYAAAACAAQAAAAxABcAAAACAAQAAAAyAAwAAAACAAQAAAAyAA0AAAACAAQAAAAyAA4AAAACAAQAAAAyAA8AAAACAAQAAAAyABAAAAACAAQAAAAyABEAAAACAAQAAAAyABIAAAACAAQAAAAyABMAAAACAAQAAAAyABQAAAACAAQAAAAyABUAAAACAAQAAAAyABYAAAACAAQAAAAyABcAAAACAAQAAAAzAAwAAAACAAQAAAAzAA0AAAACAAQAAAAzAA4AAAACAAQAAAAzAA8AAAACAAQAAAAzABAAAAACAAQAAAAzABEAAAACAAQAAAAzABIAAAACAAQAAAAzABMAAAACAAQAAAAzABQAAAACAAQAAAAzABUAAAACAAQAAAAzABYAAAACAAQAAAAzABcAAAACAAQAAAAUABUAAAACAAQAAAAUABYAAAACAAQAAAAUABcAAAACAAQAAAAUABgAAAACAAQAAAAUABkAAAACAAQAAAAUABoAAAACAAQAAAAUABsAAAACAAQAAAAVABUAAAACAAQAAAAVABYAAAACAAQAAAAVABcAAAACAAQAAAAVABgAAAACAAQAAAAVABkAAAACAAQAAAAVABoAAAACAAQAAAAVABsAAAACAAQAAAAWABUAAAACAAQAAAAWABYAAAACAAQAAAAWABcAAAACAAQAAAAWABgAAAACAAQAAAAWABkAAAACAAQAAAAWABoAAAACAAQAAAAWABsAAAACAAQAAAAXABUAAAACAAQAAAAXABYAAAACAAQAAAAXABcAAAACAAQAAAAXABgAAAACAAQAAAAXABkAAAACAAQAAAAXABoAAAACAAQAAAAXABsAAAACAAQAAAAYABUAAAACAAQAAAAYABYAAAACAAQAAAAYABcAAAACAAQAAAAYABgAAAACAAQAAAAYABkAAAACAAQAAAAYABoAAAACAAQAAAAYABsAAAACAAQAAAAZABUAAAACAAQAAAAZABYAAAACAAQAAAAZABcAAAACAAQAAAAZABgAAAACAAQAAAAZABkAAAACAAQAAAAZABoAAAADAAAAAAAZABsAAAACAAQAAAAaABUAAAACAAQAAAAaABYAAAACAAQAAAAaABcAAAACAAQAAAAaABgAAAACAAQAAAAaABkAAAABAAAAAAAaABoAAAACAAAAAAAaABsAAAACAAQAAAAbABUAAAACAAQAAAAbABYAAAACAAQAAAAbABcAAAACAAQAAAAbABgAAAACAAQAAAAbABkAAAADAAAAAAAbABoAAAAAAAEAAAAbABsAAAACAAQAAAAcABUAAAACAAQAAAAcABYAAAACAAQAAAAcABcAAAACAAQAAAAcABgAAAACAAQAAAAcABkAAAACAAQAAAAcABoAAAAEAAQAAAAcABsAAAADAAQAAAAdABUAAAACAAQAAAAdABYAAAACAAQAAAAdABcAAAACAAQAAAAdABgAAAACAAQAAAAdABkAAAACAAQAAAAdABoAAAACAAUAAAAeABUAAAACAAQAAAAeABYAAAACAAQAAAAeABcAAAACAAQAAAAeABgAAAACAAQAAAAeABkAAAACAAQAAAAeABoAAAACAAUAAAAfABUAAAACAAQAAAAfABYAAAACAAQAAAAfABcAAAACAAQAAAAfABgAAAACAAQAAAAfABkAAAACAAQAAAAfABoAAAACAAUAAAAgABUAAAACAAQAAAAgABYAAAACAAQAAAAgABcAAAACAAQAAAAgABgAAAACAAQAAAAgABkAAAACAAQAAAAgABoAAAACAAUAAAAhABUAAAACAAQAAAAhABYAAAACAAQAAAAhABcAAAACAAQAAAAhABgAAAACAAQAAAAhABkAAAACAAQAAAAhABoAAAACAAUAAAAiABUAAAACAAQAAAAiABYAAAACAAQAAAAiABcAAAACAAQAAAAiABgAAAACAAQAAAAiABkAAAACAAQAAAAiABoAAAACAAUAAAAjABUAAAACAAQAAAAjABYAAAACAAQAAAAjABcAAAACAAQAAAAjABgAAAAEAAAAAAAjABkAAAACAAQAAAAjABoAAAACAAUAAAAlABgAAAADAAAAAAAlABkAAAACAAQAAAAlABoAAAACAAUAAAAmABgAAAABAAEAAAAmABkAAAACAAQAAAAmABoAAAACAAUAAAAnABgAAAACAAQAAAAnABkAAAACAAQAAAAnABoAAAACAAUAAAAoABgAAAACAAQAAAAoABkAAAACAAQAAAAoABoAAAACAAUAAAApABgAAAACAAQAAAApABkAAAACAAQAAAApABoAAAACAAUAAAAqABgAAAAEAAAAAAAqABkAAAACAAQAAAAqABoAAAACAAUAAAArABgAAAAFAAAAAAArABkAAAACAAQAAAArABoAAAACAAUAAAAsABgAAAAEAAEAAAAsABkAAAACAAQAAAAsABoAAAACAAUAAAAtABgAAAACAAQAAAAtABkAAAACAAQAAAAtABoAAAACAAUAAAAuABgAAAACAAQAAAAuABkAAAACAAQAAAAuABoAAAACAAUAAAAvABgAAAACAAEAAAAvABkAAAADAAAAAAAvABoAAAACAAUAAAAwABgAAAAFAAAAAAAwABkAAAAEAAEAAAAwABoAAAACAAUAAAAxABgAAAACAAAAAAAxABkAAAAEAAAAAAAxABoAAAACAAUAAAAyABgAAAAEAAAAAAAyABkAAAACAAQAAAAyABoAAAACAAUAAAAzABgAAAAAAAEAAAAzABkAAAACAAQAAAAzABoAAAACAAUAAAA0ABgAAAACAAQAAAA0ABkAAAACAAQAAAA0ABoAAAACAAUAAAA1ABgAAAACAAQAAAA1ABkAAAACAAQAAAA1ABoAAAACAAUAAAA2ABgAAAACAAQAAAA2ABkAAAACAAQAAAA2ABoAAAACAAUAAAA3ABgAAAACAAQAAAA3ABkAAAACAAQAAAA3ABoAAAACAAUAAAA4ABgAAAADAAQAAAA4ABkAAAADAAQAAAA4ABoAAAADAAUAAAA5ABYAAAACAAQAAAA5ABcAAAACAAUAAAA6ABYAAAACAAQAAAA6ABcAAAACAAUAAAA7ABYAAAACAAQAAAA7ABcAAAACAAUAAAA8ABYAAAACAAQAAAA8ABcAAAACAAUAAAA9ABYAAAACAAQAAAA9ABcAAAACAAUAAAA+ABYAAAACAAQAAAA+ABcAAAACAAUAAAA/ABYAAAACAAQAAAA/ABcAAAACAAUAAABAABYAAAACAAQAAABAABcAAAACAAUAAABBABYAAAACAAQAAABBABcAAAACAAUAAABCABYAAAACAAQAAABCABcAAAACAAUAAABDABYAAAACAAQAAABDABcAAAACAAUAAABEABYAAAACAAQAAABEABcAAAACAAUAAABFABYAAAACAAQAAABFABcAAAACAAUAAABGABYAAAACAAQAAABGABcAAAACAAUAAABHABYAAAACAAQAAABHABcAAAACAAUAAAAAABwAAAACAAQAAAAAAB0AAAACAAQAAAABABwAAAACAAQAAAABAB0AAAACAAQAAAACABwAAAACAAQAAAACAB0AAAACAAQAAAADABwAAAACAAQAAAADAB0AAAACAAQAAAAEABwAAAACAAQAAAAEAB0AAAACAAQAAAAFABwAAAACAAQAAAAFAB0AAAACAAQAAAAGABwAAAAAAAAAAAAGAB0AAAACAAQAAAAHABwAAAACAAQAAAAHAB0AAAACAAQAAAAIABwAAAACAAQAAAAIAB0AAAACAAQAAAAJABwAAAACAAQAAAAJAB0AAAACAAQAAAAKABwAAAACAAQAAAAKAB0AAAAEAAQAAAALABwAAAACAAQAAAALAB0AAAACAAUAAAAMABwAAAACAAQAAAAMAB0AAAACAAUAAAANABwAAAACAAQAAAANAB0AAAACAAUAAAAOABwAAAACAAQAAAAOAB0AAAACAAUAAAAPABwAAAACAAQAAAAPAB0AAAACAAUAAAAQABwAAAACAAQAAAAQAB0AAAACAAUAAAARABwAAAACAAQAAAARAB0AAAACAAUAAAASABwAAAACAAQAAAASAB0AAAACAAUAAAATABwAAAACAAQAAAATAB0AAAACAAUAAAAUABwAAAACAAQAAAAUAB0AAAACAAUAAAAVABwAAAACAAQAAAAVAB0AAAACAAUAAAAWABwAAAACAAQAAAAWAB0AAAACAAUAAAAXABwAAAACAAQAAAAXAB0AAAACAAUAAAAYABwAAAACAAQAAAAYAB0AAAACAAUAAAAZABwAAAACAAQAAAAZAB0AAAACAAUAAAAaABwAAAACAAQAAAAaAB0AAAACAAUAAAAbABwAAAACAAQAAAAbAB0AAAACAAUAAAAcABwAAAADAAQAAAAcAB0AAAADAAUAAAAoAAQAAAACAAQAAAAoAAUAAAACAAQAAAAoAAYAAAACAAQAAAApAAQAAAACAAQAAAApAAUAAAACAAQAAAApAAYAAAACAAQAAAAqAAQAAAACAAQAAAAqAAUAAAACAAQAAAAqAAYAAAACAAQAAAAKAB4AAAADAAUAAAAJAB4AAAACAAUAAAAIAB4AAAACAAUAAAAHAB4AAAACAAUAAAAGAB4AAAACAAUAAAAFAB4AAAACAAUAAAAEAB4AAAACAAUAAAADAB4AAAACAAUAAAACAB4AAAACAAUAAAABAB4AAAACAAUAAAAAAB4AAAACAAUAAAAlABEAAAACAAQAAAAmABEAAAACAAQAAAAmABIAAAACAAQAAAAlABIAAAACAAQAAAA=") tile_set = SubResource("TileSet_ccjym") navigation_enabled = false @@ -2014,5 +2014,3 @@ texture = ExtResource("11_h6qkq") [node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D"] shape = SubResource("CapsuleShape2D_c8g1h") - -[node name="astar" type="Node2D" parent="."] diff --git a/state/.gitignore b/state/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/state/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/state/icon.svg b/state/icon.svg new file mode 100644 index 0000000..9d8b7fa --- /dev/null +++ b/state/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/state/icon.svg.import b/state/icon.svg.import new file mode 100644 index 0000000..f89f0e4 --- /dev/null +++ b/state/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://beggt5ndi6j4p" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/state/project.godot b/state/project.godot new file mode 100644 index 0000000..a28ee76 --- /dev/null +++ b/state/project.godot @@ -0,0 +1,15 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="state" +config/features=PackedStringArray("4.3", "Forward Plus") +config/icon="res://icon.svg" diff --git a/state/scenes/state/State.gd b/state/scenes/state/State.gd new file mode 100644 index 0000000..328edb0 --- /dev/null +++ b/state/scenes/state/State.gd @@ -0,0 +1,18 @@ +class_name State +extends Node + +var state_machine: StateMachine +var character: CharacterBody2D + + +func _ready() -> void: + pass + +func state_enter() -> void: + pass + +func state_process(delta: float) -> void: + pass + +func state_exit() -> void: + pass diff --git a/state/scenes/state/StateMachine.gd b/state/scenes/state/StateMachine.gd new file mode 100644 index 0000000..a069863 --- /dev/null +++ b/state/scenes/state/StateMachine.gd @@ -0,0 +1,19 @@ +class_name StateMachine +extends Node + +var current_state: State: + set(value): + if current_state: + current_state.state_exit() + current_state = value + current_state.state_enter() + + +func _ready() -> void: + for child in self.get_children(): + if true: + print(child) + + +func _process(delta: float) -> void: + pass diff --git a/state/scenes/state/StateMachineWorld.tscn b/state/scenes/state/StateMachineWorld.tscn new file mode 100644 index 0000000..39076d2 --- /dev/null +++ b/state/scenes/state/StateMachineWorld.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=5 format=3 uid="uid://cgdvptekjbpgq"] + +[ext_resource type="Texture2D" uid="uid://beggt5ndi6j4p" path="res://icon.svg" id="1_jgx5y"] +[ext_resource type="Script" path="res://scenes/state/StateMachine.gd" id="2_d1xqo"] +[ext_resource type="Script" path="res://scenes/state/state_idle.gd" id="3_r1btx"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_tr1gq"] +radius = 60.0 +height = 122.0 + +[node name="StateMachineWorld" type="Node2D"] + +[node name="CharacterBody2D" type="CharacterBody2D" parent="."] + +[node name="Sprite2D" type="Sprite2D" parent="CharacterBody2D"] +texture = ExtResource("1_jgx5y") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D"] +shape = SubResource("CapsuleShape2D_tr1gq") + +[node name="StateMachine" type="Node" parent="CharacterBody2D"] +script = ExtResource("2_d1xqo") + +[node name="idle" type="Node" parent="CharacterBody2D/StateMachine"] +script = ExtResource("3_r1btx") diff --git a/state/scenes/state/state_idle.gd b/state/scenes/state/state_idle.gd new file mode 100644 index 0000000..973446f --- /dev/null +++ b/state/scenes/state/state_idle.gd @@ -0,0 +1,10 @@ +extends State + +func state_enter(): + print("idle enter") + +func state_process(delta: float) -> void: + print("idle process") + +func state_exit() -> void: + print("idle exit")