Skip to content

Commit

Permalink
feat: support metro/travel-points in hatbot-metsys rewrite
Browse files Browse the repository at this point in the history
Refactors MetroTravelPoints (Elevators) to emit a travel_requested
signal - subscribes to this signal in HatBotGame.

Seems simple enough? And it's workin :dance:
  • Loading branch information
russmatney committed Nov 26, 2024
1 parent c7878ea commit 6131271
Show file tree
Hide file tree
Showing 18 changed files with 315 additions and 44 deletions.
21 changes: 8 additions & 13 deletions src/core/metro/Metro.gd
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const zones_group = "metro_zones"
const rooms_group = "metro_rooms"
const checkpoints_group = "metro_checkpoints"

signal travel_requested(opts: Dictionary)

###########################################################
# start game

Expand Down Expand Up @@ -41,20 +43,13 @@ func reload_current_zone():
###########################################################
# Zone travel

func travel_to(dest_zone, elevator_path=null):
# could restore same-zone travel
# var player = P.get_player()
# if player and is_instance_valid(player) and current_zone.name == dest_zone_name:
# Log.info("Traveling in same zone", dest_zone_name, elevator_path)
# if elevator_path:
# current_zone.set_spawn_node(elevator_path)
# player.clear_forced_movement_target()
# player.position = current_zone.player_spawn_coords()
# return

Log.info("Traveling to zone", dest_zone, elevator_path)
func travel_to(dest_zone, spawn_path=null):
Log.info("Traveling to zone", dest_zone, spawn_path)
travel_requested.emit({destination=dest_zone, spawn_path=spawn_path})

load_zone(dest_zone, elevator_path)
# TODO old metro games need to connect to this signal
# (if there are any?)
# load_zone(dest_zone, elevator_path)

###########################################################
# world update
Expand Down
37 changes: 25 additions & 12 deletions src/core/metro/MetroTravelPoint.gd
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ func _get_configuration_warnings():
## vars ###########################################################

@export var destination_travel_point: MetroTravelPointEntity
@export_file("*.tscn") var destination_metsys_room: String
@export var destination_name: String

@onready var anim = $AnimatedSprite2D

var room
var travel_dest
var do_travel: Callable
var is_traveling
var group_name = "travel_points"

Expand All @@ -41,12 +43,16 @@ func _ready():
## actions ##################################################################

var actions = [
Action.mk({label_fn=get_dest_label, fn=travel, show_on_source=true, show_on_actor=false,})
Action.mk({label_fn=get_dest_label, fn=enter_travel_point, show_on_source=true, show_on_actor=false,})
]

func get_dest_label():
if destination_travel_point:
func get_dest_label() -> String:
if destination_name:
return destination_name
elif destination_travel_point:
return "To %s" % destination_travel_point.get_destination_name().capitalize()
elif destination_metsys_room:
return Log.to_pretty(destination_metsys_room)
else:
return "Travel"

Expand All @@ -56,16 +62,14 @@ func _on_anim_finished():
if anim.animation == "opening":
z_index = 0
if anim.animation == "closing":
if travel_dest != null:
Metro.travel_to(travel_dest[0], travel_dest[1])
is_traveling = false
travel_dest = null
if do_travel != null and is_traveling:
do_travel.call()
else:
z_index = 0

## travel to destination ##################################################################

func travel(player):
func enter_travel_point(player):
if is_traveling:
return

Expand All @@ -74,8 +78,17 @@ func travel(player):

player.force_move_to_target(global_position)
is_traveling = true

# looks a bit like the player is inside it
z_index = 10
# get and pass the node_path
# pass a callable instead of this arg hand-off non-sense
travel_dest = [destination_travel_point.get_destination_zone(), null]

