From dcbe06229c3ab91f4f91b5292a27853b26bd9b60 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 10:36:41 -0500 Subject: [PATCH 01/28] Campaign fixes & balance --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/content/SectorPresets.java | 2 +- core/src/mindustry/content/UnitTypes.java | 4 ++-- core/src/mindustry/core/Control.java | 15 +++++++++++++-- .../src/mindustry/entities/bullet/BulletType.java | 4 ++-- core/src/mindustry/game/Objectives.java | 12 ++---------- core/src/mindustry/game/Waves.java | 6 +++--- core/src/mindustry/maps/SectorDamage.java | 2 +- core/src/mindustry/type/UnitType.java | 2 +- 9 files changed, 26 insertions(+), 22 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 82654724eb..72f241b9b4 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -147,6 +147,7 @@ planetmap = Planet Map launchcore = Launch Core filename = File Name: unlocked = New content unlocked! +available = New research available! completed = [accent]Completed techtree = Tech Tree research.list = [lightgray]Research: diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index 75583b19bf..7e2586eb9d 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -27,7 +27,7 @@ public class SectorPresets implements ContentList{ }}; frozenForest = new SectorPreset("frozenForest", serpulo, 86){{ - captureWave = 20; + captureWave = 15; difficulty = 2; }}; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index ed54cf324f..3a3d3041f4 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -556,7 +556,7 @@ public class UnitTypes implements ContentList{ range = 40f; weapons.add(new Weapon(){{ - reload = 12f; + reload = 24f; shootCone = 180f; ejectEffect = Fx.none; shootSound = Sounds.explosion; @@ -1321,7 +1321,7 @@ public class UnitTypes implements ContentList{ sprite = "large-bomb"; width = height = 120/4f; - range = 30f; + maxRange = 30f; ignoreRotation = true; backColor = Pal.heal; diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index cd1768b25c..a810c61946 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -6,6 +6,7 @@ import arc.audio.*; import arc.graphics.g2d.*; import arc.input.*; import arc.math.*; +import arc.scene.style.*; import arc.scene.ui.*; import arc.struct.*; import arc.util.*; @@ -16,6 +17,7 @@ import mindustry.core.GameState.*; import mindustry.entities.*; import mindustry.game.EventType.*; import mindustry.game.*; +import mindustry.game.Objectives.*; import mindustry.game.Saves.*; import mindustry.gen.*; import mindustry.input.*; @@ -24,6 +26,7 @@ import mindustry.io.SaveIO.*; import mindustry.maps.Map; import mindustry.net.*; import mindustry.type.*; +import mindustry.ui.*; import mindustry.ui.dialogs.*; import mindustry.world.*; @@ -124,10 +127,18 @@ public class Control implements ApplicationListener, Loadable{ } })); - Events.on(UnlockEvent.class, e -> ui.hudfrag.showUnlock(e.content)); - Events.on(UnlockEvent.class, e -> { + ui.hudfrag.showUnlock(e.content); + checkAutoUnlocks(); + + if(e.content instanceof SectorPreset){ + for(TechNode node : TechTree.all){ + if(!node.content.unlocked() && node.objectives.contains(o -> o instanceof SectorComplete sec && sec.preset == e.content) && !node.objectives.contains(o -> !o.complete())){ + ui.hudfrag.showToast(new TextureRegionDrawable(node.content.icon(Cicon.large)), bundle.get("available")); + } + } + } }); Events.on(SectorCaptureEvent.class, e -> { diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index f3d09de8ed..a384dd18b2 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -78,7 +78,7 @@ public abstract class BulletType extends Content{ * Do not change unless you know what you're doing. */ public boolean backMove = true; /** Bullet range override. */ - public float range = -1f; + public float maxRange = -1f; /** % of block health healed **/ public float healPercent = 0f; /** whether to make fire on impact */ @@ -154,7 +154,7 @@ public abstract class BulletType extends Content{ /** Returns maximum distance the bullet this bullet type has can travel. */ public float range(){ - return Math.max(speed * lifetime * (1f - drag), range); + return Math.max(speed * lifetime * (1f - drag), maxRange); } public boolean collides(Bullet bullet, Building tile){ diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index acf7fad876..bf306cb957 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -48,7 +48,8 @@ public class Objectives{ } } - public static class SectorComplete extends SectorObjective{ + public static class SectorComplete implements Objective{ + public SectorPreset preset; public SectorComplete(SectorPreset zone){ this.preset = zone; @@ -67,11 +68,6 @@ public class Objectives{ } } - //TODO merge - public abstract static class SectorObjective implements Objective{ - public SectorPreset preset; - } - /** Defines a specific objective for a game. */ public interface Objective{ @@ -86,9 +82,5 @@ public class Objectives{ default void build(Table table){ } - - default SectorPreset zone(){ - return this instanceof SectorObjective ? ((SectorObjective)this).preset : null; - } } } diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 586fb285c1..8e65a0b1b9 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -277,7 +277,7 @@ public class Waves{ int cap = 150; float shieldStart = 30, shieldsPerWave = 20 + difficulty*30f; - float[] scaling = {1, 1, 1.5f, 3f, 4f}; + float[] scaling = {1, 1.2f, 1.5f, 3f, 4f}; Intc createProgression = start -> { //main sequence @@ -298,7 +298,7 @@ public class Waves{ begin = f; end = f + next >= cap ? never : f + next; max = 13; - unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 4f) : rand.random(1f, 4f)) * scaling[ctier]; + unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 5f) : rand.random(1f, 4f)) * scaling[ctier]; shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; @@ -310,7 +310,7 @@ public class Waves{ begin = f + next - 1; end = f + next + rand.random(6, 10); max = 6; - unitScaling = rand.random(1f, 2f); + unitScaling = rand.random(2f, 4f); spacing = rand.random(2, 4); shields = shieldAmount/2f; shieldScaling = shieldsPerWave; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 1fce5590e9..156c49515f 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -233,7 +233,7 @@ public class SectorDamage{ //first, calculate the total health of blocks in the path //radius around the path that gets counted - int radius = 8; + int radius = 9; IntSet counted = new IntSet(); for(Tile t : sparse2){ diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index a83f6532ae..f5a40de645 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -328,7 +328,7 @@ public class UnitType extends UnlockableContent{ //suicide enemy if(weapons.contains(w -> w.bullet.killShooter)){ //scale down DPS to be insignificant - dpsEstimate /= 20f; + dpsEstimate /= 25f; } } } From 4a52392ce9eeb9575a4739afe2f86082da5acec4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 13:09:42 -0500 Subject: [PATCH 02/28] Added hint about guards & armor --- core/assets/bundles/bundle.properties | 2 +- core/assets/maps/ruinousShores.msav | Bin 18170 -> 18259 bytes core/src/mindustry/Vars.java | 2 +- core/src/mindustry/content/TechTree.java | 6 +++--- core/src/mindustry/core/GameState.java | 3 +-- core/src/mindustry/game/Teams.java | 6 ++++++ core/src/mindustry/game/Universe.java | 2 +- core/src/mindustry/game/Waves.java | 2 +- .../mindustry/ui/fragments/HintsFragment.java | 3 ++- 9 files changed, 16 insertions(+), 10 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 72f241b9b4..33ab9b2778 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -22,7 +22,6 @@ gameover.pvp = The[accent] {0}[] team is victorious! gameover.waiting = [accent]Waiting for next map... highscore = [accent]New highscore! copied = Copied. -indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is unfinished[]\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. indev.notready = This part of the game isn't ready yet indev.campaign = [accent]You've reached the end of the campaign![]\n\nThis is as far as the content goes. Interplanetary travel will be added in future updates. @@ -1270,6 +1269,7 @@ hint.payloadDrop = Press [accent]][] to drop a payload. hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there. hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. +hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down. item.copper.description = Used in all types of construction and ammunition. item.copper.details = Copper. Abnormally abundant metal on Serpulo. Structurally weak unless reinforced. diff --git a/core/assets/maps/ruinousShores.msav b/core/assets/maps/ruinousShores.msav index 41e957c0ff971cf11abb1aa10a4daa920edde6cf..48727feae4abb2077b544c010429afe70082b79a 100644 GIT binary patch delta 18187 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 diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index e41b9a08b7..ec720f1570 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -88,7 +88,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 50f; + public static final float baseInvasionChance = 1f / 55f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index d216a665e1..41dd134682 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -198,10 +198,10 @@ public class TechTree implements ContentList{ }); }); }); - }); - node(illuminator, () -> { - + node(illuminator, () -> { + + }); }); }); diff --git a/core/src/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java index 3eed5e0164..de7cf6f60c 100644 --- a/core/src/mindustry/core/GameState.java +++ b/core/src/mindustry/core/GameState.java @@ -33,9 +33,8 @@ public class GameState{ /** Current game state. */ private State state = State.menu; - //TODO optimize public Unit boss(){ - return Groups.unit.find(u -> u.isBoss() && u.team == rules.waveTeam); + return teams.boss; } public void set(State astate){ diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index da5edfd0db..1c06372731 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -26,6 +26,8 @@ public class Teams{ public Seq active = new Seq<>(); /** Teams with block or unit presence. */ public Seq present = new Seq<>(TeamData.class); + /** Current boss unit. */ + public @Nullable Unit boss; public Teams(){ active.add(get(Team.crux)); @@ -178,6 +180,10 @@ public class Teams{ data.units.add(unit); data.presentFlag = true; + if(unit.team == state.rules.waveTeam && unit.isBoss()){ + boss = unit; + } + if(data.unitsByType == null || data.unitsByType.length <= unit.type.id){ data.unitsByType = new Seq[content.units().size]; } diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 1b0b1fc10b..b8f27b5f73 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -216,7 +216,7 @@ public class Universe{ if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){ //invasion chance depends on # of nearby bases if(Mathf.chance(baseInvasionChance * Math.min(sector.near().count(Sector::hasEnemyBase), 1))){ - int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 5) * 5; + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 4) * 5; //assign invasion-related things if(sector.isBeingPlayed()){ diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 8e65a0b1b9..21adaac37c 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -298,7 +298,7 @@ public class Waves{ begin = f; end = f + next >= cap ? never : f + next; max = 13; - unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 5f) : rand.random(1f, 4f)) * scaling[ctier]; + unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 4f) : rand.random(1f, 4f)) * scaling[ctier]; shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; diff --git a/core/src/mindustry/ui/fragments/HintsFragment.java b/core/src/mindustry/ui/fragments/HintsFragment.java index eb029789fe..f967518cb4 100644 --- a/core/src/mindustry/ui/fragments/HintsFragment.java +++ b/core/src/mindustry/ui/fragments/HintsFragment.java @@ -150,7 +150,7 @@ public class HintsFragment extends Fragment{ depositItems(() -> player.unit().hasItem(), () -> !player.unit().hasItem()), desktopPause(visibleDesktop, () -> isTutorial.get() && !Vars.net.active(), () -> Core.input.keyTap(Binding.pause)), research(isTutorial, () -> ui.research.isShown()), - unitControl(() -> state.rules.defaultTeam.data().units.size > 1 && !net.active(), () -> !player.dead() && !player.unit().spawnedByCore), + unitControl(() -> state.rules.defaultTeam.data().units.size > 2 && !net.active() && !player.dead(), () -> !player.dead() && !player.unit().spawnedByCore), respawn(visibleMobile, () -> !player.dead() && !player.unit().spawnedByCore, () -> !player.dead() && player.unit().spawnedByCore), launch(() -> isTutorial.get() && state.rules.sector.isCaptured(), () -> ui.planet.isShown()), schematicSelect(visibleDesktop, () -> ui.hints.placedBlocks.contains(Blocks.router), () -> Core.input.keyRelease(Binding.schematic_select) || Core.input.keyTap(Binding.pick)), @@ -161,6 +161,7 @@ public class HintsFragment extends Fragment{ payloadDrop(() -> !player.unit().dead && player.unit() instanceof Payloadc p && p.payloads().any(), () -> player.unit() instanceof Payloadc p && p.payloads().isEmpty()), waveFire(() -> Groups.fire.size() > 0 && Blocks.wave.unlockedNow(), () -> indexer.getAllied(state.rules.defaultTeam, BlockFlag.extinguisher).size() > 0), generator(() -> control.input.block == Blocks.combustionGenerator, () -> ui.hints.placedBlocks.contains(Blocks.combustionGenerator)), + guardian(() -> state.boss() != null && state.boss().armor >= 4, () -> state.boss() == null), ; @Nullable From ec19381c4e9afc92c4d5c1ef5ed3d9769cf3d231 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 15:41:10 -0500 Subject: [PATCH 03/28] Fixed campaign bases having ridiculous wall tiers --- core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/content/Items.java | 1 + core/src/mindustry/maps/SectorDamage.java | 6 +++--- core/src/mindustry/maps/generators/BaseGenerator.java | 2 +- core/src/mindustry/type/Planet.java | 4 ++-- core/src/mindustry/world/blocks/campaign/LaunchPad.java | 8 ++++++++ core/src/mindustry/world/blocks/units/UnitFactory.java | 5 +---- 7 files changed, 17 insertions(+), 11 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 33ab9b2778..0ba749cc57 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1261,7 +1261,7 @@ hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and hint.conveyorPathfind = Hold [accent][[L-Ctrl][] while dragging conveyors to automatically generate a path. hint.conveyorPathfind.mobile = Enable \ue844 [accent]diagonal mode[] and drag conveyors to automatically generate a path. hint.boost = Hold [accent][[L-Shift][] to fly over obstacles with your current unit.\n\nOnly a few ground units have boosters. -hint.command = Press [accent][[G][] to command nearby units into formation. +hint.command = Press [accent][[G][] to command nearby units of [accent]similar type[] into formation.\n\nTo command ground units, you must first control another ground unit. hint.command.mobile = [accent][[Double-tap][] your unit to command nearby units into formation. hint.payloadPickup = Press [accent][[[] to pick up small blocks or units. hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick it up. diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 6d3964fd2c..2c2e5eb60b 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -72,6 +72,7 @@ public class Items implements ContentList{ }}; surgeAlloy = new Item("surge-alloy", Color.valueOf("f3e979")){{ + cost = 1.2f; }}; sporePod = new Item("spore-pod", Color.valueOf("7457ce")){{ diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 156c49515f..993d49d72f 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -233,7 +233,7 @@ public class SectorDamage{ //first, calculate the total health of blocks in the path //radius around the path that gets counted - int radius = 9; + int radius = 8; IntSet counted = new IntSet(); for(Tile t : sparse2){ @@ -335,9 +335,9 @@ public class SectorDamage{ info.waveDpsSlope = reg.slope; //enemy units like to aim for a lot of non-essential things, so increase resulting health slightly - info.sumHealth = sumHealth * 1.3f; + info.sumHealth = sumHealth * 1.18f; //players tend to have longer range units/turrets, so assume DPS is higher - info.sumDps = sumDps * 1.3f; + info.sumDps = sumDps * 1.18f; info.sumRps = sumRps; info.wavesSurvived = getWavesSurvived(info); diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index 8a5bf215ab..2677f95c22 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -55,7 +55,7 @@ public class BaseGenerator{ BasePart coreschem = bases.cores.getFrac(difficulty); int passes = difficulty < 0.4 ? 1 : difficulty < 0.8 ? 2 : 3; - Block wall = wallsSmall.getFrac(difficulty), wallLarge = wallsLarge.getFrac(difficulty); + Block wall = wallsSmall.getFrac(difficulty * 0.91f), wallLarge = wallsLarge.getFrac(difficulty * 0.91f); for(Tile tile : cores){ tile.clearOverlay(); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 0f872b393d..b4917e519e 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -182,12 +182,12 @@ public class Planet extends UnlockableContent{ float sum = 1f; for(Sector other : sector.near()){ if(other.generateEnemyBase){ - sum += 1f; + sum += 0.9f; } } if(sector.hasEnemyBase()){ - sum += 1.9f; + sum += 1f; } sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.2f) : Mathf.clamp(sector.preset.difficulty / 10f); diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index aa259efea6..d72c1f133a 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -19,6 +19,7 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.consumers.*; import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -38,6 +39,7 @@ public class LaunchPad extends Block{ solid = true; update = true; configurable = true; + drawDisabled = false; } @Override @@ -61,6 +63,12 @@ public class LaunchPad extends Block{ return !state.isCampaign() || net.client() ? SystemCursor.arrow : super.getCursor(); } + //cannot be disabled + @Override + public float efficiency(){ + return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f; + } + @Override public void draw(){ super.draw(); diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index 6b2156e566..1a257d9565 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -53,15 +53,12 @@ public class UnitFactory extends UnitBlock{ @Override public void init(){ capacities = new int[Vars.content.items().size]; - itemCapacity = 0; for(UnitPlan plan : plans){ for(ItemStack stack : plan.requirements){ capacities[stack.item.id] = Math.max(capacities[stack.item.id], stack.amount * 2); + itemCapacity = Math.max(itemCapacity, stack.amount * 2); } } - for(int i : capacities){ - itemCapacity += i; - } super.init(); } From 06929ee8f39abf2cddada0fbc1a6146e513483ce Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 15:47:15 -0500 Subject: [PATCH 04/28] Fixed boss hint not disappearing --- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/game/Teams.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index b6f8e76b14..02d3820bc4 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -363,7 +363,7 @@ public class Blocks implements ContentList{ sandWall = new StaticWall("sand-wall"){{ variants = 2; - sandWater.asFloor().wall = this; + sandWater.asFloor().wall = water.asFloor().wall = deepwater.asFloor().wall = this; }}; saltWall = new StaticWall("salt-wall"); diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 1c06372731..d5afac1217 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -146,6 +146,7 @@ public class Teams{ public void updateTeamStats(){ present.clear(); + boss = null; for(Team team : Team.all){ TeamData data = team.data(); From 2282cb89b11f7280e2e4da307dcfc7915faf9ee4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 23 Nov 2020 18:09:20 -0500 Subject: [PATCH 05/28] Fixed sector damage calculations / Campaign balance --- core/assets/maps/windsweptIslands.msav | Bin 13400 -> 13484 bytes core/src/mindustry/Vars.java | 2 +- core/src/mindustry/content/TechTree.java | 1 + core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/game/Waves.java | 2 +- core/src/mindustry/maps/SectorDamage.java | 30 ++++++++++++---------- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/core/assets/maps/windsweptIslands.msav b/core/assets/maps/windsweptIslands.msav index d5e838b60dd4f312d7d8bce89580163b850e9216..2c8547f6f9676540b7aef2129f4291928ccdfd01 100644 GIT binary patch literal 13484 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�{#E^ZQUC5z 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 literal 13400 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 diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index ec720f1570..0e321e1ed6 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -88,7 +88,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 55f; + public static final float baseInvasionChance = 1f / 60f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 41dd134682..bf0f73c730 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -484,6 +484,7 @@ public class TechTree implements ContentList{ new Research(bryde), new Research(spectre), new Research(launchPad), + new Research(massDriver), new Research(impactReactor), new Research(additiveReconstructor), new Research(exponentialReconstructor) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 3a3d3041f4..023eeb5631 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1413,12 +1413,12 @@ public class UnitTypes implements ContentList{ ejectEffect = Fx.casing1; shootSound = Sounds.missile; bullet = new MissileBulletType(2.7f, 12, "missile"){{ + keepVelocity = true; width = 8f; height = 8f; shrinkY = 0f; drag = -0.003f; homingRange = 60f; - keepVelocity = false; splashDamageRadius = 25f; splashDamage = 10f; lifetime = 80f; diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 21adaac37c..28f742a3cd 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -277,7 +277,7 @@ public class Waves{ int cap = 150; float shieldStart = 30, shieldsPerWave = 20 + difficulty*30f; - float[] scaling = {1, 1.2f, 1.5f, 3f, 4f}; + float[] scaling = {1, 1.2f, 2f, 3f, 4f}; Intc createProgression = start -> { //main sequence diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 993d49d72f..045a0bd75b 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -111,23 +111,26 @@ public class SectorDamage{ float damage = getDamage(state.rules.sector.info); //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) - float scaled = Mathf.pow(damage, 1.6f); + float scaled = Mathf.pow(damage, 1.2f); - //apply damage to units - float unitDamage = damage * state.rules.sector.info.sumHealth; Tile spawn = spawner.getFirstSpawn(); //damage only units near the spawn point if(spawn != null){ Seq allies = new Seq<>(); + float sumUnitHealth = 0f; for(Unit ally : Groups.unit){ if(ally.team == state.rules.defaultTeam && ally.within(spawn, state.rules.dropZoneRadius * 2.5f)){ allies.add(ally); + sumUnitHealth += ally.health; } } allies.sort(u -> u.dst2(spawn)); + //apply damage to units + float unitDamage = damage * sumUnitHealth; + //damage units one by one, not uniformly for(var u : allies){ if(u.health < unitDamage){ @@ -335,9 +338,9 @@ public class SectorDamage{ info.waveDpsSlope = reg.slope; //enemy units like to aim for a lot of non-essential things, so increase resulting health slightly - info.sumHealth = sumHealth * 1.18f; + info.sumHealth = sumHealth * 1.2f; //players tend to have longer range units/turrets, so assume DPS is higher - info.sumDps = sumDps * 1.18f; + info.sumDps = sumDps * 1.2f; info.sumRps = sumRps; info.wavesSurvived = getWavesSurvived(info); @@ -348,13 +351,12 @@ public class SectorDamage{ Queue frontier = new Queue<>(); float[][] values = new float[tiles.width][tiles.height]; - float damage = fraction*80; //arbitrary damage value //phase one: find all spawnpoints for(Tile tile : tiles){ if((tile.block() instanceof CoreBlock && tile.team() == state.rules.waveTeam) || tile.overlay() == Blocks.spawn){ frontier.add(tile); - values[tile.x][tile.y] = damage; + values[tile.x][tile.y] = fraction * 80; } } @@ -368,14 +370,16 @@ public class SectorDamage{ int radius = 3; //only penetrate a certain % by health, not by distance - float totalHealth = damage >= 1f ? 1f : path.sumf(t -> { + float totalHealth = fraction >= 1f ? 1f : path.sumf(t -> { float s = 0; for(int dx = -radius; dx <= radius; dx++){ for(int dy = -radius; dy <= radius; dy++){ int wx = dx + t.x, wy = dy + t.y; if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height() && Mathf.within(dx, dy, radius)){ Tile other = world.rawTile(wx, wy); - s += other.team() == state.rules.defaultTeam ? other.build.health / other.block().size : 0f; + if(!(other.block() instanceof CoreBlock)){ + s += other.team() == state.rules.defaultTeam ? other.build.health / other.block().size : 0f; + } } } } @@ -385,7 +389,7 @@ public class SectorDamage{ float healthCount = 0; out: - for(int i = 0; i < path.size && (healthCount < targetHealth || damage >= 1f); i++){ + for(int i = 0; i < path.size && (healthCount < targetHealth || fraction >= 1f); i++){ Tile t = path.get(i); for(int dx = -radius; dx <= radius; dx++){ @@ -405,7 +409,7 @@ public class SectorDamage{ removal.add(other.build); - if(healthCount >= targetHealth && damage < 0.999f){ + if(healthCount >= targetHealth && fraction < 0.999f){ break out; } } @@ -430,10 +434,10 @@ public class SectorDamage{ } } - float falloff = (damage) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); + float falloff = (fraction) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); int peak = 0; - if(damage > 0.1f){ + if(fraction > 0.1f){ //phase two: propagate the damage while(!frontier.isEmpty()){ peak = Math.max(peak, frontier.size); From 97254a66720a227906b3c6ab7ecbad386634a8ca Mon Sep 17 00:00:00 2001 From: Volas171 <60143910+Volas171@users.noreply.github.com> Date: Mon, 23 Nov 2020 22:27:08 -0500 Subject: [PATCH 06/28] Update contributors --- core/assets/contributors | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/assets/contributors b/core/assets/contributors index 39c29ff93a..d38692de8c 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -1,3 +1,4 @@ +VolasYouKnow Prosta4okua Felix Corvus Vanguard @@ -100,4 +101,4 @@ MEEP of Faith jalastram (freesound.org) newlocknew (freesound.org) dsmolenaers (freesound.org) -Headphaze (freesound.org) \ No newline at end of file +Headphaze (freesound.org) From 1637360952b6995e27508bc6ad33eae2f0ba7e7f Mon Sep 17 00:00:00 2001 From: Skat <55407440+skykatik@users.noreply.github.com> Date: Tue, 24 Nov 2020 13:00:08 +0300 Subject: [PATCH 07/28] Deleted unnecessary DateTimeFormatter declaration --- server/src/mindustry/server/ServerControl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index 2eaa0a59e1..553fd6af74 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -1003,8 +1003,7 @@ public class ServerControl implements ApplicationListener{ private void logToFile(String text){ if(currentLogFile != null && currentLogFile.length() > maxLogLength){ - String date = DateTimeFormatter.ofPattern("MM-dd-yyyy | HH:mm:ss").format(LocalDateTime.now()); - currentLogFile.writeString("[End of log file. Date: " + date + "]\n", true); + currentLogFile.writeString("[End of log file. Date: " + dateTime.format(LocalDateTime.now()) + "]\n", true); currentLogFile = null; } From 058b2ddfce45f7f0e40ed14049e5d7a2b05a5319 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 09:00:34 -0500 Subject: [PATCH 08/28] Fixed #3565 --- core/src/mindustry/Vars.java | 2 +- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/entities/bullet/SapBulletType.java | 2 +- core/src/mindustry/game/Schematics.java | 5 +++++ core/src/mindustry/game/Waves.java | 8 ++++---- core/src/mindustry/maps/SectorDamage.java | 2 +- core/src/mindustry/ui/dialogs/PlanetDialog.java | 1 + 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 0e321e1ed6..21a8b3fb45 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -88,7 +88,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 60f; + public static final float baseInvasionChance = 1f / 75f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 02d3820bc4..98c835f026 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1195,7 +1195,7 @@ public class Blocks implements ContentList{ size = 2; ambientSound = Sounds.smelter; - ambientSoundVolume = 0.05f; + ambientSoundVolume = 0.06f; }}; differentialGenerator = new SingleTypeGenerator("differential-generator"){{ diff --git a/core/src/mindustry/entities/bullet/SapBulletType.java b/core/src/mindustry/entities/bullet/SapBulletType.java index 9d05a37e9a..dbd30b77a8 100644 --- a/core/src/mindustry/entities/bullet/SapBulletType.java +++ b/core/src/mindustry/entities/bullet/SapBulletType.java @@ -61,7 +61,7 @@ public class SapBulletType extends BulletType{ b.data = target; if(target != null){ - float result = Math.min(target.health(), damage); + float result = Math.max(Math.min(target.health(), damage), 0); if(b.owner instanceof Healthc h){ h.heal(result * sapStrength); diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 7cd51ecec4..2d526606c7 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -127,6 +127,9 @@ public class Schematics implements Loadable{ newSchematic.tags.putAll(target.tags); newSchematic.file = target.file; + loadouts.each((block, list) -> list.remove(target)); + checkLoadout(target, true); + try{ write(newSchematic, target.file); }catch(Exception e){ @@ -134,6 +137,8 @@ public class Schematics implements Loadable{ Log.err(e); ui.showException(e); } + + } private @Nullable Schematic loadFile(Fi file){ diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 28f742a3cd..5958d5f22f 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -10,7 +10,7 @@ import mindustry.type.*; import static mindustry.content.UnitTypes.*; public class Waves{ - public static final int waveVersion = 3; + public static final int waveVersion = 4; private Seq spawns; @@ -277,7 +277,7 @@ public class Waves{ int cap = 150; float shieldStart = 30, shieldsPerWave = 20 + difficulty*30f; - float[] scaling = {1, 1.2f, 2f, 3f, 4f}; + float[] scaling = {1, 1.5f, 3f, 4f, 5f}; Intc createProgression = start -> { //main sequence @@ -286,7 +286,7 @@ public class Waves{ for(int i = start; i < cap;){ int f = i; - int next = rand.random(8, 16) + (int)Mathf.lerp(4f, 0f, difficulty) + curTier * 4; + int next = rand.random(8, 16) + (int)Mathf.lerp(5f, 0f, difficulty) + curTier * 4; float shieldAmount = Math.max((i - shieldStart) * shieldsPerWave, 0); int space = start == 0 ? 1 : rand.random(1, 2); @@ -298,7 +298,7 @@ public class Waves{ begin = f; end = f + next >= cap ? never : f + next; max = 13; - unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 4f) : rand.random(1f, 4f)) * scaling[ctier]; + unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 5f) : rand.random(1f, 4f)) * scaling[ctier]; shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 045a0bd75b..a86bc47356 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -437,7 +437,7 @@ public class SectorDamage{ float falloff = (fraction) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); int peak = 0; - if(fraction > 0.1f){ + if(fraction > 0.15f){ //phase two: propagate the damage while(!frontier.isEmpty()){ peak = Math.max(peak, frontier.size); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index a7d0c837de..4700bc0906 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -167,6 +167,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } newPresets.reverse(); + updateSelected(); if(planets.planet.getLastSector() != null){ lookAt(planets.planet.getLastSector()); From 7d43856735c853f4f5a8c4e42addf3bcb929e431 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 10:23:28 -0500 Subject: [PATCH 09/28] Bugfixes --- core/src/mindustry/core/Control.java | 10 +++++++++- core/src/mindustry/entities/GroupDefs.java | 1 + core/src/mindustry/entities/bullet/BulletType.java | 4 ++-- core/src/mindustry/game/Universe.java | 2 ++ core/src/mindustry/io/SaveVersion.java | 2 +- core/src/mindustry/maps/SectorDamage.java | 2 +- .../world/blocks/power/ItemLiquidGenerator.java | 5 +++++ gradle.properties | 2 +- 8 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index a810c61946..952ab5d82e 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -23,6 +23,7 @@ import mindustry.gen.*; import mindustry.input.*; import mindustry.io.*; import mindustry.io.SaveIO.*; +import mindustry.maps.*; import mindustry.maps.Map; import mindustry.net.*; import mindustry.type.*; @@ -322,6 +323,13 @@ public class Control implements ApplicationListener, Loadable{ return; } + //set spawn for sector damage to use + Tile spawn = world.tile(sector.info.spawnPosition); + spawn.setBlock(Blocks.coreShard, state.rules.defaultTeam); + + //add extra damage. + SectorDamage.apply(1f); + //reset wave so things are more fair state.wave = 1; @@ -331,8 +339,8 @@ public class Control implements ApplicationListener, Loadable{ //kill all units, since they should be dead anyway Groups.unit.clear(); Groups.fire.clear(); + Groups.puddle.clear(); - Tile spawn = world.tile(sector.info.spawnPosition); Schematics.placeLaunchLoadout(spawn.x, spawn.y); //set up camera/player locations diff --git a/core/src/mindustry/entities/GroupDefs.java b/core/src/mindustry/entities/GroupDefs.java index 3ddef67d65..8f98a69442 100644 --- a/core/src/mindustry/entities/GroupDefs.java +++ b/core/src/mindustry/entities/GroupDefs.java @@ -12,5 +12,6 @@ class GroupDefs{ @GroupDef(value = Syncc.class, mapping = true) G sync; @GroupDef(value = Drawc.class) G draw; @GroupDef(value = Firec.class) G fire; + @GroupDef(value = Puddlec.class) G puddle; @GroupDef(value = WeatherStatec.class) G weather; } diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index a384dd18b2..7d94602844 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -317,11 +317,11 @@ public abstract class BulletType extends Content{ } public Bullet create(Bullet parent, float x, float y, float angle){ - return create(parent.owner(), parent.team, x, y, angle); + return create(parent.owner, parent.team, x, y, angle); } public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl, float lifeScale){ - return create(parent.owner(), parent.team, x, y, angle, velocityScl, lifeScale); + return create(parent.owner, parent.team, x, y, angle, velocityScl, lifeScale); } public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl){ diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index b8f27b5f73..b19fcee6da 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -208,6 +208,8 @@ public class Universe{ //add production, making sure that it's capped sector.info.production.each((item, stat) -> sector.info.items.add(item, Math.min((int)(stat.mean * newSecondsPassed * scl), sector.info.storageCapacity - sector.info.items.get(item)))); + //prevent negative values with unloaders + sector.info.items.checkNegative(); sector.saveInfo(); } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 76e3b1cc5c..85fe4a3e31 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -286,7 +286,7 @@ public abstract class SaveVersion extends SaveFileReader{ public void writeEntities(DataOutput stream) throws IOException{ //write team data with entities. - Seq data = state.teams.getActive(); + Seq data = state.teams.getActive().and(Team.sharded.data()); stream.writeInt(data.size); for(TeamData team : data){ stream.writeInt(team.team.id); diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index a86bc47356..22f19c3e4d 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -356,7 +356,7 @@ public class SectorDamage{ for(Tile tile : tiles){ if((tile.block() instanceof CoreBlock && tile.team() == state.rules.waveTeam) || tile.overlay() == Blocks.spawn){ frontier.add(tile); - values[tile.x][tile.y] = fraction * 80; + values[tile.x][tile.y] = fraction * 23; } } diff --git a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java index 12b3f6d691..2a0982a069 100644 --- a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -92,6 +92,11 @@ public class ItemLiquidGenerator extends PowerGenerator{ return generateTime > 0; } + @Override + public float ambientVolume(){ + return Mathf.clamp(productionEfficiency); + } + @Override public void updateTile(){ //Note: Do not use this delta when calculating the amount of power or the power efficiency, but use it for resource consumption if necessary. diff --git a/gradle.properties b/gradle.properties index ba9e4fa2a9..75d6273d77 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=9446f0f01b2a1b25abf870a32bf839bc486b12e3 +archash=a30c7164ce621554b73610ac84ada418e4500a5c From 61bec243dcade2162badbeb6f34ef2beda32f488 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 12:35:04 -0500 Subject: [PATCH 10/28] Campaign balance --- core/assets/maps/saltFlats.msav | Bin 18919 -> 19192 bytes core/assets/maps/stainedMountains.msav | Bin 16695 -> 16724 bytes core/src/mindustry/content/SectorPresets.java | 1 + core/src/mindustry/content/TechTree.java | 5 +++-- core/src/mindustry/maps/SectorDamage.java | 2 +- .../world/blocks/defense/MendProjector.java | 4 +++- .../blocks/defense/OverdriveProjector.java | 4 +++- 7 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/assets/maps/saltFlats.msav b/core/assets/maps/saltFlats.msav index 556b33700f444bc7061ef573bdd63510f7a6303b..d0f1a672c4c8729d1ab7c99f9e6ece6def99ad93 100644 GIT binary patch literal 19192 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 Gi40kZCELOP diff --git a/core/assets/maps/stainedMountains.msav b/core/assets/maps/stainedMountains.msav index af3abb26c204361563fdc2e0cff94bae71661512..082f96ad7b2a4c0ca211a491a2f79bed41fb0ada 100644 GIT binary patch literal 16724 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 { - node(multiplicativeReconstructor, Seq.with(new SectorComplete(overgrowth)), () -> { + node(multiplicativeReconstructor, () -> { node(exponentialReconstructor, () -> { node(tetrativeReconstructor, () -> { @@ -508,6 +508,7 @@ public class TechTree implements ContentList{ node(saltFlats, Seq.with( new SectorComplete(windsweptIslands), + new Research(commandCenter), new Research(groundFactory), new Research(airFactory), new Research(door), @@ -646,7 +647,7 @@ public class TechTree implements ContentList{ static TechNode node(UnlockableContent content, ItemStack[] requirements, Seq objectives, Runnable children){ TechNode node = new TechNode(context, content, requirements); if(objectives != null){ - node.objectives = objectives; + node.objectives.addAll(objectives); } TechNode prev = context; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 22f19c3e4d..78802f46bb 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -21,7 +21,7 @@ import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; public class SectorDamage{ - public static final int maxRetWave = 30, maxWavesSimulated = 50; + public static final int maxRetWave = 40, maxWavesSimulated = 50; //direct damage is for testing only private static final boolean direct = false, rubble = true; diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index cf71928f26..1c171edfdc 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -60,6 +60,7 @@ public class MendProjector extends Block{ float heat; float charge = Mathf.random(reload); float phaseHeat; + float smoothEfficiency; @Override public float range(){ @@ -68,6 +69,7 @@ public class MendProjector extends Block{ @Override public void updateTile(){ + smoothEfficiency = Mathf.lerpDelta(smoothEfficiency, efficiency(), 0.08f); heat = Mathf.lerpDelta(heat, consValid() || cheating() ? 1f : 0f, 0.08f); charge += heat * delta(); @@ -115,7 +117,7 @@ public class MendProjector extends Block{ @Override public void drawLight(){ - Drawf.light(team, x, y, 50f * efficiency(), baseColor, 0.7f * efficiency()); + Drawf.light(team, x, y, 50f * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); } @Override diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index 7cadaede81..7e645e5a2e 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -65,6 +65,7 @@ public class OverdriveProjector extends Block{ float heat; float charge = Mathf.random(reload); float phaseHeat; + float smoothEfficiency; @Override public float range(){ @@ -73,11 +74,12 @@ public class OverdriveProjector extends Block{ @Override public void drawLight(){ - Drawf.light(team, x, y, 50f * efficiency(), baseColor, 0.7f * efficiency()); + Drawf.light(team, x, y, 50f * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); } @Override public void updateTile(){ + smoothEfficiency = Mathf.lerpDelta(smoothEfficiency, efficiency(), 0.08f); heat = Mathf.lerpDelta(heat, consValid() ? 1f : 0f, 0.08f); charge += heat * Time.delta; From 6fd36d97f09de6f22950e930e5000513f6f7af62 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 12:53:55 -0500 Subject: [PATCH 11/28] Balancing --- core/src/mindustry/ai/types/BuilderAI.java | 5 ++++- core/src/mindustry/content/Blocks.java | 13 +++++++------ core/src/mindustry/core/Logic.java | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index a82a220070..f900a60955 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -1,5 +1,6 @@ package mindustry.ai.types; +import arc.math.*; import arc.struct.*; import arc.util.*; import mindustry.entities.*; @@ -83,8 +84,10 @@ public class BuilderAI extends AIController{ }); } + float rebuildTime = (unit.team.rules().ai ? Mathf.lerp(15f, 2f, unit.team.rules().aiTier) : 2f) * 60f; + //find new request - if(!unit.team.data().blocks.isEmpty() && following == null && timer.get(timerTarget3, 60 * 2f)){ + if(!unit.team.data().blocks.isEmpty() && following == null && timer.get(timerTarget3, rebuildTime)){ Queue blocks = unit.team.data().blocks; BlockPlan block = blocks.first(); diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 98c835f026..eabaae3104 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1377,7 +1377,7 @@ public class Blocks implements ContentList{ itemCapacity = 9000; size = 4; - unitCapModifier = 14; + unitCapModifier = 16; researchCostMultiplier = 0.04f; }}; @@ -1389,7 +1389,7 @@ public class Blocks implements ContentList{ itemCapacity = 13000; size = 5; - unitCapModifier = 20; + unitCapModifier = 24; researchCostMultiplier = 0.05f; }}; @@ -1517,12 +1517,12 @@ public class Blocks implements ContentList{ lancer = new ChargeTurret("lancer"){{ requirements(Category.turret, with(Items.copper, 25, Items.lead, 50, Items.silicon, 45)); - range = 155f; - chargeTime = 50f; + range = 165f; + chargeTime = 40f; chargeMaxDelay = 30f; chargeEffects = 7; recoilAmount = 2f; - reloadTime = 90f; + reloadTime = 80f; cooldown = 0.03f; powerUse = 6f; shootShake = 2f; @@ -1544,6 +1544,7 @@ public class Blocks implements ContentList{ lifetime = 16f; drawSize = 400f; collidesAir = false; + length = 173f; }}; }}; @@ -1557,7 +1558,7 @@ public class Blocks implements ContentList{ reloadTime = 35f; shootCone = 40f; rotateSpeed = 8f; - powerUse = 3f; + powerUse = 3.3f; targetAir = false; range = 90f; shootEffect = Fx.lightningShoot; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 5f6bd2c1a9..02222bd327 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -107,7 +107,7 @@ public class Logic implements ApplicationListener{ if(!(state.getSector().preset != null && !state.getSector().preset.useAI)){ state.rules.waveTeam.rules().ai = true; } - state.rules.waveTeam.rules().aiTier = state.getSector().threat; + state.rules.waveTeam.rules().aiTier = state.getSector().threat * 0.8f; state.rules.waveTeam.rules().infiniteResources = true; } From bcaf5e4c3d2f3599b4f499788f44edd46cddb702 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 16:33:36 -0500 Subject: [PATCH 12/28] Campaign balance / Smarter power node placement --- core/assets/bundles/bundle.properties | 5 +++ core/assets/maps/saltFlats.msav | Bin 19192 -> 19191 bytes core/src/mindustry/ai/BaseAI.java | 5 +++ core/src/mindustry/content/TechTree.java | 2 +- core/src/mindustry/game/Waves.java | 6 +-- core/src/mindustry/input/InputHandler.java | 43 ++++++++++++++------- core/src/mindustry/input/Placement.java | 27 +------------ core/src/mindustry/type/Planet.java | 2 +- 8 files changed, 44 insertions(+), 46 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0ba749cc57..8149f4ff3c 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -593,6 +593,11 @@ sector.tarFields.description = The outskirts of an oil production zone, between sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +sector.biomassFacility.description = The origin of spores. This is the facility in which they were researched and initially produced.\nResearch the technology contained within. Cultivate spores for the production of fuel and plastics.\n\n[lightgray]Upon this facility's demise, the spores were released. Nothing in the local ecosystem could compete with such an invasive organism. +sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had [accent]Plastanium[]-producing structures.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories. +sector.extractionOutpost.description = A remote outpost, constructed by the enemy for the purpose of launching resources to other sectors.\n\nCross-sector transport technology is essential for further conquest. Destroy the base. Research their Launch Pads. +sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology. +sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure. settings.language = Language settings.data = Game Data diff --git a/core/assets/maps/saltFlats.msav b/core/assets/maps/saltFlats.msav index d0f1a672c4c8729d1ab7c99f9e6ece6def99ad93..f01aa3a0f3c991f45644042effb3d67c40ede6f6 100644 GIT binary patch literal 19191 zcmV(zK<2-Aob7#Sm|e$J;CcJf`>s~2)veanvemYhZf&t6%a-LWjuTr_drk7x{Up8k z^^(`!l4Xw}mIHyrlLQ6`1LPwx8HV`+Nf-jd7UIl=z$8F`gdqVYe83Pgz&FG2gZaMj zgQ-(>>QvpO?z^x1wYqKezOVbehYuu~X*(APtcJedve$VzqQ_xiVLV z!~w`(EnO+ghtz@F4nSr}JkCPf!KtZZhmIUMGIjXq;bV}VFNp$$rBZeIVzsoq1i34f z^3}zKC1@KzK6&i61N$crAGz(oKFG~4%q-N(OOUx(sxFlwTUuGZyikMA)8*$%i}MRt zNB4}LnqPUg3>j>92|n}G3(MCQ%O_?_moAlS`^)pQCyujVru`=OsQI# zzjWeIX#UatON*r$%s{V zp%IR@?}UJK5ziCm&=t)mzUK;rnXWoFJ%wEuv{+9 zEuDDb;E5Mr+<)lA3l#x#zOr0CH8;0#V!5_be(}ZqlEU&~e`$HSH1q7k3$tbQyduip zjqN_RST4^#yi#4RELJP!n&{k=toNAi_T+&BNQ0~MODBRub?|^0mHp+57t1rtC*~LC z%bJukwbIop57DHmV~vk!tTeZCo<4btk9d;%ikpc<4X~zK1ow zQ*}q>NN9KK5oz*Zh+G{GZET^oEcD5eu6Q7%;-N?;@-%#SN~su|z)@r4#hO^~aNOEL z^HrW-m=EH9C?@VUsi(ra9^L-)<$0s_qU(n?@5O)WaERiJ22fhAm7de2KN!l?@u_ds zKM>7prTOKRxeK+DW>Tx^$vRcNT|RywewUxwUtK88F03pIJt-9N+=-cm#YKU=E_~pC zC~~!2TD~mQ>{Bo3yQR|n?9%c=ZEpWuW&TX9{H~Sq{LHlz$B&8%`{zo}nWTfqCs7%T zVy9PXrRB;3iXWBYl*wa9M9R#m2udWG3m;f681EWwg(aip=GwbG*hcA zVyA@bQbd=fT*Gphn_DW2LAkgf4KH+jH4o4USw(P2SIebYD9n|YOP8vpr6tH;s+ATm zi!p&TQXA4U3#F={2HN?`${gg-MZuelXtJ~@pjWCDVY_9kOH`2rSe3nT3xs%{GvtS^Gqx*%tHGGtT8dOFt;d1eO9r5tJS&E-bZM?6Z`FY1HDpN7R%*f%np>HL z?5q$>F{T+Yx?+&i5=MGScwUgIh{p2b--LY3EL|>D%K}$yT_A@}m>M#9UqG1Zwnf2I z4-$YXfnapum3dB8eO0$r0+C(1TwA%YBwD~mJ*_QP=F0?2-lpaMj;qL;6T-@sCuWgz zizWfuRLz;{$`X<^cVS_rIxB8kB^3SCrrI)@h?stAr#|tsA~!z^r*mmZqbToNP;{yj z7pn`xbMLVpCT2@wXmEO9Cm!-X9`-&?K`V~l#A0c_T%9=Rc{=2II_!Cx^gMZ?9D$;I zlI=ilv3%izaEejC&Ck{#? zM9>BOWP0czB{8uyS4L+ZI(5QKZDpn+5Q6lxmFhh786_h10@fCEC4C~yz!e-psYw`C z$4u?o!o})JWp-k&@*EDD)+6-XqV$Y<$WpDsQhBi?iXrsb%94+p@^Vs-hqWlNvs9ZCqdjX<^6y-kpOJ>NLm02wOJ$SQ zt_aD`S;3l;0V^V*hI*b7vNhq^AS(&R63lX81rcq-o(M6&I&n!TbZB2eBADlvIl+Px zvZn&A#nLr&knFZ8g+O=Am4!W+uLw75VsT||5n5^s!h~E?53T4e&FQS1fHJ#MS%x;j z&8h?Pv0YGPS@m6IS1a#ADbm=}qoCQd&_NGOopwVVf~|=oAB&3%SA_t~i%GQT4c`;X zkVmkL>5!SNV5!^%G4C$du0b2!P}yFg2QCQC5sgk0)Nm#oK@r3KNF(w5L=J!t;c@>MIB6i-&>goR$_=T2)ZP^DIdAkUXq=7bKK zp@bH}dx8Y?p!5+HmG*z4{G9Oq6+_RU;=H0TU8qz&SyCwrKVTNMk+{Ezj+1m|p;ac# zugp}-D@%~MQW9XGfKinaDk;dX%p(J#uQ9u_ApEu&NoK*tqTb*>6|!66ey@e0ByUlKwrypiRlmHEa^B`#Sn-r zE(oU%+C_&}L@%$=bE{(VrG*utpEUblS*XkkGa)88I-?*TWV#kN%F*IRb*j}Bq0-x8LJuWiV2TMb5Ry27PW0BW3`JomR!c&l71U01Pn^FMz1N!167yxL zTS_xCa7e=K%|fr>vlwFfPKE(nd_(&LDP>U%Ff=3$Ic*>KD+H%t=co9&=JZh#O(gYBix7 zXR|PdE<8@~g$s(agS?LQpdgnQ}*j; zz3`3a7lfa_P`xJZ1 zzV%{lLEwHymKV0YvVaEnjBxj>mE~(@n$=cYsmw2|EIoEvhUPo3Rzzc01%)3FoFi_9 z10)sd?86wT5O+(^MH*UY;YU`M7Z(Kl;>DHuOQq^taI#gzAs0wp6=W+2jyQv(E|QfM zIdI_UG2wxh(e5mlAFW&zszoaCQtck$09VV;K^IHlSz+^pQmD2;QV?%t9yM@HjPwE| ze)%5~`xEkNxbXEyOI|_S@$k44P=cB-gR(|t&DSm>kcq})UK{^4(~Et1JrnosV<0a z>AK6@^RswYz`GRZ%5sBvx5Vud)jT!8OH*05lY1o7hVbr+x2}Yj@IoH8>gs9}4C(<) zD{=?H3n1Y|W01SBRWYH4l4B?jat-7IF-Acs{dhOPP;L!jy(uQd5T{Kryn=T?dlVz- zzFqZpKf}GuD7FnU!w}b`}AB*$qv9@=f(+9G3>WXO|@^B|^Wxxaa?yOrw}89zhu zyq9Wyc!#nNqs(wdaHg3BfYVO$U4i>C#PD|VC@e7s4{^JvxE~4b?+C+t4AWYHl+jt) z^SgPpPI^T{);(kiqP`nooDsm;3`0q>@<=nh1dC8RkC72X!c;&>Xd0-yQ{2WInfVhu zP!iNNZ&y>?Bj7s;Sr*yK*bg)0!<^Q_Jx?)To#xzQmeSJjWE--V-QZEVay-s3lHb8~ zC4Q35w|U3cS7R^do@4IJGM)Q5cc-^*8{U1dmy)vGH}LqL;n9Cz2*r&gcku`&nJ%WT z;id}K1@8!+WSrZ%?i(1>pX9nm0*t)vXH2V{_Vb+f&q{cFuhp z-@S?N@?7I_uJHut&T@}Z+@lmT;aj=JKCbZrFE!FEM?PJAmMQsZuHoZYla`2t(&put zN5#K$63P**o8w+4ytGR3-R%rzjML5|6v;V95lU9^pO)H3xyBVNCv%T0oW~TpXOmn* z(%>NA$QiEj6py)tEZZCEr$H?Fr?7TR2|$_)Q1`RAcu$C z^VqmVBcbjzYKaikwuyh!#@oy@znE@inAft1q-=c1%adt!r#-Ed7u_^x=peV2V0hz0Cd!8pJjOtL~T4H=W##i(`jFq$^xknLth$}l6D)}+$Ejk}d(reW$_5yowUCM7Sg5DzwKX2;S>X0^-+ z(&@sc-F7C^5Q~dZ@P;vS3h`iTQVfjol4+e<46L*f#Wb44NyeaqF)+$w2V>C6r1N2r zU<`}~?qs@bQ{v}nEv-aX*Y&kA7ScwJ+vsMR4l9M?XrqP3=$ay z(52X0H;&j(r}W)jq4 zvJAi=)Z?Xr)S@zekHk4kGx{<0Pm=RIGuL_WV%5%L)TfG!p;e=5(`l9&szJqHV$bzYj;7r1`_)T zZZ{EfC#4Z-HEq}of*70!Jt!6ciT!8@E(l6Z6kB-Ad%d`%6aX#f#%TjEUhcRe$utGs z$5}#kU9b?+xNPN~AJ&qr;sW^){U@1b%1aFl^G#({v}dc8aCetS^`dZVT%d#L9}uonYxnYV37f*#l)O^PewfDLH2w^G1TpVF#5J z>S2B{lONfdjDQbl-q0%-o{8r+mP-VxtVXw&LdG_l>H3Hl`+gX=7tANPM<$KdAaxr( zs&Cr(pHsXxuH1cVS$mN2+sgXBhxtX;Ju6qZ=8)beefVQ=1#qApV6pwT#_rt6-NO*U0FO6)C zGQV_j8re(jwPg6N(@UYdn47vd_b#n%m85iO`LMX%UOz|zyskln6?gB7L^rA7O`Gsy(u($IK9JRxEl^s-bKKP& zLm{uv6EmXdjPA#e^B~`=^pzGNGajZh=;Em9&BwT!R9YRZn^N9h^2)NRc9q*T`z<=T zoCMX*pwb@BR#TaaTL)o*i&D1_dXyuRGG0~ z<%~x(A*Pcomu40tcd4`}3#*xnMAuWKm1V(KB`mS~JA0MjYfQl{?Ly~HlE zv6fDBiZN*8T#i^P04BGlXPI|*T8A<6@7|VHv?;i9HN~;(0o!sf?SWn7@mT{$2HQC?5 zx$|Ijoz9i;_9!`*eWSZ`CRA)T_^j|Cn`ND?V1lwiC@Jf4++GSbd)lPC#q6lvBi&y! zr!$)RxT_yy3K!jd{C6(RL)Og_YWN;QiOP#?;lUeV@Q-`Dx(DH9xF2aRC>+}91WQGS zS2)c+GPAEL$Jm=#z0@kZEJ}`%&hF@_ao-Gn65TD_RfIgvR@|bllm)r}Z=c50 z?B1E?J(X6CJ{Cl|QjMp~j)BP{!7pB8wrqJ1OAbvFC2bbn3EQZmx8mN!4c9p%Am zVFA0{OSMrAPqiWUfl3v5r!oZNG{xKLZR0K$Q)vixdvi~5-;8g2hR1S&@w+!9_ZL~M zpJCenGN;|IBv0J^3a6Q!aWekA!%Nfm@ZDiAlpT5mRqii(bNjs-bD7JX0~=M~&_9LcOboQ0N8jX{y|7Z}7(Hp^V;k4_gts4EOf|DDK-#FEVaQpQ4@tis z&NVulc0OthGTiPNuKUZNO-Bclq{}NzpWxgRxD=oAg32=}V<6wfB$*OEEy(QyE$U7S zn5-c+za;jDxNaAar*PH`ykWfq46lvh61mgNqnyfl3~H{ zxWH3fw}sKQBfUW(9`Lpyu{z`)H<9~JuCa&V4Ks(`V)+Log9>pISGkkLWiJDGP?1E( zK#jXVT&L4a?hi2$_p(-bP|LJhsx|S+Ry`Cd$njoA(pT5UU`(;uv{`^}*J5uXm8wS% z@F2g1$^HO$KgsZXJ?hXyan83H#Vr5a&J1F>tqfyrl=T#25-|f4uQ2~WvFZ4X@t6UljnGG*J4}ALvnG$r}}c1stW2H3f6eK zZ_M#d#`!cGbve>~N=)@)aT}MLU_q2iF7!&^8J^gUtA6PH0v_cd@6xR0&1TCE?mn-` zo-;EWV76^%G^DK37M^k5Vt$6-ZZOm^2#s5tm(=4H)zxwGiwy=_xU~Y1qMbI|gH3Bi zje!Ag$&A^OVQ*5@PL^zPf*X>c#zX&%Nw@T`9Mrt7ye zb4m5E+uOKrE>ytAbC!V&VvuH5Htn`^Ylkek)O^s!?b5oWCY{-~Rpd@5yoMRPgfQ!B zIqtrkn9$328ledunO5fKB#<^!!hS3BxP*sqa;YrUJ@iZs9aZlB1fO z{@A8;Kkn1mThj;j7*!i5!J~okZ6`Guy^VV$C%mIPc)q&8Y=IFG^kP@2H})+43+>4(V~GWRZJhw(H2rsC+M9ZfdxbnL5LiG!aO- z{o)PYejEWkeUOFU${E|Z@clfX3z2Ek817;|EqZh1oNk!KIj_<@sF}6$y{a>wZS20f zb9mRw47Vqw4O;xukj=`9tTCjBGsgQ`g4N8HT%#Vgs&N~)2g>+J=1ng1-m$TqCN7ob zx+Xq(zczAb+4x(lc%59=98e(NUhYuhGDeFf@|`ZTFk*t*MzxrYC$o&2ImZE*uxG(m zX|l%Il$VI|?mY~}Y{x2wz>_a$nYzCBM0`-VNoB^24KOdQ8P)ta_vk41GNGYZShcY6 zGGsE|`u8)jfoqt%1mn`eJ$ejmEoIGdiu_Jezvc}cSk=_EtDPZ@-p7o@*8W_AGt7IWQZ#;yT zH=f|SW`DNv+rNu@XJ554VnGrE1O^v!zDKeFZgXJ%Gu%0CN6m^?<^OfCOe z^>@q;%1UcsmaG4j7ndTJ8(;wDUB-V6+BnR!NdU(A{mj`WnsS!QCAo1kh5t_GI->=q zxm=RbkdRGW#pq6o)97+Wcbb*?8b#Kl6otgu zvjT1W5<@k~TyJ9feUQtId*xTwc#!ckKEK)YGr%?WF(otH#!)UuN3VI<`xUNhRtk+f zeLr)~t(;~i4JH(8xM|XB91O1+j*z+1MoEwH7S4UrE8?g4&Nxa3nJvb-apUaV#Wf0? zdpp-K2M#^XHBNH(&C67KxicA7prbtS=G6d-SxyO0cT!Mg3M%3{Ag<+0qLcrFtD zV3ki;?Fg*)?K1KO? z2@@nOk^mCdBh=0*#$EOGZ8U}js}A-nL*t9M9H4PJY4NqLn<9GRwJ7NTQnm((=0yPN zr@CeckCQwW23C^$uV8GUv}zMPcpjY+yG+zM8oTBt5w@1j1XhAFTRsv*?nLvZ>&uNw!*i za55x2X)2#1cyFM7y@Tp+rG8}y4vyO(J!8AAlz*D~Q=)o zK>g2=tQM$zg4)x(m!a`ZTK!J?;AJd4iWc9sQau}9n#Sv1>i^S(kLLMSrjwE5Ho6v> zXI0*5AB-N711kNG>MTC1(4}& zgi5Tw=42y4cG&oK+E38^PKNkJ5Q0FGA4~?TbKt`pH)32c?IfsI|+gA_emFSneYsgc)e+f*u$q2>jV3SC2D8DI4C)O zR_fs{vK&bgrh|Y^aa8~-z&#&jen|zBIvX4$6hM>lvYnA^mcWgXhE0+V8nk+tq8_43 z*a!bvl(+w|KVKGC{pZCtem7j=FeWD>L5%Xm@+0uO0%#HLd0KTUA)Y~wm%=b1^yukt z>pcAZRv7XL7*E{uY0U!(cpscN`ECovdnV2Omp7cdBWSr_I;|il*(Zr!X`-^pONk|xL4!5b~KT0zapQKUv7oWZt*I4hnuU5&JoiPk)$10+dmES|g$ zHHQMX(7hbe|@A2c}u}30j90RE^nwSxd0g9%BBB;qT zLVx}R`ffOfx zPJ$}TFcVdMXl9)PPSACF*FwG9MiT~GT=vqOY>1|f5tOgfv*6!q@x6uc%*j*?au}7p zi$-GmCc<|g=rDCSzR1}lYsNPQ=L~Rx1bhfic?(7K4&b9AbBHrj@cm*6`vc{B}f_7rDokW6RFi}Yr67dP?uZhS015U@8$+bLE^<0KM!qTeLVJF{e7bW|7f+v@12|DbK zzm$amx~1EwSl-;x``QvDSa!b;L>%nuDa|LIeVy^v<@92_!IESpwstB zdGnYLjE+|8)dyU;>?3|1q4>uTsHpz|7g+s=o3~9YO-Bzi61G9H z1z8!C4@&K90sml~3ahFVf>a3ViXpQ^twExao?T87wYHG39&r(-4jr7 z2!&8Ikknymdc+V7a9;?97MIjf5JA*JhcAT5+bx$y3y@ydZw0e&U?1Q{=rt;QTL+ji ze5-|mX6rsM+ky5(u}nxWS3#J^tPyD?6!an<^3E6luR@(`UZgY*^V^hq2dGsz9Hi}p z)^t!f)^4xx7cJ@0kNB-OwI6AaJir}*n;C7vjicy8@W7qNYH+p?=q#})ZUcF;nL4{( zA1h#1R)G*2A;!&0=NZo(aE|O8`PN%$G_}IQT(wvR@VnGEETdyGI{4a34EZONHbDM8 z{{EQip;LLpdhVm=KczbOe3W3QpGo_MRsI{~WgQpy|AX#N&^@ZNJE;shxu@t}ZO=1X zh<=0mcrT@)hxU2$NAQhZZL2>ouJ?oS;y!QX>*q6+pOtXcv(_01;|qX$CO~fIQz{JC zQ*dPlbGX{%V4aL&;1={52L4Xo$~uni=HE{()tz#j~bMbesj zJ35%MYQ3bgax~e_f!eXEev>r6U+p->abADON_tu2X<6GO!?f)3Y7&EUiFb$9h@WVo z7NBPr(Nn7;y=xHF)n2K7aX~SJK8E!^9GftXfo@82yzY*QZtaqhEsX9v9RI-3|8N66 zjQ$I)r1k^vB(%nZ?SCY?{d$Am1VXNnr9sBt$6SQRQ(OZ*OvIzGgQ5e($LKQbpmu*V zT-~paq%}gEWROwy&RVcs0L($RXVmIXsG-E)XGGH0I@;z%AVKNiT z=wgf*l|+UH7$cxxlF&cn9-UsQgw7KNkumP@JFdd$4R%?DF`E2kSK%DdEe~pkGTQKQ zc6S|>^hP?Y+)u>b2Wlhas}Qo%YFF0L=q#v>v^dlIEIE%kS0%j>Jq`LL6V;MhqmHPA z1rwllDr)pHQI(R^r-XD2R7?Mrgu_`03l9(>j)7WP`@N{bx`pH9cKm)6I(=051gORN zScUJ5QxM4Eb{5nxRA9lAQJsoiFinh>pr)M#kv}>K*W0K93d@heoYG1kB~hJAK+Gg; zeGQezT&NbvDM(rjw~vUCqCU3~>Ja*;FmvTO8}0uA7zGyW1KuGuY~auEbWShs=^m0GVQ-n|^Zsxq;<*4rk^I~I>oR;UBJJVca zEFL#h8r3SEU9(nN^Fh~MkH1fN?8@PV>R3uKew(aQsyD;_9&X~ z2IY9P`)J+VSXX2;qdm+aj8FbXG+iWmku2|frzbXjcY)g5*47|>T_|lrCukEU`pkdm zoH2sWV#Mzoljh{QI1r67xx+d-{jJq#Wp=@G=`Th09KnFG)1s#G^S8GOcW$Xoz#9AVQskKzjuBGz&^d~fM7at`Pl-vPI z?lIc-eGN(TI_XR&lQqs<>t#S25zj_=V;&b5y zxp8s)P+fB4nh#yHsRyZ9&A(41eYYLM{3rOBs@4u0@rxwI_0^Cfyplt;Z!jOKs2VDg zVOc>bmLJ?O^Xv4ijXsRfTVUxX|N8$%Ol*y!OSzPl)<)~KOqN(j*y#}1F6Ge-yj{{5 zR{(9PTQ8cZQ!h=B^uw!k8j|b6rAGNu;^*KeRnEpJU#H)Kh`!H4^q<8KuL<~!!1%@^ z8=u5xjgDAlvjp5c^Xewf*Xt?4HTwEqTvruTHq3P0$4uYc5N47m8~NR!zuY)UY+8(S zRipEIPJI0l1#3f&ZUl=ZX{XDC>7hD8J8oyz(PIqrbmPLV?=dz??6#O8niOLbIS$F#;6m|+GbbiBLQuy&@XKY)qS7j9qRuqK7f# z!}N~Ece)_7|BGh9jkBt8*$6CFfmO2u#yz)z`HBag*@y3kJ+_wBfR=DHHsLV8zF6nA zl87JJjicWJl&r(Z=u+rU*^H8YI~x(Kckn4rapS4qJpr@v4fq5uUF!;&SmM0B-g~dk zUgxRTt(N#=uS3N*dT#s3Y620Dgew529x7PMYWrGLOg`+0hc&?KTb1S%q+-pvok;&^ zNX)@S?})v5hD)8qyd{FQyCU*d*Vi4O&gH`N5!%``?W*A147x9j{GU~Xx*oQimvTkO zOr;=oQ?3YEF(`bYd)C&7QFx_LjCxn)!Qo)oAK^n#Pi(N&#b2Xaq`O_6bg05jXv~`C zEnJWA7L?$`<;}PPVnUe#Wtv?>b1v?04$Gr=+D9yZ$_;6C@6ni@AB}P*nxuG6!$iG_ z)g}z^a;$I5HZpIcpi5}_LvMSjg1$Bl4p0?5(E!%6^W4dMo zw>qVu9p0{HIjBDR1?M22wnJChpwBbf@F=MhbJhN+E*h<3oY7j(H+dtd;;gYPreo}Z z))H$P*Em(vV7@zxujF6=G~js(0yoQ9sk}qLrabH@X-K`j%SKqM@`Xd zzda;1XB*UIO?(A-btAQ2o~CmcMnQjGCXN&3P|tP8B}sCo$K|c-B4=Uts0lV{HDhU; z<4xlwY!;MmCT^<4fIh$oQ_k|AlCHvOpL5bpX7$0ymu7HgE_7qN1=n1?E_AaYb_3b9kW-AaPyi-l&}SWUy+Ld^y{Ic)Ai?$iY`d{ z?7V_?+#fz?>72m(qy49#txUna_57#sN=`bM;7Ah~yAit=DgrldH6zE*Oq30%UCpV(7Dn4oE zYE_XopreJwj~qSdB74#w>M`5Md;{t@d<7unP?vQ0@W=1LYhj-W?#EaSmuqfmv+lP? z>*yw&Cbd2kND|(-h<-p^&(sNVe2%6&&S*ws{Ma}PMl{{%{AZ11_GY{W*MS2kW*N9dL-J{3{Iw+a2lKb(oq)FCsp;y_-8_PI622Tn%Qx}HNwoEh8N&fcuxNP zy14&!Rm&_W60qlW&c-Y#u37YA&x#uvEvE+(f17gXgsIKdU=MsuWsG_wB}I z{%XXTfpygC+7@x*3#tx}=EI|cb%nAksGT;aYnFcq~$cnYE_fhAp@JehStE~PUq-pkvI%@Gv_DZ z8vKd}o+x6!+N}s?wqHIkir@GdTuiiMh|x=R#K?JMc;E!ES2k`!t9jIY*w^<8#NpcI7gh(IkCUhiaK9nQU-J!=rWcBTRb>R8_w|N*Qq< zdB<eU*gQ1h5Wk23QKK%&u>5wZl9oY|mObGS z$W((u6#4a-#vK@+$fa+f2Vp*jQAhM5c8$dsAqo@UA08%t6Gf&5WI%L?J-QTp1HK@4 zO8q7L7hTB_6pgvxOP{TtCB7|MWXMv)V?=(DR&A%cD>_(~h_yzyMjlJBCN`eb%K?Y? zH#WrKjpRq?;)V0I-<~*u$QHlO)v?WHe?ReN;?2a@N22>h#lPE-DOmjAp2IKDdOSmK z19r;~gX0-BN_Y3lQp!iUBP4hm+%t%K9qVs-O|Y_Y>*AU)S{r@dcJz{$)8sd{wB=Oe z&O^9HZtO)?yU?p^k4rrvg>PJH@9_J94h+yh2Ghkv!^pqgI)PSE?0r~jvF6 z=U6wc`<)rP!ZR8RaVF>$Bmby1XFr+G;%>%~$~L@xwJ~0GW~8FG4>lgJ2MC1wLL$t* zq|iBaj?1Oc;4O~tw{woGJ9VCBf#S7 z2Dy0nZHDbt6rq_RS|bw@u*CgYf1nX4xYUZ#3w7UT$dSs>S5z5zdhAhgf6Uc$$47{o z^sf4vj)IG1?Qs9zJH)H>0URsCk*}0DG~rku19d&pK*ivo$hW@|bj69-5Y7D2Rvm)X zFjp*{mx_0sT?C_KR?Wwo#wBeMkKW)z73(C{WBX!|tvecM-7AoFv?eYF?4W~Vj&FpP zOh%u*7hLalp1l`JjL@~p{wRrwC7jOpsN!>RBN6`SB>{<9qXN-Tgvc4{3tibz@!F8& zx?J2`cPX+yw}DL^~uvqc5MPyBi>E0 zYl9I71UtvhIcv3Ty0g9msFnru=Pm4e4=U1LIGS)y4Tj`oEc$)6Mwn(b%QxL}@kC7s z#{@q60e$v3OJ^aQ4A*86wruQ2DkA*px{hL_RClcDn1Cyl{y7~5*qB8b_fY_!6o}n; zoXnejQk`Y|33ZSE-DEMzP?2utRM4S%{Coa?6aFZC&wsD=?jROT!T*G>z}LhdZmOf7 z+579$U5%d9x;kIAoirG}Xt-0Law{ke7Wqxr^)zl<*6|ZA5i{l0P%n0!bq|5B#aWFY zOI;6jRdN||uxRr%f-?g}^K&%M@r&oz;OjDU{1y1`x_HrwFJqykEb!N&2>(LlcF>aB zgp_*zX|8RWJK9E{X~>D|E+N7DVBKb&+gusW!%JcW*Bu^bcmZFlzBz;68FkLX8k?D} z(a@~Y`ZzPT`#H{ktn4=h`+id}^Z$~6#L5Bh=vz8xBbTF_c`k!CWkoV&x4;I)9V5gf zuqogpLgf%bH~yEnLAL6KB}S`13u`!M);CNmG%d#2yl~NaBu30GHVuw96JMi= zAYYi?QO`hhge-v%$I2+Y5H;zNF=Ryd<5EugNLy z*Wq_W?cWnn=+_l;j?iDjSFMRN)H^`&TkzFQae!hd+78ATp{1Zmr~Ke+_g(3miLa-` z8>+ATDhCzDZ|aC`olkD0f-Zvkt~aW)WFyB1`t|}gx`hwdg0|O}Z%4-XjiYwN>le<+ zdk4Lbl!&VYW1Jn=i1G~XM#GQUsb~l8k{To%o}mvhWa*v16kSIe9*|VTZt{=7AKrXn z;%4G&Bk>0B$KHg~-t|z3xsZtQpGl9`@|E=_;jkkTgD&l#Y>FciUv|-DbH@n)wvrjZ zh4&PlpP8UfD)do2uyuo3+IudtCu1Hb@DFy^&NsZOx={-yH4+L(8rzl zacuM$v6N#+Qypfh^C7zUuK+lY+S#=HZ%WZv zPm8fdNWxayTbiIRoF&%6zgg#AQ6qA$y`+&6<*L-Ez^vj(!aBPaU2+vdow}~>Mu}L% zdpYY;CA?CknRI@>DXwwwbFqtOLQj`9FDwMNbva+usaGk~^Z+*R|}XA0p1EB^&IF>>TAUwtF5aT zrtYv@(j;k}P)%A-LYt*o>?0=Y%TL^9H0=BuV7oMv;rt-%a1n0&^|D6g+q)=bLI0&h z@Grt=%?37Ze+~XDeB*X1B+mC&a#i~e;LmjV9DPzN-z?uREl+(`-|7Tf=E#yi=;!IU zjNB+wIZXa$2^7En690t|*&~U28rA?Us}Xkl|LcO?7* zd~*Y6Viaq^sg(o!*~}@R`dgv;%+aoT6QWhhw1%G{aY)PSBnqw|?ou-k}PTi4@`LWd9;aIDchFHzk zvjAHCP7%d%gJMvTfMsJM70Rk~e4*a!(ZgXnJ^r~;|3VV+MMkp+7&DT>k^WowMfh`F z!14W)^=Ec%ofCmw%DCa{kKk`~VP`N)as3*tsW)TQ+g6mI;1st%uJaTBIF9u`@GqWw z<#40ot&w)K;?@B(M=N`R?{EIXMy}Mftebo^EkN*+U-fSq{d2R6H;HjG@y2pTV1CrR zMjDyeH3HQiDMnM85vH_{UOq|3iz7H}r-tfO+HK)A?WM)wev0nKchx*vH{WR!W7z6d z8z<~%=y{*5;mPTk0n>rlZ^qV{IjqkqzY%MMQ*uoZXFB7cUU`a`;jGz3UoW|eaOFbJ zHjm!Hu(gQ?*>zd66n8WAjgWyjU-pAwQlLaC_A#7ckLEB}!N(KwFh@HPrfb6s;QM=-h@pElZ*^(E{kb#9PYm3~8|0 zaZSgH$|jWhO_+G|RGrsLqIV?*M>7e(4u6XquXKU5wPzO#q=dEkTe+b08Tdb{NW3Y3 zBgVpy(-%c^h?l#DcXP2p^a}#XFT>yILdiAh<(Iq}0Bck8>klsETgQ`fL))4I4L6WQ z(Vp~5yp>&PBYTptX2v@jRP;E@insPYY_-w|3rA#R!oJC2#__s$9Q|v#UlH8=MJ)@f zV>n~{c%YFN5^4Y;-{#xPNn~9CN60h57+nV*C zy;=Ho?W-!Ktd;HP4N$VWm3=-*v zsoW83XMU6VX~2anwnm?(9{2Hj!;c}~=B>A86|zuVq!pwBF(S}4#b;hlQCm}TRRf6n zE!H7p=m2h^@`LmS&WYxzkF>SY)@t47WwVof1$qe;(K$ot;X9;RLbG2oSJTnkPR;AJ z7ewQ&)I65U5p{a0*{y_z<4xY1i8m8(Cce%S*Pw2OEp^jErV!tf$dmHTTj~bY%n)h8 z%m(+UgKz$wYNG)Ob(8 zUe)*o;vVt3-W6QBH2!*v+@z!E(n-?%CZdOSy-<4Fi7s8_RE*Md%0(xeF#2A<4ZU@p zWI42~>1&ru0$Svo7^d?enZ?^_B*J#`pq#I(M0{b*`MF<3lEH>LT4&D=ZaQ^fh_3eg zd|kuqHu7B~yXNQU1To2$XeOvD8BT0*LhuThL(n=2OLX+xHlx~#&<{$_+^BIzdHw*X z@y3$+JdG}*;Gksj#&B_Vt&R$Ce1a`z`Agw;`{_S?UCsicKF|bGH4m9*h(EOLK7B2>Pm5%RN200lnuH+KP(ZdcjLVIY2lBI@pc&U{da_(-@4PhW>7)*diM+f(SKHNw(pjpHT zFlkA{A{_^_ok)U!hlnw|2-5-qF0fGRb2TDZCP@v=iw1_M0sBA>-B8NMIzZ)eV9ZB~ z8rJ97I2+cq#)5OAVe~IX0hiWQ1D$kjCArst3vmGI!K}~+y>@~ML}v-Gmg#m2u;cY* zg#`}S1&f35i={h2IeeN0(>|d7mE}z}qtj=`PQlwncWxo#4-~ZYi8&(iim{J8&OAwR73!R~5oSqxu?#UAB1}dt%+yB6 zNL$yqD;05APu`NrX9zcah|V_9XG$r9WaFA4937$+bnDkAAfS}WQv%_38g{+7GC=xT zhx>boEl238iQK}XzaIEC!pe=YectMKlGfX>-{|XX1;tD#uH7_Xy5BZaW+3te_(=Az z^Nt0Af0EEik`WrB=C!KE_jtAwdPRtw1+VWBKvVEIp_n9;cY)H&=tgPp5jmy}j7Wgx z2^1j4t1z)%PC>$*C);LYgEp-nl;4Gf({83-rdl)qHiecs!u~iJP{eu*sJLwp(N3#4 zW%9${zs2!5K`>B42SM3OJr2DVtP~i>=t(l(=2$$Xc6SqQ+h|<3P(AI2Xs_W3YoSmD zW|Zf*hw$1?aBd;KNzt=iZyP9ARM$g1AER;^g7YMmPf_`tulzY#PLP{o2If^DtjG(>7rk)OIYQzR6b3wTfK+cUZxdEOmC%rBEH|I_JFRKuQaMM zCGVwic#&N6l$DO{eg`ds=V+YHQu?d({3zvr*3$6!{0PDOHF0gD_K>b`7FXnh4^g>2 z7T!qzHxd3H9?4%S{Yh%)6!lLp#U3O&juZSR2*10iT!GSWr*b=qE{{{WlLWWO^Du>9 zhAihO(REsu2Qfng$?ICy6M^e_AsTo8C-s!HKLB|T$_lZMEshggQhQDE)cqvA z`1O)rB+DK{EC&LKCkYG?2FOQXG7R$tk}w2@EyS4#fk}V>2}1%*_<$i~fNzH32lIX5 z2UDl&)Tz2l-Fsj6YjxY`eP8#zx0X| zsRK~FTE0?|519kE9e~`Dc$|UOgOiiT4jnmiWb*LQ!^a>yR~7}Dmddr|i?#Cd5)`gf zD_0lhm!Ng*_{6c>4(y*eeB`zR`=Bs4KRv%#S%Tcfa&4&s`SQy0<@rVEI9++Jyf8O^ zb!5-TskxPBE0Du>m*6u`y|8?3p>krTeCbkUaerlQ=ERW~_j}SVR4!HLPE77!nl9I> zbC*sW3e7*de`%pSjroVUSDRNe3?of;gS=kZdea(Rx*9_O-?R@sB{ zcj(1u1i6-x9O)Ncgu<-oAd;!DGWV?L=^V68&(AF{&ev*{nX>}0pyEoc2Bk}txr^1> za%EA}drE+~uu`qfK>Fwr$j;8sP~z3<%<^T(96oRW@|P>sOP80`LvC@UR$0m)eqp&% zo?SZe!od?Sytx0+i5IE@=3I5Ta%y&V{>1X)O6A2D_e%=PhyCT{MKKIDj;`I=6HpI8+A@m{HkZxp=WMy?kPB zey*ZPIlWlETH_&_P<5>F5sj5+=U3*I!>bEkTdYv!gNIb@Bc^s(6%S7wJjla$$ZGUx zSjE}$bcI<7TRMCogrh>y^t5>_tV!L=iI|oT9g|H@gf$)7U90ZIWKw*sN(T=e2*LNT z#&4yS&!Q&GX zm{y%Ty|P$duFj+QQ7KNDICey&OwZ5PW`qekaq#Go7wyQx{9^gS zVs#ptmsS=pRmRJ;+Wa-)7cB^%XMACP2HGxQjq&OE*#$A`Gs4xnh6A%)Nx?rrrd(YV zZJ;rQ+;pva@gn4<@jpn{Lv%e%*9p2#()9>kkJ9xRU5`US!8xFB4(gjj`sT2{nb0?r z`sN5U%~UE2SIfdDLB9+yt;^-=+;U}RTs`*9loy{x;*ERLOEOK}w{aQuoLMf5!C0!5 zFUd|%SI}D$k^%)mW$FH8r!R{l`3q%qETM3DUU*B>&x)ZdUz#n;TQy)s4H>dC)kWb6 z&92NqentqU7}J~>T`|a62_w5CJTJ&pMPo(rZ(Kg+mM)iT6@e?ZE|5bfObwa5Z$g;r zwpqbc4-$YXfnapul{rpTeO0$L0+C<3ytr~V$t=8tC*C-LG7qGUVE9nzq2Cm=; zN=?GB+NT$<&0nmoRAaw4xM2QH7`5oq7=PHG)a?L&EW@nIM7W|xO~ZaY+jldEh%jYoz{cqZ!KSom9pZ=>a4KP%lzD7jRmUInh@l< z%F3+JLDQ7bEO<|lfF6`SqN39Nk5`@(-oIk#X;hq76sGglnkP#tW#I?Rpf(cs7twK& z&MdUZgt?XJT4iMka#zX%3^ZX>rHo1niYs%-KFL7lq`ao~+f%&xtx$g}mU938Q!gVN@;&Ar{`q^3uv&dA17Kiz^t&629m{ z4Sknu(=~KrN*6KCby;})S4E`-A-Rh}T2T|vQ0!-R7R@j!SJVub7O`K#f5dKIgJ$6i z@1r8te~W-xc4^4x+zOmT)ctADw&yckxe zWl>lRfylzVaO$8WnZGVuGVHn&g8_*WyMwTHL5k zt+pa`nqur)yg&K88!3*UHdUij(rwQJ&D@El}C<1>QT0&s4zDu!IptvZMC>RjQDi zpB3|Qfk{nR5J3vTYGRsF779TWLqZiGM^lyTqEKaODj}l)L%*FXjO=4zSQmp-C zWpQ3jHO|N&e9Ohfd4c;GSzg%o>O30UGs4}kRhO@sX;$mvN_B32W$CfYGBn?DwJI9B zDk%Jb;2d!)93ZJsXCB5#g}7USPSVgq3qP{5yf81|moBc%T`Je!f|IQh4!J<;svujF z;D|Fg>LOWLkpl;g9uppD1?|pq<!yj$XSiE5r2;H9ao+rd4OX@huo#amaxOL-v= zS#@=_aR&7Orj@vZ;02KKqA|c-*s7RNLn$zn2e}6Fff%D8ls>%cXDGLZu-+sSVvy6u z8D5ijK)V$q>Aqd{c0b3x%qg}FGQ%L_V(Pwyg`~h~1s>XM+}Z+Tm1f8jjPn4d<+;B_ zuDg}%mKZ-n@uHV%y?BSR41%T5|@?8`6W02wPJAxJSTu60$6^m9ZaU$cH(tnR}jLzBq`72op1Awudl{l&OOK6nP)opaqdoU-B!H&UN0qOyKms}J;S5_z7UEV zN$%tkOfy|fUBgXPtP9=|Jjpn>aosmCra#GbjRY8Z+s~NRIPK>-?VpthX=adV+qv9N zacfU-Yi*qSHokik-xayW<6Pqj&Yj^NWw=KfX2Q2}jeT6>172!mS&n?V_$*WM(_F*H zu_i4Q38mG`FOQ0U=OmOPShv8vOnGUQ;k(-z$|$FuM<|kWjv|!2;y*35k8+JGSWf01 zS2&L5(>2(k|;Psdhg@Zehq} zgqLNk+PQ|Y_J%l8uSsVNeFjUz-NxM1#9Sir>-6?5$Kz)7c!8n3ks;@}##21z60&T= z=!iaUqvX~6S;o|0AfY_T@QO^yLC%#nxr;fw;HBvs!6V(>-qs#x$OVSHjdQm!E{3{! z<{Tq~XS}1(q@+f!u{ToVrWLxQH0#KF1u?}) zwlaQ_1&pFF3ciSqOEgmIPNS9zL2aA(H)XudBJ+#sR*rcsk4VbK2faL*Rd?Fc%6QSu zaz;VptS~LrgDEySWjug_B9q21rPx;U+JG9UQSy~fdT_D$PZIVv9@-Yy(2|=M#LDn) z%8OqXNMoKgns9FjRuY$-cWBLABkjeni$^BS5-=FjZmViH*rai&y14Nyt0kkj_wyKa zare<2Pi44n>u-eK5>*jWMFpCawYbk~|#t4PA zYcz;a|Gvqn?Bx*mcMlS_pv6EDRvL^0+`%*}6w{C~shx~k7Z0OpLk`()W~3Z5l4(sU z{oA-(X=Z9>R@IL-ZwJxqlfCrot34sDrMb1OSod~@l422;t(mD-$;+a9Rgd=b3`mdG z-jLReXbgln81n8`7X~Imb<8Wo=xGV{wVya~+|_QHdufE^7H&7ih6;F8(|WX2yTeK` zdX$^NV9*PI92*BNvPb=_zH$l|ZK#Y5$S_~EF~xW4)|5$2xjJ275|?1iHfU1viVE>y zlV)}-tz=%yj3AvZY}##OG7Yl07zJ+_v!D1m@6u6Bprs5Lfo+8yC`i(cUzWq~!Wq@1(&GQ45# zd4_W(U3x&z>AJZ`W+qZnb+vFBUZZG*#-N4MTJcW0TOA=7+{$S<@M=cd!#wGe8Dy#R zM%5ec?B|g&{mrqI`C>QyjPrKJV5=$@#GqaA)hJAnTxtvu=y}5yS?*RBceR7rXE!(0 z&S_0*K!ZUdqX0S;d+Wv#`>Bk+JI`qfp`5zY2n{eA#(%*;iqLSH_Gt@oPh^bw@4PSC z)2(SRl~z0%g;1UW7=*gLG>}?U#_y3hXK6-1s{ToGo@eGd4_>U=c#L{gkx{g2RBbBD zGD9_p8P3z}bClw&a-?w*EG+h@3U{c&MdtRj;;=E*)hR}8Dra#b4b=Gzw;`urgWSd; zO=s;cXxBhuKhEu@LhhtABCVzjn?VqR^PmUC0wA#;3Bd(Hsfl7Uk9m(5my80S<=i-J z0LIH5QzV(9p!*n0sIChZLK>H?-1Ea)l2u%w7^43q(@c7)fnmO>oTlkiN{x&*>W1|U zA&fgc%Is*Ya|`o$TCt-CD><_%vMlUpcqX3RqQ=}qm#or>8s}XwYCEKccg=dmK5jRo z$H;1T%o2#;U6$`kO6WYen0b$he&iGl^r&uQsW6dG$q~0OzohjbD?QoCGLv%AAj8xp zhg8#EDup5N%tW%>^Cm4HkD4%_j|N3YMr)9|jc(O9ZT!zEUK>;HzO}49!1!%tec#ReBI};#x+l25dlgoqMn0r9Uk!OD zy#f^Wse-yATvX2ue#bfYR_1Kp7NF`HE7{?N@)*~>gW-)ZzchiiwOPgO8v6{7bO-mt ztTae?cXBU{Y>hC#baEQmOYODf_^!iCp}UxyIyv_)t!lObPH$$Zk(qSLzWTdJd3zg z()Vk1cs9$50w>>UaRbL=%D7;?x;4EFV}gpB5N0ERG4Bs*a-PlT{+>0tyLo7V+wJ6b zGc1yCg|Wb5rGHaYUbQQhKy`6 zW!9%9t)5_<+j(;KkivA-3b$FbZ{lerYO`}WhHRE3%_L5a{;WUDGDcezB*mriFDY@+ zkWqoEC8iG0Cc!K~86!OBpLdVZ5>AF0-Cz$)A&SO(CdRx>bdF4i9+?Wa+Z58;y-fQI zx0d1_rLC#HMlA;(%Vhka(_Vy_f%W<{`5>wbt$y&j1`$@=y(<#kw1zij!i#Au+N1eE zR$I0}X%R1QR|^b<7!fAwX<%@czek! z%c|N{ZrAL$=-_e^R2zfJdN^B6WiE2HQ;gL;Y5;=OhPYaqG5D6ZaL(H;GjsSBcPqo? zOh2}=n7&(Zk)DIyM+m)%+emZWVerghIf9|**xL3yz#W`mc+yX#SkQgcw+C2d7{9Z~ z{cU0VjQ{cy!%Hb~){hdDbR0$)wH%|?3S)ubfZ6(j3#v++-LH(7XM@iUhSJASUgma< z_U>VLhd?_|lGtYTLBjhk(0b?rE@#ZA8EzTG%6U5ttV^UENtgH_L;eb<9RQEjAVpzM zebwFjfZR}J#(tGE9?^uDO0!&=S&ZDJ(yT13W-bz4Pmvau1z(Z0SAM^T@3vW@F{%Je zWmrp@x?lGayTry?I?)-%pp|nuVyys}+$PR#;oKP>kN?0$(i)WBx}iyu*246tu@%0$ zpgUu>eSjgS;mJ2MlrApU%xOQ0X#-lAR1MP)IcItYjM=>VDbViao7qz^UeM35_&vmy z$+zjkco}la_({-S)kBJN#N8)AyNIVPrSGwq+dwab|11NLQEa(o_zv#i9BAM14vS2> z+|Md)=0Q^Kx{`}cPkVW{o!h{Tq?Y^kUbb}78{WxCO1HvT&NF=Xpm$JOypZqYPCv(b zQZBTNDW$5({szvS1EcG7u7tNo$+_$s-JLU`Vza?#g$LOz>ud!Rlnp}3SdU}&QmEO} zCfzM&N9`Wz{+c+}qVX2rtL| z$a+EH&`zaTD%!omY4(wseN_d<-o)yqR@r4ya+Gv-A2+$3`F@G}X7H2fZsD#X5{_8!@i4*?*<`Yhsp? zk%qLq`5Epg4_-41*zI1bjc9nP4Y?0gs>nN)AsC}6-cD~Dcd?jCL$KSMdy4yJeA_cT zmh+6?y&<{3$ZGuz)Bcw^?S3VB;_g>C&FqYm@#h_0n!bnc4tt^O&?BgFf6<%U=hc|Y zT<#Q*{Z-{8{eF)5z$_RS=@YkYMqJk6%)Vdk74=W=aa&P*O3X0v#X%RRxInB#We ztn`7#UbgXR7_)aP$#Q15tJ#JADJ*AVplv+*CfDqRl{&}hNh2TIxW*^E{pe(>nQZ~m zM*R#!&a-?-`gL=z(b=@~QDczfcF%C#Uj}VD+L31+kwF;)`7S2O zr0{7$ZXak?cUr(?4XODhu|LFhJApifvu5B8>m6WttqiZkqT9ppjAJ;;Y_Y5r_t`uP zlbIrSDcydC5HG1}9^OC$WbJh};HC4l5CZ;)f_I;dDdwIt%aj8QY6q(Vv+(eCteewY z*HqNm1RErPW1LHL8M9-w9OplmXT2tyl=$sp?BA}oq-iL?)ZpRvYs@=ChN4*yp1-v` zcQE6n>D#%X6yMRjOj9ivLiUr~IJp%boPBpG1zscB!Xz=s8#$z;5sVXk4)wzE=2e|L)Bdb`hVD7x`yxFO?rj&KLf{%oV0 z%qpJUq@n2;k<-Klp5nUAjIJH&4GM9;w+)HaA@{h6+;?(~Jq&M%IqVk8KOh-Yh?}^| zoh&YU8Nh>zBsvCa+y&w~on~@>h>5tDwaSB9rqxodiBGoZp-@4N_cD^cx;6%*ip{3X z0(_emdlRWtJ$ir#`7KQL2e|ubhUe>1yB>;jzRf6R`R8_K5VQ5P)q|fk3ioo6l(+FT z-KJ!#CV|hhlpPXbC@wjr4TfDo33#PtR*W$UHeWW)TNs|$BVlb+e#jiiyJ=G zSFlu7Q0Gvv#?yUcj(0N7r`f2>k?vJusuzn}x!gDlqFi#JR|3!Q#BNOWL+=;xC=Yp; zWi4+uTefrec}4b|nb`odZ5yK@WtFz@jPVxpGyHagp@u81R|#svlgA@ zVH^O@>X&c2emgUlR1dqojr-<8P1tzBGLS(Gvdqe+-8OFRkR_Lz4_dihT9?$MGuyUG z-076pFoTy6W?iko-Io&+dihQxG|nT_!u*^D(q>B7Z)F~r@bFD8wFLk*gPf#KF>zGg zPA1bWoF++fRFl&m+m!CdeHwdf`oJEeYU3n$G%&vHq$Z=cagXGLcZ3JeR~MKqFe0K} z41Q3zX0>bTroD9wid8)CG)N2{P=c*%Ji_=LRdhC69>&NaJERhkDi zvsS)Wb;h%e-B))O?|PWw_Jp)Si+>ujSy_=a1{HBed0$Jgn%Rej0hoPA5Sfvnn^5ra3*Y}=?4+=M_%$TtO=A|{GnjhyL z9pzr8G!zS~W;R}iOvYRPekL|>4Re=bT$;H@kAbbFtT~Rndne~M^Spa2<7fKj>uQ=2 zHtYFcD4T7rUErHXhF?bIzL?$_1{mmq%LSl2M#v7Eg7# z4>CKN1=r6fbY)p-FrgNHSrhoBBfbkGF|;cZ@XQLZZ9i+v)=QMY&rj#nN^zd z&w>#qk5M;M%YRn=9kqk9(i)iM>VM_MrNrg>8Gw10@n3^B4s&c0fN_35bGC`5oaJ(9 zZrn`azmvJnXn`p%mu561WD{30x|8BGx}4FSW@Y|3cubp2Gg{z2hG*7iB)l!&c1_(= zTz8bqnfGho&pn#qv^1A{A5+M{dk5xj<8r>8>924Nc>vUL9tGLP+b~T!!v7cVhM6wr z@CDnFIS%XFjEk}2CT?N25}Nay z`j}uZvZBavx%V=r-@z7}ck(_;YfqkSJ?1c~S9y>PIg4D*ywvn@uk^^=M;I4lkKV=B z#W=l2k##FYA#wJsKpVfrP)#z|o0xtdJ7CxxdwA*eD5RdMYX z*Di5Qg`{_iE0#wpWyJMaaUBxZX)4z)uANjKsNA5qUZDIoaqXshTgA03uEUhxE3WS( zxM^|iqI?Y(^PdFl;iO324HbOECr{vD|=oE)o7OTf3zLVl!_2)q< z-(=ChoBA>6E3f;JlMAovTJ(+EAhjdxrR1w7!ncj;X9(Us#CHWsFVMJbqjrVwDe=n_ ze-sGMG_{u^dfzRc^VGj0)yMW9r}5VH^RmAvFOzVGMdPAHD;#s=tr6lK_A929UTOp>|F&?y9eEqcLo<>R`WeG`@(-0UD>17GLYS8KNg% zOOg&CWov+FUIL(gs%wt$ILTvSV5PbL3dR;n%h5Pwh_7|sbfB*0%L&=usHB_1t;y15=%m98b`S(SI%2cw(hK+ArwCD%i&LluAAW7S2vwG*D*R7XKlIu6sHr2J;O zc9J|`Tm95VAHhX@Q3tjWJ=zF<50%$^-c5bL^5?0(l7~;FQX=)95ixm4f%<()+;#j*ZhBbOiD*LuEz#I&T)QoxJwz`XXaoAuOigx? zcxS+s;_A)FCBtPqW(1z(K>0&N~D7{V68JUmQF)^IntQEYF0!R>>#o>fib-q z5&>kNEQyg41(4~jgi4~m7GxtpcG&oK+E38^PKWqK5Q0FOM7tAu#4XMU=TEsv*Rro4T+4fhHnrfqbMijgfA!n~+d`jn~hKY_LED z@)py++h*GOl9g2iiGjg7Po9hRaJ5%(nz#$d+T0FG`(oMs7RK*37&k1@LxmDNEi#5I z@lL@HzzOjDo|YMDmN5SxNY53C*~~ns`mE|H$!ns1w~-L&exG#VmJ81?iPsyJh&_Bd zwLY+KSfX|YjDu3(XQdwQBFm8`VLAxt6xRf>Cb;LL%rBW>Qb(PGgaT+XUbZvRjS{#~ z(y(dLK?7C~Gt@&=3H#tbi}Lm#_UFsus{g#$Chvwz97g42B#2RwSbi9OR{$-+Jx{An zrNlGH@lqJ3gdRQpZJmd|-wH!M1!JjuKCO8m1@D6sC*N(Mc+Z5n|MG@&cLXi>OQ#j& zB>N=MD@*jcjpzkF8bys}(Zw{O?K>IlR?_4cJ9wjoRtu;(If~RUgfrN-5NE~HrmK+_ zGSQl6bbusHjU|)U!NySF78)3>NYGWilaS1k_0&;selDCw-i8lLmx2lTr@kP!aUNgQ4IH#Wrq~Jqv%3CO+cK{z1nS-2} zf$tYn*dGvouMiYK84e-A4ifk<60{ME?IaQmfr(10kcdx6e@#60rSEy(OPRYrjsHKu z`k3;f3I~M0bJc1iZT0%yeoN56gn+$4+D@`U8Y7V?68$D<-kB%!qNBQ)-x{O41AXjz z4VarW{Jco&Wk*6XxMtsa`sR+ zX&pL9@WrAi~ISBrs2i@!cFD_!_I zQno>{1z8!C4@&K90sml3g;iAwK`I1w#gKWT)&NmS&n_p3T3bk1kGKdE z!-sdt=Huz2{_vNiTy*c%AF$BnKyCfdTO7jr7SS2pkhAuoj~?Z8Lk3i{KdL$GT#vXO zrp^wKl6J6tk|xYphLlEfM~kN!m>ii(EvkcrE6(PpT=+SV3XF|uCZu!|nW(I;v2gy+(y^>i{!`Z?#a+Y~2fHJJ6memI>+QDhTtKH6ks9f?mW!-WdhpRj6}~iZ6HrJQfJ5Yu?l8o6$qhWV%)rRp7GoP=g7{IZ@ra9Q!6aYRf}Z+ze|0?GCC%s zgRd>bkbgpH{p8={?~kb-I+aJP=U#gLQ>uf{M+t`dnY3?M<-b8*)^TzFKj{7h-J?3Y zlgglzdy4MW_B^wN=r^d3_fi^qXrCv41mD=zw)*qpdOsL1?(SCuCMf`41hr5;O!UUIF9B|I0{DCC_upI3IZ3xk zNx=|ppUh1BG?;A!2`5(ZP&W>m`*{pviUt)Q(m4o1ppqYR4&w^ZG+p(#sl8%i5+Hre&8` zlNg*!ygRH$@~>@U4y8u_Dc1O3yLB1F|7CD#DsASbVHJpb$3K`YnO~{ zVRYZ&_y>mmhwJEJ^j~NtwI6sVp*0q4|0B`u#|?S|2)Ra<1{r%FbrBv^+WpONb-zB6Ru6H~K}OX(Yr%2>FbCb95vxC;h7y0D5lLIqr>}c3mFg}f zfc&b+_pD`v$xI@ni!owU5;+=RjDUVgLjR0=bb6=~I!_ox#<;`pxC)~;*l88UX!4g` zg$qQtBB&k8Xv4?Y-E~yb8|koe9}#;WsEv@XLdZ(1U0Fw?^Po1;;!N+eE+N$p#)2>L-S#kwuU#q!$mgz8jvQNex2oq zndb3GCMAnai`Bw*^*Oeq`aKf6qi9FIuW=^)h9$nd`A}NtZu(w9@VjfbfEm!`=y1SG zURQ)b1>7j#W2pDnUWfZ;{3S|Uvs*mrA_#`CZUrOCSF8zFx=xSY)O2*#IbyL>git1K zCgN(4FV>8kf6jrwzbQ7IHL)r?)B9T4U+Vw z*jOT`<+;YrG}jo*NIC-XoLvt^>mM(CZ^GGdU1NbIwXR%A%<;j9#A-q*tD<(IhU??! zmNiAnJfz(oMf2UD9FI01ts5Kbii~Eog*k-D$zPAAi$pJy<$dq;B&P2!P!hy> zrA_DrZNfyK`462lM(|mJ_nR70HmSpcKmwZkYLXde%lCM(8cDbd!JmeRXPpnb>UK@d@1pB@RKTMW0bGcZ$U)gXCeB} z;)mB1d`4h=U zH|Q@nP7)gy<6PC~yq*(Ze*}3=_b7gS6gPU|u}`6!;%?l$AZCWPs^;sM7dW?#IxTj0 zceSRL^uEb6MS@2Pc>f8iM~L2j18EeK-Q(# zi>Gqabz8SYZ$`kd0$V#{G~ey54N+Nm3|2pz+BE#JP$GW{KdrOVo+d)^i1dnR5c3Ib zb}4bW)rcO(j1SX08sF)H(DpBy1vk#BCS@bASOr$i4jA{`2IeascxE5IANJT@*GeLOU^j_=3s5qKkBF?OY06c>xfyg{82LY| z2z5PdIWOaikeNzB>SkOKvQkj^Lien#5u@-*p&0e7%7eqfus_0wpq|)ZtBb#Sw@7!n zI_Xe_o6wjw%v-n~;Vme^Ny?i^1;m6h1IjeNhUQ${-x!uh@3fa#{*)Wi>fWO zOf*T!oQCnZiPa_y>#TEPAnyB3_*s>+adGJI*y3Lb#BRnGJ&7La*s?0w9szZR1D>|h z6D`|o*<-q91GhS*pdH@MMmeZH`UU48pSD9+`Jm4;QuipS6LZ!6s7@NKQj*bH&o_A^ zsN$@#EumxVf!3U88dpD6vtYhEi?8H%5mnEv3;%{DuIAmF)zE!#V;%pVBtuJ$bo0>w z^^RwTUPsN)YrowjHD~M8Wet1K(3z%`4aZYFpD< zyvBlyWQjC}r^YGJ-@JDeD1tez9!H^_lb3icqJztOmL(Dj9ri23l)JIx0;b} z9KW0!X228SaRIJak(c> zJoUH$Ex0}8DwwH*ert9J3#%HzO=IRa3rZW~;?&QjozbTo%A^K9dJodS?k$nvG4$NT z?c_!@t%^??xms1C4d`fL@gqkMy2zgPhkDF5GT(qY4qpKXIn*T^KK#jh@LJesg8MO6 z!{wS=TCMx-(K@;Tr%A031=55!E}|b0*E2C8j?d9_#~ID2k00x2!HA~oo&T(n%-)RG z;5u;Nr2KmN9w8wCP2C=hP!C7@n!(9b15RVpUpmTz`lPBp8UIYk4kzb0M>9K4xQ3b8 zv+x4E3eU;EUl;eku4aRwe85pBh*S3h0Tu^m*v=|;0j1|hxpmy4vlGkWCbsVeM5JOlb0dr7& z{SUkj1jupHl?L^(W&Od%7LvC6>XtV1{W$x4`G_ddT6SZt-&DIZB&-$;PvIJ7T>eb~ z3wuvF;FLP1gP~?5p>v~VR{A?8m{W{X&54z5s1#u{J!GqT0G-?VAO#H5<_S)Rm9ykH)m5rOwY94hT z_Vv92xs8};JKoH-?R?}*H#ZZV@heUYU4&4P+R$W&_Vcqf!T&q>oGP(#Z0&S2nn@!& z)*a(_C}=QnFiUIbwg~l&$)E1;;SWu3U~Y8l2ye+D>&>bg(RyXpL@-JeFcj zY&@x#0}k(RY>2}f$&b#(3+HRU-AMwG&3>J$W1Efse&Wr{uZDg4qXEvST4&V!g>Tw*5`PWJecI|QB>UU3 zjf|(}>IhIex@sl@5uY^11jfqCM`{SDhf z7*L0?LAT90*7fUtXU4AZjQT>HDSE}oKWdHHPv*0@n{lM_b#Gs-k5`=;ndt3<^~dW0 z0^z=p2(vFKbdKiOqqas>5wkRvqBnQ#H)MczbKeQx6Rhgp#FJd!97?WU-fhT^i2AvF z_c}Qv&X%JkoD!uK-k0$<<4_2ZHeulO!RNNnP z_1y6hq6WRIzNVw#B3V1!zxNLDDt!RQ%5dZ><#kOs*2h3yk2FvTI4JV%uM}NzA~r}f zf3#JHU^UE@Natme9cLH8D7jVh@uqP}8^ohG_)x`|#5lGu1=+g2j@G>b8KX6EF<=KB z9CLglv}8K^?7iT6xAW}1P-29xRrWx5K=WsS~mq@aewE7(d zpAi3>E1{P6ZvR$G_+QH{p-M_x$%*?+#+o4E#^{3Vcoc z;ifwJnZ3V0-Bs^Nt*i4@+em}qi-tP|Dz}2tV3FT+T~Fh-WgS1^5;0R=4fPV&S@#h5 zTAbAgvc!6*tCGuzgGC#s5u6z)nxCV2j$b^#249z<IR+Wr4pIMfevY zw*!{krli#KPjhX<+|gG0OhZ9jcL@pJ2kSQL+~&$~9$u0lxbE;c!wdLY_01Xl&Zu)9 zR^QBYjfQ5G*2kH#-Oq9UV`aZ7*!P=)ng5skBUTQ0N8i#p8@U|a$a5LADJzjFy9G8V z?ie8^flUD)5h{ley79l%4YE}?EHPR=#GQQ-7uImjtZ$fBXjqK1ap9u%NQ{_WY#JPI zCcZ`!LB24(BhEmyhb(~)CDHiKw^i0dxZ~tFIu!M*yffGD+n0G_U{QO^y>^cN9eENtJcIB;to*!7JPM69H1DAwu3Q-X(=euDL?qyeOLNs z;_E5#hUzQ7%0Y$kn>u0}^T~}&&_z(+^+t7;uIKnb-(J9axA5Uw(Dr!wc4Um*IBG|{ ze&L+Fx6}JbsiaCU!P#;3D9_+-H2j#Iigw^GsR6R#Ir=(0m(${CjSWh z;msE&ZYI7q5^wN+>`gfBT@Qs=2#FZ~ne=!qUs-Pw4m%<-=+gelrZ^(;WfxsGcbouV zE13aYc+b%JnJN0DLNCPwTQ-=bz2_o(G6oV((3~8Ze+^1e2k)X^-yulC)D79a>+}u> zeB6m2$3~A4OF4El#V||Ehv<^O0^mGqXVdbN17ioE(6Vj(v6Yb3kPVB&Z$icD+QV!7 z@G#bHU;V~WB@>0U>^zO&s5L;{>4G{K#itRX7kA!T_?bkTP!^LNALkHG-N$y4NQd6u zl%lbo7GsN$gsrre>>a+S*C(trSp8P>S zPbX#MdYQ^$@;6JM`1P0gFNDY*N!(Mn254T5u-hl^V_Z1uaEmN`O93A;mi*=D-ajYH z#tq@7v5)JK`1<;&QN$)N2SfS|$uGfQg&UG4i(gaF3HLs)tKjdq60mZz^?_b;+q&uO z5G<O5|;@wO|mZmN63AQg!M8Bi9mRwnOWhrgwOVON z)NGsu(CT-RD2^KxgNg(!8xyHeR;A;c;$Dv)3e)My&z1TYl87%dnmxdnkrs~h-@-4# zpX&mS@1Lwcvuo>|3hYwG4PSo*f1?XKgIS8}*Jw?>8LQs5q67t}xP3{TpXA4JtoMO` z$=oZ48j>Nj6y=!C^Z!RHxEz4X^SIKv*ziJVz$n$#ylhp}IJO86B| z=Zwl;uA7wS9RW@JJ4qah^c~8cI0>zHevt`@?YKCx-c!lCqc;rWx6P6$tMz5UT#%Dm zf=9Lv(Xy#tK8^h}M?*f@HYtz%=^!3xqAx)9#_?OdJP^A#V$(QWHxoBiqLN_ntrbv# zO^ELr6U~C95<9bC`FZ%84gWx1oDMV*9#R^w>S*7M$2{bag93a!B@c776G84is6PWd znJ=$9I1@-s$sKh`KyH^GrjIxUF!+fWhyE^-p~%pxL4nR~DAKYdIup%+-b=Ej{Em3S(Yj`&o8$`b#ko+?Ioi3DKlU{zwn*p#kHNXDgLcVo8Avd(GInZze zSrqL_kHlNql~%GRDQjlDqfSMSv#exm??YBA^{{Y6MlS4|9A+G^d&kkgmiraK&0o~A zusUY)gG2%OBP}GW2WikxNi5^R1?Vs+##w(syHD=hSCh|n9`n}<-`-5D&y{%HPTSV3 z|Lo1uuWMgbDP^r}M{bC+ZSY+0x~o>wjD};^PP4EQSx^%~RC~Fa#kHSiZ+k$UB7-yX zo`kcty$S8;@z>&TuK(1%esF>Qx6%j~<&0i!0nXAc?UJ|-&`!R+px)WRRn>0Ks)DLN zEbEx`iNO09!UYe1A0u{0R+7Q>xAsL>Ya!p?42hYy(thdp6|dVuNHajB z8=`VYteyD{>Zbu0ve+7ZntIa5>vcbde496J%_?M}xI`;RO~i;m*9@O|IZ16z%2f>@ z>Ni`5jG+U#g~|`m8#pH#qdv0MN?VI{UzE*G@D=DKR7B?tp@;8~<_XO{$y^ObZ#y-w z*Ip2fw^H+1u0Yi3p=P%d8jd%4ZzkSMyqWkqPh5k#8M4$(GnqnsOQJ~1w`i#wR5OF5 z1#=tRPvZd8$lLl#wMKWg(fBoB;yRFg}C+|;N?~)A$*CBj=ZuR^HevL=ej9r0 zI>~ZqS<}}}mjpD+H!)1-K{AWC(@2Evo)RTBfIA3=oB%@mS`r3l?*4gI3aii%pqtUge5xqt(#G8Md$~mXKvIuqdb2A z)Oce_eV#@qQE))Aczw7yyB4DY9G_r|+#%qgZfw6()K9#AA1Dq=S@iFelO)yu=6K{| z2SCS6`qzaU73ZhGX^%|Du*3fbltIf;#TM#l2^z2n5-Y`7Qf2$1Q8wuQ0HKR2wUyA_ zV)1Jp)Z6R2fdb|21AVB5gC=Oaeuyd{kY)-`>c)F1o{%T~)oNkxIBZP;{V=F^4p4$h z6#CJ??gV|F@uX{aqRRZYp!duwAU%MgHHFz764Qvv&slHSVt4itkX}HcFg%Vdpn1RF z2Q=O##J*nP<4V+Zuhr5XYN1Ho(C_%RN^ime6bZLPQJx}oW6(k~L!-2ZMoj~62X&&c z6I&d{MT;(71XzDEMGrgB2<@R6N}d|h;iVR8$ho^oH-v$lAus_R9Ua^Q`fwxFfMyXV zz_cX|3v?XJb|MJ^9wf%>ButwKa1#r)K35}xWzy8poM>Q>8n6%K&<$mLtOHc80LFY| zs9}AMjk94*Yb-b`8b<$O1aN6xHPAuV7Lt1nxG4!hJ(yMcpw~`Nf#^H|)-v5@0d~B; ztgyfVyI^q;ez9~1D2Gq8VAcoJzp}ikW_0?@*hzT1=*}%f{2}5`edvE%M0b1u8*+k& zCO68nU0?`3&Kv57F5M`b;ThkZfFYgrh^Wf^Pl#1O${)c}gJMM#HWbSNcg` z>u`TJvE?vbHIbWH^w$HwdRVzWwl7-!PSbiD_8Wbjt)Q3*#kGqDO!wPn${a+V03XTz zG4EI)_$LXSG#Q~mYF?{qe2-^4p;v;)S@8NE0W=AZ6N+g^JLp>Y|y6lf%3bMaN5n(%T#OT--gh#K-eEA1BzI00Ts9HCfaEg zr%ZnM`?okACkO^g=m02tsmGzmf|UW|7(GeG+Z>Ch)b4J=Z5xg27OJP+5bZTQVJ#G@ zz>Mum$&it2iZ=VMeZM{u5`@);^$@RdI&%c(Nj7k)aVj(#mJ zE$I$25BoDiWwTT^Pi3zIFkSSkbt$WSp2}zGb*uMK+sm{fiRmrWPsI1z)E>|k^OZ(b zrsTae4lk06p0U!g-S41f@B)p~SxSGEo*$+B&srKDpC2K3zb3A&)E?6H&EkrD@F6O< z$HE)w|0cr!gS?~9SPU%pAhq)W-sL$#W?9vLkm&LX { + node(waterExtractor, Seq.with(new SectorComplete(saltFlats)), () -> { node(oilExtractor, () -> { }); diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 5958d5f22f..c8667e7e76 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -340,10 +340,10 @@ public class Waves{ step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty)); } - int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.5f, difficulty)); + int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.75f, difficulty)); int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); - int bossTier = difficulty < 0.5 ? 3 : 4; + int bossTier = difficulty < 0.6 ? 3 : 4; //main boss progression out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ @@ -411,7 +411,7 @@ public class Waves{ } //shift back waves on higher difficulty for a harder start - int shift = Math.max((int)(difficulty * 15 - 5), 0); + int shift = Math.max((int)(difficulty * 14 - 5), 0); for(SpawnGroup group : out){ group.begin -= shift; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index c2ab8423c9..2df91588b6 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -47,6 +47,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ /** Maximum line length. */ final static int maxLength = 100; final static Rect r1 = new Rect(), r2 = new Rect(); + final static Seq tmpPoints = new Seq<>(), tmpPoints2 = new Seq<>(); public final OverlayFragment frag = new OverlayFragment(); @@ -1164,27 +1165,39 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ points = Placement.normalizeLine(startX, startY, endX, endY); } - if(block instanceof PowerNode){ - Seq skip = new Seq<>(); + if(block instanceof PowerNode node){ + var base = tmpPoints2; + var result = tmpPoints.clear(); - for(int i = 1; i < points.size; i++){ - int overlaps = 0; - Point2 point = points.get(i); + base.selectFrom(points, p -> p == points.first() || p == points.peek() || Build.validPlace(block, player.team(), p.x, p.y, rotation, false)); + boolean addedLast = false; - //check with how many powernodes the *next* tile will overlap - for(int j = 0; j < i; j++){ - if(!skip.contains(points.get(j)) && ((PowerNode)block).overlaps(world.tile(point.x, point.y), world.tile(points.get(j).x, points.get(j).y))){ - overlaps++; + outer: + for(int i = 0; i < base.size;){ + var point = base.get(i); + result.add(point); + if(i == base.size - 1) addedLast = true; + + //find the furthest node that overlaps this one + for(int j = base.size - 1; j > i; j--){ + var other = base.get(j); + boolean over = node.overlaps(world.tile(point.x, point.y), world.tile(other.x, other.y)); + + if(over){ + //add node to list and start searching for node that overlaps the next one + i = j; + continue outer; } } - //if it's more than one, it can bridge the gap - if(overlaps > 1){ - skip.add(points.get(i-1)); - } + //if it got here, that means nothing was found. try to proceed to the next node anyway + i ++; } - //remove skipped points - points.removeAll(skip); + + if(!addedLast) result.add(base.peek()); + + points.clear(); + points.addAll(result); } float angle = Angles.angle(startX, startY, endX, endY); diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index 1d713f7f75..59af8ac517 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -241,35 +241,10 @@ public class Placement{ } public static class NormalizeDrawResult{ - float x, y, x2, y2; + public float x, y, x2, y2; } public static class NormalizeResult{ public int x, y, x2, y2, rotation; - - boolean isX(){ - return Math.abs(x2 - x) > Math.abs(y2 - y); - } - - /** - * Returns length of greater edge of the selection. - */ - int getLength(){ - return Math.max(x2 - x, y2 - y); - } - - /** - * Returns the X position of a specific index along this area as a line. - */ - int getScaledX(int i){ - return x + (x2 - x > y2 - y ? i : 0); - } - - /** - * Returns the Y position of a specific index along this area as a line. - */ - int getScaledY(int i){ - return y + (x2 - x > y2 - y ? 0 : i); - } } } diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index b4917e519e..f12cdb5c53 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -187,7 +187,7 @@ public class Planet extends UnlockableContent{ } if(sector.hasEnemyBase()){ - sum += 1f; + sum += 0.88f; } sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.2f) : Mathf.clamp(sector.preset.difficulty / 10f); From 17e66f10088ed58bb992834c8a4529e1c1ecf189 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 17:17:55 -0500 Subject: [PATCH 13/28] Final campaign tweaks --- core/assets/maps/saltFlats.msav | Bin 19191 -> 19304 bytes core/src/mindustry/core/Control.java | 2 ++ .../src/mindustry/entities/comp/UnitComp.java | 4 ++-- core/src/mindustry/game/Waves.java | 2 +- core/src/mindustry/maps/SectorDamage.java | 2 +- gradle.properties | 2 +- 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/assets/maps/saltFlats.msav b/core/assets/maps/saltFlats.msav index f01aa3a0f3c991f45644042effb3d67c40ede6f6..f4979da57b10f56d2957b952d6065690bb48cede 100644 GIT binary patch literal 19304 zcmV((K;XZ4ob7#Um|VwIVD;^H&-<;J(P%~^SsK|IdnC>16+5ylS(cSJPHaizN1UWJ z(~{cmnV$5_NS2Mkmh*tbB!LCO!e$9#cL(;kes@6ilvwN<2-9SFf()X;NioEXAT`Xbd;qQi@ZR7xma1bTq&+B zv+T8U>H1Q2nYB$En?8Ey)c)y1hwq%)$FhsnxoWMn%+i;OmE{u46jxWSR%@*Dbm`gR z(qi@c*q*VIi>uF+SQ`3WW}kcV`IQ?>rQ`F(D_2Uj{iVhE8;|KC^#$ zu2?BAUO9d+F#pK@<)z{r?xLT>O!j;nE z<#J`ERO9uY!Em!85bL22fEmY?*@p^fF_2$?`7&>FvAj|`xv)?@zEWE)z3{?*L1FQ*zqqneoO|Y>>U>E) zuky0@LBEeKl}hsutyWgbOOzij;G;;`Is*(X^~%j1TXuxKLePTnVnud97B$$_Eb0+J|-Rpein&IB_RcbfbtgeIP)t4h42rt*vl<44QZjyQ?2=(y(pDQhDwHIDLuzNTBGlv2cXLtj}m0IyxMfwAQOdX&4 zM*XR9UMnuHtS(%t6%~^jT~9|;b)$T2Dn80j?XOge^VQWAt|z%7UN}BiU0UMMtHM)L zyvX%Zapfvkvrj&+?v{&-^UEvM+QR;Y^5U6V>D{ZP#km{Dj~(F^_AeBl)kz1AO@lJ# z#ZIr*iYw(Rh#!`sl+X83Hp7*fI{v;0D7rFf-MTwZ3mE4AX% zRX!#x1=MD#xoWY(sR4Gryt=@$;G)1yns-@T;;ok}Wp2Agugh4db?ItxxiopXc&S#N zV=c?8wJW8`Vx>~O!Tq8o?({isi+X()^@+?4K{zo&n-by3-3HP2RUt8Tp)CDe}Qst`x5b zq~}WDEpbU#bbK;YOzw{utM(~IB>$`kcs;|v?*^} zWSjCqG$2brGpg|FBBe@PRXC2ULFro{h_>%f|m+{%?E z=YewzI)Syxnsb%aWguzxQgyX5&u>~qE9$9D_N6lcF!j`qIMK5tH$8Kwb9q^TDDGQ8 zbSjgVD^>2f_ZSb8^F=;1Fg-9654s-@xgTd(D~#UcQgN|VnLOZnI_P>jla7U`3MLeN8Xjgh; zatT}zP8aZ#@u35i#N_fq37mP>sS@UDt8--z5KBE%t}L=Xtwe-gfZCj{s86^VxCSFA zGzqoUF;}}$y&rdFtpM^nFdIXU~;a+rzz#jt5-^_rM$=$Ye_cJA}J_&xXXB$=cz<(+ae4xtHy@J|E zxe9dYF%qtnuW$#08-d&k7j+?*d;}JSY{8Y&x%xDB3qW|PoYI^nua%6%cAYq1<@3c3 z?&Hpx1-R5l-6LLd7w1T&^pt7>OmHE~3 z3TxxsED;co?VKVj5_g$hDZd+}NI{Q}oMz9k4tyZ$v}@{M+ln~iv9MIV&IMqRPogEHvv-Er!N@Xwcd3ULHgSFuemhI(w;1cH?-s$9(k`lKrg`rOBSO$;BNa&yE zUPGzI1-9%e*j8J)Vm!7iS9woTTe2?WLGibeuUe@nd9u8~E%XXKcN${>Dz(A|d9k#* zz;)0ZCbV$g<0QZbsgJOzu>X^#XSw$;8F~&B=QRmwwOny!38l>afO*hH{QfdHPQsaG zts-G@b*@rcU1sTPMcxd{LsX>*N{Z!H7lDDm*O*_ea=&d(kePEauQ+#=rLGps74#`H zmEz(Ylq}Y`smHcn#VpUExB^y^)pW)y3jMnWZkTLLiI#qDvL< zU2e=(z=_E zPLqsXDP1Yf-IxS6J2c8I)VF6 z3jhpnwL%Y9xkve&xLaLZs9u9RUKjl3>!lTz=1%qe4Ilz%GM<%L zE^>oE&%H_EJU~JIl;Kq4#)bP*%81F^Ie?Dkmampe+^gh{`X%rrv%-?`$E?r~{D#}J zT8-<*`3xHe7ak_~+y#Z%K~BYbK#)sIVlq-Im9H!UBG-y61F9b83-4Yn!ZmfRR4Kx& zuXc@Vhb+b#Sy}`gKqkw4R90Aqdx|$W|7BOI&sLZCOEBrK=G1}t0R zv$G{G_1rgJta3lSTDigRInS{a?|hyUn>U=UmHCi!x|J6po_(oygRA`Ha;ePH)dfBu z=a5vm1>vONtj4D)MXnHdF(6cyrE#i~s&Q2&rxGFxfR4DlPhPHG$@7_QL9+G}rCL=^ zHO`12eCy>}mBW5Ul;^g+Tm^%BhP(Tf^2!Z8&1$QymKUq5%a2|aq5011W!~9!PT>bR z=kQzZ011UU{}4nf_}wz=LJiHe@WZPsOI6-};qvO@m15mms}&ut!83Y9kIaN?~lf(EYf zk*>1D=iZyxpV-ePVC74ZvMD+$G@dO;m0opj;Q+W#Nv&T@vo@ zq8dGPcN^r6z}+0R(gAl}aF?TU?}Ri)?X~cKkBGZ=NV`OJ+u;tHXV1Xh5ZrB}Rvv(~ zQ7YF5cl#+fLwC~zvjcbCa94E0C+gnorh%xDhPw``F+?yYsO|v4hyAJ=7vL^UHJBWa zaft#)OVwQ=%+JGJ9`2HqE6NSR-7@uyRCCo}Zkmd^orIA{8-}}U?z*DAguCStqpqqp zNliTnX$3-%xf@8h!5AbIh9ncJROGCSzdRro>9BO%*U>=0D4B?xjxNM0k3w22 zLuGVcV16Hs)(N+0h`I+2K~#4G1T!>nK25DSq&!m8UV=oZoyJHDB0|brNhlh~yOY$% z8;SW7G*F_c8*WsSgb|}V(XuEqM9_~=%ZDhfg)mPNU!A7hqlVH_?TJ1Fmfg&ya>aO@ zAt1k#>I(P-o$qvyucyXd%Dq6`nISs&Q|>Nz-8Q)U9ycXLzi*)NJwv1afdGnYN$#Q% zbcimxuI8pP)Mf4wJV7wGQ{6WZq(4D*wFGE++fR^IDDCGc?VqIxDP|C9JE+`GQg4q_ zZ|#)(4!V0Y-Q}ppV^rgD%AF^Sl7vx`nDA{>V;|M{keeDQk|U2UK2MbVEYYTO|9HPeaulBJYL9A%Q+fB z(bNT!w|l6@L8@_#I84__67AngI^rnRogr!f4K6TAKQ+?26~|_s1=Y?{%dOOM5!y=; zR2@`9TYF6$q1S{n20nwK;qD}E$`h9e_`2M9?w!MZ={yfRO3k+bJ4QsL+gls z>Z9P+{3(J|Lm*mtg4)XwC5I_j*yL{F?5vxnZ)7g%?s50_7`2?GmbX*xHiAV{H$$AG zW$=u96!LQ1&cfpvC~_9-LLX8KB#HK8M1vl#?PQ}Jgn~9eLbW_ZESfMnIs@g-LE0Gt zQmY%)k!HdX>arKQOz?k?CE-pRQiu37M|9TuSv#)1BxMfK{+taU!IOKbT+SF(f$Dzw z@3EAGN)aMKTwEZM+$-T5C-tQoy^jScQ2$VP0Ll}s(lp49Bnbz|k)Vy^oFwBG(*yz3 zMz9D5(P~7i|5oZ3RMo6@G;_oj8u~P`Sq2~wEf2fdF(vPmla+MClA?^P0!V_T*`vURCpyc9l^np*fIx_f0kmODpfG%Rfoi36X{d$NaVBQwY3Z>r;fF zLqe=O(uS{#KTL+>-bJk>NE$_NdO}oiGv;22(SDkzsL|RR(3=*B!2mZv+}&Y=K*y1exy8(1REU*ZS21psDB`nG~XkDBn zzG^3m?^3-Y&7xc?2%yo6nk`axmrU6Q?3=K%d|Qr%soGzm~z z-YI|v2@LJEK)8czI7NHM0NfS7BL2JRiOKXR8q7M9C&K{BPy-sE9ybky78Ox;AkKN5 zcaO_|f}9tLxh^s{RP8iIeX__nST(FRn5X+y&(t2vKfyFJZfZaTYgt=xSDZ)Ijqt^igp4)H)w35`mt(e0*?wvBqaKI(?PpG}y{+LMHlPQ#T#)klxSO&R|SlGi4ryKgK$4-$Ms zr0;u(Uqs!DRQEXHyH`TRYh(g?^VAS`!Ycq_pUuiUghgVm;X6jTcMxaO;=Qb^tz@UW zl}D-W-PGO~@k^d5Tbq*HuAooSNOuw*dObk2cMoByWowN1rHj(gUMjC8O?RDc3f)WG z)J3`XDs3wzrAx_&!R;DS=5ATjK!*)G71fLx#wp@IEoH4FwVDMOb=2i%>U*gpJ?%Rq z2TCn&2y=29HM)%{1FoH?1hxDqQfnaElKK$i4Oa}*-fF06bM(#4$-Aw zvYyLfPRc=6lgEc7UB;n^qEHLv4pYm(7PER4SwysCkO<#+E61=msS&Fb)?V?=utABbuzMpH_}vxI7vT0yVR6*I!Ru2a8yS41b36HT>KQz;i`%c;y|s&m zAXeIqG$UOiAjRG&vDox>H}7^(AF$oiaNpif zmQHxXy9h|(R%pw4hVIU}2c^~B@;!v~v!o}*Ld%3ys*3Dypxi~Kb)Cu;?d_3rE^x!U z3p!M+x8bbPAnRqFA*O?}{#KI4mkBowp8$6op$aX}k`*_oD`Y|J(%YvX)q8AaY3HL+qmKkptW<+5 zexAHOBYKpe8ru|I^o}UKuRz&pb>~PFkU|CoI@Tgg)+Z%}CQK)K8*@dJ^khZERTkJp zz`Brv{xHeD-c7~aP~jF2?K>37q2Xa`$mBiK#FIx4Cmq5^mbJJwszzCHU?S$o&OU>t~4ezeH(grR4FuU#2v@ ze@(=nce-i%9=bc^Ze^z$L7Dpt?%aO2#$2ItC)qe{vr_c?S>gk|VDu&$nNJ$yt772} znWBe?bAF7;sq-AIB{Z{`hAPk2MT)8$7k7uxv@x;(|c0&Uh&UBIUNIS zr_tBBddI5JIa*I@`Pfc1KIO)vi>Riz1qd7U)6{Z?LSXNYdpNrcY7saaf8^x|_;TQ`$hjn@BRleOe~A546ZTC19e4(ENhfAECNk3_XSO zdf+wdO;LMo)Lwx^x0l+}j^Q}5#fnng=QAWsdWzgFb^93vydbN&cmoWOu_IYGFPx{P zfaVX&_8u@Hh1?5znR1Yt+DWQFFFd>x>ZaX00d=rJG;ox1kuDQvjF#g37c!*RM3=aY zPC@@pxx-Jj!iX9)++K}&Pry*LsKN90mLUX_ZkoQ6I!e$T&dU_l(g9>YL7k&p;ey$7 zmypdXAX|wfdeg0*`f3Ao8!3Q0NtkYDT0yx8mNZB=VJ`WdHYTXr-BM)IUeGAj&}lnJ zse->di|?jAV0IMV`BT)9_B+Q2LA{Gw>n6R5XLhM+I)UWWae*hPZVQ2HMtc21JmBs_ zKy}bQZanvCsW#SP zluXN|S{IL|ACH6W}DKUDG2KlW-_6G@lhuZUC)S-sr zf@d>|UjDg@7({PcZgatBjKcj?B;oGdp*!7qry{WokZ2F|Y=HQ65{GG1R0sfrHr;B6 zz*w@<)HUxEK;5d#3$(avu&v-BvAE$;eOW_Q`E?EkYh37SbG(aSK21hljC7wAQ?*#! zM&%|+5XF)UzPNXWCUz4N54B&wr98x4inP4mY}rBR(~9f`J+ooNw(SIlkX78mGeKLu z&(J#vni?9Q31jn;eB35coj|`>L$Hl{%QIB8vwC~5?yaC8(9Ih%qqk(3n-rCkCAyrX zjzm)v)RCS%W(lo?VVNc*;Io>?^;&d_hH;R&R=+&c^}C3z!boq|5tC8z_Pp5Ca1SwcnkcCwkYfAA8{BvtW@`E%3crmqwo~D= zG@#YcG+_*P6Q35`xnfQ?LgJj0X)e(8TKQgyjB6Xar|tsW^%BGF3FreC|5VF*Wku8& zmc$vSeJ%cKdP}ZW4?}X?Cd`4-K9YXlO1~YfEvJr4WvH%>Po7mq?mQWPV->HH>gr^(JUr11fe%n)s#_zbR3E3JW30NhVFSyGIVcJE)q+97VNTPb%O?UcihmW~y zv=F%XQjTJV-wB|Gu92h~w^0opwbBtU?fPj?VGpHwY6y*#r(7K$`VigSAo}U|`1D)d zZy~19hVK;B&=F1T>x3HoND|#5>D;O46q5`8iAfS9;do`f4279-%D6(7rTdG z)*jC|an4()l}l7(FO9T-B`G;aFP^G$A0~Fx3$$az$~rdkBg`fCLUacS7QNh%qPp7R ze1tfnhx*WT5nDV2e1Ab4p`}qQKI>Hq&$Q+L5v}^DWgQ-Smgw9^b>HWLRNm=8gTwxSPE2b zfEv*6GJY>p#$l060wb6|NSv*sDd(x2L!Ij>{C5%8X)Q2I${%IUXdKS&tOQ<_8NK0p-G?Y#?fw^KRK z&h%HPhB&6_7>$DH;~kJD9O3^BccVlXeMExxM*gQ;!S^wjx2}WpItKMVca81D*`nOb zBnwxlT$0LVsoYzsJ*`Uj6M|6e;5>6RXm`!KluT0}N2nYgkmh3VSE#ODDb()tS>l{KC{0fqbSPGH)3n<- zXkODCA##O{5+392l>3BR#81+lc9aefTTD>r+S$36YUC;RE~=rA1$vBXoFMe|%T#*_ znKUWTF&cRNY5>M8XSk<3&8afO%KSROuigBb2uSbZS11ouO7iP7{5ry~b6Bo}U%Rk8 z!*av?dI|H}`Lze@4e@J{Uq>;$k6)k0b{&50#(dQ--NvsySPwo%l;PKY{@l*5=lM0yuSv{@a)bQJ$;in* z!(o&CLVGPnd1lZ-(RJ9Ux6LRI^%F)rBS>#m9?A{!=K{jdjPePipFxBV=v0v_c3ivX}A6bOc!Tu6R@B8?32Jy>bedzx&9B)-WBk%=z znPGPuG|m~cf-wi)8bjUz-fYLd^LT#(;U301yO6$5Vt!7v$pkGN#ssW~v7eI!yTtV! zIEHzn4&ar>@da3>aGXvUe68vxk)CiZ2s$t!TZ2gR0%M4$yrvP36EqgOEr;-zZEVA| zG>$_O`C8R=e03FHPK*A=1>GcUc>|{wtP9tB5vL^b&QsV{uh6Tqd;+fpgrx`R2hV3b zF!W--K=*DzD|vN1<)1>hda-@SfUg((>B9P52%oCoX3%~R>p93*3f>&`tJ;xc2=!a} z^_@7j+pvBT@q_W|$LCJ0mqPfNQU4tVT@pezWqT=h4qIJ zuQav;<2H!T&~Gc|pGJI&SZ@&1GXeEroZGP9Gg$8(s2c_l|18RC9?K`NKgD}#9AC%4 z+wruQHsB~2eAkNg%=S_^UiTyZZ%23(&$kktv>dnLwLm;8^G zi&$UE!)Fo+o_cDGPaYCX{yxKR-pi9a*nOM|FR5f^lzqu8D@oFd%_gYZX(EBy^{A*5 z(uZoafMcs*?J*kdMS7WyHUW#BTMh8Ft7lz9;CiZ0h&f9gFc^{8z_J3G>Qd7JAD_Eb_>exiGxbu5UerL)meePoo9>~ z3M9dPfE{P9-`hooL;UFdV`4G@RBj<5ki?Mnq%O%LLE2Gj6+s5smpKRpc8YreHxmHB zmqnX{cJ*M%NC#)=#G6e^1d_Zxu|92YSfX;sw3C>nXQ|NcMeFULydJ>uV$B{SH`~8# zW;o4~+;KD^4(h}~1HmLB2uf!k`%k>Q`3Hot>X)zZNA(w?h(htR$wOZ-+{*e2LS;?!qV^9l9=cKpPPM!8ed`u;1ME+!$w-!En$ zOhimhAc0dz;5)+z?4@W!%#yP)Yap~%#=Zkh5rmE2XduzbWH<&Sc{B`}2yTgmTTg($ z`En4&ywJ9yQ>1uX1=*Y^s8xdF9qr!6GXG=l?h_GfI7?gn9pN4(coX?}O~Htn%YH zxKMb23OgX!?4!a{#6mF#c?@ZlMcQRh=XMz^3WGh&bi@{BaJ#~2XA(;hMbW{;*F;C% zGxo!RfCj`rDibtCeI+CwNrc~q2iTKQ&jcxjlOU_Z>exN91)h;-r$3Gv3o*tyDnFn} z_*F#msgEN&dLBQ?AA1CSv>z$7d=oRmApi|&85A(&X&emD78%CK4evHI3ozMj#;iil zOqGkip`P|aLJg+-Po)Qp$WJGN|KigrgLHzl1bXS)JRUt5UK@-7K4#)Dn^Qz z1if3iK%xbi;8X-=Mij6%9YLBFB+Yi5m7BV0FGXHvZ~_xT78dvy18e_Zqqy9TIAldC z#7(s;up5VXM-(nS8wc+`rdGa!;RR70T{FBfxN3k3B-lsTNq3=^qv&m5-AB>R4L zird#y+_s)nWivq}*ohh}hy?A(e!GwaBTO%J$SA8v`hQg@|5MMoDI=BthsefZURYtD zR_SV3A2|lrFM6$O6BB$k9B8XdFf5`;k;ozarZFIsL6fZ(iXguw$Vz$;3uHo1nLu0H z`5Lgb4*NNt)JNW*5C+BSKbK%p*^CS=u<0HnCZ>h}yu3q398?WKA5&{zN^v%gr?n>T z5z^Y>p-gZh*i4DB{&Sj()}5u1 zjk}SJM=*Ve$++}QbaYhN8JwYjR#n=67y)|OQ&z3dsr6RatI>zzG>UP{VJ6o(-^X;| zU9DZD(VLfR7Ba-w8PEo-QML2yi>5#s#Aj*~2rx$q8%-L3rI}nnSDmR%EDVu^Uq90e z@bFt@&q?|&LC4sQ5iiiaMOz@=pe_A4IHGd|?`~--ZJ49io|N{Nx|} z;*<-=LjE!0^)!ausp=+;$9+M zKxv?6xKwDmr_nGe2^mIMA>c7gG_JYX=Qqo&^`ulJ*-jBnj)^p z@NEVNimm&Y-ut(Qg|JKjmJJZ*QDa0}5d^g!4!kqY7_F#YSgT>FkNHhXy^G29XBea% z2-d7$IM!}f;1@3G;g9h7MY;KK5S^c$40bM?f*VJV2R3~L2WJ~Lok13bJzq~WQ)frv zSY~?D0YiXBk#RG^IfO$-tRuUCzT*&%rcziyAGwUn*q0GED5D}NDk9#B4Ed*+Hh}&s z{Qd;%fva}dc<#gJKf^lkd<5H&Kb`gsqx?6}xjDw~|2y6v$9qs`_h1=t9Z%xD+>5LC z3;sIdct56rWAsII8{qYPWs1MZuV`P4UAsIz_L)vdM*we_^KO)}$XgsF{-DU&@1GIfSGx1YQ z@5q6M?(-M!gcG4DA$sIzfw13X4yRtdvnKgD|IY_|)!=sbGsAnCOGnmtd?O>1uHp z@CW^4;Rr0`p9R6BQR^j{mBp!OmdWku@+Sk6Qw@((9Ow0ijHH(poQAb^s7=EzH7gl})=%ZQhqp=BN8R(`Y$3u6FqqSRvdLZs@ zar}Kl|HE})82%SnNpAk%ghK~OvIzGg`xw< z$KW#T#D0G>SlzFWq}4+l$Iqy08$B~z0LTHiXUxDS&``n;mX?Q{(>Gm^3U!y@jr@vO z!89VWK{6A|=t9sGltdZ_7~+G!O>3l<(dorX;5N-B3#O3K64g!g?oG0Acx2W93PR zs(U3qED3sFL*;QBsCje>9E0KZAu*DOa~pzgTR=~R2sBgB0kgX@3b5*X$P0*a!k4tUH(%=a(U7^v8_8^BaKKbj>bfMsdvOKu&jnH>DlRL@U>ZGp?q%G(K zZNWs3`45~khVWU8__qW%Lk>iJOm4A`R)4EeZtq85Wi`kp-E1GdHH=B(&G@47 zt)Y~ddd9*lA&X^x56%hbB;F|Ypy%0VjG}jfBEa>jGOK=@V zHLfhI*NR2RsCJ`w1+obd<_|`TfeLI`3R(myQfr2CW$Xoz#9AVQ$+c9@tflh$;1d|Q ziw}|xO73J*?jhRteRWCmI_XR+lhw~$>t#Ue5zj?{fexcU|(bZ-Z)}F zY`6GAFhMphjvuH?Hm>`?MVqLWn$`UWc+&gK80J5*PsnQRY%_kLq`27#DS|6mRQo3L zp^U15A{h}Cq+W-;9Z^R&+_5vQpY;y_U%m>)3WGplzG- zXa?LiX^bm?rqrz$P2>@`I!OA_2Au|HUAR;$UrhW0`w5w|Im*}Sw*a6YFaZ5${)20R zeU3xC@xaC>v0kG?R@o{6H`lzniSzX+CAdak-wkU+L1oQMH$BYs%}rq@aq^Yd4f?Ci zlf?M)QGQX0A&%>ofpI+&?fm;s?BiQ{s_}YG^aRQyY``=IvaY;dJe6Cn z+qxyXGkk`Xk+suC^F?=U7M2C)LJg3qb=aS9CGuzNr&PA%>LL)1P_GCFF%#2f7h;!d zMD!qLdW)?4@#rnvFc?;fAo_y+qFEM2P#=~&{t zBkH|ZE7m#0y44V0z&cQT!{@dSHxh_=I9LH#^-$hWRy)?BVsb%8JglL;zJ@d>ClzVV z9Z32|0%8s}dWY=I(_CsL=ItS@-4&A87_K{+JeLd7M{#S@tgV7|Gw8k`@_$|u>SoY# zUeXpJ)0O3_k?yu3X;Fn+ z(3myNTeunGEl9zM%bRfpM29kc$~3cv?rhxO9F_;~v=3SSq`jra-lNewKkDU7FiG*8 zhRLXj)fNovtaG9-?)y#lGcsrM;?Tjd#lPZ!-HI)`5?#`?HA7b!zt1yP_bAB|bLIZ1E*z~woY7j(H+e&-Vy&?~ zreo}CttHkpu70YfnEuE#ypr3ERK2h+{2Q3q$h$X<(0zDw9sk}qLyMjC(9r<(j%N~I zM@`~uzda~5=j+sEO?(Bov5{IYPt!UKV@!ScC5{tiQO}X%;-H+Vae3Ri$XSp*YJyE_ zWGqc{yk)$Etpd`m#4VNR(+3b?${PNYV=J8UI49j`R?ju=a5ZgSx#m~f@@w%Lvo?~& z(ipB9CviktYz1;mA6E~f(1FVKL955L76(7V>=i=Xye1MQXaV4t#UcRydhqCU^*Nt{ zttEAKUfwwF51uo4PT<*a|H*GFlkEN||0%eVl@2;M(gen?$Lr_s%^ zvOymTkNJuh9Flo9z$vqhd7OBhcbFTTe?`h+Ys?*(569er`LH3!O&pg~QR1n_h2etR zo9wP;eEO}~A$Hl3iOS{5PHxx-td~_eAf74we#$({Qi967Z$T!3% z&0MW2;0AQCu<((ib2hR&-cXO;M&=n%%i$}G1sv*<3LgIW7`zttnZSOGMz~yYOPg`O zBV0!};WVlBp@4&M!y@_=zn+N*aeM)%JJx7Mef(HI3x;%E@BC+tWOiq~2G@aoC*{|J zdx(ViGHDi-Y zzZ6v3MZHu&P~cUuDu+MIj;;-~%K30xy5{!7;xs;mk-=*>eyXjT!F)Fc&l(xgj&Za% z8|bfwoEaFQR@b(O6JJnOcr+Ir6^s09;Do$y0SkIh+2@p6 zrh|cIB&KsCXIAPvCXkbhQq8fIZJ-oEH@#@9dKoyk^|jFWgR{omQWFou`tt^ zg7ZuWLS#AKVYv0lYQWUW!o~G0ibS60U%=%w%W74V*CBnIy@uDo;8y48?L2XW-AA0C zU^mz=yV~PL%vZZ5!Swda=XmjrpTWfhJBAp&6d^{|Bg1_sfW5ML6I#Wi_QSruhXc16 z6K%_zxu%^Ded*>_qBVX+iGhm{GEy6uY|(yRw#N4Vfqg-i*gUqjx*08~kuB?v(K{4; zN_IqiVNxpDZMYn=(s|c#4!(_6~9Sx5}=7*T}7FLmXeH=65 zKGKfgfDipTEWn>j_>)p=TuBR(rzj7uu}PQyUTlsv;Sj%&08zaz$%y!Nsg#yMl$Jfg z5y)hnLKOP-nED+UkI1Dq(1Xw)!-x>QkX>W(MF_*hXM@AUZ^p>ffCz{VlSh|i-(bHX zc1ryf`_HP9B`6wmzn3~&J%fB(FvyU>h{ve-BCXs`b#HjEED>vsZjC&aAWf`2sh52Y z@2_u)!yC$v*2N3!Yrj2l0+B6VovUJ-&HjGkt;Ac2ua89gi;DlSDO0fc!99y#p!9ee z-v;a!9|ngrYNYP&6{Vz)a(6)R*1u;E_Buvyc}efpyb&Zt~xRQv^R+I1m+jfj2P@+>6t+p*1zr>5%& zP+Cyc6M>M=8VAiF0xDP-C6YVholRz;zmX1nX=kA0qFP?(1|-pKFo3Xj;-BgBD6Jcln1-XCKxex`XkCn_;u zZ`7v6+}y#dc#{l^pu3m-nyI&~Anrq!Q?HkHqLXrh0n2UZN3Gpo9t(_!_{P1aCf}Pq z?$#G5tYOY3a!SLt!U|7+!2Yk_5qrS!XYsGr98^>5-wAyG5maCX`Eh^Kwh;Q%VPw#4 zYmRmOy5E|yJ2<1h5N85kG4hUDbM}*YEbdkusZ8D5SL@?dYeq7B`(XX?dd7U=zJLg` zCn<1_X4#{*MpY59G?lRf}!Eyhje+1<^-JCsFZ@nX~Tx=-tFx3PhD`<0ddOooF9WjiWIhLZsYH%=Yn_fzqD zix9y~oHH;sO8c$HJXEdfu-}$Bn;m5JaF;#E{t}1y)@gvZ64x=&#NuUcCJZfO{O+Z@)T=O((E)^FiikAuxN$Mbe$v?di;&+K{qj{u9S z8^q$_x2bKnq6o|k&>HE0fF9I%n{ZSj{mX8oM z>0R|T9R(N4+QI(4dx#tK0W2%Sp|6zJHQ`tv19dahK*ivo(6_%5c!i1BFwXqJRvl!G zFjp*{myCCuT?nJ38|LFJqIT#fZcxwlDbEx}%QX-2xe*HDNJeCmtMgY%{c^ z6Mpudf4$p!_Ff<{0@o`0!z3n_a9ZD^iqFOMMEJv(1O#OD3PfEIB5SBGaAiZrYXg!a zxwyIRQYcDraONm7{_*wE;CjWp{<8`F@m%-WgzalNwbeSDP243CZzZjMN5LZnPw>Yc z`j$qOEa*RXVb6O|q4vVkg>`B$EGA>&@3YmzG>t6Zbc@9kIUyY9 z@a$*cv&UIF3)p11HjA)rb3alM;!j69iuF?6vZkX0u2}kKRTN-z7G>;50eqSRw(&6O zH~WM-OM4R{kN@3bG08xYZst_bqI$f0{(qDGaqyo1UgOj?n{{rtWmpd{i4k14c$~onJiU763|?o{IuEOFX1Yd0 z)1dXSX6*2CocCDSZ*uniCTHgVA^wn+ecsWxRL*8DM>q3a24%_$Xv%J9n-q5p5fk60 zfRAyNg8*&(FR?+kYQqx4)kD&$w?v_jKjoXrattw&|)Encq{QWn#jZp z(>tRKL`T39_(&X$Z+%;3J%l?-j>AJyzd}26y-qHl)0$qeRrfiD^YM~!KE5WVxL;?# z%WMB0Zv}r{0p|$)E&D@b;>@BBQ2ZAA!!2=uVj$QS#u&w=pirm$z-#wi>061fr^F4_ zS6-C^3gb6b#5UrS8%e*5AiwJk>ddL<_(0EIzWO@%uYr-V3*V&+VC`fh#`aT{3Y=^TK9k?Lw1vYjQ!EA7bb2c zzBUp!ct7?Qoc6AVLd*t4jQ?DCyoRr=HVFqEk?416|8z?nk@&KWE?YZJz}OI)0a$oX z;`x~g{G>u3#sgb7nWf$5BD*pMV@}Yl9GQ6yN>L~6qF>)3h{M!P*}ZG^4hKEl2_MG> zj}b~)b~HsWOT>rh;=cl5J!)sm@{TnpJhKOF&d27LE5^X_QjCXvTMK~3X9Vn3&y}czxV?8a# zHZBQ6xVJQcUpPywg?}^Fy`oy=Yo4(N2$5ZqxTkIn(9(#onTsZ7-ixhrK0UnZu{H5{UJ10v;4dIrt zkL!{6`ueC*$R;ogLwXI#FS5T0HY9n2UlXj0-T$1b0>9si!OHR02l~)$>%p@_pr~SF z2Uo+DS@BNHI)gi2&p3xw%Izyx&_Azbqo-F#(REW#0{OpnXTe&$DlC z0!_4H&0DpyZ$Fzp1yp@2RGm566*VDhP^MM;X%vT)xK6VHk2hsy|L{L63tPr9Z;-(J zXh`5UIkZ1!<%@}WE#e5$-9m5pO*0E#@#(HM;8+CTJroJlNWI38zy}UHwv0xKC;eOD zW!QC24B4Q%WnkQFw>BLRm+>=Aye|QV$bE!_de&*`DQ(pqxtJeIy)77OxzZ4;+b9d5 z)b9*Z95yKW6$vwJOsGO>NXO@+UXLCL(&_QfmHHQw2rn|~J;0FRa7X&@*)OoaPz5aC zKUsffSJpY<+ocQ}zW$i~ohob%W=XDJqcwGBG`wv^3JOed`{O!4@sHzJ?*sqhxmOl9 zD&87tHz{rvFthZs$N&E3&u`{RP0PB;N7DiXFL_n}meD`AP`pKqTZtRX9lrTd^E#<# zVpmVA-bgW+(lj@vefaW8DqbAHVmno`y^zWzWu76j}Ba!)5n;64ZH*A~$ z&%pCOTZ5BRF$1OpvEPi1m^rM^DZe3Wgfn7I5N0|POuq6IGQ(N3i@siR72?VTo^2k! zgJGzN2ibKQvJ`hS^+w1*oG<$^f0D06GWIc?L67=G&Xh4t>KCEI$S*y`{EDY_MrAJ7 z&4}}k7*71VP#kjj9m?J)39Wa2kqn6K*f_D?Q^|V5Hw?qK&EhDl^<}}dpOaesN4AdO zvZ-1=jr=r6Q$E=?BaZy(L>|cF7a;qh_^nbGFxty6VgFNyAz7#K~5{Tlmw*m$K1q>MegP$0>z&EJa!rO&bdC5yzH^4DW5 zyfA%&Nf;#fwcM|AZvK*zg~pi4 z+aw6cA1fhgyh#myLO>baoR1E}e4N!6wEM-reL4B;pfP`~@a?U{`do?E?X+#p`p?`f z{kry5rBYVPc5FkGZIkDEH*K}zW;7kT4xEJ*(1Pj^qTI{X!mk53d)ve0DKao4?~OTI z+Z)r49(yeg=lW0G>u=77e;bZ)PR!`#7T^@_(k}4pAnxSb%j7#du&UbQT2+wsM@1c- zKJ9xSgS+6t?_)&n$ci(#-rl}s>n-5>n*lNNHe67Krvx&85=jHEwZe6K0BHu1bR$^q zu(310NqFk!0v21tPg9Tkc(d-ufN%3gtyu*u6c=y>DUXcE@S3DEFK4i?8L_Itkoqmg zA!FbGZo~3}_y*4L=BSU9vC`IR+~-8M({yF{5-Nam2El`ONHYj#zhJJWgSP{_S8Fc- z#@n!aD3?X*^kTO|2!`cN-dl;c5^p8G&J)+5Zbl4s(}JcD-jc|n^356Q2GqmNs{=tL<1i=04ioO zurAyvIX}Uy_DCZJ2>&Z44O$v2wj!bh)`UfnNGVRCD%%$hvIh4D5L{5HZ3yl*gI_aD zzP+wG$YS0;rViDx&;*Rv4`Bspqy@v1s`EaKCuC56wHc6G4qKCrew4{~4nTqm82V9- z-NV#*#xu6vi8AwFGqq<{Hqy%=v?d|DTR<98`B~!)TR>+YHqysHC^U})3n<BZ(cW zb8M^~D_TRr1>Q0E7h?>T)@28scx^?wR}JUmG^hr%j34yc#bh8lgAFU0ZZ{gXyuK`< zfC0N?a1ea4bSIMzpJKt3r%~_9@|K#>sWW3|*gH8ow(?hBAeG9K9N=~wcD1-Nfcjd6 z`+JZrNAaqN+(M$i9`Mz}%Js2*&cNHj^)|p8e4QaCnF++T8wX6`Z8Bw=g`NN(%Kj1W zSU~enAUF;hp<(P^scLwSX9t2;V4<_%^*sV;hCPNLItcP^CiOD7QObJ+j%j0BB$(j| z@Tma--|xg_@GOqgc}#y5pC7^e&l?&Zo*%~cewAO_us@*dTlf|D;3HUW zj{!H(|IG;hhiONjwir_6Yux=}%xkClNoj6ng;aIDzdyj_}=!{OkmH=b_LF~h>i7R`E8U3v b{PdU2ro`>&>DBK&dFrp9{`&t1jSjsOe%+~I literal 19191 zcmV(zK<2-Aob7#Sm|e$J;CcJf`>s~2)veanvemYhZf&t6%a-LWjuTr_drk7x{Up8k z^^(`!l4Xw}mIHyrlLQ6`1LPwx8HV`+Nf-jd7UIl=z$8F`gdqVYe83Pgz&FG2gZaMj zgQ-(>>QvpO?z^x1wYqKezOVbehYuu~X*(APtcJedve$VzqQ_xiVLV z!~w`(EnO+ghtz@F4nSr}JkCPf!KtZZhmIUMGIjXq;bV}VFNp$$rBZeIVzsoq1i34f z^3}zKC1@KzK6&i61N$crAGz(oKFG~4%q-N(OOUx(sxFlwTUuGZyikMA)8*$%i}MRt zNB4}LnqPUg3>j>92|n}G3(MCQ%O_?_moAlS`^)pQCyujVru`=OsQI# zzjWeIX#UatON*r$%s{V zp%IR@?}UJK5ziCm&=t)mzUK;rnXWoFJ%wEuv{+9 zEuDDb;E5Mr+<)lA3l#x#zOr0CH8;0#V!5_be(}ZqlEU&~e`$HSH1q7k3$tbQyduip zjqN_RST4^#yi#4RELJP!n&{k=toNAi_T+&BNQ0~MODBRub?|^0mHp+57t1rtC*~LC z%bJukwbIop57DHmV~vk!tTeZCo<4btk9d;%ikpc<4X~zK1ow zQ*}q>NN9KK5oz*Zh+G{GZET^oEcD5eu6Q7%;-N?;@-%#SN~su|z)@r4#hO^~aNOEL z^HrW-m=EH9C?@VUsi(ra9^L-)<$0s_qU(n?@5O)WaERiJ22fhAm7de2KN!l?@u_ds zKM>7prTOKRxeK+DW>Tx^$vRcNT|RywewUxwUtK88F03pIJt-9N+=-cm#YKU=E_~pC zC~~!2TD~mQ>{Bo3yQR|n?9%c=ZEpWuW&TX9{H~Sq{LHlz$B&8%`{zo}nWTfqCs7%T zVy9PXrRB;3iXWBYl*wa9M9R#m2udWG3m;f681EWwg(aip=GwbG*hcA zVyA@bQbd=fT*Gphn_DW2LAkgf4KH+jH4o4USw(P2SIebYD9n|YOP8vpr6tH;s+ATm zi!p&TQXA4U3#F={2HN?`${gg-MZuelXtJ~@pjWCDVY_9kOH`2rSe3nT3xs%{GvtS^Gqx*%tHGGtT8dOFt;d1eO9r5tJS&E-bZM?6Z`FY1HDpN7R%*f%np>HL z?5q$>F{T+Yx?+&i5=MGScwUgIh{p2b--LY3EL|>D%K}$yT_A@}m>M#9UqG1Zwnf2I z4-$YXfnapum3dB8eO0$r0+C(1TwA%YBwD~mJ*_QP=F0?2-lpaMj;qL;6T-@sCuWgz zizWfuRLz;{$`X<^cVS_rIxB8kB^3SCrrI)@h?stAr#|tsA~!z^r*mmZqbToNP;{yj z7pn`xbMLVpCT2@wXmEO9Cm!-X9`-&?K`V~l#A0c_T%9=Rc{=2II_!Cx^gMZ?9D$;I zlI=ilv3%izaEejC&Ck{#? zM9>BOWP0czB{8uyS4L+ZI(5QKZDpn+5Q6lxmFhh786_h10@fCEC4C~yz!e-psYw`C z$4u?o!o})JWp-k&@*EDD)+6-XqV$Y<$WpDsQhBi?iXrsb%94+p@^Vs-hqWlNvs9ZCqdjX<^6y-kpOJ>NLm02wOJ$SQ zt_aD`S;3l;0V^V*hI*b7vNhq^AS(&R63lX81rcq-o(M6&I&n!TbZB2eBADlvIl+Px zvZn&A#nLr&knFZ8g+O=Am4!W+uLw75VsT||5n5^s!h~E?53T4e&FQS1fHJ#MS%x;j z&8h?Pv0YGPS@m6IS1a#ADbm=}qoCQd&_NGOopwVVf~|=oAB&3%SA_t~i%GQT4c`;X zkVmkL>5!SNV5!^%G4C$du0b2!P}yFg2QCQC5sgk0)Nm#oK@r3KNF(w5L=J!t;c@>MIB6i-&>goR$_=T2)ZP^DIdAkUXq=7bKK zp@bH}dx8Y?p!5+HmG*z4{G9Oq6+_RU;=H0TU8qz&SyCwrKVTNMk+{Ezj+1m|p;ac# zugp}-D@%~MQW9XGfKinaDk;dX%p(J#uQ9u_ApEu&NoK*tqTb*>6|!66ey@e0ByUlKwrypiRlmHEa^B`#Sn-r zE(oU%+C_&}L@%$=bE{(VrG*utpEUblS*XkkGa)88I-?*TWV#kN%F*IRb*j}Bq0-x8LJuWiV2TMb5Ry27PW0BW3`JomR!c&l71U01Pn^FMz1N!167yxL zTS_xCa7e=K%|fr>vlwFfPKE(nd_(&LDP>U%Ff=3$Ic*>KD+H%t=co9&=JZh#O(gYBix7 zXR|PdE<8@~g$s(agS?LQpdgnQ}*j; zz3`3a7lfa_P`xJZ1 zzV%{lLEwHymKV0YvVaEnjBxj>mE~(@n$=cYsmw2|EIoEvhUPo3Rzzc01%)3FoFi_9 z10)sd?86wT5O+(^MH*UY;YU`M7Z(Kl;>DHuOQq^taI#gzAs0wp6=W+2jyQv(E|QfM zIdI_UG2wxh(e5mlAFW&zszoaCQtck$09VV;K^IHlSz+^pQmD2;QV?%t9yM@HjPwE| ze)%5~`xEkNxbXEyOI|_S@$k44P=cB-gR(|t&DSm>kcq})UK{^4(~Et1JrnosV<0a z>AK6@^RswYz`GRZ%5sBvx5Vud)jT!8OH*05lY1o7hVbr+x2}Yj@IoH8>gs9}4C(<) zD{=?H3n1Y|W01SBRWYH4l4B?jat-7IF-Acs{dhOPP;L!jy(uQd5T{Kryn=T?dlVz- zzFqZpKf}GuD7FnU!w}b`}AB*$qv9@=f(+9G3>WXO|@^B|^Wxxaa?yOrw}89zhu zyq9Wyc!#nNqs(wdaHg3BfYVO$U4i>C#PD|VC@e7s4{^JvxE~4b?+C+t4AWYHl+jt) z^SgPpPI^T{);(kiqP`nooDsm;3`0q>@<=nh1dC8RkC72X!c;&>Xd0-yQ{2WInfVhu zP!iNNZ&y>?Bj7s;Sr*yK*bg)0!<^Q_Jx?)To#xzQmeSJjWE--V-QZEVay-s3lHb8~ zC4Q35w|U3cS7R^do@4IJGM)Q5cc-^*8{U1dmy)vGH}LqL;n9Cz2*r&gcku`&nJ%WT z;id}K1@8!+WSrZ%?i(1>pX9nm0*t)vXH2V{_Vb+f&q{cFuhp z-@S?N@?7I_uJHut&T@}Z+@lmT;aj=JKCbZrFE!FEM?PJAmMQsZuHoZYla`2t(&put zN5#K$63P**o8w+4ytGR3-R%rzjML5|6v;V95lU9^pO)H3xyBVNCv%T0oW~TpXOmn* z(%>NA$QiEj6py)tEZZCEr$H?Fr?7TR2|$_)Q1`RAcu$C z^VqmVBcbjzYKaikwuyh!#@oy@znE@inAft1q-=c1%adt!r#-Ed7u_^x=peV2V0hz0Cd!8pJjOtL~T4H=W##i(`jFq$^xknLth$}l6D)}+$Ejk}d(reW$_5yowUCM7Sg5DzwKX2;S>X0^-+ z(&@sc-F7C^5Q~dZ@P;vS3h`iTQVfjol4+e<46L*f#Wb44NyeaqF)+$w2V>C6r1N2r zU<`}~?qs@bQ{v}nEv-aX*Y&kA7ScwJ+vsMR4l9M?XrqP3=$ay z(52X0H;&j(r}W)jq4 zvJAi=)Z?Xr)S@zekHk4kGx{<0Pm=RIGuL_WV%5%L)TfG!p;e=5(`l9&szJqHV$bzYj;7r1`_)T zZZ{EfC#4Z-HEq}of*70!Jt!6ciT!8@E(l6Z6kB-Ad%d`%6aX#f#%TjEUhcRe$utGs z$5}#kU9b?+xNPN~AJ&qr;sW^){U@1b%1aFl^G#({v}dc8aCetS^`dZVT%d#L9}uonYxnYV37f*#l)O^PewfDLH2w^G1TpVF#5J z>S2B{lONfdjDQbl-q0%-o{8r+mP-VxtVXw&LdG_l>H3Hl`+gX=7tANPM<$KdAaxr( zs&Cr(pHsXxuH1cVS$mN2+sgXBhxtX;Ju6qZ=8)beefVQ=1#qApV6pwT#_rt6-NO*U0FO6)C zGQV_j8re(jwPg6N(@UYdn47vd_b#n%m85iO`LMX%UOz|zyskln6?gB7L^rA7O`Gsy(u($IK9JRxEl^s-bKKP& zLm{uv6EmXdjPA#e^B~`=^pzGNGajZh=;Em9&BwT!R9YRZn^N9h^2)NRc9q*T`z<=T zoCMX*pwb@BR#TaaTL)o*i&D1_dXyuRGG0~ z<%~x(A*Pcomu40tcd4`}3#*xnMAuWKm1V(KB`mS~JA0MjYfQl{?Ly~HlE zv6fDBiZN*8T#i^P04BGlXPI|*T8A<6@7|VHv?;i9HN~;(0o!sf?SWn7@mT{$2HQC?5 zx$|Ijoz9i;_9!`*eWSZ`CRA)T_^j|Cn`ND?V1lwiC@Jf4++GSbd)lPC#q6lvBi&y! zr!$)RxT_yy3K!jd{C6(RL)Og_YWN;QiOP#?;lUeV@Q-`Dx(DH9xF2aRC>+}91WQGS zS2)c+GPAEL$Jm=#z0@kZEJ}`%&hF@_ao-Gn65TD_RfIgvR@|bllm)r}Z=c50 z?B1E?J(X6CJ{Cl|QjMp~j)BP{!7pB8wrqJ1OAbvFC2bbn3EQZmx8mN!4c9p%Am zVFA0{OSMrAPqiWUfl3v5r!oZNG{xKLZR0K$Q)vixdvi~5-;8g2hR1S&@w+!9_ZL~M zpJCenGN;|IBv0J^3a6Q!aWekA!%Nfm@ZDiAlpT5mRqii(bNjs-bD7JX0~=M~&_9LcOboQ0N8jX{y|7Z}7(Hp^V;k4_gts4EOf|DDK-#FEVaQpQ4@tis z&NVulc0OthGTiPNuKUZNO-Bclq{}NzpWxgRxD=oAg32=}V<6wfB$*OEEy(QyE$U7S zn5-c+za;jDxNaAar*PH`ykWfq46lvh61mgNqnyfl3~H{ zxWH3fw}sKQBfUW(9`Lpyu{z`)H<9~JuCa&V4Ks(`V)+Log9>pISGkkLWiJDGP?1E( zK#jXVT&L4a?hi2$_p(-bP|LJhsx|S+Ry`Cd$njoA(pT5UU`(;uv{`^}*J5uXm8wS% z@F2g1$^HO$KgsZXJ?hXyan83H#Vr5a&J1F>tqfyrl=T#25-|f4uQ2~WvFZ4X@t6UljnGG*J4}ALvnG$r}}c1stW2H3f6eK zZ_M#d#`!cGbve>~N=)@)aT}MLU_q2iF7!&^8J^gUtA6PH0v_cd@6xR0&1TCE?mn-` zo-;EWV76^%G^DK37M^k5Vt$6-ZZOm^2#s5tm(=4H)zxwGiwy=_xU~Y1qMbI|gH3Bi zje!Ag$&A^OVQ*5@PL^zPf*X>c#zX&%Nw@T`9Mrt7ye zb4m5E+uOKrE>ytAbC!V&VvuH5Htn`^Ylkek)O^s!?b5oWCY{-~Rpd@5yoMRPgfQ!B zIqtrkn9$328ledunO5fKB#<^!!hS3BxP*sqa;YrUJ@iZs9aZlB1fO z{@A8;Kkn1mThj;j7*!i5!J~okZ6`Guy^VV$C%mIPc)q&8Y=IFG^kP@2H})+43+>4(V~GWRZJhw(H2rsC+M9ZfdxbnL5LiG!aO- z{o)PYejEWkeUOFU${E|Z@clfX3z2Ek817;|EqZh1oNk!KIj_<@sF}6$y{a>wZS20f zb9mRw47Vqw4O;xukj=`9tTCjBGsgQ`g4N8HT%#Vgs&N~)2g>+J=1ng1-m$TqCN7ob zx+Xq(zczAb+4x(lc%59=98e(NUhYuhGDeFf@|`ZTFk*t*MzxrYC$o&2ImZE*uxG(m zX|l%Il$VI|?mY~}Y{x2wz>_a$nYzCBM0`-VNoB^24KOdQ8P)ta_vk41GNGYZShcY6 zGGsE|`u8)jfoqt%1mn`eJ$ejmEoIGdiu_Jezvc}cSk=_EtDPZ@-p7o@*8W_AGt7IWQZ#;yT zH=f|SW`DNv+rNu@XJ554VnGrE1O^v!zDKeFZgXJ%Gu%0CN6m^?<^OfCOe z^>@q;%1UcsmaG4j7ndTJ8(;wDUB-V6+BnR!NdU(A{mj`WnsS!QCAo1kh5t_GI->=q zxm=RbkdRGW#pq6o)97+Wcbb*?8b#Kl6otgu zvjT1W5<@k~TyJ9feUQtId*xTwc#!ckKEK)YGr%?WF(otH#!)UuN3VI<`xUNhRtk+f zeLr)~t(;~i4JH(8xM|XB91O1+j*z+1MoEwH7S4UrE8?g4&Nxa3nJvb-apUaV#Wf0? zdpp-K2M#^XHBNH(&C67KxicA7prbtS=G6d-SxyO0cT!Mg3M%3{Ag<+0qLcrFtD zV3ki;?Fg*)?K1KO? z2@@nOk^mCdBh=0*#$EOGZ8U}js}A-nL*t9M9H4PJY4NqLn<9GRwJ7NTQnm((=0yPN zr@CeckCQwW23C^$uV8GUv}zMPcpjY+yG+zM8oTBt5w@1j1XhAFTRsv*?nLvZ>&uNw!*i za55x2X)2#1cyFM7y@Tp+rG8}y4vyO(J!8AAlz*D~Q=)o zK>g2=tQM$zg4)x(m!a`ZTK!J?;AJd4iWc9sQau}9n#Sv1>i^S(kLLMSrjwE5Ho6v> zXI0*5AB-N711kNG>MTC1(4}& zgi5Tw=42y4cG&oK+E38^PKNkJ5Q0FGA4~?TbKt`pH)32c?IfsI|+gA_emFSneYsgc)e+f*u$q2>jV3SC2D8DI4C)O zR_fs{vK&bgrh|Y^aa8~-z&#&jen|zBIvX4$6hM>lvYnA^mcWgXhE0+V8nk+tq8_43 z*a!bvl(+w|KVKGC{pZCtem7j=FeWD>L5%Xm@+0uO0%#HLd0KTUA)Y~wm%=b1^yukt z>pcAZRv7XL7*E{uY0U!(cpscN`ECovdnV2Omp7cdBWSr_I;|il*(Zr!X`-^pONk|xL4!5b~KT0zapQKUv7oWZt*I4hnuU5&JoiPk)$10+dmES|g$ zHHQMX(7hbe|@A2c}u}30j90RE^nwSxd0g9%BBB;qT zLVx}R`ffOfx zPJ$}TFcVdMXl9)PPSACF*FwG9MiT~GT=vqOY>1|f5tOgfv*6!q@x6uc%*j*?au}7p zi$-GmCc<|g=rDCSzR1}lYsNPQ=L~Rx1bhfic?(7K4&b9AbBHrj@cm*6`vc{B}f_7rDokW6RFi}Yr67dP?uZhS015U@8$+bLE^<0KM!qTeLVJF{e7bW|7f+v@12|DbK zzm$amx~1EwSl-;x``QvDSa!b;L>%nuDa|LIeVy^v<@92_!IESpwstB zdGnYLjE+|8)dyU;>?3|1q4>uTsHpz|7g+s=o3~9YO-Bzi61G9H z1z8!C4@&K90sml~3ahFVf>a3ViXpQ^twExao?T87wYHG39&r(-4jr7 z2!&8Ikknymdc+V7a9;?97MIjf5JA*JhcAT5+bx$y3y@ydZw0e&U?1Q{=rt;QTL+ji ze5-|mX6rsM+ky5(u}nxWS3#J^tPyD?6!an<^3E6luR@(`UZgY*^V^hq2dGsz9Hi}p z)^t!f)^4xx7cJ@0kNB-OwI6AaJir}*n;C7vjicy8@W7qNYH+p?=q#})ZUcF;nL4{( zA1h#1R)G*2A;!&0=NZo(aE|O8`PN%$G_}IQT(wvR@VnGEETdyGI{4a34EZONHbDM8 z{{EQip;LLpdhVm=KczbOe3W3QpGo_MRsI{~WgQpy|AX#N&^@ZNJE;shxu@t}ZO=1X zh<=0mcrT@)hxU2$NAQhZZL2>ouJ?oS;y!QX>*q6+pOtXcv(_01;|qX$CO~fIQz{JC zQ*dPlbGX{%V4aL&;1={52L4Xo$~uni=HE{()tz#j~bMbesj zJ35%MYQ3bgax~e_f!eXEev>r6U+p->abADON_tu2X<6GO!?f)3Y7&EUiFb$9h@WVo z7NBPr(Nn7;y=xHF)n2K7aX~SJK8E!^9GftXfo@82yzY*QZtaqhEsX9v9RI-3|8N66 zjQ$I)r1k^vB(%nZ?SCY?{d$Am1VXNnr9sBt$6SQRQ(OZ*OvIzGgQ5e($LKQbpmu*V zT-~paq%}gEWROwy&RVcs0L($RXVmIXsG-E)XGGH0I@;z%AVKNiT z=wgf*l|+UH7$cxxlF&cn9-UsQgw7KNkumP@JFdd$4R%?DF`E2kSK%DdEe~pkGTQKQ zc6S|>^hP?Y+)u>b2Wlhas}Qo%YFF0L=q#v>v^dlIEIE%kS0%j>Jq`LL6V;MhqmHPA z1rwllDr)pHQI(R^r-XD2R7?Mrgu_`03l9(>j)7WP`@N{bx`pH9cKm)6I(=051gORN zScUJ5QxM4Eb{5nxRA9lAQJsoiFinh>pr)M#kv}>K*W0K93d@heoYG1kB~hJAK+Gg; zeGQezT&NbvDM(rjw~vUCqCU3~>Ja*;FmvTO8}0uA7zGyW1KuGuY~auEbWShs=^m0GVQ-n|^Zsxq;<*4rk^I~I>oR;UBJJVca zEFL#h8r3SEU9(nN^Fh~MkH1fN?8@PV>R3uKew(aQsyD;_9&X~ z2IY9P`)J+VSXX2;qdm+aj8FbXG+iWmku2|frzbXjcY)g5*47|>T_|lrCukEU`pkdm zoH2sWV#Mzoljh{QI1r67xx+d-{jJq#Wp=@G=`Th09KnFG)1s#G^S8GOcW$Xoz#9AVQskKzjuBGz&^d~fM7at`Pl-vPI z?lIc-eGN(TI_XR&lQqs<>t#S25zj_=V;&b5y zxp8s)P+fB4nh#yHsRyZ9&A(41eYYLM{3rOBs@4u0@rxwI_0^Cfyplt;Z!jOKs2VDg zVOc>bmLJ?O^Xv4ijXsRfTVUxX|N8$%Ol*y!OSzPl)<)~KOqN(j*y#}1F6Ge-yj{{5 zR{(9PTQ8cZQ!h=B^uw!k8j|b6rAGNu;^*KeRnEpJU#H)Kh`!H4^q<8KuL<~!!1%@^ z8=u5xjgDAlvjp5c^Xewf*Xt?4HTwEqTvruTHq3P0$4uYc5N47m8~NR!zuY)UY+8(S zRipEIPJI0l1#3f&ZUl=ZX{XDC>7hD8J8oyz(PIqrbmPLV?=dz??6#O8niOLbIS$F#;6m|+GbbiBLQuy&@XKY)qS7j9qRuqK7f# z!}N~Ece)_7|BGh9jkBt8*$6CFfmO2u#yz)z`HBag*@y3kJ+_wBfR=DHHsLV8zF6nA zl87JJjicWJl&r(Z=u+rU*^H8YI~x(Kckn4rapS4qJpr@v4fq5uUF!;&SmM0B-g~dk zUgxRTt(N#=uS3N*dT#s3Y620Dgew529x7PMYWrGLOg`+0hc&?KTb1S%q+-pvok;&^ zNX)@S?})v5hD)8qyd{FQyCU*d*Vi4O&gH`N5!%``?W*A147x9j{GU~Xx*oQimvTkO zOr;=oQ?3YEF(`bYd)C&7QFx_LjCxn)!Qo)oAK^n#Pi(N&#b2Xaq`O_6bg05jXv~`C zEnJWA7L?$`<;}PPVnUe#Wtv?>b1v?04$Gr=+D9yZ$_;6C@6ni@AB}P*nxuG6!$iG_ z)g}z^a;$I5HZpIcpi5}_LvMSjg1$Bl4p0?5(E!%6^W4dMo zw>qVu9p0{HIjBDR1?M22wnJChpwBbf@F=MhbJhN+E*h<3oY7j(H+dtd;;gYPreo}Z z))H$P*Em(vV7@zxujF6=G~js(0yoQ9sk}qLrabH@X-K`j%SKqM@`Xd zzda;1XB*UIO?(A-btAQ2o~CmcMnQjGCXN&3P|tP8B}sCo$K|c-B4=Uts0lV{HDhU; z<4xlwY!;MmCT^<4fIh$oQ_k|AlCHvOpL5bpX7$0ymu7HgE_7qN1=n1?E_AaYb_3b9kW-AaPyi-l&}SWUy+Ld^y{Ic)Ai?$iY`d{ z?7V_?+#fz?>72m(qy49#txUna_57#sN=`bM;7Ah~yAit=DgrldH6zE*Oq30%UCpV(7Dn4oE zYE_XopreJwj~qSdB74#w>M`5Md;{t@d<7unP?vQ0@W=1LYhj-W?#EaSmuqfmv+lP? z>*yw&Cbd2kND|(-h<-p^&(sNVe2%6&&S*ws{Ma}PMl{{%{AZ11_GY{W*MS2kW*N9dL-J{3{Iw+a2lKb(oq)FCsp;y_-8_PI622Tn%Qx}HNwoEh8N&fcuxNP zy14&!Rm&_W60qlW&c-Y#u37YA&x#uvEvE+(f17gXgsIKdU=MsuWsG_wB}I z{%XXTfpygC+7@x*3#tx}=EI|cb%nAksGT;aYnFcq~$cnYE_fhAp@JehStE~PUq-pkvI%@Gv_DZ z8vKd}o+x6!+N}s?wqHIkir@GdTuiiMh|x=R#K?JMc;E!ES2k`!t9jIY*w^<8#NpcI7gh(IkCUhiaK9nQU-J!=rWcBTRb>R8_w|N*Qq< zdB<eU*gQ1h5Wk23QKK%&u>5wZl9oY|mObGS z$W((u6#4a-#vK@+$fa+f2Vp*jQAhM5c8$dsAqo@UA08%t6Gf&5WI%L?J-QTp1HK@4 zO8q7L7hTB_6pgvxOP{TtCB7|MWXMv)V?=(DR&A%cD>_(~h_yzyMjlJBCN`eb%K?Y? zH#WrKjpRq?;)V0I-<~*u$QHlO)v?WHe?ReN;?2a@N22>h#lPE-DOmjAp2IKDdOSmK z19r;~gX0-BN_Y3lQp!iUBP4hm+%t%K9qVs-O|Y_Y>*AU)S{r@dcJz{$)8sd{wB=Oe z&O^9HZtO)?yU?p^k4rrvg>PJH@9_J94h+yh2Ghkv!^pqgI)PSE?0r~jvF6 z=U6wc`<)rP!ZR8RaVF>$Bmby1XFr+G;%>%~$~L@xwJ~0GW~8FG4>lgJ2MC1wLL$t* zq|iBaj?1Oc;4O~tw{woGJ9VCBf#S7 z2Dy0nZHDbt6rq_RS|bw@u*CgYf1nX4xYUZ#3w7UT$dSs>S5z5zdhAhgf6Uc$$47{o z^sf4vj)IG1?Qs9zJH)H>0URsCk*}0DG~rku19d&pK*ivo$hW@|bj69-5Y7D2Rvm)X zFjp*{mx_0sT?C_KR?Wwo#wBeMkKW)z73(C{WBX!|tvecM-7AoFv?eYF?4W~Vj&FpP zOh%u*7hLalp1l`JjL@~p{wRrwC7jOpsN!>RBN6`SB>{<9qXN-Tgvc4{3tibz@!F8& zx?J2`cPX+yw}DL^~uvqc5MPyBi>E0 zYl9I71UtvhIcv3Ty0g9msFnru=Pm4e4=U1LIGS)y4Tj`oEc$)6Mwn(b%QxL}@kC7s z#{@q60e$v3OJ^aQ4A*86wruQ2DkA*px{hL_RClcDn1Cyl{y7~5*qB8b_fY_!6o}n; zoXnejQk`Y|33ZSE-DEMzP?2utRM4S%{Coa?6aFZC&wsD=?jROT!T*G>z}LhdZmOf7 z+579$U5%d9x;kIAoirG}Xt-0Law{ke7Wqxr^)zl<*6|ZA5i{l0P%n0!bq|5B#aWFY zOI;6jRdN||uxRr%f-?g}^K&%M@r&oz;OjDU{1y1`x_HrwFJqykEb!N&2>(LlcF>aB zgp_*zX|8RWJK9E{X~>D|E+N7DVBKb&+gusW!%JcW*Bu^bcmZFlzBz;68FkLX8k?D} z(a@~Y`ZzPT`#H{ktn4=h`+id}^Z$~6#L5Bh=vz8xBbTF_c`k!CWkoV&x4;I)9V5gf zuqogpLgf%bH~yEnLAL6KB}S`13u`!M);CNmG%d#2yl~NaBu30GHVuw96JMi= zAYYi?QO`hhge-v%$I2+Y5H;zNF=Ryd<5EugNLy z*Wq_W?cWnn=+_l;j?iDjSFMRN)H^`&TkzFQae!hd+78ATp{1Zmr~Ke+_g(3miLa-` z8>+ATDhCzDZ|aC`olkD0f-Zvkt~aW)WFyB1`t|}gx`hwdg0|O}Z%4-XjiYwN>le<+ zdk4Lbl!&VYW1Jn=i1G~XM#GQUsb~l8k{To%o}mvhWa*v16kSIe9*|VTZt{=7AKrXn z;%4G&Bk>0B$KHg~-t|z3xsZtQpGl9`@|E=_;jkkTgD&l#Y>FciUv|-DbH@n)wvrjZ zh4&PlpP8UfD)do2uyuo3+IudtCu1Hb@DFy^&NsZOx={-yH4+L(8rzl zacuM$v6N#+Qypfh^C7zUuK+lY+S#=HZ%WZv zPm8fdNWxayTbiIRoF&%6zgg#AQ6qA$y`+&6<*L-Ez^vj(!aBPaU2+vdow}~>Mu}L% zdpYY;CA?CknRI@>DXwwwbFqtOLQj`9FDwMNbva+usaGk~^Z+*R|}XA0p1EB^&IF>>TAUwtF5aT zrtYv@(j;k}P)%A-LYt*o>?0=Y%TL^9H0=BuV7oMv;rt-%a1n0&^|D6g+q)=bLI0&h z@Grt=%?37Ze+~XDeB*X1B+mC&a#i~e;LmjV9DPzN-z?uREl+(`-|7Tf=E#yi=;!IU zjNB+wIZXa$2^7En690t|*&~U28rA?Us}Xkl|LcO?7* zd~*Y6Viaq^sg(o!*~}@R`dgv;%+aoT6QWhhw1%G{aY)PSBnqw|?ou-k}PTi4@`LWd9;aIDchFHzk zvjAHCP7%d%gJMvTfMsJM70Rk~e4*a!(ZgXnJ^r~;|3VV+MMkp+7&DT>k^WowMfh`F z!14W)^=Ec%ofCmw%DCa{kKk`~VP`N)as3*tsW)TQ+g6mI;1st%uJaTBIF9u`@GqWw z<#40ot&w)K;?@B(M=N`R?{EIXMy}Mftebo^EkN*+U-fSq{d2R6H;HjG@y2pTV1CrR zMjDyeH3HQiDMnM85vH_{UOq|3iz7H}r-tfO+HK)A?WM)wev0nKchx*vH{WR!W7z6d z8z<~%=y{*5;mPTk0n>rlZ^qV{IjqkqzY%MMQ*uoZXFB7cUU`a`;jGz3UoW|eaOFbJ zHjm!Hu(gQ?*>zd66n8WAjgWyjU-pAwQlLaC_A#7ckLEB}!N(KwFh@HPrfb6s;QM=-h@pElZ*^(E{kb#9PYm3~8|0 zaZSgH$|jWhO_+G|RGrsLqIV?*M>7e(4u6XquXKU5wPzO#q=dEkTe+b08Tdb{NW3Y3 zBgVpy(-%c^h?l#DcXP2p^a}#XFT>yILdiAh<(Iq}0Bck8>klsETgQ`fL))4I4L6WQ z(Vp~5yp>&PBYTptX2v@jRP;E@insPYY_-w|3rA#R!oJC2#__s$9Q|v#UlH8=MJ)@f zV>n~{c%YFN5^4Y;-{#xPNn~9CN60h57+nV*C zy;=Ho?W-!Ktd;HP4N$VWm3=-*v zsoW83XMU6VX~2anwnm?(9{2Hj!;c}~=B>A86|zuVq!pwBF(S}4#b;hlQCm}TRRf6n zE!H7p=m2h^@`LmS&WYxzkF>SY)@t47WwVof1$qe;(K$ot;X9;RLbG2oSJTnkPR;AJ z7ewQ&)I65U5p{a0*{y_z<4xY1i8m8(Cce%S*Pw2OEp^jErV!tf$dmHTTj~bY%n)h8 z%m(+UgKz$wYNG)Ob(8 zUe)*o;vVt3-W6QBH2!*v+@z!E(n-?%CZdOSy-<4Fi7s8_RE*Md%0(xeF#2A<4ZU@p zWI42~>1&ru0$Svo7^d?enZ?^_B*J#`pq#I(M0{b*`MF<3lEH>LT4&D=ZaQ^fh_3eg zd|kuqHu7B~yXNQU1To2$XeOvD8BT0*LhuThL(n=2OLX+xHlx~#&<{$_+^BIzdHw*X z@y3$+JdG}*;Gksj#&B_Vt&R$Ce1a`z`Agw;`{_S?UCsicKF|bGH4m9*h(EOLK7B2>Pm5%RN200lnuH+KP(ZdcjLVIY2lBI@pc&U{da_(-@4PhW>7)*diM+f(SKHNw(pjpHT zFlkA{A{_^_ok)U!hlnw|2-5-qF0fGRb2TDZCP@v=iw1_M0sBA>-B8NMIzZ)eV9ZB~ z8rJ97I2+cq#)5OAVe~IX0hiWQ1D$kjCArst3vmGI!K}~+y>@~ML}v-Gmg#m2u;cY* zg#`}S1&f35i={h2IeeN0(>|d7mE}z}qtj=`PQlwncWxo#4-~ZYi8&(iim{J8&OAwR73!R~5oSqxu?#UAB1}dt%+yB6 zNL$yqD;05APu`NrX9zcah|V_9XG$r9WaFA4937$+bnDkAAfS}WQv%_38g{+7GC=xT zhx>boEl238iQK}XzaIEC!pe=YectMKlGfX>-{|XX1;tD#uH7_Xy5BZaW+3te_(=Az z^Nt0Af0EEik`WrB=C!KE_jtAwdPRtw1+VWBKvVEIp_n9;cY)H&=tgPp5jmy}j7Wgx z2^1j4t1z)%PC>$*C);LYgEp-nl;4Gf({83-rdl)qHiecs!u~iJP{eu*sJLwp(N3#4 zW%9${zs2!5K`>B42SM3OJr2DVtP~i>=t(l(=2$$Xc6SqQ+h|<3P(AI2Xs_W3YoSmD zW|Zf*hw$1?aBd;KNzt=iZyP9ARM$g1AER;^g7YMmPf_`tulzY#PLP{o2If^DtjG(>7rk)OIYQzR6b3wTfK+cUZxdEOmC%rBEH|I_JFRKuQaMM zCGVwic#&N6l$DO{eg`ds=V+YHQu?d({3zvr*3$6!{0PDOHF0gD_K>b`7FXnh4^g>2 z7T!qzHxd3H9?4%S{Yh%)6!lLp#U3O&juZSR2*10iT!GSWr*b=qE{{{WlLWWO^Du>9 zhAihO(REsu2Qfng$?ICy6M^e_AsTo8C-s!HKLB|T$_l Date: Tue, 24 Nov 2020 18:12:45 -0500 Subject: [PATCH 14/28] Salt Flats should probably require additive reconstructors --- core/src/mindustry/content/TechTree.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 30d6c60207..cf77c5819b 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -510,6 +510,7 @@ public class TechTree implements ContentList{ new SectorComplete(windsweptIslands), new Research(commandCenter), new Research(groundFactory), + new Research(additiveReconstructor), new Research(airFactory), new Research(door), new Research(waterExtractor) From 5fd66d38bb72a95b3a01e71d18ec3a7c902ace72 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 18:15:40 -0500 Subject: [PATCH 15/28] Fixed #3573 --- .../world/blocks/storage/CoreBlock.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index bc706ff73d..995834c977 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -268,6 +268,26 @@ public class CoreBlock extends StorageBlock{ } } + @Override + public void handleStack(Item item, int amount, Teamc source){ + super.handleStack(item, amount, source); + + if(team == state.rules.defaultTeam && state.isCampaign()){ + state.rules.sector.info.handleCoreItem(item, amount); + } + } + + @Override + public int removeStack(Item item, int amount){ + int result = super.removeStack(item, amount); + + if(team == state.rules.defaultTeam && state.isCampaign()){ + state.rules.sector.info.handleCoreItem(item, -result); + } + + return result; + } + @Override public void drawSelect(){ Lines.stroke(1f, Pal.accent); From e65971db47a32243f9a941d685e98fefb9fe74b0 Mon Sep 17 00:00:00 2001 From: Volas171 <60143910+Volas171@users.noreply.github.com> Date: Tue, 24 Nov 2020 18:30:59 -0500 Subject: [PATCH 16/28] h --- core/assets/contributors | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/contributors b/core/assets/contributors index d38692de8c..cb64660dae 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -1,4 +1,3 @@ -VolasYouKnow Prosta4okua Felix Corvus Vanguard @@ -102,3 +101,4 @@ jalastram (freesound.org) newlocknew (freesound.org) dsmolenaers (freesound.org) Headphaze (freesound.org) +VolasYouKnow From 40bf0741f0cc7f4d5b6df4b92599948400918e84 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 09:36:12 +0100 Subject: [PATCH 17/28] Remove unused import --- core/src/mindustry/world/blocks/distribution/Conveyor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index a76542f92b..b3218ea7be 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -10,7 +10,6 @@ import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.entities.units.*; -import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; From 642b877ab0fd38150a5b053fd9c3b0c39b4ad9e3 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:40:42 +0100 Subject: [PATCH 18/28] Update JoinDialog.java --- core/src/mindustry/ui/dialogs/JoinDialog.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index f3d200f08a..db62efef65 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -8,6 +8,7 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; +import arc.util.Timer.*; import arc.util.serialization.*; import mindustry.*; import mindustry.core.*; @@ -33,6 +34,10 @@ public class JoinDialog extends BaseDialog{ int refreshes; boolean showHidden; + String lastIp; + int lastPort; + Task ping; + public JoinDialog(){ super("@joingame"); @@ -445,13 +450,29 @@ public class JoinDialog extends BaseDialog{ logic.reset(); net.reset(); Vars.netClient.beginConnecting(); - net.connect(ip, port, () -> { + net.connect(lastIp = ip, lastPort = port, () -> { hide(); add.hide(); }); }); } + public void reconnect(){ + ui.loadfrag.show("@reconnecting"); + + this.ping = Timer.schedule(() -> { + net.pingHost(lastIp, lastPort, host -> { + ping.cancel(); + connect(lastIp, lastPort); + }, exception -> {}); + }, 1, 1); + + ui.loadfrag.setButton(() -> { + ui.loadfrag.hide(); + ping.cancel(); + }); + } + void safeConnect(String ip, int port, int version){ if(version != Version.build && Version.build != -1 && version != -1){ ui.showInfo("[scarlet]" + (version > Version.build ? KickReason.clientOutdated : KickReason.serverOutdated).toString() + "\n[]" + From f5e06cca54d0a253f2fc5175e56359bf8e30df14 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:41:41 +0100 Subject: [PATCH 19/28] Update NetClient.java --- core/src/mindustry/core/NetClient.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 841e7e42a7..85bbfd6f95 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -257,6 +257,11 @@ public class NetClient implements ApplicationListener{ public static void kick(KickReason reason){ netClient.disconnectQuietly(); logic.reset(); + + if(reason == KickReason.serverRestarting){ + ui.join.reconnect(); + return; + } if(!reason.quiet){ if(reason.extraText() != null){ From b002d8b4469f01fceaf55f8ccd7e32cc935f4404 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:42:13 +0100 Subject: [PATCH 20/28] Update bundle.properties --- core/assets/bundles/bundle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 8149f4ff3c..068068ff94 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -230,6 +230,7 @@ disconnect.timeout = Timed out. disconnect.data = Failed to load world data! cantconnect = Unable to join game ([accent]{0}[]). connecting = [accent]Connecting... +reconnecting = [accent]Reconnecting... connecting.data = [accent]Loading world data... server.port = Port: server.addressinuse = Address already in use! From eaa7b04c3dc3d4b5ce6f9b21c6a11cdbd84ecda5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 25 Nov 2020 10:15:14 -0500 Subject: [PATCH 21/28] Fixed CI / Fixed exponentially increasing broken blocks --- .github/workflows/deployment.yml | 2 ++ .github/workflows/push.yml | 1 + core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/io/SaveVersion.java | 16 ++++++++++++++-- core/src/mindustry/ui/dialogs/PlanetDialog.java | 1 + .../metadata/android/en-US/changelogs/29723.txt | 10 ++++++++++ 6 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/29723.txt diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 1532c48561..e9de8ca029 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -21,6 +21,8 @@ jobs: - name: Update docs run: | cd ../ + git config --global user.email "cli@github.com" + git config --global user.name "Github Actions" git clone --depth=1 https://github.com/MindustryGame/docs.git cp -a Mindustry/core/build/docs/javadoc/. docs/ cd docs diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 9436adb06c..7ee54919ac 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -15,6 +15,7 @@ jobs: - name: Run unit tests run: ./gradlew test - name: Trigger BE build + if: ${{ github.repository == ‘Anuken/Mindustry’ }} run: | git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds cd ../MindustryBuilds diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index eabaae3104..8fa2510a57 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1216,7 +1216,7 @@ public class Blocks implements ContentList{ requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50)); size = 2; powerProduction = 4.5f; - itemDuration = 60 * 15f; + itemDuration = 60 * 14f; }}; solarPanel = new SolarGenerator("solar-panel"){{ diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 85fe4a3e31..58d9d77d53 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -286,7 +286,8 @@ public abstract class SaveVersion extends SaveFileReader{ public void writeEntities(DataOutput stream) throws IOException{ //write team data with entities. - Seq data = state.teams.getActive().and(Team.sharded.data()); + Seq data = state.teams.getActive().copy(); + if(!data.contains(Team.sharded.data())) data.add(Team.sharded.data()); stream.writeInt(data.size); for(TeamData team : data){ stream.writeInt(team.team.id); @@ -313,12 +314,23 @@ public abstract class SaveVersion extends SaveFileReader{ public void readEntities(DataInput stream) throws IOException{ int teamc = stream.readInt(); + for(int i = 0; i < teamc; i++){ Team team = Team.get(stream.readInt()); TeamData data = team.data(); int blocks = stream.readInt(); + data.blocks.clear(); + data.blocks.ensureCapacity(Math.min(blocks, 1000)); + var reads = Reads.get(stream); + var set = new IntSet(); + for(int j = 0; j < blocks; j++){ - data.blocks.addLast(new BlockPlan(stream.readShort(), stream.readShort(), stream.readShort(), content.block(stream.readShort()).id, TypeIO.readObject(Reads.get(stream)))); + short x = stream.readShort(), y = stream.readShort(), rot = stream.readShort(), bid = stream.readShort(); + var obj = TypeIO.readObject(reads); + //cannot have two in the same position + if(set.add(Point2.pack(x, y))){ + data.blocks.addLast(new BlockPlan(x, y, rot, content.block(bid).id, obj)); + } } } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 4700bc0906..b3dc7aa135 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -140,6 +140,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ return this; } + rebuildButtons(); mode = look; selected = hovered = launchSector = null; launching = false; diff --git a/fastlane/metadata/android/en-US/changelogs/29723.txt b/fastlane/metadata/android/en-US/changelogs/29723.txt new file mode 100644 index 0000000000..c07b6541ec --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29723.txt @@ -0,0 +1,10 @@ +Only a few days left until stable 6.0 release now. The campaign should now be playable; I've done a playthrough and fixed all the bugs and irregularities I encountered. + +Aside from internal modding API changes and potential bugfixes, 6.0 should not have any more additions. + +- Added basalt boulder decoration block +- Added hint about generator use & power transfer +- Made power node placement smarter +- Buffed Lancer turret + +Campaign: From fb200c6d11db72244119e1ab015f97cd756abe60 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 25 Nov 2020 10:16:40 -0500 Subject: [PATCH 22/28] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 33d59bb632..151ff7ea34 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=a61861127c9fea900f10b84a35be2369437be8f1 +archash=6742c2b110eeecd1934c42b5b1c87b00c911ecc4 From ff20928becee5d2c76954a4527659f023b2e4bed Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 16:49:36 +0100 Subject: [PATCH 23/28] Anukify reconnect logic --- core/src/mindustry/ui/dialogs/JoinDialog.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index db62efef65..62cc2e9391 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -458,18 +458,21 @@ public class JoinDialog extends BaseDialog{ } public void reconnect(){ + if(lastIp.isEmpty()) return; ui.loadfrag.show("@reconnecting"); - this.ping = Timer.schedule(() -> { + ping = Timer.schedule(() -> { net.pingHost(lastIp, lastPort, host -> { + if(ping == null) return; ping.cancel(); + ping = null; connect(lastIp, lastPort); }, exception -> {}); }, 1, 1); ui.loadfrag.setButton(() -> { ui.loadfrag.hide(); - ping.cancel(); + if(ping != null) ping.cancel(); }); } From 3d6390a76a975eae281876045d616ce32c4b3af9 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 16:51:57 +0100 Subject: [PATCH 24/28] Set the ping to null when canceling manually as well --- core/src/mindustry/ui/dialogs/JoinDialog.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 62cc2e9391..155945fc0f 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -469,10 +469,12 @@ public class JoinDialog extends BaseDialog{ connect(lastIp, lastPort); }, exception -> {}); }, 1, 1); - + ui.loadfrag.setButton(() -> { ui.loadfrag.hide(); - if(ping != null) ping.cancel(); + if(ping == null) return; + ping.cancel(); + ping = null; }); } From f26b3358ef95731b4d89bcbbcbb0590365b2b7fe Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 17:08:03 +0100 Subject: [PATCH 25/28] Update core/src/mindustry/ui/dialogs/JoinDialog.java Co-authored-by: Anuken --- core/src/mindustry/ui/dialogs/JoinDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 155945fc0f..fe5ea1bdaf 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -458,7 +458,7 @@ public class JoinDialog extends BaseDialog{ } public void reconnect(){ - if(lastIp.isEmpty()) return; + if(lastIp == null || lastIp.isEmpty()) return; ui.loadfrag.show("@reconnecting"); ping = Timer.schedule(() -> { From b271c4be3208fa3c5d99d8935c2cb06efa89f95e Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 25 Nov 2020 11:09:29 -0500 Subject: [PATCH 26/28] Fixed deploy CI, again --- .github/workflows/deployment.yml | 4 ++-- fastlane/metadata/android/en-US/changelogs/29726.txt | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/29726.txt diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index e9de8ca029..bc993bae07 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -50,12 +50,12 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: desktop/libs/Mindustry.jar + file: desktop/build/libs/Mindustry.jar tag: ${{ github.ref }} - name: Upload server artifacts uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: server/libs/server-release.jar + file: server/build/libs/server-release.jar tag: ${{ github.ref }} diff --git a/fastlane/metadata/android/en-US/changelogs/29726.txt b/fastlane/metadata/android/en-US/changelogs/29726.txt new file mode 100644 index 0000000000..52dda104eb --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29726.txt @@ -0,0 +1,2 @@ +- Fixed broken blocks increasing exponentially, leading to runaway memory usage/lag +- Fixed incorrect planet dialog layout on certain devices From bc55e43defa795a44ebc822c54882ab253e8a5f5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 25 Nov 2020 11:15:46 -0500 Subject: [PATCH 27/28] Fixed #3591 --- core/src/mindustry/entities/comp/WeaponsComp.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/mindustry/entities/comp/WeaponsComp.java b/core/src/mindustry/entities/comp/WeaponsComp.java index b919f6fee1..21265731fc 100644 --- a/core/src/mindustry/entities/comp/WeaponsComp.java +++ b/core/src/mindustry/entities/comp/WeaponsComp.java @@ -91,6 +91,10 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ mount.bullet.time = mount.bullet.lifetime - 10f; mount.bullet = null; } + + if(mount.sound != null){ + mount.sound.stop(); + } } } From 40b67349d9a522cc8f3bb8e5293efe0755f28b98 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 25 Nov 2020 11:56:10 -0500 Subject: [PATCH 28/28] Fixed quotes --- .github/workflows/push.yml | 2 +- core/src/mindustry/game/EventType.java | 1 + core/src/mindustry/world/blocks/campaign/Accelerator.java | 3 +++ desktop/src/mindustry/desktop/steam/SAchievement.java | 1 + desktop/src/mindustry/desktop/steam/SStats.java | 2 ++ 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 7ee54919ac..cf01e4bc68 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -15,7 +15,7 @@ jobs: - name: Run unit tests run: ./gradlew test - name: Trigger BE build - if: ${{ github.repository == ‘Anuken/Mindustry’ }} + if: ${{ github.repository == 'Anuken/Mindustry' }} run: | git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds cd ../MindustryBuilds diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 43ae282d4c..f0aa3278b2 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -18,6 +18,7 @@ public class EventType{ impactPower, thoriumReactorOverheat, fireExtinguish, + acceleratorUse, newGame, tutorialComplete, flameAmmo, diff --git a/core/src/mindustry/world/blocks/campaign/Accelerator.java b/core/src/mindustry/world/blocks/campaign/Accelerator.java index 9dd9040f8f..7c8359a6bf 100644 --- a/core/src/mindustry/world/blocks/campaign/Accelerator.java +++ b/core/src/mindustry/world/blocks/campaign/Accelerator.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.campaign; +import arc.*; import arc.Graphics.*; import arc.Graphics.Cursor.*; import arc.graphics.g2d.*; @@ -8,6 +9,7 @@ import arc.scene.ui.layout.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -91,6 +93,7 @@ public class Accelerator extends Block{ if(!state.isCampaign() || !consValid()) return; ui.showInfo("@indev.campaign"); + Events.fire(Trigger.acceleratorUse); } @Override diff --git a/desktop/src/mindustry/desktop/steam/SAchievement.java b/desktop/src/mindustry/desktop/steam/SAchievement.java index 38236eabd8..092f486249 100644 --- a/desktop/src/mindustry/desktop/steam/SAchievement.java +++ b/desktop/src/mindustry/desktop/steam/SAchievement.java @@ -61,6 +61,7 @@ public enum SAchievement{ coolTurret, enablePixelation, openWiki, + useAccelerator, ; private final SStat stat; diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index e9e8258487..822efe33cc 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -215,6 +215,8 @@ public class SStats implements SteamUserStatsCallback{ } }); + trigger(Trigger.acceleratorUse, useAccelerator); + trigger(Trigger.impactPower, powerupImpactReactor); trigger(Trigger.flameAmmo, useFlameAmmo);