From 033ec8ab306d8dde87c587985f35520c012d4a13 Mon Sep 17 00:00:00 2001 From: muskit <15199219+muskit@users.noreply.github.com> Date: Tue, 10 Oct 2023 23:50:24 -0700 Subject: [PATCH] snaparrows WIP --- Scripts/Things/TunnelObjects/SnapArrows.cs | 15 ++ Shaders/SnapArrow.tres | 210 ++++++++++++++++++++ Things/TunnelObjects/Notes/NoteSnapIn.tscn | 13 +- Things/TunnelObjects/Notes/SnapArrows.tscn | 171 ++++++++++++++++ _Assets/Textures/Notes/SnapArrow.png | Bin 0 -> 23590 bytes _Assets/Textures/Notes/SnapArrow.png.import | 34 ++++ 6 files changed, 442 insertions(+), 1 deletion(-) create mode 100644 Scripts/Things/TunnelObjects/SnapArrows.cs create mode 100644 Shaders/SnapArrow.tres create mode 100644 Things/TunnelObjects/Notes/SnapArrows.tscn create mode 100644 _Assets/Textures/Notes/SnapArrow.png create mode 100644 _Assets/Textures/Notes/SnapArrow.png.import diff --git a/Scripts/Things/TunnelObjects/SnapArrows.cs b/Scripts/Things/TunnelObjects/SnapArrows.cs new file mode 100644 index 0000000..6eb9180 --- /dev/null +++ b/Scripts/Things/TunnelObjects/SnapArrows.cs @@ -0,0 +1,15 @@ +using Godot; +using System; + +public partial class SnapArrows : HBoxContainer +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + } +} diff --git a/Shaders/SnapArrow.tres b/Shaders/SnapArrow.tres new file mode 100644 index 0000000..c4ac408 --- /dev/null +++ b/Shaders/SnapArrow.tres @@ -0,0 +1,210 @@ +[gd_resource type="VisualShader" load_steps=20 format=3 uid="uid://b1yf18ux4edj2"] + +[ext_resource type="Texture2D" uid="uid://cmaq66vbi80ug" path="res://_Assets/Textures/Notes/SlideArrow_Texture.png" id="1_ol5j3"] + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_1jpfy"] +default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] +op_type = 2 + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_3pdfb"] +default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] +op_type = 2 +operator = 2 + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_eesut"] +default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(2, 2, 2, 2)] +op_type = 2 +operator = 2 + +[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_2u62d"] +expanded_output_ports = [0] +source = 5 +texture = ExtResource("1_ol5j3") + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_nqoll"] +operator = 2 + +[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_ypqau"] +parameter_name = "arrow" +texture_filter = 2 + +[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_l1lmq"] + +[sub_resource type="VisualShaderNodeBooleanParameter" id="VisualShaderNodeBooleanParameter_3hrni"] +parameter_name = "isIn" +default_value = true + +[sub_resource type="VisualShaderNodeSwitch" id="VisualShaderNodeSwitch_2ma3x"] +default_input_values = [0, false, 1, Quaternion(1, 1, 1, 1), 2, Quaternion(0, 0, 0, 0)] +op_type = 5 + +[sub_resource type="VisualShaderNodeColorConstant" id="VisualShaderNodeColorConstant_e28fg"] +constant = Color(1, 0.22, 0.233, 1) + +[sub_resource type="VisualShaderNodeColorConstant" id="VisualShaderNodeColorConstant_uf0bo"] +constant = Color(0, 0.533333, 1, 1) + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_5yp47"] +output_port_for_preview = 0 +input_name = "uv" + +[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_ui6mq"] +output_port_for_preview = 0 +op_type = 0 + +[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_v2j5g"] +default_input_values = [0, Vector2(0, 0)] +op_type = 0 + +[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_7bypq"] +function = 31 + +[sub_resource type="VisualShaderNodeSwitch" id="VisualShaderNodeSwitch_nw1c2"] + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_13pou"] +default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] +op_type = 2 + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_p0v4r"] +output_port_for_preview = 0 +default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] +op_type = 2 +operator = 2 + +[resource] +code = "shader_type canvas_item; +render_mode blend_mix; + +uniform bool isIn; +uniform sampler2D arrow : filter_linear; + + + +void fragment() { +// BooleanParameter:35 + bool n_out35p0 = isIn; + + +// ColorConstant:40 + vec4 n_out40p0 = vec4(1.000000, 0.220000, 0.233000, 1.000000); + + +// ColorConstant:41 + vec4 n_out41p0 = vec4(0.000000, 0.533333, 1.000000, 1.000000); + + + vec4 n_out39p0; +// Switch:39 + n_out39p0 = mix(n_out41p0, n_out40p0, float(n_out35p0)); + + +// VectorOp:13 + vec4 n_in13p1 = vec4(2.00000, 2.00000, 2.00000, 2.00000); + vec4 n_out13p0 = n_out39p0 * n_in13p1; + + +// Input:42 + vec2 n_out42p0 = UV; + + +// VectorDecompose:44 + float n_out44p0 = n_out42p0.x; + float n_out44p1 = n_out42p0.y; + + +// FloatFunc:45 + float n_out45p0 = 1.0 - n_out44p1; + + + float n_out46p0; +// Switch:46 + n_out46p0 = mix(n_out45p0, n_out44p1, float(n_out35p0)); + + +// VectorCompose:43 + vec2 n_out43p0 = vec2(n_out46p0, n_out44p0); + + + vec4 n_out14p0; +// Texture2D:14 + n_out14p0 = texture(arrow, n_out43p0); + float n_out14p1 = n_out14p0.r; + float n_out14p2 = n_out14p0.g; + float n_out14p3 = n_out14p0.b; + + +// VectorOp:11 + vec4 n_out11p0 = n_out13p0 * vec4(n_out14p1); + + +// VectorOp:10 + vec4 n_out10p0 = n_out11p0 + n_out39p0; + + +// FloatOp:15 + float n_in15p1 = 0.00000; + float n_out15p0 = n_out14p1 * n_in15p1; + + +// VectorOp:7 + vec4 n_out7p0 = n_out10p0 + vec4(n_out15p0); + + +// Mix:3 + float n_in3p1 = 1.00000; + float n_in3p2 = 0.50000; + float n_out3p0 = mix(n_out14p2, n_in3p1, n_in3p2); + + +// VectorOp:8 + vec4 n_out8p0 = n_out7p0 * vec4(n_out3p0); + + +// Output:0 + COLOR.rgb = vec3(n_out8p0.xyz); + COLOR.a = n_out14p3; + + +} +" +graph_offset = Vector2(-1296.02, -327.954) +mode = 1 +flags/light_only = false +nodes/fragment/0/position = Vector2(1500, 460) +nodes/fragment/3/node = SubResource("VisualShaderNodeMix_l1lmq") +nodes/fragment/3/position = Vector2(760, 320) +nodes/fragment/7/node = SubResource("VisualShaderNodeVectorOp_13pou") +nodes/fragment/7/position = Vector2(800, 0) +nodes/fragment/8/node = SubResource("VisualShaderNodeVectorOp_p0v4r") +nodes/fragment/8/position = Vector2(1080, 120) +nodes/fragment/10/node = SubResource("VisualShaderNodeVectorOp_1jpfy") +nodes/fragment/10/position = Vector2(560, -80) +nodes/fragment/11/node = SubResource("VisualShaderNodeVectorOp_3pdfb") +nodes/fragment/11/position = Vector2(280, -160) +nodes/fragment/13/node = SubResource("VisualShaderNodeVectorOp_eesut") +nodes/fragment/13/position = Vector2(-20, -260) +nodes/fragment/14/node = SubResource("VisualShaderNodeTexture_2u62d") +nodes/fragment/14/position = Vector2(-60, 120) +nodes/fragment/15/node = SubResource("VisualShaderNodeFloatOp_nqoll") +nodes/fragment/15/position = Vector2(560, 140) +nodes/fragment/26/node = SubResource("VisualShaderNodeTexture2DParameter_ypqau") +nodes/fragment/26/position = Vector2(-500, 400) +nodes/fragment/35/node = SubResource("VisualShaderNodeBooleanParameter_3hrni") +nodes/fragment/35/position = Vector2(-1580, -260) +nodes/fragment/39/node = SubResource("VisualShaderNodeSwitch_2ma3x") +nodes/fragment/39/position = Vector2(-600, -220) +nodes/fragment/40/node = SubResource("VisualShaderNodeColorConstant_e28fg") +nodes/fragment/40/position = Vector2(-840, -280) +nodes/fragment/41/node = SubResource("VisualShaderNodeColorConstant_uf0bo") +nodes/fragment/41/position = Vector2(-840, -140) +nodes/fragment/42/node = SubResource("VisualShaderNodeInput_5yp47") +nodes/fragment/42/position = Vector2(-1900, 80) +nodes/fragment/43/node = SubResource("VisualShaderNodeVectorCompose_ui6mq") +nodes/fragment/43/position = Vector2(-400, 60) +nodes/fragment/44/node = SubResource("VisualShaderNodeVectorDecompose_v2j5g") +nodes/fragment/44/position = Vector2(-1520, 60) +nodes/fragment/45/node = SubResource("VisualShaderNodeFloatFunc_7bypq") +nodes/fragment/45/position = Vector2(-1200, 160) +nodes/fragment/46/node = SubResource("VisualShaderNodeSwitch_nw1c2") +nodes/fragment/46/position = Vector2(-1000, -60) +nodes/fragment/connections = PackedInt32Array(7, 0, 8, 0, 11, 0, 10, 0, 10, 0, 7, 0, 13, 0, 11, 0, 15, 0, 7, 1, 8, 0, 0, 0, 3, 0, 8, 1, 14, 1, 11, 1, 14, 1, 15, 0, 14, 2, 3, 0, 26, 0, 14, 2, 35, 0, 39, 0, 40, 0, 39, 1, 41, 0, 39, 2, 39, 0, 13, 0, 39, 0, 10, 1, 14, 3, 0, 1, 42, 0, 44, 0, 43, 0, 14, 0, 44, 0, 43, 1, 44, 1, 45, 0, 46, 0, 43, 0, 35, 0, 46, 0, 45, 0, 46, 2, 44, 1, 46, 1) diff --git a/Things/TunnelObjects/Notes/NoteSnapIn.tscn b/Things/TunnelObjects/Notes/NoteSnapIn.tscn index c77d169..ed6fc26 100644 --- a/Things/TunnelObjects/Notes/NoteSnapIn.tscn +++ b/Things/TunnelObjects/Notes/NoteSnapIn.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://b4osxd8lxmq8h"] +[gd_scene load_steps=4 format=3 uid="uid://b4osxd8lxmq8h"] [ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/THNotePlay.cs" id="1_lmk57"] [ext_resource type="Texture2D" uid="uid://cr2a3fc5nu7js" path="res://_Assets/Textures/Notes/SnapIn.png" id="2_ipqj7"] +[ext_resource type="PackedScene" uid="uid://digltkd2gj66n" path="res://Things/TunnelObjects/Notes/SnapArrows.tscn" id="3_tg2n4"] [node name="NoteSnapIn" type="Control" node_paths=PackedStringArray("noteBase")] layout_mode = 3 @@ -17,9 +18,19 @@ anchors_preset = -1 anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -36.0 +offset_right = -144.0 offset_bottom = -24.0 grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("2_ipqj7") patch_margin_left = 12 patch_margin_right = 12 + +[node name="HBoxContainer" parent="." instance=ExtResource("3_tg2n4")] +layout_mode = 0 +anchors_preset = 0 +anchor_top = 0.0 +anchor_bottom = 0.0 +offset_top = -205.0 +offset_bottom = -65.0 +grow_vertical = 1 diff --git a/Things/TunnelObjects/Notes/SnapArrows.tscn b/Things/TunnelObjects/Notes/SnapArrows.tscn new file mode 100644 index 0000000..fc28df2 --- /dev/null +++ b/Things/TunnelObjects/Notes/SnapArrows.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=7 format=3 uid="uid://digltkd2gj66n"] + +[ext_resource type="Script" path="res://Things/TunnelObjects/Notes/SnapArrows.cs" id="1_dqasq"] +[ext_resource type="Shader" uid="uid://b1yf18ux4edj2" path="res://Shaders/SnapArrow.tres" id="1_dxmi1"] +[ext_resource type="Texture2D" uid="uid://cedfe12weahhb" path="res://_Assets/Textures/Notes/SnapArrow.png" id="2_dipvr"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_a2kww"] +shader = ExtResource("1_dxmi1") +shader_parameter/isIn = true +shader_parameter/arrow = ExtResource("2_dipvr") + +[sub_resource type="Gradient" id="Gradient_46guk"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_oc0to"] +gradient = SubResource("Gradient_46guk") +width = 1 + +[node name="SnapArrows" type="HBoxContainer"] +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -1080.0 +offset_right = 1920.0 +offset_bottom = -940.0 +grow_vertical = 0 +theme_override_constants/separation = 0 +alignment = 1 +script = ExtResource("1_dqasq") +theme_override_constants/separation = 0 + +[node name="Arrow TextureRect1" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect2" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect3" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect4" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect5" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect6" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect7" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect8" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect9" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect10" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect11" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect12" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect13" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect14" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect15" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect16" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect17" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect18" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect19" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 + +[node name="Arrow TextureRect20" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_a2kww") +custom_minimum_size = Vector2(96, 140) +layout_mode = 2 +texture = SubResource("GradientTexture1D_oc0to") +expand_mode = 4 diff --git a/_Assets/Textures/Notes/SnapArrow.png b/_Assets/Textures/Notes/SnapArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..310cfb785aa86eced4444cd53d10b5bb7270f41e GIT binary patch literal 23590 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�P&o|FX zS{@}X^`vmP&LubH18nY{4k*WL%7b~QCh=X#d-sc24dQ{qt_9bW>tee|wzz>fh0V=~ z%{F4=+xl0l&#C`m0px9;9(SP+y$3zkXF+*3=Rgd!U7igHQ4cD??I~xtS=6nfzms$( zPcnP-ffg8XW_rj&v^*#@0pX@XWt9*YiKEbqzqY%M#AR#l!;UyM5!#N_W|FxC+K_bN zsiEOhmT+~nShJ#IxE2(yj+lN^;R3zC;CogepKmeW6KIJCdoKK(paKXlkrsSJ&u>R< zUw>WF(LIgcY0w|v)As?0vIe3RT+KvU1|AK_=fLg`8X(WuhpL2+0QvGRL zoA%v8nd`pyqw?o8V;3*ZJTd9pJ+w zgWr~vVI2_$t3$%#_o7xBHjtd2tmkSi9>0Jo>sror@6wNBkE8OH>Y_`hIi4(9x`mS< zNjy?xklE%P_29S2FZ+*FRsX{5q7aPm1v*Lh1_OlLBK4CG?ALaW82Di&MKR zS$|1=g+mn!#wy-n55+W@*}0V+=@Ze*u+u#*#U_1t%g3ept|g0kt;iVuGH$sKFhcF8GB$EC2y^>3? zaT|6_YBApvksr(g2B6I;z#1dK&o~~dzzS3_llRlM|2jqc5$ls1JR5u5zJ&Qcs=D~I z2>E@BSWX}vN=gB{6b8^JjWU=3%&~LCRO$MQ;p!l1w<85x6rVSwi}_c?CplA?sEsRU zF3Qz$OLstFoz{ z5c4~7&_|2H@}TZLl;hTAHcv=o zNl$3hQT(MtRu-knody>?of7x|B`hQ;!jP#nT<+UDDTz4XTTTNjfI=TqUN*wM+Moi;5vsLpH4=}ANM#|Mi`=g@Lm@6x1!}K=$@C(DWTZ7 z)7_GGQL`AQ01B2D06vEb^$d2cEmWtyL_{?PfqS2Pk+@og3}8knem@^lGB zQ~;H%6O5n-Mm!hlT-<@7V&UTZrEip9zMh%jAX&FWgk}HuBYX)Te)t;FypWS&GIILs z^KU5?`1=0c4k_(0&&$spaSTSZRM?X0`#7(W9<4SSx3ty?6C6%yqK()^@14%wpWQ3s z#S7f{mMBs2ewSfz5EGR?iDby9LBD!6Zmmc0*rCgpqN+`)822892?ixP;9r?eO+xY> zE>P^SiP4utrQ0R3k4KtIOg9%4t;n(7vMJX$XcrP<&gRn|*hu~|Af7g={0^G?FWkn7 z;VP+BSU+D{E(nAXXurjWWAkhLkfHWxl&=0wQ?+#R0`ei`PB;EBNoS1y3C~Lu2_{co zB5Z)E1d%8Xhh#GY`%6(FCICft`Mj5~>-<2#r|GmdwshGP@6tSz)<3^AY{v{uZ_br_|6MIU=jT2X z`E`Fq#k?i`d(~i2g#6i3>Jt0J*6hUZ(!196CJqZ|fN@(?g6Igb$IZ;IJD_lUhxQ+! zzI+7n?D;D*OA8_Y-SQgwNH;#gi!cOfz6chY&yV&mo})B!mgJZ7u@AUw=@X2y>Bs0p zg5}3mOvqN7Zn=?H4*gx(82RZwQRag`gN4LOYMoJq{}LYr`8)}rin;qOl-wC`xPo3Y*<_lAP>3JMm9r)1 zw=|1)Ywve~zK-lc;Q#AxCPx|Nt*#!f3cCs%sIL*#!c!+Rs={GT~)KQ15??0SCF`JYer3?n6a;6#CK@s8rH?@EsH}3-T#?R zg;CGH03^2-eHM_K*LU0vj}77Q!J8b!M6@(yOL7BW$>KPSxfGvNZn7@{*OOb)P-{4I zau@S$a72Q|;zuE9*=rYxi<#}G4mGKX>!2Gb8^)l^?KQ035Q{Oi3+Iril8(WsLoK!mVfl5Fc(FXa|_23SCPhW4mGN2_T|${sgJ{(V9q zg>{XDpoElJETGUf^^Wjbvst%sn1V~ymeXH%$-Ii{cbznf=U=_O`2Ftg<>4b(@-k|iiO#MHPnHuL{#0U){fnsA)uPj@9#Br0e4sd4^#H27@+Ptu<%G4a-=)G(zy zI{FxLSuZl{B7!rX{>J8HOR7Ck=lLc5GbZjU$As@uNAzE9A~FgoJ?_OcPjs`?SFcn` zR!Qe^?XomzdAtx9s^+GjHpZLlCc2Ay8v`j-8r8={=IUuk&E_-{>f9e$?+~v5ggPrO z*`Xg`VM*KH1S*2RIK7PWm{)z{YJxDy$Wnm$s}l4~acD$4vL}b8pH9=(y+y-Qpi_U) zciy}vBNeRmeqmUv_O@$C8JEud`r&w5`6?HF)luhm;Criha`Ox9F)~^;Ns~WESduq@aYhkmt z`_L5OT_#85w~=-a1B~%TK)_`vV&qx@|lD(q~qC&vP{N|5-yc*$8ZZ$pR>z0PhjBVLn1UNQH?3 zZ=U9+m}@R9A140jykFDDH&_etVAF$qMfHQT^5~rXcI4B@2bXqqkCb- zT;z%O+;32kBIxwatsnt!g7iFb(TPbtv9QU@6(l{4`p7Eb>KQG&bXc)#U1Ru1&X#){ zJM=VxcRnD9u24b{VLNhP-ywwf#Z`a*Jy{O`C)(xQzMpcWz3m2n50Jk$z*HFv98D*!m`Acp0Fl<*cn4FGCII)4)@oH4q5T1% z7f;&Q%4IlMYm1qar< zp3&kX%`na-hI@GHv7KIRPO|$4w}i!wK1$_x3GRA}95?Ajsf{ ztNh@ce_qi~*-dIh4EB&nP_gDf2Xg3IqB1T;a%p(J27x{4pC|@=DLG3z+G1g4TrhFm zCB6ZgpN=<6v*Ml>-&dPks5$hu@YZ7Fb71p&VR2B2)E%n_&TP#GEy=eHWP@;grq8F- zf0B?SBYO*D(5vb(&oD0D(5x$XE~u{}`watF2Tm80gb>DfH9?yr+N$L|l>cN*tBKUu zsicj-T+$zssgO&z74!aHdosf^%!ns>Hi0)NIQ>BuRu#IV*2f3X&5H*rjy0*9wkJM9 z3F!`eBoQ7^-1(m)3`zb}6-U!hTq}nZsjCtY&}Hh8ylqfrb!L!QCTwwEVaKafcs`R178@`mD4%nd1LUzLzxT*fONGdx&O zsc)%-#iNWeMUp0Q#$n2SQnh9M$D@Hu`By1AG2q<{L{u#t+_UtE;W27lNAQHLelapl z-bsDs*jv6n8t}(uKN!SD+=o0w!&`*T`{f$(8NH`$bRr($08XD}HnmvRe-UA??C}$J z;xVC7RR42)64^`7mx|eYabgl}|JF5&+L*uRT`&c@+LeMCg+FS#g1rF(g~@!cc|TRv zY8y$w`+_=VAj=qhVLB6)jwS@7t$MIwf8e}eq*$H#y4p-AL73w(R>%4WZ`{iizSy=j ztICUNSgPoy?@bZ);br?)7DBA>&a=@p|iQ`0Yi#YEBdn{SESH_j0=zfe#IxKAV^6r%a_t8yPF2Wuk_ zSHlPM@{rMXPde=92^*P}YoV=_gDO(0zd{Dj_W8PkFkLu*K8*K$X4VqHgWg$ROR@Z= zaYb3H@Wt~y9D-#v$Hk)*7=9)`bLA*I1haP?K%))j;^5yGZ-1wOPJY!zCQsf; ziXl4)rNU|pW4E13)}oxUqN#>6>G_#_cl^sh7Redu_b+!xS_Pk#7+=0?8+={H>dCo>>RyPo;i3_gY-I6Nv=*eA zVA*iv&wQ&tUiNd?mWvDTg$cuY@P?5lrMmTM(oMGScWZB8vRb-*R-1kP!^{`v!ZWoZ z!xxys6}wWUO1IYz=%Q4|ou3qZuwRT|D99U)xv5zE348P1qdzo~1l$m6sO8Rw;o8B3 z{=^Btj34xUs8X2yUN;y7Y%LSB+I$o=c3_ z;XkmAsvF)S5+v$>o{HZL*~;UUUp*wFm8F)=*)j6ke!C;1zZcBV?>Tk6-~}fhI4UPY zJ{Oss$E>0r?y4eLQ>)7u*`@fzbo+sY5rq-r7b{N#bxpDd&!%ssD6R!gygEI_F~bN3 zLhks#oU! z*l2BUVDcI*$0>6%z$qHD+QQZQH9>z^5yzOgk%SXr|CjFSZtDY<&O3 zsUchPpzt*liT2cyYDTh`2Iy~@OA-P)t@)iwL4T4`-KXNU)HK#g2J<&zyQJZp$0=tKrz;Z4y zr3=WvV(k%jfQq-A1m7fMKVpgiVq1A0?VyVTWKm$&UyaxkJYTnZ`}G&g(LW04Uk{ne zpQ|eC>#t~>rKqb0+*sMHc(>4gi-7+tRyhB$c_r?lBB_6XB63@F$^z88e5tw zsk6mUJcH$6L!IgdCvCD^?&2X8tsQB9UVq4$yi8|oiSDlBQQ)q>H4THmfxo8q1Evrb zJ_j7CRaPE$$<4ywY1*fSQU zePv(Wy3cIa24yF2MzBQ+Kb>X;FPl3RA`5;NqR}Wz zVae)$xL&?tlqMdD&eQJ>JDhZb0kv%C+qDN&g?TT>xnZ-A=w1v$9~uez#cm6NACbVY z;8HyKgBRo!M*3*uW(ye{aE>PDuWPOnyT8t?;elRsK@}|R>4ote{@Ft(U*s2DZ2I{q zo3SRs30J|5=R{7pfk?xoqNJ7cKZ?@gju8tH)mhpKq^`&OP3rR@U*YnF%OVVa3mF_Q z<_gbJ6N(%J*l(DU#QL4_EC2-tKF?IXJyQ2(sw78nodcq(^Zg`DfeXF^n=p9lBZIh( zCDJzHk3@#O2CHDRgD5PNaadL;-iC6RKJbFSJZ}muTUsl#k(58PtJR=6%W*2zdci}q zSM?7>)z3>>KwE~3G;i2&r~-408t9m3bEgW4Y?`uS!K(?)<_I=7Lms4?$zlgP|C?KEf#rP7!#!2mMU z5t9dW+JwM0V57=R;e^x#C4K=zZI`+iiWRm{Iv&E8!eb|_-MVQpzPK9(*8I_qBge-t z1t|Y$ft1?2+UIxz;uJo7jAb;J{`Ux0Lf?B^;d+oPL;ML@sbR22QDPMB+#!67rlL70 z+8s^%Tf1~Qk#&r6@D=q6fqhrnjPhvb7mL+8XY$nsBUY!6RF`?%BiB1QDD5Y~y51&~m#Zse(#?-P~2wt9oh;X)a-X$`2J?;o;J`#^eS2s>Bo#tLbINPGjA1}2^sOk+Nb3>r(dp3P~L2#RUwg_1Uy0n7ri zVwv4l6S!aZ2k1%D+fOhrG}@*b<1Bh;Ihc_JU4M{5Qt6bnVg!N&4#nnKsMhAy+jR7q ze?uyiK$8)dz6jW0(}GCC~%C0sXT7^bhoJ}RI>yS^Z7y4HmWgg`Cc z8Y03?ff-ewSc+In3iBcOPbN5dR#PiAP#Eq?p33U7HmZt0;|TRKFQ6`fq_+D<{dsZ_ zMru7#DeQgLc8ND>AXY#@;$xBhs$tocB5Ft-W5K#a!bAKs89B1J{x~xhLqu^zZyOzK zeTL|$t8Ux)*Jsd~%4K%dPiL~J>g!+k6wevSq6DmF%vBK+FN1b<1PYdhlY}z$8vUQ& zC6=QMdRUX%e9J$G*15y4Ilo$GDJ)ljOuXCuLLX7 zs2O}bN$MFheji%k>4@%|Wxs1vae|${ff<|rZl~<^y}}MP_x50(62WqxWZnox@uWlr z@KMk3fF3YiWNNb6Z86n0&H`A4Gish~^M+cgGOpF?7C``x<*~<)q#sZj`s+Z}eiSAE zc&%+Fx@4rvJD2xMuFh9Y0J<0wBaXKOlwTh335msoqjoXQwZ22*rvNT;!fYreg+Q+m zJGK6OQmwv$IP?EqzQ^MJ zO;AyIZy^RWD$TtdQJuH~udiK9Ewg}uZ+K|Tb6?4o54aI}h-L>?`q~&SiT(xq02Gpt zw9T1ezD4+uE4A#$G3lJ=smS1NS}=*|rlA<~J@QD3%6IWXPgvGSIywG%jsh(L#P)~o zVYlr?hSiwsBwU^v$)~o7%JFipuw}<>>mw$PT?C1BO7*iddrNrzd zkRmIaUj7Y=50FcU&|Xb1R4aV_E1izwCoFbxa}5QeH;O`bxGU%u;qg4oTAx`xpv`&d z^I;2%JZA6QHxsArF!gydifruGNqlEPl?AxUQssQA&<(-dB`l8+`EMS*TdwxFQTA#_ z-2#|lTf(r_Pkv`ME`Q|szD$Ji%r1YeqO3>t2LS;KCtKC~!eFZJd~_N1K8wx>irTf+ zyid9Z4hOP#1IN>!rfX7eIqhDB@mtf7`GAL8Wk&3`P5jIlAKy3w6NjTwd5P~SX6=IK*cT;OrRfJOg-K!hAoefpny znRrv78qyV*wTozpWOYr!Gkrx07M*uw;xIs}@nQ(n(JOUNdmw|IA1jX(m|8x65zhoM+x=X6IZgy5v%=H$BIs_0W*|8b{;r};Fh%+0 zT=84Cno<>s?6StnUAeLWihnMe_^%4<^^YLi2(pB}&N_T3izgb7#B?q03xGsAs~aD; zL+i8jw5^XSn!4zp^BLewJ;eaV7rY5VAZ8F&rRt89;?jZL%qeR}y7V~5xM;XDJaR|1 zFn7Gd0G+irvUAHoR)mtw^bNiK&77-*^yYJv6hTkSSIQTO|%Pm4k%&vDx(` zp_*~aFJ)%zEf7f$eKjINhD$J6zkrY}S9C7JOK;Yj@v_0l!d#E<(sVn@ZYO`sX1*$1 z-OLuh1vWc{D$34!ww5dEvp^NDfQ~-aDbp_(3gG||mx`U^PLX^0Zfuxq>CLov3r2Nvu>j_xJI4U(G`NzlHpWW5*rLCUxG_mWh>Gtmzv#Tc z_y$I!6TMmdNsD_=Co|l#+`~xn2LBIUGci|KGYn&xY(qR(NW?m!?C+Zx>pIraia-C1 zdO*3;@9PXw(Xgi!-d)Eqp)H?le)Jv#g044RnEM!?&x(~t$QLZBz7pe>2(m;BvuG_0 zT~*&lDUr+PSuQCLua2=*=*`PJpV<#wU|m?;iO>Pc*U}rqD-cfkAm>L z=FyTVS%3d)^0mbr8tqZvI_=FSToaY1-JyMoyk)iOYtaXfa%-nAI!KSP|8S@|s*BY_ z1ks&v{DPc+`I_m?4jpHB8Z1A8Zi-bV0{QQ1Jks>&mPZs#RDH~BYA8io^-28#84n?a z#Lmm#0#3(fypfVc-hy;_KHCZUol=qU&_fTOtfK9L7$$ubofq{l@fZJo3X&Wzky9KA zemG@}PII-PRQU$3;~_L%&`FbJ;13~8>Ik3EImuLhhUe)tN|FKeTha_P+>JTo!U@^U z1VK2H#F*DI?;N3$Xlds2NaH}xk-!gRUyAr?iaC(0Sr4aac}ksl?8^8v(AdMTP4nuP z#J3lwkgv_$c=p|PlD}z4-5x_uMgwVK;OA6cBzw zXsVg_g$7)tO^KxeWHwWgihsfN!b~WdjGYEzTWkqoXMzi&l|Xtl*}W!~cF8iN+Kmc> z06H177QC2^*%m8W!-|vB4)4A<(q!@FVxe;99hr&13S0U=(r){SGc!e(E zb_f|qh-hLrZ%`bl!kayoesl~7Ra(FD{o~H*joYlgt&w!!;G9dgi`i30Nx^k^fs9vp z4@bFlMx>~5S|P@k$Y;cfQ?t4*3mkYKVouEHd1QnQeAJ~J-8vRWFqRP1%*IB0zalVd zYgpJ2(|Oo|;bKhzA-^pO8fk>4$^VW-@T(H+!J?Cj4>Zf-B5p8}gBOtG--_#!UhA%+ zXGja!Z};g=?VOTi#?nw>;`c_0Yd=v2IGx_KeJumXG7_ef&i6?ns zM3ApSHdXvNWV8(-_*L|AmLWSl2+gWr!7{{n@m!HF>>wFSAZG{z^D2S?3{7%) z`c67#7CF43v-3$Ml4_39)Ii|X;2*QM;dID1mtu{RG83!{4T-@;FR#W9#3F)CErr*7 z2o;xGO8woqewS09SvO{zDnE$WW!KHU?i0ag-*a38AWtI;)(UxkAD{>en8(Iu=IsyI6!HFO!Jp@CIUln(iP&TTOawmSV*#_TvRC1`}6gq)RN2* zlITMj{d@Z~N&+~2RWeo?rs4o5o-S*sIrk3Gk|&qz+csi4$M_LemBD1`s0XV|0_qZA z^>hNW4$CyWX6pUmhuE{y<0fR(qpDA;mr!gmNnpj6iCz<~vXdgIQf2J-OpS4Hvd$&? zKcXeHulWa*7Emap#zUlBRd-M4+~?s(hT<4 z!ReitfHA`G!9+)2LUc9vpB)va1+F4>T&6SSudGZMFkjUZQFd|?SWBrFfGJkM(tdid z@J@N2{qyj-Ft1?UJ|D{muXnQ(5aOzvg|UCyTC4n4bTz%pq1@j3vM^ugGWso`&XysT znU7Q$g_i?5c!wUra>zx?j~)~v56eoTa7TR~_f<9o=cvz8+wY_nEkEilQA~t;gs48_ zoCDW2vAo?s;GaG8yEB zKaaZ7K%DuiExpc};h4!?4nrL{z_f&s7Kqdp9on+7f@FUUAo+Ou>L8=XuwC}}35SH5 znG)sQ7N@sLo=zm-P@|H){4VONtYGCHzzl%HN1V);Rbv8Y2`VbU>#)&P@#>$IX@+#@ z{Hxl;E`oNsRGfx*9MBS4XXtvp0h?-R@1}hxtRc|#Yv6lJ$nWb)Aira(@XFSrS}Yg~ z34<~bcgrni?c`xt@%I@Xm{A~|qq$%*`??R2@nM{}0wr2oeW+X+!nXgg3FA~mn5nlB zl6SRgD@^EU?>2ghszsXVjw1{J`eK}Z1wt)aEfnZk7y2TVskC-7vw@l1PbQ>Ur9{)l zU;+_Z9ty-5J$FpH5*8{xB6<;^purz)aKQymwH!L3Y+kdwz`wTwC`$i(7oZiNfhVrU zX4XrPUDxUwm>!^XM#$!C_VDO8|E*xIw@v;|>?$0a)Ang2L~I|3s;B#g5JHE1&df-O zWYT11j4Yx{^|oxvi?rRP@mcd{g-8-9z*dznfV}%tsU>M?Ozs8tRY)kVyx?*#7A$4z z<3aIZcCaeLN0S<8(sPooxBQ(PtIUJKrwH7RzO*{!lhQ$Iw*o>h-&?P5ccKqxmiJ-? zPNuqz5%V7ptQ+mSy6yj0%yoam;e72~eJx86Eqd=3t9Og&y|?JB2%Oo+gjF zD?^0-3HL^NNM6W*+_{@S5A;uDtRW*RGYJ?b=0DdNX^|72ZtCq|*2}jfSS$Ja-V+?XEjERW@H>wjrJ#^{820X`yv>(|#$fD-FPG)&1@jWxGI?ga@dtw;6s#{wZQUD``YA^JT+os(h74 z*)i*;NKu$B0%!k(22Q|5d|bi3te%5jLd6y^_PjaAmhk;1R%<^G>C6|r^?xTD&~X95$^KIXE+-A*vHoSjTkKUSJ5{T4==Rt z_|t1O`mL2WnWFiNtlH49H<5A%lObaO855s6bji!c%~IF>YTpG=E0b6Dc(!wJ1gT)u|s${-!fqtEJd_)qJKUr`9oea{NV_|cS? zHjR4oVp~lu#$<^IsRQn2d=FqeCXT*4o8q;tiMG}5tlP=-^cjMSDf$NQTJ@yAXfp?{4#^pT1Nf`p?}CEKkRRkY%kHtS`H=d)g0Tm$ z7+`j!B0&f7YnmfO2?r9PI zPZCSAB_wq{SpB#drGDUdv1u0`s`2Hoy;toBaDMi(%&oQoU#OisN97=pki?Rws0sbT z73D+dut0T;2XIDM-hlDUWu|tu)VL=?N#_4*uwFL{ZM%(M`4xvl5Z^O_GD4Lewg^0+Qz?KXLQlywGM?{ z$-3#CgXxpps}tTZ*){+@yWZXAkl-QfjuSYwa4;7qnFrZum1l09CtaGu(Fw58(S3Xz zcs}MARSVCKtiy`?>a68F8{6zRACca3xy)N7RI*lk-eaE)5jInE@kRJ>I5 zw%m~4;d$u!74n)TsnEBSr_kG#vb?eN-Sm%ji;>emBG!`sg#nS1A!5h|$Xcirkr#9iS?7GGmJc%EgUX zXwZp-ybS-xVa1P^OgAl(v~H05Qg_=%+w(?~pXJE!RPb)@1z`fz3^YzpV)qK5knT4@ z$04mgLSWpJDJh4vJJLEqQ-DMB5E1yOvGrl%HB*~J(3KK?O- z#;l3f`U}($cDBA=;>)^x+D*js@GR*%*nor;4c^&68SKSQPiCJAWa33@zg2__g$@ds z5JIsgAChD$lVW2Zf!Z@uacKT+IaV#YME;cDON6HE&OXOVis)z-^+Ith&PT_M!kWnA+Rl?g=5~bQ1}JLl zpAwbc^UVjYp2muMYHWqFRd6&d^vBSAxw0;WM8M`E*4&_z3{)&h;~!XMQ*Wv7(e-FG ze?{z2{J|K2p&U#`NW!jD%CM)%*BQ@M)8wq&qvVpOyeyJs=3MdNo~$MBE1V_ZP?c67 z&;ABABGt+`_Rd-O-GSNOQnIsZ6M6Jv{0HXjRC%3lV!Ei6%gtQLB}r^TN7E*+??;wU zY=6>?!_A|%-tmXPUOThkkqL@4ecdyLkL>nR?)w)%F4~1D0OVP}CdLmk;Z(td!ka36 z;#)GIwkD@dwgDf!#CEaMsN#ntLkepibSnJw!p|3G=b5PnoFWVQyxM>I>IJjGe9}*_ zvIEDm_sxv+UEf~8PQFFEh6s{uu*`S7{0B51;ZIk@P^ix)m5@SCllk`2NpJX`a=_cReL;lqus-Gw~%;mXo$hx>*Qa8IOr>}}m zNlF(B%ySq8kB%E4ru>re35@*I96>Qwy%u{+?wsEJQ8%Z#vXkD^3)wq;qhFfP)L?WE zQi~Iq(|q|k$5av=TfNlliqVR=mtX zN2NrO8)rtO&)!p9rIbE5s0r~M;n_T?N(M-6FJRTFFQ$-&LY>11%{;6lQ42*(oA4IW zOmU5q!^!H7e-wcBtnIDW60lGa9PRB5-6hLRU?D*{-^`(7y^P>wqIK%YZ&dhx}D-x3FjcvL}^8yQFKY zYxBqoC(fxPo{oACM4xXzDI`bBFR1&3oQ8XI0VGXdfB*rfri_&C7jwMe-ddA@vH$sa z61Yz{`j;@&WQma?3{=5h%}Vi4`w^ZUk=gO0+3AoB%gqfD_d0S{SL_5wjl*lS&7Dj( z`9n85yWZ;_+KQ6h*dJ^ihVOJM3k&WBQ_5$2$DiOn?n z4}tb5bcGAZjw1Asd%9)^EQxd2A$CfS_S%Zf3^^;tTS!4ly@#MXwOMS1dZd0S+tai> zXDDKXeGHe1f#SX(8mxjvGi;a@(o0n0}a9%_iyC%*xZi(8i@XE5h1!7s)u?ZgEJhn|Uf95dm}Ch>&pFlMIZ zBB8YcuN8N02M*JOTp0c4vEQHadY_in#ay#3We3>UBZ0qM z(g|jjfdYwDsBuYDNfc&}#mq7e&J=X_O^721j}24;%z5vdOmtP>mDp&d&(N>B9)w$5 zl?0Yx5kZgcE*6F?tS9jpS=rMC#67pb?=N{c*H}-eyT^ZP>l#S1F~l_ zJDwzguPg3N`HKwp%M_#dRWvAgRzH#f5I3m2!e88p0P~K^?uS=@Sh;Mh{zck?!BjXzd;NXPt=ib@hUlnH|s+;!*06sv30(n zDBb&8>nr_29m>X@7v&?*Ku7rRVWkiAfl>Xe7A`!5k&5+nyFw;C(_^Y}5bft@XK|n9 z{!kT#5i|E-;cbfd;co@}0c#?deqH95sV!T7^+ffQIp zhF@UqjPtuIFq`hE&L-4vQw)Ovm&{{%*^&%fGw^yzS=fR9R!@FyHg*^=`27dnk=?+^ zh&+@sB%(;a3awn~S9hIqAoq2-4TX(!q;JkkJ3Z=F6S2Jb=Z&jPu7_L{_p!%R$jz1q zM)hhbakR#Qsh5?~UnirVNcBFmY_O%WHd}NQ9-uYh|R&Buba3ldPgjg0}E=Ez+{c%D+5ob*S*o}@jQJ;!WDhz2suTi)V*i+ zes8%A-U*Cf4x;0lW87GfkUEz6%ub+AJnBBF@+P6UzTH?;07BNX`z_hpHF8!m__j;b1?S318 z%)oAHx>ORNMcFrjP$-( zRE(+#GxLplzRn^#8ej7}uy1HfaQ2>wc+?yKP6{*H4W!hNf%vt4S!>3X@Gpeff7z4@ zglKSMXzzrRPV*;ZIV=q2)4z+ju4k*+4zUGbXN+{b%Z$G`X6qxFfX_nFJxOA6LxEpY zv`WYfhfo)iYi!Eyb5=YG!7^jA7*SO?dB-+a6XJitPcK0xWP!HgGZ|Nk`6mRUhTy&l z+x7=6&U!+zs7kK|dT!5ZoS=}{hG$+}VXUcRZ<{>2O0V^{u?w-5tyrnNr6T9AUuzhs zZz&M5Z}-ML;gbmr4(FonRaiG>(4>1YI)KrF{SdMiB%%Qvi-Y_FdK@af#-bybuG{8iO3C#Y+?GuCQpZECmQFcb!#AE3XZqT2oSAwqJ6f^qTT;z3XS*?wrAo3W z7fB{(SdRu|Zb-XvK!}X2QcqMj;sN@0U>S+147da+6f;wBfqvpIT07e{qjLt6_Fr;& zUeMi2KmbQ!?GFkP@WnBenJzQys#yNVBzN58VbEjL0;iFPO1TM+xzPAUo1?hqj&hVX zYMx#&LAxK&g76=f>*7>z+)hk}t^~~TVtj0P;Ubpa7>vZlNL7}LR3cIOQB_Mh4!~8# z#Ck|dqcPb6&5w;OMiAuNQL*n5G}xh;a$e#KX-<*!xD@jGN2}Yf7hb zhO`$AjTSi4ft2oA!S8%%6unpxB+Hh|yUXf-RXryK0-J8GE1FX#&YR`z7Hln*tKbQC zT(Mq==3eV;Anq>mZ`%{I%a=2`6aQ)Rg`YSFzPl z+s;AQuZc4^t)N_uFPC zB5hJv2ZMOKV0Sj9hxfS&ZP70{_AG}N=od43X^PL2h3(vMZzBHTOisH z^*r{)pFaXL3@EU&Idx3s4#DMIL+ofI*INF6sHdG|JhO*1vw#TDCkBXMP>;OC4&O zi~VU85z*JE1M02pV7x8ap^cX?R->CHW5IM_wd}wKBHMzok>Yz8lA=;ua0w09l_s63 zVk6ErQYSxrZDc;}f_d(r1E;p;^(Ym-hWc!U6@cM+O+^iMfx1Qc zlBSKYHK$HmPfYr-VQ?&z;X97DcA!#Pw@e!O+UvwVj-7~SBe@8qiQ72hh`uLd2Q>Ri z;%WQ$okAt1E&><74cGwKM>8AGq?GEwYa#e3ZP|in%iDEFq{|Hc;I=*PWoE8^mjXMk zLi}%SjKxt$P1TWi+B#J+#NJ8y4yVse{;Z-)csSiqvTVR$gJbR%8WXXmc;Z(IAkflZ z=8T0(%O!>=8V2dIYq7Ie(EkQ*`Y`3b-Bv3NKLm$OcwIbQqz2nYk=hkzlIEH6P?qhKg>Jnmf=6cOR-KBFdhu4JEOI(li+*K z#ck007&ho9wI7&Oa>1xVI?!msm0yy;cKRE-qNocWU{%u@ zPjufn`!x(Jps})9I3g%j7HUsZ~A z7dNS4gS<#{=2Obf%L$DquCq)|zM2z@@S$YbvYe@hO!foh^<`%ZRS!t*(#z^eRm-KjWD(@3u?Ozy zE#U;4=DOnvk#CYb$c_QN+;(DK8_NNOWNYdmzw`W(pIt%JB}p=J{#&}L<&JLpjqw6# zB`GO1bQb$PM?z;0us2L-r|LL`|9Bc=GMK;1h5iaelyu|=>MSDQ@vS2PQa5Z6YT=!r ziy1a~rm6`B_+3(}-ou!ax(JgZx{DydUv5|?sDwS}v)muto!9oZmGHNYr$V^zwEl5h zI~Y}3Sgi2(Wem=vky+UNVk!z7ZKxp_8sj#@r65PZrOpRba(8Y+HHPyL#q z|4l#rboUmnj=oys*?%-v2FT4!$l;>*Hrbe>=dmL(#kIzp*Dfsx9h|8xO+cQh*9 z;PYOXx;NCEXNFbZ!1sH&UkC2qn~3QqE=@9r+*A^}$UDriN5w#j5aAyyj(6TZ-LU&* zUge2b^vB87>C75O3R93k2k@Se%_5V3Uf-{P#-u@fSAMGG> z+V(b#H)zXNt5&I#LqS6^<7#G=rytGIb6jVv?H7i6%R9hI95r!FMQ|9IQpVROG2v!P zzc~On`Q~^S)>>B~QF}+1Z{_yy431;aU#r_t3ObSCe4#|mXv%$T@02uJGhfy0lv|sf z&GD*J*AWXCONVg^z+VATv)beeSyOC4HkP0M$K9=xJ@B$2O4mzn4C^WYQnko_G~9dS zBf5PwqV@hQvD^6q1Mp$OfYvAnLUxzogOCf}4Me#CmfGyda3c`YDyJ-zqUuCKGV zWLrAPT^k&tXRya~23I(Bs%uZ<6^Ce;@Todh7WE(X}~_GZFTB zKt98Ienaiz`nQpnVl;1WPbuDW+dU>>xBUs?yYygj(JOd}p)m=He!qBSyzYusUz6;A z%-Qpx?@j6xdoIoIHN)SR_mXR@KZx!goWFr#{Y8{jbdG Qru^3^D`?2q$ytW}56lnVFaQ7m literal 0 HcmV?d00001 diff --git a/_Assets/Textures/Notes/SnapArrow.png.import b/_Assets/Textures/Notes/SnapArrow.png.import new file mode 100644 index 0000000..d94800b --- /dev/null +++ b/_Assets/Textures/Notes/SnapArrow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cedfe12weahhb" +path="res://.godot/imported/SnapArrow.png-e54b07c8952e6ca1dd039770652d110a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://_Assets/Textures/Notes/SnapArrow.png" +dest_files=["res://.godot/imported/SnapArrow.png-e54b07c8952e6ca1dd039770652d110a.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