# this is invoked once the closing animation finishes
do_travel = func():
if destination_travel_point:
Metro.travel_to(destination_travel_point.get_destination_zone())
elif destination_metsys_room:
Metro.travel_to(destination_metsys_room)
# maybe await tick?
is_traveling = false
player.clear_forced_movement_target()
anim.play("closing")
7 changes: 4 additions & 3 deletions src/dino/entities/doors/Elevator.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[ext_resource type="Script" path="res://src/dino/entities/doors/Elevator.gd" id="1_87cqc"]
[ext_resource type="PackedScene" path="res://addons/bones/actions/ActionArea.tscn" id="3_nrb31"]
[ext_resource type="Texture2D" uid="uid://dnm5e8ic33scj" path="res://src/core/assets/lights/light64px8.png" id="4_e46yd"]
[ext_resource type="PackedScene" path="res://addons/bones/actions/ActionHint.tscn" id="5_0buld"]
[ext_resource type="PackedScene" uid="uid://bfatjgmhlkjne" path="res://addons/bones/actions/ActionHint.tscn" id="5_0buld"]

[sub_resource type="AtlasTexture" id="AtlasTexture_jtm3d"]
atlas = ExtResource("1_6v2w8")
Expand Down Expand Up @@ -122,8 +122,8 @@ polygon = PackedVector2Array(-13, 15, -13, 3, -12, -1, -11, -4, -10, -6, -9, -8,

[node name="Elevator" type="Node2D" groups=["travel_points"]]
script = ExtResource("1_87cqc")
destination_zone_name = ""
destination_travel_point_path = ""
destination_metsys_room = null
destination_name = null

[node name="ColorRect" type="ColorRect" parent="."]
visible = false
Expand Down Expand Up @@ -152,4 +152,5 @@ texture = ExtResource("4_e46yd")
occluder = SubResource("OccluderPolygon2D_ad253")

[node name="ActionHint" parent="." instance=ExtResource("5_0buld")]
visible = false
position = Vector2(0, -32)
2 changes: 1 addition & 1 deletion src/dino/pickups/powerups/SSPowerup.gd
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,4 @@ func show_jumbotron(player):
player.force_move_to_target(global_position)
Jumbotron.jumbo_notif({
header=header, body=body, action=action, action_label_text=label,
on_close=player.clear_forced_move_target})
on_close=player.clear_forced_movement_target})
25 changes: 16 additions & 9 deletions src/games/hatbot/HatBotGame.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class_name HatBotGame

# this script based initially on MetSys/SampleProject/Scripts/Game.gd

@export var first_room: String = "RoomZero.tscn"
@export_file("res://src/games/hatbot/rooms/*.tscn") var first_room: String
@export var hatbot_metsys_settings = preload("res://src/games/hatbot/HatBotMetSysSettings.tres")
@export var player_entity: DinoPlayerEntity

Expand All @@ -14,6 +14,9 @@ func _enter_tree():
func _exit_tree():
for m in modules:
m._deinit()
Metro.travel_requested.disconnect(load_travel_room)

## ready ##################################################################

func _ready():
if Engine.is_editor_hint():
Expand All @@ -22,6 +25,8 @@ func _ready():
MetSys.reset_state()
MetSys.set_save_data()

Metro.travel_requested.connect(load_travel_room)

room_loaded.connect(on_room_loaded, CONNECT_DEFERRED)

Dino.player_ready.connect(func(p):
Expand All @@ -31,14 +36,6 @@ func _ready():

Dino.create_new_player({entity=player_entity, genre=DinoData.GenreType.SideScroller})

# if OS.get_environment("__metsys_first_room__"):
# var first_room_overwrite = OS.get_environment("__metsys_first_room__")
# Log.warn("[DEV] Running custom room", first_room_overwrite)
# load_room(first_room_overwrite)
# else:
# Log.info("Running first room", first_room)
# load_room(first_room)

if OS.get_environment("__metsys_first_room__"):
var first_room_overwrite = OS.get_environment("__metsys_first_room__")
Log.warn("[DEV] Running custom room", first_room_overwrite)
Expand Down Expand Up @@ -67,3 +64,13 @@ func _physics_tick():
if can_process():
if is_instance_valid(player):
MetSys.set_player_position(player.position)

var move_to_travel_point: bool = false

func load_travel_room(opts: Dictionary):
Log.pr("hatbot loading travel-requested room", opts)
move_to_travel_point = true
await load_room(opts.get("destination"))

var tp = U.first_node_in_group(map, "travel_points")
player.position = tp.position
2 changes: 1 addition & 1 deletion src/games/hatbot/HatBotGame.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ _id = "166"

[node name="HatBotGame" type="Node"]
script = ExtResource("1_xd8wj")
first_room = "ZeroFallAndMove.tscn"
first_room = "res://src/games/hatbot/rooms/ZeroFallAndMove.tscn"
player_entity = SubResource("Resource_psfxv")

[node name="Camera2D" type="Camera2D" parent="."]
Expand Down
2 changes: 1 addition & 1 deletion src/games/hatbot/HatBotMetSysSettings.tres
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ script = ExtResource("1_3qp1r")
theme = ExtResource("2_g47mh")
map_root_folder = "res://src/games/hatbot/rooms/"
map_extents = 100
scene_template = "res://src/games/hatbot/rooms/ZeroTemplate.tscn"
scene_template = "res://src/games/hatbot/rooms/_LandingSiteTemplate.tscn"
in_game_cell_size = Vector2(240, 135)
discover_whole_rooms = false
collectible_list = Array[Dictionary]([])
Expand Down
32 changes: 32 additions & 0 deletions src/games/hatbot/rooms/LandingSiteEnemyHallway.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[gd_scene load_steps=5 format=4 uid="uid://dxmt76w74ewo4"]

[ext_resource type="PackedScene" uid="uid://bsg0351mx3b4u" path="res://addons/MetroidvaniaSystem/Nodes/RoomInstance.tscn" id="1_shfu1"]
[ext_resource type="Script" path="res://src/dino/PlayerSpawner.gd" id="3_tie2w"]
[ext_resource type="PackedScene" uid="uid://bs0c5xn0vglfn" path="res://src/dino/entities/PlayerSpawnPoint.tscn" id="4_doof4"]
[ext_resource type="PackedScene" uid="uid://qlyyoed7ln8c" path="res://src/tilemaps/grass/GrassyCaveTileMap8.tscn" id="6_rg5bx"]

[node name="Map" type="Node2D"]

[node name="RoomInstance" parent="." instance=ExtResource("1_shfu1")]

[node name="PlayerSpawner" type="Node" parent="."]
script = ExtResource("3_tie2w")

[node name="ColorRect" type="ColorRect" parent="."]
offset_right = 240.0
offset_bottom = 136.0
color = Color(0.238246, 0.415378, 0.23408, 1)

[node name="CanvasModulate" type="CanvasModulate" parent="."]
color = Color(0.22271, 0.404508, 0.769053, 0.768627)

[node name="DirectionalLight2D" type="DirectionalLight2D" parent="."]
rotation = -0.905826
color = Color(0.580228, 0.580228, 0.580228, 1)
shadow_enabled = true

[node name="PlayerSpawnPoint" parent="." instance=ExtResource("4_doof4")]
position = Vector2(52, 33)

[node name="GrassyCaveTileMap" parent="." instance=ExtResource("6_rg5bx")]
tile_map_data = PackedByteArray("AAAdABAAAQACAAQAAAAdAAIAAQACAAQAAAAdAAEAAQACAAMAAAAdAAAAAQACAAIAAAAcABAAAQACAAQAAAAcAAIAAQACAAQAAAAcAAEAAQACAAMAAAAcAAAAAQACAAIAAAAbABAAAQACAAQAAAAbAAIAAQACAAQAAAAbAAEAAQACAAMAAAAbAAAAAQACAAIAAAAaAAEAAQACAAMAAAAaAAAAAQACAAIAAAAZAAEAAQACAAMAAAAZAAAAAQACAAIAAAAYAAEAAQACAAMAAAAYAAAAAQACAAIAAAAXAAEAAQACAAMAAAAXAAAAAQACAAIAAAAWAAEAAQACAAMAAAAWAAAAAQACAAIAAAAVAAEAAQACAAMAAAAVAAAAAQACAAIAAAAUABAAAQACAAQAAAAUAAEAAQACAAMAAAAUAAAAAQACAAIAAAATABAAAQACAAQAAAATAAEAAQACAAMAAAATAAAAAQACAAIAAAASAAEAAQACAAMAAAASAAAAAQACAAIAAAARAAEAAQACAAMAAAARAAAAAQACAAIAAAAQAAEAAQACAAMAAAAQAAAAAQACAAIAAAAPAAEAAQACAAMAAAAPAAAAAQACAAIAAAAOAAEAAQACAAMAAAAOAAAAAQACAAIAAAANAAEAAQACAAMAAAANAAAAAQACAAIAAAAMAAEAAQACAAMAAAAMAAAAAQACAAIAAAALABAAAQACAAQAAAALAAEAAQACAAMAAAALAAAAAQACAAIAAAAKABAAAQACAAQAAAAKAA8AAQAGAAQAAAAKAAEAAQACAAMAAAAKAAAAAQACAAIAAAAJABAAAQACAAQAAAAJAA8AAQACAAMAAAAJAAEAAQACAAMAAAAJAAAAAQACAAIAAAAIAAEAAQACAAMAAAAIAAAAAQACAAIAAAAHAAEAAQACAAMAAAAHAAAAAQACAAIAAAAGAAEAAQACAAMAAAAGAAAAAQACAAIAAAAFAAEAAQACAAMAAAAFAAAAAQACAAIAAAAEAAEAAQACAAMAAAAEAAAAAQACAAIAAAADAAEAAQACAAMAAAADAAAAAQACAAIAAAACABAAAQACAAQAAAACAA8AAQACAAMAAAACAA4AAQACAAMAAAACAA0AAQACAAIAAAACAAgAAQACAAQAAAACAAcAAQACAAMAAAACAAYAAQACAAMAAAACAAUAAQACAAMAAAACAAQAAQACAAMAAAACAAMAAQACAAMAAAACAAIAAQACAAMAAAACAAEAAQACAAMAAAACAAAAAQACAAIAAAABABAAAQACAAQAAAABAA8AAQACAAMAAAABAA4AAQACAAMAAAABAA0AAQACAAIAAAABAAgAAQACAAQAAAABAAcAAQACAAMAAAABAAYAAQACAAMAAAABAAUAAQACAAMAAAABAAQAAQACAAMAAAABAAMAAQACAAMAAAABAAIAAQACAAMAAAABAAEAAQACAAMAAAABAAAAAQACAAIAAAAAABAAAQABAAQAAAAAAA8AAQABAAMAAAAAAA4AAQABAAMAAAAAAA0AAQABAAIAAAAAAAgAAQABAAQAAAAAAAcAAQABAAMAAAAAAAYAAQABAAMAAAAAAAUAAQABAAMAAAAAAAQAAQABAAMAAAAAAAMAAQABAAMAAAAAAAIAAQABAAMAAAAAAAEAAQABAAMAAAAAAAAAAQABAAIAAAASABAAAQACAAQAAAARABAAAQACAAQAAAAQABAAAQACAAQAAAAPABAAAQACAAQAAAAOABAAAQACAAQAAAANABAAAQACAAQAAAAMABAAAQACAAQAAAA7ABAAAQADAAQAAAA7AA8AAQADAAMAAAA7AA4AAQADAAMAAAA7AA0AAQADAAIAAAA7AAcAAQADAAQAAAA7AAYAAQADAAMAAAA7AAUAAQADAAMAAAA7AAQAAQADAAMAAAA7AAMAAQADAAMAAAA7AAIAAQADAAMAAAA7AAEAAQADAAMAAAA7AAAAAQADAAIAAAA6ABAAAQACAAQAAAA6AA8AAQACAAMAAAA6AA4AAQACAAMAAAA6AA0AAQACAAIAAAA6AAcAAQACAAQAAAA6AAYAAQACAAMAAAA6AAUAAQACAAMAAAA6AAQAAQACAAMAAAA6AAMAAQACAAMAAAA6AAIAAQACAAMAAAA6AAEAAQACAAMAAAA6AAAAAQACAAIAAAA5ABAAAQACAAQAAAA5AA8AAQACAAMAAAA5AA4AAQACAAMAAAA5AA0AAQACAAIAAAA5AAcAAQACAAQAAAA5AAYAAQACAAMAAAA5AAUAAQACAAMAAAA5AAQAAQACAAMAAAA5AAMAAQACAAMAAAA5AAIAAQACAAMAAAA5AAEAAQACAAMAAAA5AAAAAQACAAIAAAA4ABAAAQACAAQAAAA4AA8AAQACAAMAAAA4AA4AAQACAAMAAAA4AA0AAQACAAIAAAA4AAcAAQACAAQAAAA4AAYAAQACAAMAAAA4AAUAAQACAAMAAAA4AAQAAQACAAMAAAA4AAMAAQACAAMAAAA4AAIAAQACAAMAAAA4AAEAAQACAAMAAAA4AAAAAQACAAIAAAA3ABAAAQACAAQAAAA3AA8AAQACAAMAAAA3AA4AAQACAAMAAAA3AA0AAQACAAIAAAA3AAcAAQACAAQAAAA3AAYAAQACAAMAAAA3AAUAAQACAAMAAAA3AAQAAQACAAMAAAA3AAMAAQACAAMAAAA3AAIAAQACAAMAAAA3AAEAAQACAAMAAAA3AAAAAQACAAIAAAA2ABAAAQACAAQAAAA2AA8AAQAHAAQAAAA2AA4AAQABAAMAAAA2AA0AAQABAAIAAAA2AAcAAQABAAQAAAA2AAYAAQABAAMAAAA2AAUAAQABAAMAAAA2AAQAAQABAAMAAAA2AAMAAQABAAMAAAA2AAIAAQAHAAMAAAA2AAEAAQACAAMAAAA2AAAAAQACAAIAAAA1ABAAAQACAAQAAAA1AA8AAQACAAIAAAA1AAIAAQACAAQAAAA1AAEAAQACAAMAAAA1AAAAAQACAAIAAAA0ABAAAQACAAQAAAA0AA8AAQACAAIAAAA0AAIAAQACAAQAAAA0AAEAAQACAAMAAAA0AAAAAQACAAIAAAAzABAAAQACAAQAAAAzAA8AAQACAAIAAAAzAAIAAQACAAQAAAAzAAEAAQACAAMAAAAzAAAAAQACAAIAAAAyABAAAQACAAQAAAAyAA8AAQACAAIAAAAyAAIAAQACAAQAAAAyAAEAAQACAAMAAAAyAAAAAQACAAIAAAAxABAAAQACAAQAAAAxAA8AAQACAAIAAAAxAAIAAQACAAQAAAAxAAEAAQACAAMAAAAxAAAAAQACAAIAAAAwABAAAQACAAQAAAAwAA8AAQACAAIAAAAwAAIAAQACAAQAAAAwAAEAAQACAAMAAAAwAAAAAQACAAIAAAAvABAAAQACAAQAAAAvAAIAAQACAAQAAAAvAAEAAQACAAMAAAAvAAAAAQACAAIAAAAuABAAAQACAAQAAAAuAAIAAQACAAQAAAAuAAEAAQACAAMAAAAuAAAAAQACAAIAAAAtABAAAQACAAQAAAAtAAIAAQACAAQAAAAtAAEAAQACAAMAAAAtAAAAAQACAAIAAAAsABAAAQACAAQAAAAsAAIAAQACAAQAAAAsAAEAAQACAAMAAAAsAAAAAQACAAIAAAArABAAAQACAAQAAAArAAIAAQACAAQAAAArAAEAAQACAAMAAAArAAAAAQACAAIAAAAqABAAAQACAAQAAAAqAAIAAQACAAQAAAAqAAEAAQACAAMAAAAqAAAAAQACAAIAAAApABAAAQACAAQAAAApAAIAAQACAAQAAAApAAEAAQACAAMAAAApAAAAAQACAAIAAAAoABAAAQACAAQAAAAoAAIAAQACAAQAAAAoAAEAAQACAAMAAAAoAAAAAQACAAIAAAAnABAAAQACAAQAAAAnAAIAAQACAAQAAAAnAAEAAQACAAMAAAAnAAAAAQACAAIAAAAmABAAAQACAAQAAAAmAAIAAQACAAQAAAAmAAEAAQACAAMAAAAmAAAAAQACAAIAAAAlABAAAQACAAQAAAAlAAIAAQACAAQAAAAlAAEAAQACAAMAAAAlAAAAAQACAAIAAAAkABAAAQACAAQAAAAkAAIAAQACAAQAAAAkAAEAAQACAAMAAAAkAAAAAQACAAIAAAAjABAAAQACAAQAAAAjAAIAAQACAAQAAAAjAAEAAQACAAMAAAAjAAAAAQACAAIAAAAiABAAAQACAAQAAAAiAAIAAQACAAQAAAAiAAEAAQACAAMAAAAiAAAAAQACAAIAAAAhABAAAQACAAQAAAAhAAIAAQACAAQAAAAhAAEAAQACAAMAAAAhAAAAAQACAAIAAAAgABAAAQACAAQAAAAgAAIAAQACAAQAAAAgAAEAAQACAAMAAAAgAAAAAQACAAIAAAAfABAAAQACAAQAAAAfAAIAAQACAAQAAAAfAAEAAQACAAMAAAAfAAAAAQACAAIAAAAeABAAAQACAAQAAAAeAAIAAQACAAQAAAAeAAEAAQACAAMAAAAeAAAAAQACAAIAAAAaABAAAQACAAQAAAAaAAIAAQACAAQAAAAZABAAAQACAAQAAAAZAAIAAQACAAQAAAAYABAAAQACAAQAAAAYAAIAAQACAAQAAAAXABAAAQACAAQAAAAXAAgAAQADAAIAAAAXAAIAAQACAAQAAAAWABAAAQACAAQAAAAWAAgAAQACAAIAAAAWAAIAAQACAAQAAAAVABAAAQACAAQAAAAVAAgAAQACAAIAAAAVAAIAAQACAAQAAAAUAAIAAQACAAQAAAATAAIAAQACAAQAAAASAAIAAQACAAQAAAARAAIAAQACAAQAAAAQAAIAAQACAAQAAAAPAAIAAQACAAQAAAAOAAIAAQACAAQAAAANAAIAAQACAAQAAAAMAAIAAQACAAQAAAALAAIAAQACAAQAAAAKAA4AAQADAAMAAAAKAA0AAQADAAIAAAAKAAIAAQACAAQAAAAJAA4AAQACAAMAAAAJAA0AAQACAAIAAAAJAAIAAQACAAQAAAAIABAAAQACAAQAAAAIAA8AAQACAAMAAAAIAA4AAQACAAMAAAAIAA0AAQACAAIAAAAIAAIAAQACAAQAAAAHABAAAQACAAQAAAAHAA8AAQACAAMAAAAHAA4AAQACAAMAAAAHAA0AAQACAAIAAAAHAAIAAQACAAQAAAAGABAAAQACAAQAAAAGAA8AAQACAAMAAAAGAA4AAQACAAMAAAAGAA0AAQACAAIAAAAGAAIAAQACAAQAAAAFABAAAQACAAQAAAAFAA8AAQACAAMAAAAFAA4AAQACAAMAAAAFAA0AAQACAAIAAAAFAAgAAQADAAQAAAAFAAcAAQADAAMAAAAFAAYAAQADAAMAAAAFAAUAAQADAAMAAAAFAAQAAQADAAMAAAAFAAMAAQADAAMAAAAFAAIAAQAGAAMAAAAEABAAAQACAAQAAAAEAA8AAQACAAMAAAAEAA4AAQACAAMAAAAEAA0AAQACAAIAAAAEAAgAAQACAAQAAAAEAAcAAQACAAMAAAAEAAYAAQACAAMAAAAEAAUAAQACAAMAAAAEAAQAAQACAAMAAAAEAAMAAQACAAMAAAAEAAIAAQACAAMAAAADABAAAQACAAQAAAADAA8AAQACAAMAAAADAA4AAQACAAMAAAADAA0AAQACAAIAAAADAAgAAQACAAQAAAADAAcAAQACAAMAAAADAAYAAQACAAMAAAADAAUAAQACAAMAAAADAAQAAQACAAMAAAADAAMAAQACAAMAAAADAAIAAQACAAMAAAAkAAoAAQADAAQAAAAkAAkAAQADAAIAAAAjAAoAAQACAAQAAAAjAAkAAQACAAIAAAAiAAoAAQACAAQAAAAiAAkAAQACAAIAAAAhAAoAAQACAAQAAAAhAAkAAQACAAIAAAAgAAoAAQACAAQAAAAgAAkAAQACAAIAAAAfAAoAAQACAAQAAAAfAAkAAQACAAIAAAAeAAoAAQACAAQAAAAeAAkAAQACAAIAAAAdAAoAAQACAAQAAAAdAAkAAQACAAIAAAAcAAoAAQACAAQAAAAcAAkAAQACAAIAAAAbAAoAAQACAAQAAAAbAAkAAQACAAIAAAAaAAoAAQACAAQAAAAaAAkAAQACAAIAAAAZAAoAAQACAAQAAAAZAAkAAQACAAIAAAAYAAoAAQACAAQAAAAYAAkAAQACAAIAAAAXAAoAAQACAAQAAAAXAAkAAQAGAAQAAAAWAAoAAQACAAQAAAAWAAkAAQACAAMAAAAVAAoAAQACAAQAAAAVAAkAAQACAAMAAAAUAAoAAQACAAQAAAAUAAkAAQACAAMAAAAUAAgAAQACAAIAAAATAAoAAQACAAQAAAATAAkAAQACAAMAAAATAAgAAQACAAIAAAASAAoAAQACAAQAAAASAAkAAQACAAMAAAASAAgAAQACAAIAAAARAAoAAQACAAQAAAARAAkAAQACAAMAAAARAAgAAQACAAIAAAAQAAoAAQABAAQAAAAQAAkAAQABAAMAAAAQAAgAAQABAAIAAAAvAA8AAQACAAIAAAAuAA8AAQACAAIAAAAtAA8AAQACAAIAAAAsAA8AAQACAAIAAAArAA8AAQACAAIAAAAqAA8AAQACAAIAAAApAA8AAQACAAIAAAAoAA8AAQACAAIAAAAnAA8AAQACAAIAAAAmAA8AAQACAAIAAAAlAA8AAQACAAIAAAAkAA8AAQACAAIAAAAjAA8AAQACAAIAAAAiAA8AAQACAAIAAAAhAA8AAQACAAIAAAAgAA8AAQACAAIAAAAfAA8AAQACAAIAAAAeAA8AAQACAAIAAAAdAA8AAQACAAIAAAAcAA8AAQACAAIAAAAbAA8AAQACAAIAAAAaAA8AAQACAAIAAAAZAA8AAQACAAIAAAAYAA8AAQACAAIAAAAXAA8AAQACAAIAAAAWAA8AAQACAAIAAAAVAA8AAQACAAIAAAAUAA8AAQACAAIAAAATAA8AAQACAAIAAAASAA8AAQACAAIAAAARAA8AAQACAAIAAAAQAA8AAQACAAIAAAAPAA8AAQACAAIAAAAOAA8AAQACAAIAAAANAA8AAQACAAIAAAAMAA8AAQACAAIAAAALAA8AAQACAAIAAAA=")
Loading

0 comments on commit 6131271

Please sign in to comment.